Mercurial > pidgin
annotate src/protocols/gg/protocol.txt @ 4349:0c68d402f59f
[gaim-migrate @ 4614]
XML Blist
Gaim stores all the buddy lists in one big happy file now. You can order
the buddies however you want, and they'll stay ordered that way.
We can also store some per-buddy information now, which will be cool.
committer: Tailor Script <tailor@pidgin.im>
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Sun, 19 Jan 2003 22:16:52 +0000 |
parents | 1ffac7cf4e94 |
children | 40d04a6570de |
rev | line source |
---|---|
2393 | 1 --------------------------------------------------------------------------- |
2 | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
3 Protokół G*du-G*du 4.x |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
4 |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
5 (C) Copyright 2001 by Wojtek Kaniewski <wojtekka@irc.pl>, |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
6 Robert J. Woźny <speedy@atman.pl>, |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
7 Tomasz Jarzynka <tomee@cpi.pl>, |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
8 Adam Ludwikowski <adam.ludwikowski@wp.pl>, |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
9 Marek Kozina <klith@hybrid.art.pl>, |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
10 Rafał Florek <raf@regionet.regionet.pl>, |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
11 Igor Popik <igipop@wsfiz.edu.pl> |
2393 | 12 |
13 --- 0) disclaimer --------------------------------------------------------- | |
14 | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
15 opis protokołu bazują na doświadczeniach przeprowadzonych na moim |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
16 domowym komputerze oraz informacjach przysłanych do mnie przez różnych |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
17 ludzi. żaden klient g*du-g*du nie został skrzywdzony podczas |
2393 | 18 przeprowadzania badań, blabla. |
19 | |
20 --- 1) transmisja, format wszystkich pakietów ----------------------------- | |
21 | |
22 w przeciwieństwie do zabawek typu icq, g*du-g*du korzysta z protokołu tcp. | |
23 każdy pakiet zawiera dwa stałe pola: | |
24 | |
25 struct gg_header { | |
26 int type; /* typ pakietu */ | |
27 int length; /* długość reszty pakietu */ | |
28 }; | |
29 | |
30 dla ułatwienia przyjmuję następujące długości zmiennych: sizeof(char) = 1, | |
31 sizeof(short) = 2, sizeof(int) = 4. oczywiście wszystkie liczby są zgodnie | |
32 z intelowym endianem. zakładam też, że wszystkie zmienne są bez znaku. nie | |
33 chce mi się wszędzie pisać `unsigned'. | |
34 | |
35 pola, co do których znaczenia nie mam pewności, lub w ogóle nie mam pojęcia, | |
36 skąd się tam wzięły, oznaczam `dunno'. | |
37 | |
38 --- 2) zanim się połączymy ------------------------------------------------- | |
39 | |
40 żeby wiedzieć, z jakim serwerem mamy się połączyć, należy poudawać przez | |
41 chwilę Internet Explorera, połączyć się z hostem `appmsg.gadu-gadu.pl'. | |
42 | |
43 GET /appsvc/appmsg.asp?fmnumber=<tutaj_numerek_gg> HTTP/1.0 | |
44 Host: appmsg.gadu-gadu.pl | |
45 User-Agent: Mozilla/4.7 [en] (Win98; I) | |
46 Pragma: no-cache | |
47 | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
48 oryginalny klient może wysłać jeden z podanych identyfikatorów przeglądarki: |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
49 |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
50 Mozilla/4.04 [en] (Win95; I ;Nav) |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
51 Mozilla/4.7 [en] (Win98; I) |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
52 Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt) |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
53 Mozilla/4.0 (compatible; MSIE 5.0; Windows NT) |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
54 Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt) |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
55 Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
56 |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
57 nowsze wersje klienta do zapytania dodają również `version=...' opisujące, |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
58 z jakim klientem serwer ma do czynienia. jednak ze względu na możliwe |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
59 różnice w protokole, lepiej pomijać ten parametr i uwagać GG 4.0. w każdym |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
60 razie na to zapytanie serwer powinien odpowiedzieć: |
2393 | 61 |
62 HTTP/1.0 200 OK | |
63 | |
64 0 1 0 217.17.33.21:8074 217.17.33.21 217.17.33.21 | |
65 | |
66 co to oznacza? nie mam pojęcia ;) wygląda na to, że cały g*du-g*du jest | |
67 przemyślany i w przyszłości będzie można używać różnych serwerów do różnych | |
68 rzeczy, typu szukanie, obsługa klientów itd. póki co, łączyć się trzeba na | |
69 pierwszy adres (tak, ten z portem). | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
70 Jeżeli połączenie z portem 8074 nie wyjdzie z jakiś specyficznych powodów - |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
71 można się łączyć na port 443. |
2393 | 72 |
73 --- 3) logowanie się ------------------------------------------------------- | |
74 | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
75 po połączeniu się portem serwera g*du-g*du, dostajemy pakiet typu 0x0001, |
2393 | 76 który na potrzeby tego dokumentu nazwiemy: |
77 | |
78 #define GG_WELCOME 0x0001 | |
79 | |
80 reszta pakietu zawiera liczbę, na podstawie której liczony jest hash z hasła | |
81 klienta: | |
82 | |
83 struct gg_welcome { | |
84 int key; /* klucz szyfrowania hasła */ | |
85 }; | |
86 | |
87 kiedy mamy już tą wartość możemy odesłać pakiet logowania | |
88 | |
89 #define GG_LOGIN 0x000c | |
90 | |
91 musimy podać kilka informacji: | |
92 | |
93 struct gg_login { | |
94 int uin; /* twój numerek */ | |
95 int hash; /* hash hasła */ | |
96 int status; /* status na dzień dobry */ | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
97 int version; /* wersja klienta */ |
2393 | 98 int local_ip; /* mój adres ip */ |
99 short local_port; /* port, na którym słucham */ | |
100 }; | |
101 | |
102 jak obliczyć hash hasła? hmm... nic prostszego. do każdej literki hasła | |
103 dodaje się jedynkę, mnoży wszystko razem, a potem przez liczbę podaną przez | |
104 serwer. | |
105 | |
106 for (hash = 1; *passwd; passwd++) | |
107 hash *= (*passwd) + 1; | |
108 | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
109 zrozumiałe, racja? liczba oznaczająca wersję może być jedną z poniższych: |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
110 |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
111 0x11 - 4.6.1 |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
112 0x10 - 4.5.22, 4.5.21, 4.5.19, 4.5.17, 4.5.15 |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
113 0x0f - 4.5.12 |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
114 0x0b - 4.0.30, 4.0.29, 4.0.28, 4.0.25 |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
115 |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
116 oczywiście nie są to wszystkie możliwe wersje klientów, lecz te, które |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
117 udało się sprawdzić. najbezpieczniej będzie przedstawiać się jako ta |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
118 wersja, której ficzerów używamy. wiadomo, że 4.0.x nie obsługiwały trybu |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
119 ukrytego, ani tylko dla znajomych itd. |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
120 |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
121 jeśli wszystko się powiedzie, dostaniemy w odpowiedzi pakiet typu |
2393 | 122 |
123 #define GG_LOGIN_OK 0x0003 | |
124 | |
125 z polem header->length = 0, lub pakiet | |
126 | |
127 #define GG_LOGIN_FAILED 0x0009 | |
128 | |
129 --- 4) zmiana statusu ----------------------------------------------------- | |
130 | |
131 g*du-g*du przewiduje trzy stany klienta, które zmieniamy pakietem | |
132 | |
133 #define GG_NEW_STATUS 0x0002 | |
134 | |
135 #define GG_STATUS_NOT_AVAIL 0x0001 /* rozłączony */ | |
136 #define GG_STATUS_AVAIL 0x0002 /* dostępny */ | |
137 #define GG_STATUS_BUSY 0x0003 /* zajęty */ | |
138 #define GG_STATUS_INVISIBLE 0x0014 /* niewidoczny */ | |
139 | |
140 #define GG_STATUS_FRIENDS_MASK 0x8000 /* tylko dla przyjaciół */ | |
141 | |
142 struct gg_new_status { | |
143 int status; /* na jaki zmienić? */ | |
144 } | |
145 | |
146 należy pamiętać, żeby przed rozłączeniem się z serwerem należy zmienić | |
147 stan na GG_STATUS_NOT_AVAIL. jeśli ma być widoczny tylko dla przyjaciół, | |
148 należy dodać GG_STATUS_FRIENDS do normalnej wartości stanu. | |
149 | |
150 --- 5) ludzie przychodzą, ludzie odchodzą --------------------------------- | |
151 | |
152 zaraz po zalogowaniu możemy wysłać serwerowi listę ludzików w naszej liście | |
153 kontaktów, żeby dowiedzieć się, czy są w tej chwili dostępni. pakiet zawiera | |
154 dowolną ilość struktur gg_notify: | |
155 | |
156 #define GG_NOTIFY 0x0010 | |
157 | |
158 struct gg_notify { | |
159 int uin; /* numerek danej osoby */ | |
160 char dunno1; /* == 3 */ | |
161 }; | |
162 | |
163 jeśli ktoś jest, serwer odpowie pakietem zawierającym jedną lub więcej | |
164 struktur gg_notify_reply: | |
165 | |
166 #define GG_NOTIFY_REPLY 0x000c /* tak, to samo co GG_LOGIN */ | |
167 | |
168 struct gg_notify_reply { | |
169 int uin; /* numerek */ | |
170 int status; /* status danej osoby */ | |
171 int remote_ip; /* adres ip delikwenta */ | |
172 short remote_port; /* port, na którym słucha klient */ | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
173 int version; /* wersja klienta */ |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
174 short dunno1; /* znowu port? */ |
2393 | 175 }; |
176 | |
177 jeśli klient nie obsługuje połączeń między klientami (np. g*du-g*du 3.x) | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
178 zamiast adresu ip jest 0, zamiast portu może być 0, 1, 2... nieważne ;) |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
179 port może przyjmować wartość 1, jeśli klient znajduje się za jakimś |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
180 firewallem lub innym urządzeniem robiącym NAT. w każdym razie, jeśli ktoś |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
181 się pojawi w trakcie pracy, również zostanie przysłany ten pakiet. |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
182 proste? proste :) |
2393 | 183 |
184 żeby dodać kogoś do listy w trakcie pracy, trzeba wysłać niżej opisany | |
185 pakiet. jego format jest identyczny jak przy GG_NOTIFY. | |
186 | |
187 #define GG_ADD 0x000d | |
188 | |
189 struct gg_add { | |
190 int uin; /* numerek */ | |
191 char dunno1; /* == 3 */ | |
192 }; | |
193 | |
194 jeśli ktoś opuści g*du-g*du lub zmieni stan, otrzymamy pakiet | |
195 | |
196 #define GG_STATUS 0x0002 | |
197 | |
198 struct gg_status { | |
199 int uin; /* numerek */ | |
200 int status; /* nowy stan */ | |
201 }; | |
202 | |
203 --- 6) wysyłanie wiadomości ------------------------------------------------ | |
204 | |
205 przejdźmy do sedna sprawy ;) | |
206 | |
207 #define GG_SEND_MSG 0x000b | |
208 | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
209 #define GG_CLASS_QUEUED 0x0001 /* tylko przy odbieraniu */ |
2393 | 210 #define GG_CLASS_MSG 0x0004 |
211 #define GG_CLASS_CHAT 0x0008 | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
212 #define GG_CLASS_UNKNOWN_1 0x0020 |
2393 | 213 |
214 struct gg_send_msg { | |
215 int recipient; | |
216 int seq; | |
217 int class; | |
218 char message[]; | |
219 }; | |
220 | |
221 wiadomo, odbiorca. numer sekwencyjny, który wykorzystujemy potem do | |
222 potwierdzenia. nie wykluczone, że w jakis sposób odróżnia się różne | |
223 rozmowy za pomocą części bajtów, ale raczej nie ma znaczenia. klasa | |
224 wiadomości pozwala odróżnić, czy wiadomość ma się pokazać w osobym | |
225 okienku czy jako kolejna linijka w okienku rozmowy. wygląda na to, | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
226 że to jakaś bitmapa, więc najlepiej olać inne bity niż 0x0e. (czasem |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
227 klienty wysyłają 0x04, czasem 0x24 -- widocznie 0x20 to też jakaś |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
228 flaga). jeśli odbiorca był niedostępny podczas wysyłania wiadomości, |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
229 zostanie zaznaczony bit 0x01. |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
230 |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
231 oryginalny klient wysyłając wiadomość do kilku użytkowników, wysyła po |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
232 prostu kilka takich samych pakietów z różnymi numerkami odbiorców. nie |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
233 ma osobnego pakietu do tego. natomiast jeśli chodzi o ,,konferencyjnę'' |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
234 do pakietu doklejana jest za ,,char message[];'' następująca struktura: |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
235 |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
236 struct gg_send_recipients { |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
237 char flag; /* == 1 */ |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
238 int count; /* ilość odbiorców */ |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
239 int recipients[]; /* tablica odbiorców */ |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
240 }; |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
241 |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
242 na przykład, by wysłać do trzech ludzi, należy wysłać pakiet: |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
243 |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
244 - -- --- --+--+--+--+--+--+--+-----------+-----------+ |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
245 treść |\0|\1| 0x02 | uin1 | uin2 | |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
246 - -- -- ---+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |
2393 | 247 |
248 serwer po otrzymaniu wiadomości odsyła informację o tym. przy okazji | |
249 mówi, czy wiadomość dotarła do odbiorcy (status == GG_ACK_DELIVERED), | |
250 czy może jest offline i została zakolejkowana (GG_ACK_QUEUED): | |
251 | |
252 #define GG_SEND_MSG_ACK 0x0005 | |
253 | |
254 #define GG_ACK_DELIVERED 0x0002 | |
255 #define GG_ACK_QUEUED 0x0003 | |
256 | |
257 struct gg_send_msg_ack { | |
258 int status; | |
259 int recipient; | |
260 int seq; | |
261 }; | |
262 | |
263 numer sekwencyjny i adresat ten sam, co przy wysyłaniu. | |
264 | |
265 --- 7) otrzymywanie wiadomości --------------------------------------------- | |
266 | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
267 zbyt wiele wyjaśnień chyba nie trzeba. wiadomo od kogo. drugie pole to |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
268 najprawdopodobniej jakiś numerek sekwencyjny. trzecie oznacza czas nadania |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
269 wiadomości. klasa wiadomości taka sama jak przy wysyłaniu: |
2393 | 270 |
271 #define GG_RECV_MSG 0x000a | |
272 | |
273 struct gg_recv_msg { | |
274 int sender; | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
275 int seq; |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
276 int time; |
2393 | 277 int class; |
278 char message[]; | |
279 }; | |
280 | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
281 w przypadku pakietów ,,konferencyjnych'' na koncu pakietu doklejona jest |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
282 struktura identyczna ze struct gg_send_recipients zawierająca pozostałych |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
283 rozmówców. |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
284 |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
285 --- 8) ping/pong ----------------------------------------------------------- |
2393 | 286 |
287 od czasu do czasu klient wysyła pakiet a'la ping do serwera i dostaje pustą | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
288 odpowiedź. o ile dobrze pamiętam, serwer rozłącza się po upływie 5 minut od |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
289 otrzymania ostatniej informacji. |
2393 | 290 |
291 #define GG_PING 0x0008 | |
292 | |
293 /* nie ma niczego */ | |
294 | |
295 #define GG_PONG 0x0007 | |
296 | |
297 /* nie ma niczego */ | |
298 | |
299 --- 9) podziękowania ------------------------------------------------------- | |
300 | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
301 swój wkład w poznanie protokołu mieli: |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
302 - Robert J. Woźny <speedy@atman.pl>: |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
303 opis nowości w protokole GG 4.6, |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
304 - Tomasz Jarzynka <tomee@cpi.pl>: |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
305 badanie timeoutów, |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
306 - Adam Ludwikowski <adam.ludwikowski@wp.pl>: |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
307 wiele różnych poprawek do tekstu, badanie wersji, |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
308 - Marek Kozina <klith@hybrid.art.pl>: |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
309 czas otrzymania wiadomości, |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
310 - Rafał Florek <raf@regionet.regionet.pl>: |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
311 konferencje, |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
312 - Igor Popik <igipop@wsfiz.edu.pl>: |
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
313 klasy wiadomości przy odbieraniu zakolejkowanej. |
2393 | 314 |
315 ---------------------------------------------------------------------------- | |
316 | |
2806
1ffac7cf4e94
[gaim-migrate @ 2819]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
317 $Id: protocol.txt 2819 2001-11-27 22:54:32Z warmenhoven $ |
2393 | 318 |