Gnutella Forums

Gnutella Forums (https://www.gnutellaforums.com/)
-   General Gnutella Development Discussion (https://www.gnutellaforums.com/general-gnutella-development-discussion/)
-   -   No pong received! (https://www.gnutellaforums.com/general-gnutella-development-discussion/20233-no-pong-received.html)

zomlak May 7th, 2003 11:57 PM

No pong received!
 
Hi,

I am currently writing a simple gnutella client as my thesis. But I am
stucked at the moment. My question might not be of common interest. If so please state do you know any list or forum to ask for help.

Anyway,

I have used Gnutella protocol draft at rfc-gnutella.sourceforge.net. So far
I have achieved connecting to the network using GnuWebCaches. I receive a
200 OK messega from a connected client. So up to this point everything must
be fine. But then I send a ping message and wait for a pong. But nothing is
received. Only send returns 0.

My C code,

struct ping_header
{
char GUID[16];
char Payload_Type;
char TTL;
char Hops;
char Payload_Len[4];
};

struct ping_header *get_ping_header(void)
{
struct ping_header *p_head;

p_head = (struct ping_header *)malloc(sizeof(struct ping_header));
p_head = (struct ping_header *)malloc(sizeof(struct ping_header));

strcpy(p_head->GUID,"jhwerdkrodmwjydh");
p_head->Payload_Type = '0';
p_head->TTL = '2';
p_head->Hops = '0';
strcpy(p_head->Payload_Len,"0");

return p_head;
}
...
...
send(sockfd, get_ping_header(), sizeof(struct ping_header), 0);
memset(buf, '\0', 1024);
while (1)
{
i = recv(sockfd, buf, 1024, 0);
if(i>=0)
{
printf("\n<%d> bytes data received\n", i);
printf("\nPing is answered as %s\n", buf);
}
}


Kaan Coskun

gavelin May 8th, 2003 05:39 AM

1) You should use char as bytes and not as characters.
I mean, you send the character "0" as payload Type.
But the char "0" as not the byte value 0x00 that is the type of a ping. So send 0x00 instead of "0". You should act like this for all the other fields.

2) in you message you say you receive OK from a remote client. Have you send OK too as the draft speficy it (section handshake) before send the ping?

Hope this could be helpful
regards,

zomlak May 9th, 2003 08:53 AM

Well, it is done!
 
Thanks for your help. It was very helpfull. It turned out to be that my payload_length field should be an integer not a char array.

Here is the solution,

struct ping_header
{
char GUID[16];
char Payload_Type;
char TTL;
char Hops;
int Payload_Len; <------------
};

struct ping_header *get_ping_header(void)
{
struct ping_header *p_head;

p_head = (struct ping_header *)malloc(sizeof(struct ping_header));

strcpy(p_head->GUID,"jhwerdkrodmwjydh");
p_head->Payload_Type = '0';
p_head->TTL = '2';
p_head->Hops = '0';
p_head->Payload_Len = 0; <------------

return p_head;
}

:rolleyes: :rolleyes:

But I had another issue. So I was not able to even try the advisory. The clients I received from the GnuWebCaches didn't seem to be accepting me anymore. They generally responded 503 Gnutella unavaible. Is it normal. I guess I am in a ban list or something like that.

gavelin May 9th, 2003 10:05 AM

okay, be just careful that an int can be different that 4 bytes on somes machines and langages. (for instance an integer can be 16 or 32 bits long...)
Did you receive Pongs?

I don't think your Payload_type field is right. You have:
char Payload_Type;
...
and:
p_head->Payload_Type = '0';


but the char '0' as you write has as ASCII Code 0x30 and not 0x00
so code instead:
p_head->Payload_Type = 0x00;

Concerning the non responding hosts and clients, i have exactly the same problem with the client I develop. Nearly all the servents are busy, and it's a real problem

Paradog May 10th, 2003 06:14 AM

Quote:

Originally posted by gavelin
Nearly all the servents are busy, and it's a real problem
Once you support Ultrapeer it will get easier to connect since many servents deny peer connections due it's bigger traffic.
Worked out for me.

zomlak May 20th, 2003 10:34 AM

I was mistaken with that I received any pongs. I just received a ping request from the servant.

I have changed the payload type. But still seem to be there is a problem. I receive nothing.

If you have your code I would be grateful to see the basic parts that handles sending and receiving pings. Altough I know only C I think I shouldn't mind seeing codes written in other languages.

zomlakNO@SPAMhotmail.com, kcoskunNO@SPAMknuth.cs.bilgi.edu.tr


All times are GMT -7. The time now is 02:23 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.