|
Register | FAQ | The Twelve Commandments | Members List | Calendar | Arcade | Find the Best VPN | Today's Posts | Search |
General Gnutella Development Discussion For general discussion about Gnutella development. |
| LinkBack | Thread Tools | Display Modes |
| |||
Quote:
Well, for that, I will give you the records used in my Cultiv8r client Hopefully you can use them. Keep in mind that the records are packed! I'm using pointers to them, because I can easily reference them from memory that way - I read the entire message before processing. Code: Type // AKA Descriptor Header _PGHeader = ^_TGHeader; _TGHeader = packed record MsgID : TGUID; Func : byte; TTL : byte; Hops : byte; DataLen : integer; end; _PPong = ^_TPong; _TPong = packed record // 0x01 Port : word; IP : integer; FileCount : dword; TotalSize : dword; end; // BYE packet - this is a proposal, see the GDF _PByeHead = ^_TByeHead; _TByeHead = packed record // 0x02 Code : word; end; // Query Hit _PQueryResultHeader = ^_TQueryResultHeader; _TQueryResultHeader = packed record // 0x81 Results : byte; Port : word; IP : integer; Speed : integer; end; // Query Hit Result set _PQueryResultRecordHeader = ^_TQueryResultRecordHeader; _TQueryResultRecordHeader = packed record FileIndex : integer; FileSize : integer; end; // Just the vendor ID m'am! _PQueryResultFooterExtensionHeader = ^_TQueryResultFooterExtensionHeader; _TQueryResultFooterExtensionHeader = packed record VendorID : array[0..3] of char; end; // EQHD As used by many clients, ala BearShare _PQueryResultFooterExtensionDataOne = ^_TQueryResultFooterExtensionDataOne; _TQueryResultFooterExtensionDataOne = packed record DataLength : byte; Flag1, Flag2 : byte; end; // The GUID at the very end of the Query Hit _PQueryResultFooter = ^_TQueryResultFooter; _TQueryResultFooter = packed record ClientID : TGUID; end; // Push baby, Push! _PPush = ^_TPush; _TPush = packed record ClientID : TGUID; FileIndex : integer; IP : integer; Port : integer; end; Code: function CreateGUID : TGUID; begin CoCreateGUID(Result); Result.D4[0] := $FF; Result.D4[7] := $0; end; |
| ||||
Thank you a lot cultiv8r... but i have them... except the snippet for the GUID markink... my problem is that i cant make my client to connect to another servant. i send the GNUTELLA CONNECT/0.4, i take the right reply and then nothing... even if i send a ping message the servant disconnects me. |
| |||
You've got to make sure that the client accepts incoming connections and connections from a local host (local loop for example). I recommend getting Gnucleus, since this client is following the Gnutella specs quite closely. The more widely spread ones, like BearShare, have a tendency to do things their own way. It is also very important that you send nothing more for each packet than specified in the descriptor's payload length, hence my use of packed records, etc. The TTL should be > 0 and the Hops should be set at 0. If that fails, try outputting (like in a Tmemo object) what you and the other side have sent. -- Mike |
| ||||
any Delphi Programmers outhere? I am trying to "understand" the data receiving from a connection. I am using a TMemoryStream as a buffer and i manage to "understand" the first Pong Reply. After that i am getting raw data. Any help? Maybe a pseydo code will help. |
| |||
Always read the header first. Then read the amount of bytes specified in the Payload Descriptor, whether or not it is too big for that particular message. You then handle the data you DO know (like with a pong, you know where the IP and port is located). For the data that you DON'T know, you dump on screen or in a log file so you can inspect the data (or, say, load it into a hex editor). -- Mike |
| |
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Spin-off of Gnutella Protocol? | PhreakerONE | General Gnutella Development Discussion | 0 | June 6th, 2002 03:57 PM |
gnutella protocol | Unregistered | General Gnutella / Gnutella Network Discussion | 2 | May 19th, 2002 11:23 AM |
Gnutella protocol and hostcaches | bateman23 | General Gnutella Development Discussion | 5 | January 9th, 2002 04:42 AM |
gnutella protocol v0.6? | chuckles42 | Gnucleus (Windows) | 0 | September 15th, 2001 09:11 AM |
Gnutella protocol to sloppy? | Tiago s1x | General Gnutella Development Discussion | 3 | August 6th, 2001 05:20 PM |