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)