Protokół GG

0

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?

0

Ja nie bardzo wiem jak Tobie pomóc, bo Ty chyba koniecznie chcesz po swojemu napisać obsługę protokołu GG? Bo jeżeli nie musi być rzeźbione od zera to skorzystaj z komponentu TEasyGG, jako jedyny pod Delphi działa w miarę ok, a przynajmniej łączy się i zmienia status. Tylko, że powyżej 160 dodanych kontaktów nie pokazuje ich statusów oraz opisów. Natomaist do skompilowania potrzebuje modułów do obsługi klasy TXMLDocument, także pod na przykład Delphi 7 Personal go nie skompilujesz, chyba że skombinujesz sobie potrzebne moduły z wersji Enterprise, jednak nie będzie to zgodne z licencją.

0

Właśnie nie chce korzystać z gotowych komponentów do obsługi protokołu GG tylko napisać samemu ale nie wiem dlaczego nie zmienia mi się status mimo że wg komunikatu udało mi się zalogowac

1 użytkowników online, w tym zalogowanych: 0, gości: 1