Chciałem napisać aplikację wykorzystującą sieć gg. Korzystam z opisu protokołu http://dev.null.pl/ekg/docs/protocol.html. Mam następujący kod w cpp:
#include <stdio.h>
#include <winsock2.h>
int main () {
WSAData wsaData;
struct sockaddr_in sin;
SOCKET sock;
struct hostent* host;
if ((WSAStartup(MAKEWORD(2, 0), &wsaData))) {
printf("ERROR! While starting WSAData.");
return 0;
}
host = gethostbyname("appmsg.gadu-gadu.pl");
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = *((unsigned long*) host->h_addr);
sin.sin_port = htons(80);
memset(sin.sin_zero, 0, 8);
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock<0) {
printf("ERROR! While starting socket.");
return 0;
}
bind(sock, (sockaddr*)&sin, sizeof(sockaddr));
connect(sock, (struct sockaddr*)&sin, sizeof(sin));
char zapytanie[] = "GET /appsvc/appmsg4.asp?fmnumber=1234567&version=7, 6, 0, 1688&lastmsg=0r\nAccept: image/gif, image/jpeg, image/pjpeg\r\nAccept-Language: pl\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)\r\nPragma: no-cache\r\nHost: appmsg.gadu-gadu.pl\r\n";
printf("%s\n\n", zapytanie);
char odpowiedz[1024];
recv(sock, odpowiedz, sizeof(odpowiedz), 0);
printf("%s", odpowiedz);
system("pause");
return 0;
}
,podobny w php:
<?php
$UIN = '1234567';
$VERSION = '7, 6, 0, 1688';
$FORMAT = '';
$MSG = '';
$fp = fsockopen( "appmsg.gadu-gadu.pl", 80, $errno, $errmsg, 3 );
$get = "GET /appsvc/appmsg.asp?fmnumber=$UIN&version=$VERSION&fmt=$FORMAT&lastmsg=$MSG HTTP/1.0rn";
$get .= "Accept: image/gif, image/jpeg, image/pjpeg, ...";
$get .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)rn";
$get .= "Pragma: no-cachern";
$get .= "Host: appmsg.gadu-gadu.plrn";
fputs($fp, $get);
$buf = fgets( $fp, 128 );
echo $buf;
?>
I niestety nie otrzymuję wiadomości od serwera (a jeżeli otrzymuję to krzaki). I stąd moje pytanie - czy kod jest błędny, czy zmieniono protokół gg (ew. czy dany są szyfrowane, jeżeli tak to jak je odszyfrować?) ?