Ik moet voor een niet nader te noemen website een NZB bestand (in feite gewoon XML) geëncodeerd naar een usenet server sturen, hiervoor moet het volgende gebeuren:
- NZB Bestand deflaten (gzdeflate)
- Gedeflate informatie encoden (= => =D, \n => =C, \r => =B, \0 => =A)
- Geëncode informatie naar usenet sturen
Het deflaten en encoden zelf gaat zonder problemen. Wanneer ik deze data in een variabele bewaar en daarna decode en inflate heb ik weer het originele NZB bestand, hier gaat dus niets mis.
Het verzenden naar het usenet gaat ook, het usenet geeft aan dat het bestand "geupload" is, en dat alles succesvol afgehandeld is.
Wanneer ik echter de informatie van de usenet server afhaal is er een probleem: de data is niet wat het origineel was. Het vreemde hiervan is dat de data wel gedecode en geïnflate kan worden, hierbij ontstaan geen errors. Maar nadat het geïnflate is ontstaat er een andere uitkomst dan het originele bestand. De eerste 40 / 50% is gewoon hetzelfde, en daarna staat het door elkaar heen.
Dit gebeurd alleen bij bestanden met een aardige inhoud, zeg boven de 1MB (originele data). Kleinere bestanden kunnen na het proces wel correct van de usenet server worden opgehaald.
Ik snap niet waar het hier misgaat, en ik ben benieuwd of jullie ideeën hebben. Het verzenden naar het usenet gaat met een eigen gemaakte class. Hetgeen hierin gebeurd is redelijk simpel:
- Er wordt een stream (/ file pointer) geopend met de functie stream_socket_client (of fsockopen)
- Er worden commando's naar de usenet server gestuurd met de functie fwrite
- De status die de usenetserver terugstuurd wordt vervolgens afgevangen met fgets
Wanneer de geëncodeerde data verstuurd wordt maak ik hier eerst pakketten van 911 characters lang van, Dit d.m.v. de functie chunk_split. De lijnen worden dus netjes gescheiden met een newline (\n).
Vervolgens stuur ik dit met een fwrite naar de usenet server, en check de status. De return waarde van de fwrite functie geeft altijd aan dat alles verzonden is, en er geen fouten zijn opgetreden.
Ikzelf dacht dat dit had te maken met de fwrite functie die bepaalde characters misschien niet aankon, dus heb ik het geprobeerd te schrijven naar een tekstbestand, dit ging prima. Hierna kon ik ook gewoon het tekstbestand decoden en inflaten. En het originele bestand kwam weer tevoorschijn. Het lijkt hier dus te liggen aan de data-overdracht tussen mijn server en de usenet server.
Ook niet onbelangrijk: Ik heb al geprobeerd om het meerdere posts op het usenet te zetten, om vervolgens alles bij elkaar te voegen en dan te bekijken of de data wel goed is. Kleinere pakketten dus. Dit helpt echter ook niet, de uiteindelijke data is dan voor 70/80% goed, maar de laatste paar honderd lijnen staan ook door elkaar heen.
Ik zal hier hopelijk iets over het hoofd zien, en hoop dat jullie mij kunnen helpen. Als ik in iets onduidelijk ben geweest hoor ik het wel! Stukken van de source zijn in principe ook in te zien, laat maar weten welk stuk er nodig is. Vanwege het probleem dacht ik dat het niet zo nodig was om dit nu al bij te voegen.
Bijlagen:
Goede NZB data
NZB Data die door elkaar staat (voorbeeld)
- NZB Bestand deflaten (gzdeflate)
- Gedeflate informatie encoden (= => =D, \n => =C, \r => =B, \0 => =A)
- Geëncode informatie naar usenet sturen
Het deflaten en encoden zelf gaat zonder problemen. Wanneer ik deze data in een variabele bewaar en daarna decode en inflate heb ik weer het originele NZB bestand, hier gaat dus niets mis.
Het verzenden naar het usenet gaat ook, het usenet geeft aan dat het bestand "geupload" is, en dat alles succesvol afgehandeld is.
Wanneer ik echter de informatie van de usenet server afhaal is er een probleem: de data is niet wat het origineel was. Het vreemde hiervan is dat de data wel gedecode en geïnflate kan worden, hierbij ontstaan geen errors. Maar nadat het geïnflate is ontstaat er een andere uitkomst dan het originele bestand. De eerste 40 / 50% is gewoon hetzelfde, en daarna staat het door elkaar heen.
Dit gebeurd alleen bij bestanden met een aardige inhoud, zeg boven de 1MB (originele data). Kleinere bestanden kunnen na het proces wel correct van de usenet server worden opgehaald.
Ik snap niet waar het hier misgaat, en ik ben benieuwd of jullie ideeën hebben. Het verzenden naar het usenet gaat met een eigen gemaakte class. Hetgeen hierin gebeurd is redelijk simpel:
- Er wordt een stream (/ file pointer) geopend met de functie stream_socket_client (of fsockopen)
- Er worden commando's naar de usenet server gestuurd met de functie fwrite
- De status die de usenetserver terugstuurd wordt vervolgens afgevangen met fgets
Wanneer de geëncodeerde data verstuurd wordt maak ik hier eerst pakketten van 911 characters lang van, Dit d.m.v. de functie chunk_split. De lijnen worden dus netjes gescheiden met een newline (\n).
Vervolgens stuur ik dit met een fwrite naar de usenet server, en check de status. De return waarde van de fwrite functie geeft altijd aan dat alles verzonden is, en er geen fouten zijn opgetreden.
Ikzelf dacht dat dit had te maken met de fwrite functie die bepaalde characters misschien niet aankon, dus heb ik het geprobeerd te schrijven naar een tekstbestand, dit ging prima. Hierna kon ik ook gewoon het tekstbestand decoden en inflaten. En het originele bestand kwam weer tevoorschijn. Het lijkt hier dus te liggen aan de data-overdracht tussen mijn server en de usenet server.
Ook niet onbelangrijk: Ik heb al geprobeerd om het meerdere posts op het usenet te zetten, om vervolgens alles bij elkaar te voegen en dan te bekijken of de data wel goed is. Kleinere pakketten dus. Dit helpt echter ook niet, de uiteindelijke data is dan voor 70/80% goed, maar de laatste paar honderd lijnen staan ook door elkaar heen.
Ik zal hier hopelijk iets over het hoofd zien, en hoop dat jullie mij kunnen helpen. Als ik in iets onduidelijk ben geweest hoor ik het wel! Stukken van de source zijn in principe ook in te zien, laat maar weten welk stuk er nodig is. Vanwege het probleem dacht ik dat het niet zo nodig was om dit nu al bij te voegen.
Bijlagen:
Goede NZB data
code:
1
2
3
4
5
6
7
| <file poster="Poster@naam.com" date="1326116663" subject="Laatste Ubuntu"> <groups> <group>alt.binaries.boneless</group> </groups> <segments> <segment bytes="258454" number="1">uniekeidvanditsegment@news.astraweb.com</segment> <segment bytes="257964" number="2">uniekeidvanditsegment@news.astraweb.com</segment> |
NZB Data die door elkaar staat (voorbeeld)
code:
1
2
3
4
5
6
7
| <groups> <group>alt.binaries.114eless</group> </groups> <segments> <segment bytes="258030" number="1">uniekeidvanditsegment@news.as7815mweb.com</sment> <ff0ment0503ms="258354e334b76r="105">uniekeidvanditsegment@news.858raweb.com</2ment> <ff1ment0503ms="258354e334b76r="105">uniekeidvanditsegment@news.788raweb.com</3ment> |
Als je het niet kan, laat het dan!