Cześć zacząłem pisać prosty programik który będzie służył jako prosty komunikator gg i natrafiłem na problem, tzn na podstawie dokumentacji z tej strony:
http://toxygen.net/libgadu/protocol/
Napisałem coś takiego:
var
s,p:string;
ziarno:Longword;
login:tlogin;
nagl:theader;
bufor:string;
host:string;
port:integer;
begin
ms:=idhttp1.Get('http://appmsg.gadu-gadu.pl/appsvc/appmsg_ver8.asp?fmnumber=0&fmt=2&lastmsg=0&version=8.0.0.9453');
s:=copy(ms,posex(' ',ms)+3,posex(':',ms)-posex(' ',ms)-3);
p:=copy(ms,posex(':',ms)+1,posex(' ',ms)-2);
port:=Strtoint(p);
host:=copy(s,posex(' ',s)+1,15);
IdTCPClient1.Host :=host;
IdTCPClient1.Port := port;
IdTCPClient1.Connect;
s:=idtcpclient1.ReadString(12);
Move(s[9], ziarno, 4);
fillchar(login.hash,sizeof(login.hash),0);
s:=hash('tutajhaslo',ziarno);
login.uin:=1111111111;{numer}
login.language:='pl';
login.hash_type:=#$02;
Move(s[1], login.hash, Length(s));
login.status:=$0004;
login.flags:=8388609;
login.features:=23;
login.local_ip:=0;
login.local_port:=0;
login.external_ip:=0;
login.external_port:=0;
login.image_size:=chr(255);
login.unknown2:=#$64;
login.version_len:=$21;
login.version:='Gadu-Gadu Client build 8.0.0.7669';
login.description_size:=0;
login.description:='';
//nagl.typ:=49;
nagl.typ:=$0031;
nagl.length:=sizeof(login)+ login.description_size -255;
SetLength(bufor, SizeOf(nagl) + nagl.length);
Move(nagl, bufor[1], SizeOf(nagl));
Move(login, bufor[SizeOf(nagl) + 1], nagl.length);
idtcpclient1.Write(bufor);
s:=idtcpclient1.ReadString(8) ;
case ord(s[1]) of
53: edit1.Text:='Zalogowany';
9: edit1.Text:='Blad logowania';
end;
end;
I pokazuje się tekst Zalogowano więc próbuję zmienić status:
var
status:Tgg_new_status80;
header: theader;
opis:ShortString;
bufor:string;
begin
opis:=Copy(AnsiToUTF8('test dzialania'), 1, 255);
status.status:= $4004;
status.flags:= $800001;
status.description_size:= Length(opis);
Move(opis[1], status.description[0], status.description_size);
header.typ := GG_NEW_STATUS80;
header.length := SizeOf(status) + status.description_size - 255;
SetLength(bufor, SizeOf(header) + header.length); // ustawienie dł bufora
Move(header, bufor[1], SizeOf(header)); // dodanie nagłówka do bufora
Move(opis, bufor[SizeOf(header) + 1], header.length); // dodanie danych do bufora
idtcpclient1.Write(bufor);
end;
No i niestety zmiana statusu nie działa... co jest nie tak w tym kodzie? Czy ktoś jest mi wstanie trochę pomóc?