Gnutella Forums  

Go Back   Gnutella Forums > Gnutella News and Gnutelliums Forums > General Gnutella / Gnutella Network Discussion
Register FAQ The Twelve Commandments Members List Calendar Arcade Find the Best VPN Today's Posts

General Gnutella / Gnutella Network Discussion For general discussion about Gnutella and the Gnutella network.
For discussion about a specific Gnutella client program, please post in one of the client forums above.


Reply
 
LinkBack Thread Tools Display Modes
  #1 (permalink)  
Old August 17th, 2001
Devotee
 
Join Date: May 20th, 2001
Posts: 22
Ahri is flying high
Question Descriptor Help

i am writing a gnutella program in Visual Basic 6 and incoming data looks like this:



?Aó"ž ÿÚ‰‚t‚ÿx*±8“Õ£‰ntai)

if i have a vb string with a descriptor header in it, how do i translate/read it?
Reply With Quote
  #2 (permalink)  
Old August 19th, 2001
Enthusiast
 
Join Date: July 12th, 2001
Posts: 36
HydroPhonic is flying high
Default Descriptors in a string

You will have to parse the string, discern the Payload length, handle the payload(optional), and pass the descriptor... are you asking how to parse an incoming descriptor?? Or are you befuddled by a descriptor that appears to be a gobbledygook search query? (BearShare sends unintelligible Query descriptors meant for other BearShare clients to check their versions; just decrement their TTL and pass them on...)

Parse the first 23 bytes (you do have the spec, I assume) to determine what kind of descriptor it is.
The descriptor in your example appears to be a Query Descriptor. Beyond that, I can read little from it (it's not in Hex, and I'm too damn lazy to parse it myself).

Which do you need?
The Gnutella Protocol specification
A routine to parse strings??

(As a genuine lazy-***, I use that wonderful feature of C, type casting, to simply reinterpret that string as a DescriptorHeader type )
Reply With Quote
  #3 (permalink)  
Old August 20th, 2001
Beckerist's Avatar
Madninistrator (Member):)
 
Join Date: August 16th, 2001
Location: Upstate NY
Posts: 66
Beckerist is flying high
Default LOL

And all this time I thought the garble was someone searching in Korean!
Reply With Quote
  #4 (permalink)  
Old August 22nd, 2001
Devotee
 
Join Date: May 20th, 2001
Posts: 22
Ahri is flying high
Default

I got v0.4 protocal specs.

I figured out the answer to my question this morning. What happens is VB automatically takes the binary info. and converts it to ASCII text. I wanted to know how to convert it back into its original form. I figured it out after lots of thinking and trial and error (took me a while though).

But, I'm still haveing problems. How is text supposed to be encode over the gnutella net? The only thing I get that seems to be ASCII encoded is "GNUTELLA CONNECT/0.4\n\n" and "GNUTELLA OK\n\n". Descriptor IDs appear as that googly junk. And how to i decied what to make the descriptor IDs, and what character set to I encode them with?(their supposed to be text)

Also, the lengths in bytes of the incomming data does not always equal 23 + the payload length. The extra data is almost always less than 23 bytes. What's going on?

Last edited by Ahri; August 22nd, 2001 at 03:43 PM.
Reply With Quote
  #5 (permalink)  
Old August 22nd, 2001
Enthusiast
 
Join Date: July 12th, 2001
Posts: 36
HydroPhonic is flying high
Default Handling the binary data...

Quote:
Originally posted by Ahri
I got v0.4 protocal specs.
Very helpful!
Quote:
I figured out the answer to my question this morning. What happens is VB automatically takes the binary info. and converts it to ASCII text. I wanted to know how to convert it back into its original form.
VB can store the relsults of Winsock.GetData in either a BSTR or an array of integers

A BSTR is a "Basic String", preceeded by it's length (four bytes) which occupies two bytes per character on Unicode supporting systems (VB supports Unicode for purposes of interacting with ActiveX controls), so even though you think there's only one byte per character in the string, that's not the way it's stored in RAM.

Manipulating the data might be easier if you GetData it into an array of integers and interpret it seperately. VB programmers are disadvantaged by the loss of a "typecast" operator, which would allow me to take my array Incoming() As Integer and "reinterpret" its contents as though it were a Type DescriptorHeader... You must parse the elements of the array by hand, but at least it'll be easier than parsing the BSTR (as Gnutella's doesn't use ASCII descriptors like OpenNap).

