Próbuje napisać program - komunikator gg, mam jednak problem z zalogowaniem. Zawsze zwraca błąd logowania; struktury które używam wyglądają tak :

#define uchar unsigned char 
#define uint unsigned int
#define ubyte uchar
#define ulong unsigned long
#define ushort unsigned short

#pragma pack(push, 1)

typedef struct {
 uint type;
 uint length;
} GG_HEADER;

struct GG_LOGIN {
	uint uin;			/*  numerek */
	ubyte hash_type;		/* rodzaj hashowania hasła */
	ubyte hash[64];		/* hash hasła dopełniony zerami */
	uint status;		/* status na dzień„ dobry */
	uint version;		/* moja wersja klienta */
	ubyte dunno1;			/* 0x00 */
	uint local_ip;		/* adres ip */
	ushort local_port;		/* port, na którym słucham */
	uint external_ip;		/* zewnętrzny adres ip (???) */
	ushort external_port;		/* zewnętrzny port (???) */
	ushort image_size;		/* maksymalny rozmiar grafiki w KiB */
	ushort dunno2;			/* 0xbe */
};
#pragma pack(pop)

i teraz wysyłam to w ten sposób :

 recv(sock,bufor,sizeof(bufor), 0);
 gg_server=(GG_HEADER*)bufor;

 printf("server: %u %u\n", gg_server->type, gg_server->length);
 printf("key : %u\n", *(bufor+8));
 
 char *passwd="HASLO\0";
 
	
 gg_login.uin=atoi(numer);  // numer = "numer gg"

 gg_login.hash_type=0x02;
 memset(gg_login.hash, 0, 64);

 gg_login_hash_sha1(passwd, key, gg_login.hash); // funkcja pobrana z EKG

 gg_login.status=0x0003; // status -> away 
 gg_login.version=0x25;  // wersja GG 
 gg_login.dunno1=0x00;  //  zawsze zero cokolwiek to jest
 gg_login.image_size=0x01; // rozmiar rys. max w Kib
 gg_login.dunno2=0xbe;   // tez nie wiem co to ale podobno tak ma byc 

 gg_login.local_ip=inet_addr("moje_ip");
 gg_login.external_ip=inet_addr("moje_ip");

 gg_login.external_port=htons(jakis_port);
 gg_login.local_port=htons(jakis_port);
 
 gg_client.type=0x0019;  // logowanie
 gg_client.length=sizeof(gg_login); // dlugosc bloku logujacego 
 
 memcpy(bufor, &gg_client, sizeof(gg_client));  // kopiuj do bufora 
 memcpy(bufor+sizeof(gg_client), &gg_login, sizeof(gg_login));

 send(sock,bufor,sizeof(gg_client)+sizeof(gg_login),0); // wysylaj 
 
 recv(sock,bufor,sizeof(bufor), 0); // odbierz pakiet 
 gg_server=(GG_HEADER*)bufor; // rzutuj 
 
 printf("logowanie : %d\n",gg_server->type); sprawdz czy zalogowano 

Niestety to nie działa, nie wiem czemu =/