Gnutella Forums

Gnutella Forums (https://www.gnutellaforums.com/)
-   General Gnutella Development Discussion (https://www.gnutellaforums.com/general-gnutella-development-discussion/)
-   -   Receiving Pong from Gnut (https://www.gnutellaforums.com/general-gnutella-development-discussion/11663-receiving-pong-gnut.html)

nicokras May 22nd, 2002 01:07 PM

Receiving Pong from Gnut
 
I'm developing a Linux Gnutella client for studing purposes. The thing is that I'm trying to prove my version with Gnut, and I don't receive what I expected when Sent my ping.
I send the "GNUTELLA CONNECT...." and Gnut replies my with the "Gnutella OK", so I write into the port the ping with a certaing ID.
I debugged the Gnut code, and I saw that It receives my Ping well, and proccess it ok, and sends to me back, with the same ID i gave it.
The problem is, that I receive anything but what I'm expected to receive.

Thanks.

This is the part of the code where I receive the Pong Structure.
Note: pszBuffer is declared as Global Variable, and is an unsigned *char.

Structure:

struct stHeader
{
unsigned char szID[16];
unsigned char cPayload; // 1 byte
unsigned char cTTL;
unsigned char cHops;
unsigned char lPayLength[4]; // 4 bytes
};

struct stPong
{
unsigned char iPort[2]; // 2 bytes
unsigned char szIP[4];
unsigned char lCantArch[4];
unsigned char lCantKb[4];
};


/************************************************** ****************************/
int fRecibirPong(int iSock)
{
HEADER *stHead;
PAQUETE *pstPaquete;
PONG *stPong;
unsigned long int lTam;

if ((stHead = (HEADER*)malloc(sizeof(HEADER))) == NULL)
{
fMsgError("MEMORIA INSUFICIENTE");
fFin();
}

// printf("Tamaño de stHead: %d\n", sizeof(HEADER));

memset(pszBuffer,0,MAXBUFCONECT);

if (recv(iSock, pszBuffer, sizeof(HEADER),0) < 0)
{
fMsgError("ERROR AL RECIBIR UN PONG");
fFin();
}

stHead = (HEADER *)pszBuffer;

fImprimirHeader(stHead);

lTam = *((int *)stHead->lPayLength);
printf("Tamaño de stPong: %ld\n", lTam);
if ((stPong = (PONG*)malloc(sizeof(PONG))) == NULL)
{
fMsgError("MEMORIA INSUFICIENTE");
fFin();
}

memset(pszBuffer,0,MAXBUFCONECT);

if (recv(iSock, pszBuffer, sizeof(PONG),0) < 0)
{
fMsgError("ERROR AL RECIBIR UN PONG");
fFin();
}
stPong = (PONG*)pszBuffer;

fGuardarLog("PONG RECIBIDO");
fImprimirPong(stPong);
return 1;
}

tshdos May 22nd, 2002 06:17 PM

what is the value this line prints

// printf("Tamaño de stHead: %d\n", sizeof(HEADER));

nicokras May 23rd, 2002 06:28 AM

This line is under comments, and it was simply wrote to know if Header size was well. It doesn't do anything.

tshdos May 23rd, 2002 06:36 AM

I know it is commented out. What does it say the sizeof(HEADER) equals?

nicokras May 23rd, 2002 06:41 AM

HEADER is the type defined for the stHeader Struct:

typedef struct stHeader HEADER;

tshdos May 23rd, 2002 06:51 AM

I understand that. Let me try to be a little clearer. When you call sizeof(HEADER) does it return 23 or 24? I ask because on win32 if you call it, it returns 24 which is incorrect.

nicokras May 23rd, 2002 06:55 AM

It returns me 23. I had problems when defined the PayLength as long Int, so I changed it to unsigned char, and sizeof(HEADER) return me 23 now.

tshdos May 23rd, 2002 07:08 AM

Can you post the bytes that you receive here?

nicokras May 23rd, 2002 07:17 AM

I don't undestand what you want, but if you need the bytes I receive when I was supposed to receive my ID, I need I to tell you that it depends on the ocassion. It changes all the time. But always seems like it takes my ID ( which is formed by numbers, but they are characters )...an changes it to char. It's like doind char(number), where number is a part of my ID...

I think I'm not doing something I have to do to receive this, so I get my ID like anything else.

The only thing I can give you now, is the whole code. Do yo need it ???

tshdos May 23rd, 2002 07:32 AM

Can you just paste the bytes for your request and a reply here?
ie:

Request:
01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 00 05 00 00 00 00 00

Reply:
01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 01 01 00 00 00 00 0E 18 CA 7F 00 00 01 00 00 00 00 00 00 00 00


All times are GMT -7. The time now is 12:28 AM.

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.