Also, there's nothing saying you can't retrieve you data into one variable (say a String) and SendData an array of integers! Use whatever's least painful for you

Quote:
Also, the lengths in bytes of the incomming data does not always equal 23 + the payload length. The extra data is almost always less than 23 bytes. What's going on?
It is possible for descriptors to span TCP packets; that is, you may have to GetData again to retrieve the rest of the descriptor...

What lengths are you getting for your payloads?
Pings should always be 0, Pongs always 14, and Pushes always 26... There are NO pads between descriptors in the Gnutella data stream, so you will have to keep careful track of where one descriptor ends and the next begins. If you lose your place, it's curtains; you will be disconnected.
Reply With Quote
  #6 (permalink)  
Old August 22nd, 2001
Enthusiast
 
Join Date: July 12th, 2001
Posts: 36
HydroPhonic is flying high
Default Speaking of the Winsock control...

Is your VB software up to date?? (Note that this is NOT causing your problems; it's just something that could cause you problems in the future as you succeed with your servent!)

FIX: Winsock Control Leaks Memory When Unloaded
Last reviewed: February 18, 1998
Article ID: Q171843
The information in this article applies to: Microsoft Visual Basic Professional and Enterprise Editions for Windows, version 5.0

SYMPTOMS
The Winsock control may cause the system to lose memory and system resources, eventually causing the system to stop responding due to running out of memory.

CAUSE
System resources are not properly replenished when a Winsock control is unloaded from memory. If your application often loads and unloads a Winsock control, you may eventually experience this problem.

STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. We are researching this problem and will post new information here in the Microsoft Knowledge Base as it becomes available. This bug was fixed in Visual Studio 97 Service Pack 3.

Workaround
You can load a fixed number of Winsock controls, or a Winsock control array, on program load and only unload them on program shutdown to work around the memory leak problem. This approach is similar to implementing a Winsock server in SDK using a fixed-sized thread pool and is a more scalable solution than loading a new Winsock control to handle each new client connection. Under the one control per request model, if there are a large number of clients making connections to the server at the same time, the server will soon have too many threads to function at all.
Having a fixed "pool" of Winsock controls can ensure that the server functions properly under a relatively heavy load. A large number of simultaneous client connections will not be able to bring down a server machine. If there are unused controls left in the Winsock control pool when a client connection request comes in, you will assign one control from the pool to handle the client request. After the client request is served, the control is "returned" to the pool. If a client request comes in and all controls in the pool have been assigned out at the moment, you will have to choose to either have the client wait until there are available free controls in the pool, or accept the connection request right away, send a busy message, and then close the socket.
If you are planning a server that could experience really heavy loads, the Winsock control may not be the best tool to use. You should consider overlapped socket I/O with Windows NT I/O Completion Port in a C/C++ SDK program.



Thank you for buying Micro$oft! Don't ya love it!?
Reply With Quote
  #7 (permalink)  
Old August 23rd, 2001
Beckerist's Avatar
Madninistrator (Member):)
 
Join Date: August 16th, 2001
Location: Upstate NY
Posts: 66
Beckerist is flying high
Default :)

http://www.ihatemicrosoft.com/
Just don't go there with the Internet Explorer Browser, not cool
Reply With Quote
  #8 (permalink)  
Old August 23rd, 2001
Devotee
 
Join Date: May 20th, 2001
Posts: 22
Ahri is flying high
Default

I got service pack 3 so i guess i'm safe.

Pings and pongs got the right payload lengths, and queries seem to have reasoneable ones. The extra data is probaly parts of descriptors i'm missing. I don't have to worry about losing my spot cause 80% of the time each .getdata command starts at the beginning of a descriptor.

Thanks for the help hydro.

this one's cool too
http://www.pla-netx.com/linebackn/evil/index.html
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Problem identifying Descriptor IDs Paradog General Gnutella Development Discussion 5 July 25th, 2002 03:04 PM
Payload descriptor codes Unregistered General Gnutella Development Discussion 3 May 26th, 2002 11:13 PM
Who give me a Descriptor ID? Cerebro General Gnutella Development Discussion 7 April 9th, 2002 04:38 AM


All times are GMT -7. The time now is 09:20 PM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
SEO by vBSEO 3.6.0 ©2011, Crawlability, Inc.

Copyright © 2020 Gnutella Forums.
All Rights Reserved.