Mam problem z TEasyGG. Gdy użytkownik, z którym się kontaktuję, rozpoczyna konferencję, do mnie dochodzi wiadomość, ale lista uczestników konferencji już nie (dostaję tylko UID autora).
Z tego, co do tej pory zrozumiałem, do struktury:

#define GG_RECV_MSG80 0x002e

struct gg_recv_msg80 {
	int sender;		/* numer nadawcy */
	int seq;		/* numer sekwencyjny */
	int time;		/* czas nadania */
	int class;		/* klasa wiadomości */
	int offset_plain;	/* położenie treści czystym tekstem */
	int offset_attributes;	/* położenie atrybutów */
	char html_message[];	/* treść w formacie HTML (zakończona \0) */
	char plain_message[];	/* treść czystym tekstem (zakończona \0) */
	char attributes[];	/* atrybuty wiadomości */
};

powinny być doklejone dane o liście uczestników konferencji (łącznie z flagą konferencji):

struct gg_msg_recipients {
	char flag;		/* 0x01 - flaga konferencji */
	int count;		/* liczba odbiorców */
	int recipients[];	/* lista odbiorców */
};

tymczasem w pakiecie, który dostaję jest zwracany blok atrybutów o długości 9 bajtów, których za nic nie mogę rozszyfrować, a dane o liście uczestników nie dochodzą.
konferencja rozpoczynana naprzemiennie z aqq i gg 10.

//próbowałem też zmienić trochę procedurę:

procedure TEasyGG.SocketGGRecvMsg(const Header: Tgg_recv_msg80);
var
  s: String;
  Count: LongWord;
  Conference: array of LongWord;
  i: Integer;
begin
  if Assigned(FOnReceiveMsg) then begin

    i := FUsers.IndexOfUID(Header.sender);
    if i <> -1 then
      if FUsers.Get(i).GetBlocked and (not FGetMsgFromBlocked) then
        Exit; // nie otrzymujemy wiadomości od zablokowanego użytkownika

    if Length(Header.attributes) > 0 then
    begin
      if (Length(Header.attributes) > 9) and (Header.attributes[9] = 1) then begin // jeżeli konferencja - ZMIENIONA LINIA
      //if Header.attributes[0] = 1 then begin

        Move(Header.attributes[10], Count, SizeOf(LongWord)); // pobranie ilości numerów - ZMIENIONA LINIA
        //Move(Header.attributes[1], Count, SizeOf(LongWord)); // pobranie ilości numerów
        SetLength(Conference, Count);
        for i := 0 to Count - 1 do
          Move(Header.attributes[i * SizeOf(LongWord) + 5], Conference[i], SizeOf(LongWord));

        SetLength(s, Length(Header.attributes) - Length(Conference) * SizeOf(LongWord) - 5);
        Move(Header.attributes[Length(Conference) * SizeOf(LongWord) + 5], s[1], Length(s));
      end
      else begin
        SetLength(s, Length(Header.attributes));
        Move(Header.attributes[0], s[1], Length(Header.attributes));
      end;
    end;

    FOnReceiveMsg(Self, Header.sender, Header.html_message, Header.plain_message, s, UnixToDateTime(Header.time), Conference);
  end;
end;

ale to też nic nie daje. po prostu do pakietu nie zostają doklejone żadne dane o konferencji.

no, chyba, że to ja coś pokaszaniłem...

sorry za to, że nie przetłumaczyłem części kodów źródłowych na delphi, ale nie chciało mi się grzebać w komponencie. pisałem z opisu protokołu. ale mam nadzieję, że ktoś zrozumiał te kody :D

//edit: z tego, co się zorientowałem, w konferencjach treść HTML nie jest przesyłana, bo pakiety, które dostawałem były pozbawione wiadomości w wersji HTML (offset Plain i offset HTML były równe sobie)