1 /* include/libgadu.h. Generated from libgadu.h.in by configure. */
2 /* $Id: libgadu.h.in,v 1.5.2.1 2007-04-21 23:44:25 wojtekka Exp $ */
5 * (C) Copyright 2001-2003 Wojtek Kaniewski <wojtekka@irc.pl>
6 * Robert J. Wo�ny <speedy@ziew.org>
7 * Arkadiusz Mi�kiewicz <arekm@pld-linux.org>
8 * Tomasz Chili� <chilek@chilan.com>
9 * Piotr Wysocki <wysek@linux.bydg.org>
10 * Dawid Jarosz <dawjar@poczta.onet.pl>
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU Lesser General Public License Version
14 * 2.1 as published by the Free Software Foundation.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU Lesser General Public License for more details.
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
27 #ifndef __GG_LIBGADU_H
28 #define __GG_LIBGADU_H
37 #include <sys/types.h>
41 /* Defined if libgadu was compiled for bigendian machine. */
42 /* #undef GG_CONFIG_BIGENDIAN */
44 /* Defined if this machine has gethostbyname_r(). */
45 /* #undef GG_CONFIG_HAVE_GETHOSTBYNAME_R */
47 /* Defined if libgadu was compiled and linked with pthread support. */
48 /* #undef GG_CONFIG_HAVE_PTHREAD */
50 /* Defined if this machine has C99-compiliant vsnprintf(). */
51 #define GG_CONFIG_HAVE_C99_VSNPRINTF
53 /* Defined if this machine has va_copy(). */
54 #define GG_CONFIG_HAVE_VA_COPY
56 /* Defined if this machine has __va_copy(). */
57 #define GG_CONFIG_HAVE___VA_COPY
59 /* Defined if this machine supports long long. */
60 #define GG_CONFIG_HAVE_LONG_LONG
62 /* Defined if libgadu was compiled and linked with TLS support. */
63 #define GG_CONFIG_HAVE_OPENSSL
65 /* Defined if uintX_t types are defined in <stdint.h>. */
66 #define GG_CONFIG_HAVE_STDINT_H
68 /* Defined if uintX_t types are defined in <inttypes.h>. */
69 /* #undef GG_CONFIG_HAVE_INTTYPES_H */
71 /* Defined if uintX_t types are defined in <sys/inttypes.h>. */
72 /* #undef GG_CONFIG_HAVE_SYS_INTTYPES_H */
74 /* Defined if uintX_t types are defined in <sys/int_types.h>. */
75 /* #undef GG_CONFIG_HAVE_SYS_INT_TYPES_H */
77 /* Defined if uintX_t types are defined in <sys/types.h>. */
78 /* #undef GG_CONFIG_HAVE_SYS_TYPES_H */
80 #ifdef GG_CONFIG_HAVE_OPENSSL
81 #include <openssl/ssl.h>
84 #ifdef GG_CONFIG_HAVE_STDINT_H
87 # ifdef GG_CONFIG_HAVE_INTTYPES_H
88 # include <inttypes.h>
90 # ifdef GG_CONFIG_HAVE_SYS_INTTYPES_H
91 # include <sys/inttypes.h>
93 # ifdef GG_CONFIG_HAVE_SYS_INT_TYPES_H
94 # include <sys/int_types.h>
96 # ifdef GG_CONFIG_HAVE_SYS_TYPES_H
97 # include <sys/types.h>
100 #ifndef __AC_STDINT_H
101 #define __AC_STDINT_H
103 /* ISO C 9X: 7.18 Integer types <stdint.h> */
105 typedef unsigned char uint8_t;
106 typedef unsigned short uint16_t;
107 typedef unsigned int uint32_t;
110 #define __int8_t_defined
111 typedef signed char int8_t;
112 typedef signed short int16_t;
113 typedef signed int int32_t;
116 #endif /* __AC_STDINT_H */
127 * typ reprezentuj�cy numer osoby.
129 typedef uint32_t uin_t;
132 * og� struktura opisuj�ca r� sesje. przydatna w klientach.
134 #define gg_common_head(x) \
135 int fd; /* podgl�dany deskryptor */ \
136 int check; /* sprawdzamy zapis czy odczyt */ \
137 int state; /* aktualny stan maszynki */ \
138 int error; /* kod b�� dla GG_STATE_ERROR */ \
139 int type; /* rodzaj sesji */ \
140 int id; /* identyfikator */ \
141 int timeout; /* sugerowany timeout w sekundach */ \
142 int (*callback)(x*); /* callback przy zmianach */ \
143 void (*destroy)(x*); /* funkcja niszczenia */
146 gg_common_head(struct gg_common)
149 struct gg_image_queue;
154 * struktura opisuj�ca dan� sesj�tworzona przez gg_login(), zwalniana
155 * przez gg_free_session().
158 gg_common_head(struct gg_session)
160 int async; /* czy po��czenie jest asynchroniczne */
161 int pid; /* pid procesu resolvera */
162 int port; /* port, z kt� si��czymy */
163 int seq; /* numer sekwencyjny ostatniej wiadomo�ci */
164 int last_pong; /* czas otrzymania ostatniego ping/pong */
165 int last_event; /* czas otrzymania ostatniego pakietu */
167 struct gg_event *event; /* zdarzenie po ->callback() */
169 uint32_t proxy_addr; /* adres proxy, keszowany */
170 uint16_t proxy_port; /* port proxy */
172 uint32_t hub_addr; /* adres huba po resolvni�u */
173 uint32_t server_addr; /* adres serwera, od huba */
175 uint32_t client_addr; /* adres klienta */
176 uint16_t client_port; /* port, na kt� klient s�ucha */
178 uint32_t external_addr; /* adres zewnetrzny klienta */
179 uint16_t external_port; /* port zewnetrzny klienta */
181 uin_t uin; /* numerek klienta */
182 char *password; /* i jego has�o. zwalniane automagicznie */
184 int initial_status; /* pocz�tkowy stan klienta */
185 int status; /* aktualny stan klienta */
187 char *recv_buf; /* bufor na otrzymywane pakiety */
188 int recv_done; /* ile ju� wczytano do bufora */
189 int recv_left; /* i ile jeszcze trzeba wczyta�/
191 int protocol_version; /* wersja u�ywanego protoko�u */
192 char *client_version; /* wersja u�ywanego klienta */
193 int last_sysmsg; /* ostatnia wiadomo��ystemowa */
195 char *initial_descr; /* pocz�tkowy opis stanu klienta */
197 void *resolver; /* wska�nik na informacje resolvera */
199 char *header_buf; /* bufor na pocz�tek nag�� */
200 unsigned int header_done;/* ile ju� mamy */
202 #ifdef GG_CONFIG_HAVE_OPENSSL
203 SSL *ssl; /* sesja TLS */
204 SSL_CTX *ssl_ctx; /* kontekst sesji? */
206 void *ssl; /* zachowujemy ABI */
210 int image_size; /* maksymalny rozmiar obrazk� KiB */
212 char *userlist_reply; /* fragment odpowiedzi listy kontakt�/
214 int userlist_blocks; /* na ile kawa�k�odzielono list�ontakt�/
216 struct gg_image_queue *images; /* aktualnie wczytywane obrazki */
222 * og� struktura opisuj�ca stan wszystkich operacji HTTP. tworzona
223 * przez gg_http_connect(), zwalniana przez gg_http_free().
226 gg_common_head(struct gg_http)
228 int async; /* czy po��czenie asynchroniczne */
229 int pid; /* pid procesu resolvera */
230 int port; /* port, z kt� si��czymy */
232 char *query; /* bufor zapytania http */
233 char *header; /* bufor nag�� */
234 int header_size; /* rozmiar wczytanego nag�� */
235 char *body; /* bufor otrzymanych informacji */
236 unsigned int body_size; /* oczekiwana ilo��nformacji */
238 void *data; /* dane danej operacji http */
240 char *user_data; /* dane u�ytkownika, nie s� zwalniane przez gg_http_free() */
242 void *resolver; /* wska�nik na informacje resolvera */
244 unsigned int body_done; /* ile ju� tre�ci odebrano? */
248 #define GG_PACKED __attribute__ ((packed))
253 #define GG_MAX_PATH 276
256 * struct gg_file_info
258 * odpowiednik windowsowej struktury WIN32_FIND_DATA niezb�ej przy
260 struct gg_file_info {
261 uint32_t mode; /* dwFileAttributes */
262 uint32_t ctime[2]; /* ftCreationTime */
263 uint32_t atime[2]; /* ftLastAccessTime */
264 uint32_t mtime[2]; /* ftLastWriteTime */
265 uint32_t size_hi; /* nFileSizeHigh */
266 uint32_t size; /* nFileSizeLow */
267 uint32_t reserved0; /* dwReserved0 */
268 uint32_t reserved1; /* dwReserved1 */
269 unsigned char filename[GG_MAX_PATH - 14]; /* cFileName */
270 unsigned char short_filename[14]; /* cAlternateFileName */
276 * struktura opisuj�ca nas�uchuj�ce gniazdo po��cze��y klientami.
277 * tworzona przez gg_dcc_socket_create(), zwalniana przez gg_dcc_free().
280 gg_common_head(struct gg_dcc)
282 struct gg_event *event; /* opis zdarzenia */
284 int active; /* czy to my si��czymy? */
285 int port; /* port, na kt� siedzi */
286 uin_t uin; /* uin klienta */
287 uin_t peer_uin; /* uin drugiej strony */
288 int file_fd; /* deskryptor pliku */
289 unsigned int offset; /* offset w pliku */
290 unsigned int chunk_size;/* rozmiar kawa�ka */
291 unsigned int chunk_offset;/* offset w aktualnym kawa�ku */
292 struct gg_file_info file_info;
293 /* informacje o pliku */
294 int established; /* po��czenie ustanowione */
295 char *voice_buf; /* bufor na pakiet po��czenia g�osowego */
296 int incoming; /* po��czenie przychodz�ce */
297 char *chunk_buf; /* bufor na kawa�ek danych */
298 uint32_t remote_addr; /* adres drugiej strony */
299 uint16_t remote_port; /* port drugiej strony */
308 GG_SESSION_GG = 1, /* po��czenie z serwerem gg */
309 GG_SESSION_HTTP, /* og� sesja http */
310 GG_SESSION_SEARCH, /* szukanie */
311 GG_SESSION_REGISTER, /* rejestrowanie */
312 GG_SESSION_REMIND, /* przypominanie has�a */
313 GG_SESSION_PASSWD, /* zmiana has�a */
314 GG_SESSION_CHANGE, /* zmiana informacji o sobie */
315 GG_SESSION_DCC, /* og� po��czenie DCC */
316 GG_SESSION_DCC_SOCKET, /* nas�uchuj�cy socket */
317 GG_SESSION_DCC_SEND, /* wysy�anie pliku */
318 GG_SESSION_DCC_GET, /* odbieranie pliku */
319 GG_SESSION_DCC_VOICE, /* rozmowa g�osowa */
320 GG_SESSION_USERLIST_GET, /* pobieranie userlisty */
321 GG_SESSION_USERLIST_PUT, /* wysy�anie userlisty */
322 GG_SESSION_UNREGISTER, /* usuwanie konta */
323 GG_SESSION_USERLIST_REMOVE, /* usuwanie userlisty */
324 GG_SESSION_TOKEN, /* pobieranie tokenu */
326 GG_SESSION_USER0 = 256, /* zdefiniowana dla u�ytkownika */
327 GG_SESSION_USER1, /* j.w. */
328 GG_SESSION_USER2, /* j.w. */
329 GG_SESSION_USER3, /* j.w. */
330 GG_SESSION_USER4, /* j.w. */
331 GG_SESSION_USER5, /* j.w. */
332 GG_SESSION_USER6, /* j.w. */
333 GG_SESSION_USER7 /* j.w. */
339 * opisuje stan asynchronicznej maszyny.
343 GG_STATE_IDLE = 0, /* nie powinno wyst�pi�*/
344 GG_STATE_RESOLVING, /* wywo�a� gethostbyname() */
345 GG_STATE_CONNECTING, /* wywo�a� connect() */
346 GG_STATE_READING_DATA, /* czeka na dane http */
347 GG_STATE_ERROR, /* wyst�pi� b��d. kod w x->error */
350 GG_STATE_CONNECTING_HUB, /* wywo�a� connect() na huba */
351 GG_STATE_CONNECTING_GG, /* wywo�a� connect() na serwer */
352 GG_STATE_READING_KEY, /* czeka na klucz */
353 GG_STATE_READING_REPLY, /* czeka na odpowied� */
354 GG_STATE_CONNECTED, /* po��czy� si�/
357 GG_STATE_SENDING_QUERY, /* wysy�a zapytanie http */
358 GG_STATE_READING_HEADER, /* czeka na nag�� http */
359 GG_STATE_PARSING, /* przetwarza dane */
360 GG_STATE_DONE, /* sko�� */
363 GG_STATE_LISTENING, /* czeka na po��czenia */
364 GG_STATE_READING_UIN_1, /* czeka na uin peera */
365 GG_STATE_READING_UIN_2, /* czeka na sw�in */
366 GG_STATE_SENDING_ACK, /* wysy�a potwierdzenie dcc */
367 GG_STATE_READING_ACK, /* czeka na potwierdzenie dcc */
368 GG_STATE_READING_REQUEST, /* czeka na komend�/
369 GG_STATE_SENDING_REQUEST, /* wysy�a komend�/
370 GG_STATE_SENDING_FILE_INFO, /* wysy�a informacje o pliku */
371 GG_STATE_READING_PRE_FILE_INFO, /* czeka na pakiet przed file_info */
372 GG_STATE_READING_FILE_INFO, /* czeka na informacje o pliku */
373 GG_STATE_SENDING_FILE_ACK, /* wysy�a potwierdzenie pliku */
374 GG_STATE_READING_FILE_ACK, /* czeka na potwierdzenie pliku */
375 GG_STATE_SENDING_FILE_HEADER, /* wysy�a nag�� pliku */
376 GG_STATE_READING_FILE_HEADER, /* czeka na nag�� */
377 GG_STATE_GETTING_FILE, /* odbiera plik */
378 GG_STATE_SENDING_FILE, /* wysy�a plik */
379 GG_STATE_READING_VOICE_ACK, /* czeka na potwierdzenie voip */
380 GG_STATE_READING_VOICE_HEADER, /* czeka na rodzaj bloku voip */
381 GG_STATE_READING_VOICE_SIZE, /* czeka na rozmiar bloku voip */
382 GG_STATE_READING_VOICE_DATA, /* czeka na dane voip */
383 GG_STATE_SENDING_VOICE_ACK, /* wysy�a potwierdzenie voip */
384 GG_STATE_SENDING_VOICE_REQUEST, /* wysy�a ��danie voip */
385 GG_STATE_READING_TYPE, /* czeka na typ po��czenia */
387 /* nowe. bez sensu jest to API. */
388 GG_STATE_TLS_NEGOTIATION /* negocjuje po��czenie TLS */
394 * informuje, co proces klienta powinien sprawdzi�a deskryptorze danego
398 GG_CHECK_NONE = 0, /* nic. nie powinno wyst�pi�/
399 GG_CHECK_WRITE = 1, /* sprawdzamy mo�liwo��apisu */
400 GG_CHECK_READ = 2 /* sprawdzamy mo�liwo��dczytu */
404 * struct gg_login_params
406 * parametry gg_login(). przeniesiono do struktury, �eby unikn��roblem�* z ci�g�ymi zmianami API, gdy dodano co� nowego do protoko�u.
408 struct gg_login_params {
409 uin_t uin; /* numerek */
410 char *password; /* has�o */
411 int async; /* asynchroniczne sockety? */
412 int status; /* pocz�tkowy status klienta */
413 char *status_descr; /* opis statusu */
414 uint32_t server_addr; /* adres serwera gg */
415 uint16_t server_port; /* port serwera gg */
416 uint32_t client_addr; /* adres dcc klienta */
417 uint16_t client_port; /* port dcc klienta */
418 int protocol_version; /* wersja protoko�u */
419 char *client_version; /* wersja klienta */
420 int has_audio; /* czy ma d�wi� */
421 int last_sysmsg; /* ostatnia wiadomo��ystemowa */
422 uint32_t external_addr; /* adres widziany na zewnatrz */
423 uint16_t external_port; /* port widziany na zewnatrz */
424 int tls; /* czy ��czymy po TLS? */
425 int image_size; /* maksymalny rozmiar obrazka w KiB */
426 int era_omnix; /* czy udawa�lienta era omnix? */
428 char dummy[6 * sizeof(int)]; /* miejsce na kolejnych 6 zmiennych,
429 * �eby z dodaniem parametru nie
430 * zmienia� si�ozmiar struktury */
433 struct gg_session *gg_login(const struct gg_login_params *p);
434 void gg_free_session(struct gg_session *sess);
435 void gg_logoff(struct gg_session *sess);
436 int gg_change_status(struct gg_session *sess, int status);
437 int gg_change_status_descr(struct gg_session *sess, int status, const char *descr);
438 int gg_change_status_descr_time(struct gg_session *sess, int status, const char *descr, int time);
439 int gg_send_message(struct gg_session *sess, int msgclass, uin_t recipient, const unsigned char *message);
440 int gg_send_message_richtext(struct gg_session *sess, int msgclass, uin_t recipient, const unsigned char *message, const unsigned char *format, int formatlen);
441 int gg_send_message_confer(struct gg_session *sess, int msgclass, int recipients_count, uin_t *recipients, const unsigned char *message);
442 int gg_send_message_confer_richtext(struct gg_session *sess, int msgclass, int recipients_count, uin_t *recipients, const unsigned char *message, const unsigned char *format, int formatlen);
443 int gg_send_message_ctcp(struct gg_session *sess, int msgclass, uin_t recipient, const unsigned char *message, int message_len);
444 int gg_ping(struct gg_session *sess);
445 int gg_userlist_request(struct gg_session *sess, char type, const char *request);
446 int gg_image_request(struct gg_session *sess, uin_t recipient, int size, uint32_t crc32);
447 int gg_image_reply(struct gg_session *sess, uin_t recipient, const char *filename, const char *image, int size);
449 uint32_t gg_crc32(uint32_t crc, const unsigned char *buf, int len);
451 struct gg_image_queue {
452 uin_t sender; /* nadawca obrazka */
453 uint32_t size; /* rozmiar */
454 uint32_t crc32; /* suma kontrolna */
455 char *filename; /* nazwa pliku */
456 char *image; /* bufor z obrazem */
457 uint32_t done; /* ile ju� wczytano */
459 struct gg_image_queue *next; /* nast�y na li�cie */
467 GG_EVENT_NONE = 0, /* nic si�ie wydarzy�o */
468 GG_EVENT_MSG, /* otrzymano wiadomo��/
469 GG_EVENT_NOTIFY, /* kto� si�ojawi� */
470 GG_EVENT_NOTIFY_DESCR, /* kto� si�ojawi� z opisem */
471 GG_EVENT_STATUS, /* kto� zmieni� stan */
472 GG_EVENT_ACK, /* potwierdzenie wys�ania wiadomo�ci */
473 GG_EVENT_PONG, /* pakiet pong */
474 GG_EVENT_CONN_FAILED, /* po��czenie si�ie uda�o */
475 GG_EVENT_CONN_SUCCESS, /* po��czenie si�owiod�o */
476 GG_EVENT_DISCONNECT, /* serwer zrywa po��czenie */
478 GG_EVENT_DCC_NEW, /* nowe po��czenie mi�y klientami */
479 GG_EVENT_DCC_ERROR, /* b��d po��czenia mi�y klientami */
480 GG_EVENT_DCC_DONE, /* zako�no po��czenie */
481 GG_EVENT_DCC_CLIENT_ACCEPT, /* moment akceptacji klienta */
482 GG_EVENT_DCC_CALLBACK, /* klient si�o��czy� na ��danie */
483 GG_EVENT_DCC_NEED_FILE_INFO, /* nale�y wype�ni�ile_info */
484 GG_EVENT_DCC_NEED_FILE_ACK, /* czeka na potwierdzenie pliku */
485 GG_EVENT_DCC_NEED_VOICE_ACK, /* czeka na potwierdzenie rozmowy */
486 GG_EVENT_DCC_VOICE_DATA, /* ramka danych rozmowy g�osowej */
488 GG_EVENT_PUBDIR50_SEARCH_REPLY, /* odpowiedz wyszukiwania */
489 GG_EVENT_PUBDIR50_READ, /* odczytano w�asne dane z katalogu */
490 GG_EVENT_PUBDIR50_WRITE, /* wpisano w�asne dane do katalogu */
492 GG_EVENT_STATUS60, /* kto� zmieni� stan w GG 6.0 */
493 GG_EVENT_NOTIFY60, /* kto� si�ojawi� w GG 6.0 */
494 GG_EVENT_USERLIST, /* odpowied� listy kontakt� GG 6.0 */
495 GG_EVENT_IMAGE_REQUEST, /* pro�ba o wys�anie obrazka GG 6.0 */
496 GG_EVENT_IMAGE_REPLY, /* podes�any obrazek GG 6.0 */
497 GG_EVENT_DCC_ACK /* potwierdzenie transmisji */
500 #define GG_EVENT_SEARCH50_REPLY GG_EVENT_PUBDIR50_SEARCH_REPLY
505 * okre�la pow�ieudanego po��czenia.
508 GG_FAILURE_RESOLVING = 1, /* nie znaleziono serwera */
509 GG_FAILURE_CONNECTING, /* nie mo�na si�o��czy�/
510 GG_FAILURE_INVALID, /* serwer zwr� nieprawid�owe dane */
511 GG_FAILURE_READING, /* zerwano po��czenie podczas odczytu */
512 GG_FAILURE_WRITING, /* zerwano po��czenie podczas zapisu */
513 GG_FAILURE_PASSWORD, /* nieprawid�owe has�o */
514 GG_FAILURE_404, /* XXX nieu�ywane */
515 GG_FAILURE_TLS, /* b��d negocjacji TLS */
516 GG_FAILURE_NEED_EMAIL, /* serwer roz��czy� nas z pro�b� o zmian�maila */
517 GG_FAILURE_INTRUDER, /* za du�o pr�o��czenia si� nieprawid�owym has�em */
518 GG_FAILURE_UNAVAILABLE /* serwery s� wy��czone */
524 * okre�la rodzaj b�� wywo�anego przez dan� operacj�nie zawiera
525 * przesadnie szczeg�ych informacji o powodzie b��, by nie komplikowa�* obs�ugi b��w. je�li wymagana jest wi�za dok�adno��nale�y sprawdzi�* zawarto��miennej errno.
528 GG_ERROR_RESOLVING = 1, /* b��d znajdowania hosta */
529 GG_ERROR_CONNECTING, /* b��d �aczenia si�/
530 GG_ERROR_READING, /* b��d odczytu */
531 GG_ERROR_WRITING, /* b��d wysy�ania */
533 GG_ERROR_DCC_HANDSHAKE, /* b��d negocjacji */
534 GG_ERROR_DCC_FILE, /* b��d odczytu/zapisu pliku */
535 GG_ERROR_DCC_EOF, /* plik si�ko��? */
536 GG_ERROR_DCC_NET, /* b��d wysy�ania/odbierania */
537 GG_ERROR_DCC_REFUSED /* po��czenie odrzucone przez usera */
541 * struktury dotycz�ce wyszukiwania w GG 5.0. NIE NALE�Y SI�DO NICH
542 * ODWO�YWA�BEZPO�REDNIO! do dost� do nich s�u�� funkcje gg_pubdir50_*()
544 struct gg_pubdir50_entry {
550 struct gg_pubdir50_s {
555 struct gg_pubdir50_entry *entries;
560 * typedef gg_pubdir_50_t
562 * typ opisuj�cy zapytanie lub wynik zapytania katalogu publicznego
563 * z protoko�u GG 5.0. nie nale�y si�dwo�ywa�ezpo�rednio do jego
564 * p�- s�u�� do tego funkcje gg_pubdir50_*()
566 typedef struct gg_pubdir50_s *gg_pubdir50_t;
571 * struktura opisuj�ca rodzaj zdarzenia. wychodzi z gg_watch_fd() lub
572 * z gg_dcc_watch_fd()
575 int type; /* rodzaj zdarzenia -- gg_event_t */
577 struct gg_notify_reply *notify; /* informacje o li�cie kontakt�- GG_EVENT_NOTIFY */
579 enum gg_failure_t failure; /* b��d po��czenia -- GG_EVENT_FAILURE */
581 struct gg_dcc *dcc_new; /* nowe po��czenie bezpo�rednie -- GG_EVENT_DCC_NEW */
583 int dcc_error; /* b��d po��czenia bezpo�redniego -- GG_EVENT_DCC_ERROR */
585 gg_pubdir50_t pubdir50; /* wynik operacji zwi�zanej z katalogiem publicznym -- GG_EVENT_PUBDIR50_* */
587 struct { /* @msg odebrano wiadomo��- GG_EVENT_MSG */
588 uin_t sender; /* numer nadawcy */
589 int msgclass; /* klasa wiadomo�ci */
590 time_t time; /* czas nadania */
591 unsigned char *message; /* tre��iadomo�ci */
593 int recipients_count; /* ilo��dbiorc�onferencji */
594 uin_t *recipients; /* odbiorcy konferencji */
596 int formats_length; /* d�ugo��nformacji o formatowaniu tekstu */
597 void *formats; /* informacje o formatowaniu tekstu */
600 struct { /* @notify_descr informacje o li�cie kontakt� opisami stanu -- GG_EVENT_NOTIFY_DESCR */
601 struct gg_notify_reply *notify; /* informacje o li�cie kontakt�/
602 char *descr; /* opis stanu */
605 struct { /* @status zmiana stanu -- GG_EVENT_STATUS */
606 uin_t uin; /* numer */
607 uint32_t status; /* nowy stan */
608 char *descr; /* opis stanu */
611 struct { /* @status60 zmiana stanu -- GG_EVENT_STATUS60 */
612 uin_t uin; /* numer */
613 int status; /* nowy stan */
614 uint32_t remote_ip; /* adres ip */
615 uint16_t remote_port; /* port */
616 int version; /* wersja klienta */
617 int image_size; /* maksymalny rozmiar grafiki w KiB */
618 char *descr; /* opis stanu */
619 time_t time; /* czas powrotu */
622 struct { /* @notify60 informacja o li�cie kontakt�- GG_EVENT_NOTIFY60 */
623 uin_t uin; /* numer */
624 int status; /* stan */
625 uint32_t remote_ip; /* adres ip */
626 uint16_t remote_port; /* port */
627 int version; /* wersja klienta */
628 int image_size; /* maksymalny rozmiar grafiki w KiB */
629 char *descr; /* opis stanu */
630 time_t time; /* czas powrotu */
633 struct { /* @ack potwierdzenie wiadomo�ci -- GG_EVENT_ACK */
634 uin_t recipient; /* numer odbiorcy */
635 int status; /* stan dor�enia wiadomo�ci */
636 int seq; /* numer sekwencyjny wiadomo�ci */
639 struct { /* @dcc_voice_data otrzymano dane d�wi�we -- GG_EVENT_DCC_VOICE_DATA */
640 uint8_t *data; /* dane d�wi�we */
641 int length; /* ilo��anych d�wi�wych */
644 struct { /* @userlist odpowied� listy kontakt�erwera */
645 char type; /* rodzaj odpowiedzi */
646 char *reply; /* tre��dpowiedzi */
649 struct { /* @image_request pro�ba o obrazek */
650 uin_t sender; /* nadawca pro�by */
651 uint32_t size; /* rozmiar obrazka */
652 uint32_t crc32; /* suma kontrolna */
655 struct { /* @image_reply odpowied� z obrazkiem */
656 uin_t sender; /* nadawca odpowiedzi */
657 uint32_t size; /* rozmiar obrazka */
658 uint32_t crc32; /* suma kontrolna */
659 char *filename; /* nazwa pliku */
660 char *image; /* bufor z obrazkiem */
665 struct gg_event *gg_watch_fd(struct gg_session *sess);
666 void gg_event_free(struct gg_event *e);
667 #define gg_free_event gg_event_free
670 * funkcje obs�ugi listy kontakt� */
671 int gg_notify_ex(struct gg_session *sess, uin_t *userlist, char *types, int count);
672 int gg_notify(struct gg_session *sess, uin_t *userlist, int count);
673 int gg_add_notify_ex(struct gg_session *sess, uin_t uin, char type);
674 int gg_add_notify(struct gg_session *sess, uin_t uin);
675 int gg_remove_notify_ex(struct gg_session *sess, uin_t uin, char type);
676 int gg_remove_notify(struct gg_session *sess, uin_t uin);
679 * funkcje obs�ugi http.
681 struct gg_http *gg_http_connect(const char *hostname, int port, int async, const char *method, const char *path, const char *header);
682 int gg_http_watch_fd(struct gg_http *h);
683 void gg_http_stop(struct gg_http *h);
684 void gg_http_free(struct gg_http *h);
685 void gg_http_free_fields(struct gg_http *h);
686 #define gg_free_http gg_http_free
689 * struktury opisuj�ca kryteria wyszukiwania dla gg_search(). nieaktualne,
690 * zast�pione przez gg_pubdir50_t. pozostawiono je dla zachowania ABI.
692 struct gg_search_request {
709 struct gg_search_result *results;
712 struct gg_search_result {
723 #define GG_GENDER_NONE 0
724 #define GG_GENDER_FEMALE 1
725 #define GG_GENDER_MALE 2
728 * funkcje wyszukiwania.
730 struct gg_http *gg_search(const struct gg_search_request *r, int async);
731 int gg_search_watch_fd(struct gg_http *f);
732 void gg_free_search(struct gg_http *f);
733 #define gg_search_free gg_free_search
735 const struct gg_search_request *gg_search_request_mode_0(char *nickname, char *first_name, char *last_name, char *city, int gender, int min_birth, int max_birth, int active, int start);
736 const struct gg_search_request *gg_search_request_mode_1(char *email, int active, int start);
737 const struct gg_search_request *gg_search_request_mode_2(char *phone, int active, int start);
738 const struct gg_search_request *gg_search_request_mode_3(uin_t uin, int active, int start);
739 void gg_search_request_free(struct gg_search_request *r);
742 * funkcje obs�ugi katalogu publicznego zgodne z GG 5.0. tym razem funkcje
743 * zachowuj� pewien poziom abstrakcji, �eby unikn��mian ABI przy zmianach
746 * NIE NALE�Y SI�ODWO�YWA�DO P� gg_pubdir50_t BEZPO�REDNIO!
748 uint32_t gg_pubdir50(struct gg_session *sess, gg_pubdir50_t req);
749 gg_pubdir50_t gg_pubdir50_new(int type);
750 int gg_pubdir50_add(gg_pubdir50_t req, const char *field, const char *value);
751 int gg_pubdir50_seq_set(gg_pubdir50_t req, uint32_t seq);
752 const char *gg_pubdir50_get(gg_pubdir50_t res, int num, const char *field);
753 int gg_pubdir50_type(gg_pubdir50_t res);
754 int gg_pubdir50_count(gg_pubdir50_t res);
755 uin_t gg_pubdir50_next(gg_pubdir50_t res);
756 uint32_t gg_pubdir50_seq(gg_pubdir50_t res);
757 void gg_pubdir50_free(gg_pubdir50_t res);
759 #define GG_PUBDIR50_UIN "FmNumber"
760 #define GG_PUBDIR50_STATUS "FmStatus"
761 #define GG_PUBDIR50_FIRSTNAME "firstname"
762 #define GG_PUBDIR50_LASTNAME "lastname"
763 #define GG_PUBDIR50_NICKNAME "nickname"
764 #define GG_PUBDIR50_BIRTHYEAR "birthyear"
765 #define GG_PUBDIR50_CITY "city"
766 #define GG_PUBDIR50_GENDER "gender"
767 #define GG_PUBDIR50_GENDER_FEMALE "1"
768 #define GG_PUBDIR50_GENDER_MALE "2"
769 #define GG_PUBDIR50_GENDER_SET_FEMALE "2"
770 #define GG_PUBDIR50_GENDER_SET_MALE "1"
771 #define GG_PUBDIR50_ACTIVE "ActiveOnly"
772 #define GG_PUBDIR50_ACTIVE_TRUE "1"
773 #define GG_PUBDIR50_START "fmstart"
774 #define GG_PUBDIR50_FAMILYNAME "familyname"
775 #define GG_PUBDIR50_FAMILYCITY "familycity"
777 int gg_pubdir50_handle_reply(struct gg_event *e, const char *packet, int length);
782 * operacje na katalogu publicznym.
785 int success; /* czy si�da�o */
786 uin_t uin; /* otrzymany numerek. 0 je�li b��d */
789 /* og� funkcje, nie powinny by��ywane */
790 int gg_pubdir_watch_fd(struct gg_http *f);
791 void gg_pubdir_free(struct gg_http *f);
792 #define gg_free_pubdir gg_pubdir_free
795 int width; /* szeroko��brazka */
796 int height; /* wysoko��brazka */
797 int length; /* ilo��nak� tokenie */
798 char *tokenid; /* id tokenu */
801 /* funkcje dotycz�ce token�/
802 struct gg_http *gg_token(int async);
803 int gg_token_watch_fd(struct gg_http *h);
804 void gg_token_free(struct gg_http *h);
806 /* rejestracja nowego numerka */
807 struct gg_http *gg_register(const char *email, const char *password, int async);
808 struct gg_http *gg_register2(const char *email, const char *password, const char *qa, int async);
809 struct gg_http *gg_register3(const char *email, const char *password, const char *tokenid, const char *tokenval, int async);
810 #define gg_register_watch_fd gg_pubdir_watch_fd
811 #define gg_register_free gg_pubdir_free
812 #define gg_free_register gg_pubdir_free
814 struct gg_http *gg_unregister(uin_t uin, const char *password, const char *email, int async);
815 struct gg_http *gg_unregister2(uin_t uin, const char *password, const char *qa, int async);
816 struct gg_http *gg_unregister3(uin_t uin, const char *password, const char *tokenid, const char *tokenval, int async);
817 #define gg_unregister_watch_fd gg_pubdir_watch_fd
818 #define gg_unregister_free gg_pubdir_free
820 /* przypomnienie has�a e-mailem */
821 struct gg_http *gg_remind_passwd(uin_t uin, int async);
822 struct gg_http *gg_remind_passwd2(uin_t uin, const char *tokenid, const char *tokenval, int async);
823 struct gg_http *gg_remind_passwd3(uin_t uin, const char *email, const char *tokenid, const char *tokenval, int async);
824 #define gg_remind_passwd_watch_fd gg_pubdir_watch_fd
825 #define gg_remind_passwd_free gg_pubdir_free
826 #define gg_free_remind_passwd gg_pubdir_free
829 struct gg_http *gg_change_passwd(uin_t uin, const char *passwd, const char *newpasswd, const char *newemail, int async);
830 struct gg_http *gg_change_passwd2(uin_t uin, const char *passwd, const char *newpasswd, const char *email, const char *newemail, int async);
831 struct gg_http *gg_change_passwd3(uin_t uin, const char *passwd, const char *newpasswd, const char *qa, int async);
832 struct gg_http *gg_change_passwd4(uin_t uin, const char *email, const char *passwd, const char *newpasswd, const char *tokenid, const char *tokenval, int async);
833 #define gg_change_passwd_free gg_pubdir_free
834 #define gg_free_change_passwd gg_pubdir_free
837 * struct gg_change_info_request
839 * opis ��dania zmiany informacji w katalogu publicznym.
841 struct gg_change_info_request {
842 char *first_name; /* imi�/
843 char *last_name; /* nazwisko */
844 char *nickname; /* pseudonim */
845 char *email; /* email */
846 int born; /* rok urodzenia */
848 char *city; /* miasto */
851 struct gg_change_info_request *gg_change_info_request_new(const char *first_name, const char *last_name, const char *nickname, const char *email, int born, int gender, const char *city);
852 void gg_change_info_request_free(struct gg_change_info_request *r);
854 struct gg_http *gg_change_info(uin_t uin, const char *passwd, const struct gg_change_info_request *request, int async);
855 #define gg_change_pubdir_watch_fd gg_pubdir_watch_fd
856 #define gg_change_pubdir_free gg_pubdir_free
857 #define gg_free_change_pubdir gg_pubdir_free
860 * funkcje dotycz�ce listy kontakt�a serwerze.
862 struct gg_http *gg_userlist_get(uin_t uin, const char *password, int async);
863 int gg_userlist_get_watch_fd(struct gg_http *f);
864 void gg_userlist_get_free(struct gg_http *f);
866 struct gg_http *gg_userlist_put(uin_t uin, const char *password, const char *contacts, int async);
867 int gg_userlist_put_watch_fd(struct gg_http *f);
868 void gg_userlist_put_free(struct gg_http *f);
870 struct gg_http *gg_userlist_remove(uin_t uin, const char *password, int async);
871 int gg_userlist_remove_watch_fd(struct gg_http *f);
872 void gg_userlist_remove_free(struct gg_http *f);
877 * funkcje dotycz�ce komunikacji mi�y klientami.
879 extern int gg_dcc_port; /* port, na kt� nas�uchuje klient */
880 extern unsigned long gg_dcc_ip; /* adres, na kt� nas�uchuje klient */
882 int gg_dcc_request(struct gg_session *sess, uin_t uin);
884 struct gg_dcc *gg_dcc_send_file(uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin);
885 struct gg_dcc *gg_dcc_get_file(uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin);
886 struct gg_dcc *gg_dcc_voice_chat(uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin);
887 void gg_dcc_set_type(struct gg_dcc *d, int type);
888 int gg_dcc_fill_file_info(struct gg_dcc *d, const char *filename);
889 int gg_dcc_fill_file_info2(struct gg_dcc *d, const char *filename, const char *local_filename);
890 int gg_dcc_voice_send(struct gg_dcc *d, char *buf, int length);
892 #define GG_DCC_VOICE_FRAME_LENGTH 195
893 #define GG_DCC_VOICE_FRAME_LENGTH_505 326
895 struct gg_dcc *gg_dcc_socket_create(uin_t uin, uint16_t port);
896 #define gg_dcc_socket_free gg_free_dcc
897 #define gg_dcc_socket_watch_fd gg_dcc_watch_fd
899 struct gg_event *gg_dcc_watch_fd(struct gg_dcc *d);
901 void gg_dcc_free(struct gg_dcc *c);
902 #define gg_free_dcc gg_dcc_free
905 * je�li chcemy sobie podebugowa�wystarczy ustawi�gg_debug_level'.
906 * niestety w miar�rzybywania wpis�gg_debug(...)' nie chcia�o mi
907 * si�stawia�dpowiednich leveli, wi�wi�zo��z�a do _MISC.
909 extern int gg_debug_level; /* poziom debugowania. mapa bitowa sta�ych GG_DEBUG_* */
912 * mo�na poda�ska�nik do funkcji obs�uguj�cej wywo�ania gg_debug().
913 * nieoficjalne, nieudokumentowane, mo�e si�mieni�je�li kto� jest
914 * zainteresowany, niech da zna�a ekg-devel.
916 extern void (*gg_debug_handler)(int level, const char *format, va_list ap);
917 extern void (*gg_debug_handler_session)(struct gg_session *sess, int level, const char *format, va_list ap);
920 * mo�na poda�lik, do kt�o b� zapisywane teksty z gg_debug().
922 extern FILE *gg_debug_file;
924 #define GG_DEBUG_NET 1
925 #define GG_DEBUG_TRAFFIC 2
926 #define GG_DEBUG_DUMP 4
927 #define GG_DEBUG_FUNCTION 8
928 #define GG_DEBUG_MISC 16
930 #ifdef GG_DEBUG_DISABLE
931 #define gg_debug(x, y...) do { } while(0)
932 #define gg_debug_session(z, x, y...) do { } while(0)
934 void gg_debug(int level, const char *format, ...);
935 void gg_debug_session(struct gg_session *sess, int level, const char *format, ...);
938 const char *gg_libgadu_version(void);
941 * konfiguracja http proxy.
943 extern int gg_proxy_enabled; /* w��cza obs�ug�roxy */
944 extern char *gg_proxy_host; /* okre�la adres serwera proxy */
945 extern int gg_proxy_port; /* okre�la port serwera proxy */
946 extern char *gg_proxy_username; /* okre�la nazw��ytkownika przy autoryzacji serwera proxy */
947 extern char *gg_proxy_password; /* okre�la has�o u�ytkownika przy autoryzacji serwera proxy */
948 extern int gg_proxy_http_only; /* w��cza obs�ug�roxy wy��cznie dla us�ug HTTP */
952 * adres, z kt�o �lemy pakiety (np ��czymy si� serwerem)
953 * u�ywany przy gg_connect()
955 extern unsigned long gg_local_ip;
957 * -------------------------------------------------------------------------
958 * poni�ej znajduj� si�ewn�zne sprawy biblioteki. zwyk�y klient nie
959 * powinien ich w og�rusza�bo i nie ma po co. wszystko mo�na za�atwi�* procedurami wy�szego poziomu, kt�h definicje znajduj� si�a pocz�tku
961 * -------------------------------------------------------------------------
964 #ifdef GG_CONFIG_HAVE_PTHREAD
965 int gg_resolve_pthread(int *fd, void **resolver, const char *hostname);
966 void gg_resolve_pthread_cleanup(void *resolver, int kill);
970 int gg_thread_socket(int thread_id, int socket);
973 int gg_resolve(int *fd, int *pid, const char *hostname);
976 char *gg_saprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
978 char *gg_saprintf(const char *format, ...);
981 char *gg_vsaprintf(const char *format, va_list ap);
983 #define gg_alloc_sprintf gg_saprintf
985 char *gg_get_line(char **ptr);
987 int gg_connect(void *addr, int port, int async);
988 struct in_addr *gg_gethostbyname(const char *hostname);
989 char *gg_read_line(int sock, char *buf, int length);
990 void gg_chomp(char *line);
991 char *gg_urlencode(const char *str);
992 int gg_http_hash(const char *format, ...);
993 int gg_read(struct gg_session *sess, char *buf, int length);
994 int gg_write(struct gg_session *sess, const char *buf, int length);
995 void *gg_recv_packet(struct gg_session *sess);
996 int gg_send_packet(struct gg_session *sess, int type, ...);
997 unsigned int gg_login_hash(const unsigned char *password, unsigned int seed);
998 uint32_t gg_fix32(uint32_t x);
999 uint16_t gg_fix16(uint16_t x);
1000 #define fix16 gg_fix16
1001 #define fix32 gg_fix32
1002 char *gg_proxy_auth(void);
1003 char *gg_base64_encode(const char *buf);
1004 char *gg_base64_decode(const char *buf);
1005 int gg_image_queue_remove(struct gg_session *s, struct gg_image_queue *q, int freeq);
1007 #define GG_APPMSG_HOST "appmsg.gadu-gadu.pl"
1008 #define GG_APPMSG_PORT 80
1009 #define GG_PUBDIR_HOST "pubdir.gadu-gadu.pl"
1010 #define GG_PUBDIR_PORT 80
1011 #define GG_REGISTER_HOST "register.gadu-gadu.pl"
1012 #define GG_REGISTER_PORT 80
1013 #define GG_REMIND_HOST "retr.gadu-gadu.pl"
1014 #define GG_REMIND_PORT 80
1016 #define GG_DEFAULT_PORT 8074
1017 #define GG_HTTPS_PORT 443
1018 #define GG_HTTP_USERAGENT "Mozilla/4.7 [en] (Win98; I)"
1020 #define GG_DEFAULT_CLIENT_VERSION "6, 1, 0, 158"
1021 #define GG_DEFAULT_PROTOCOL_VERSION 0x24
1022 #define GG_DEFAULT_TIMEOUT 30
1023 #define GG_HAS_AUDIO_MASK 0x40000000
1024 #define GG_ERA_OMNIX_MASK 0x04000000
1025 #define GG_LIBGADU_VERSION "CVS"
1027 #define GG_DEFAULT_DCC_PORT 1550
1030 uint32_t type; /* typ pakietu */
1031 uint32_t length; /* d�ugo��eszty pakietu */
1034 #define GG_WELCOME 0x0001
1035 #define GG_NEED_EMAIL 0x0014
1038 uint32_t key; /* klucz szyfrowania has�a */
1041 #define GG_LOGIN 0x000c
1044 uint32_t uin; /* m�umerek */
1045 uint32_t hash; /* hash has�a */
1046 uint32_t status; /* status na dzie�bry */
1047 uint32_t version; /* moja wersja klienta */
1048 uint32_t local_ip; /* m�dres ip */
1049 uint16_t local_port; /* port, na kt� s�ucham */
1052 #define GG_LOGIN_EXT 0x0013
1054 struct gg_login_ext {
1055 uint32_t uin; /* m�umerek */
1056 uint32_t hash; /* hash has�a */
1057 uint32_t status; /* status na dzie�bry */
1058 uint32_t version; /* moja wersja klienta */
1059 uint32_t local_ip; /* m�dres ip */
1060 uint16_t local_port; /* port, na kt� s�ucham */
1061 uint32_t external_ip; /* zewn�zny adres ip */
1062 uint16_t external_port; /* zewn�zny port */
1065 #define GG_LOGIN60 0x0015
1068 uint32_t uin; /* m�umerek */
1069 uint32_t hash; /* hash has�a */
1070 uint32_t status; /* status na dzie�bry */
1071 uint32_t version; /* moja wersja klienta */
1072 uint8_t dunno1; /* 0x00 */
1073 uint32_t local_ip; /* m�dres ip */
1074 uint16_t local_port; /* port, na kt� s�ucham */
1075 uint32_t external_ip; /* zewn�zny adres ip */
1076 uint16_t external_port; /* zewn�zny port */
1077 uint8_t image_size; /* maksymalny rozmiar grafiki w KiB */
1078 uint8_t dunno2; /* 0xbe */
1081 #define GG_LOGIN_OK 0x0003
1083 #define GG_LOGIN_FAILED 0x0009
1085 #define GG_PUBDIR50_REQUEST 0x0014
1087 #define GG_PUBDIR50_WRITE 0x01
1088 #define GG_PUBDIR50_READ 0x02
1089 #define GG_PUBDIR50_SEARCH 0x03
1090 #define GG_PUBDIR50_SEARCH_REQUEST GG_PUBDIR50_SEARCH
1091 #define GG_PUBDIR50_SEARCH_REPLY 0x05
1093 struct gg_pubdir50_request {
1094 uint8_t type; /* GG_PUBDIR50_* */
1095 uint32_t seq; /* czas wys�ania zapytania */
1098 #define GG_PUBDIR50_REPLY 0x000e
1100 struct gg_pubdir50_reply {
1101 uint8_t type; /* GG_PUBDIR50_* */
1102 uint32_t seq; /* czas wys�ania zapytania */
1105 #define GG_NEW_STATUS 0x0002
1107 #define GG_STATUS_NOT_AVAIL 0x0001 /* niedost�y */
1108 #define GG_STATUS_NOT_AVAIL_DESCR 0x0015 /* niedost�y z opisem (4.8) */
1109 #define GG_STATUS_AVAIL 0x0002 /* dost�y */
1110 #define GG_STATUS_AVAIL_DESCR 0x0004 /* dost�y z opisem (4.9) */
1111 #define GG_STATUS_BUSY 0x0003 /* zaj� */
1112 #define GG_STATUS_BUSY_DESCR 0x0005 /* zaj� z opisem (4.8) */
1113 #define GG_STATUS_INVISIBLE 0x0014 /* niewidoczny (4.6) */
1114 #define GG_STATUS_INVISIBLE_DESCR 0x0016 /* niewidoczny z opisem (4.9) */
1115 #define GG_STATUS_BLOCKED 0x0006 /* zablokowany */
1117 #define GG_STATUS_FRIENDS_MASK 0x8000 /* tylko dla znajomych (4.6) */
1119 #define GG_STATUS_DESCR_MAXSIZE 70
1122 * makra do �atwego i szybkiego sprawdzania stanu.
1125 /* GG_S_F() tryb tylko dla znajomych */
1126 #define GG_S_F(x) (((x) & GG_STATUS_FRIENDS_MASK) != 0)
1128 /* GG_S() stan bez uwzgl�ienia trybu tylko dla znajomych */
1129 #define GG_S(x) ((x) & ~GG_STATUS_FRIENDS_MASK)
1131 /* GG_S_A() dost�y */
1132 #define GG_S_A(x) (GG_S(x) == GG_STATUS_AVAIL || GG_S(x) == GG_STATUS_AVAIL_DESCR)
1134 /* GG_S_NA() niedost�y */
1135 #define GG_S_NA(x) (GG_S(x) == GG_STATUS_NOT_AVAIL || GG_S(x) == GG_STATUS_NOT_AVAIL_DESCR)
1138 #define GG_S_B(x) (GG_S(x) == GG_STATUS_BUSY || GG_S(x) == GG_STATUS_BUSY_DESCR)
1140 /* GG_S_I() niewidoczny */
1141 #define GG_S_I(x) (GG_S(x) == GG_STATUS_INVISIBLE || GG_S(x) == GG_STATUS_INVISIBLE_DESCR)
1143 /* GG_S_D() stan opisowy */
1144 #define GG_S_D(x) (GG_S(x) == GG_STATUS_NOT_AVAIL_DESCR || GG_S(x) == GG_STATUS_AVAIL_DESCR || GG_S(x) == GG_STATUS_BUSY_DESCR || GG_S(x) == GG_STATUS_INVISIBLE_DESCR)
1146 /* GG_S_BL() blokowany lub blokuj�cy */
1147 #define GG_S_BL(x) (GG_S(x) == GG_STATUS_BLOCKED)
1149 struct gg_new_status {
1150 uint32_t status; /* na jaki zmieni�*/
1153 #define GG_NOTIFY_FIRST 0x000f
1154 #define GG_NOTIFY_LAST 0x0010
1156 #define GG_NOTIFY 0x0010
1159 uint32_t uin; /* numerek danej osoby */
1160 uint8_t dunno1; /* rodzaj wpisu w li�cie */
1163 #define GG_USER_OFFLINE 0x01 /* b�iemy niewidoczni dla u�ytkownika */
1164 #define GG_USER_NORMAL 0x03 /* zwyk�y u�ytkownik */
1165 #define GG_USER_BLOCKED 0x04 /* zablokowany u�ytkownik */
1167 #define GG_LIST_EMPTY 0x0012
1169 #define GG_NOTIFY_REPLY 0x000c /* tak, to samo co GG_LOGIN */
1171 struct gg_notify_reply {
1172 uint32_t uin; /* numerek */
1173 uint32_t status; /* status danej osoby */
1174 uint32_t remote_ip; /* adres ip delikwenta */
1175 uint16_t remote_port; /* port, na kt� s�ucha klient */
1176 uint32_t version; /* wersja klienta */
1177 uint16_t dunno2; /* znowu port? */
1180 #define GG_NOTIFY_REPLY60 0x0011
1182 struct gg_notify_reply60 {
1183 uint32_t uin; /* numerek plus flagi w MSB */
1184 uint8_t status; /* status danej osoby */
1185 uint32_t remote_ip; /* adres ip delikwenta */
1186 uint16_t remote_port; /* port, na kt� s�ucha klient */
1187 uint8_t version; /* wersja klienta */
1188 uint8_t image_size; /* maksymalny rozmiar grafiki w KiB */
1189 uint8_t dunno1; /* 0x00 */
1192 #define GG_STATUS60 0x000f
1194 struct gg_status60 {
1195 uint32_t uin; /* numerek plus flagi w MSB */
1196 uint8_t status; /* status danej osoby */
1197 uint32_t remote_ip; /* adres ip delikwenta */
1198 uint16_t remote_port; /* port, na kt� s�ucha klient */
1199 uint8_t version; /* wersja klienta */
1200 uint8_t image_size; /* maksymalny rozmiar grafiki w KiB */
1201 uint8_t dunno1; /* 0x00 */
1204 #define GG_ADD_NOTIFY 0x000d
1205 #define GG_REMOVE_NOTIFY 0x000e
1207 struct gg_add_remove {
1208 uint32_t uin; /* numerek */
1209 uint8_t dunno1; /* bitmapa */
1212 #define GG_STATUS 0x0002
1215 uint32_t uin; /* numerek */
1216 uint32_t status; /* nowy stan */
1219 #define GG_SEND_MSG 0x000b
1221 #define GG_CLASS_QUEUED 0x0001
1222 #define GG_CLASS_OFFLINE GG_CLASS_QUEUED
1223 #define GG_CLASS_MSG 0x0004
1224 #define GG_CLASS_CHAT 0x0008
1225 #define GG_CLASS_CTCP 0x0010
1226 #define GG_CLASS_ACK 0x0020
1227 #define GG_CLASS_EXT GG_CLASS_ACK /* kompatybilno��stecz */
1229 #define GG_MSG_MAXSIZE 2000
1231 struct gg_send_msg {
1237 struct gg_msg_richtext {
1242 struct gg_msg_richtext_format {
1247 struct gg_msg_richtext_image {
1253 #define GG_FONT_BOLD 0x01
1254 #define GG_FONT_ITALIC 0x02
1255 #define GG_FONT_UNDERLINE 0x04
1256 #define GG_FONT_COLOR 0x08
1257 #define GG_FONT_IMAGE 0x80
1259 struct gg_msg_richtext_color {
1265 struct gg_msg_recipients {
1270 struct gg_msg_image_request {
1276 struct gg_msg_image_reply {
1280 /* char filename[]; */
1284 #define GG_SEND_MSG_ACK 0x0005
1286 #define GG_ACK_BLOCKED 0x0001
1287 #define GG_ACK_DELIVERED 0x0002
1288 #define GG_ACK_QUEUED 0x0003
1289 #define GG_ACK_MBOXFULL 0x0004
1290 #define GG_ACK_NOT_DELIVERED 0x0006
1292 struct gg_send_msg_ack {
1298 #define GG_RECV_MSG 0x000a
1300 struct gg_recv_msg {
1307 #define GG_PING 0x0008
1309 #define GG_PONG 0x0007
1311 #define GG_DISCONNECTING 0x000b
1313 #define GG_USERLIST_REQUEST 0x0016
1315 #define GG_USERLIST_PUT 0x00
1316 #define GG_USERLIST_PUT_MORE 0x01
1317 #define GG_USERLIST_GET 0x02
1319 struct gg_userlist_request {
1323 #define GG_USERLIST_REPLY 0x0010
1325 #define GG_USERLIST_PUT_REPLY 0x00
1326 #define GG_USERLIST_PUT_MORE_REPLY 0x02
1327 #define GG_USERLIST_GET_REPLY 0x06
1328 #define GG_USERLIST_GET_MORE_REPLY 0x04
1330 struct gg_userlist_reply {
1335 * pakiety, sta�e, struktury dla DCC
1338 struct gg_dcc_tiny_packet {
1339 uint8_t type; /* rodzaj pakietu */
1342 struct gg_dcc_small_packet {
1343 uint32_t type; /* rodzaj pakietu */
1346 struct gg_dcc_big_packet {
1347 uint32_t type; /* rodzaj pakietu */
1348 uint32_t dunno1; /* niewiadoma */
1349 uint32_t dunno2; /* niewiadoma */
1353 * p�co, nie znamy dok�adnie protoko�u. nie wiemy, co czemu odpowiada.
1354 * nazwy s� niepowa�ne i tymczasowe.
1356 #define GG_DCC_WANT_FILE 0x0003 /* peer chce plik */
1357 #define GG_DCC_HAVE_FILE 0x0001 /* wi�mu damy */
1358 #define GG_DCC_HAVE_FILEINFO 0x0003 /* niech ma informacje o pliku */
1359 #define GG_DCC_GIMME_FILE 0x0006 /* peer jest pewny */
1360 #define GG_DCC_CATCH_FILE 0x0002 /* wysy�amy plik */
1362 #define GG_DCC_FILEATTR_READONLY 0x0020
1364 #define GG_DCC_TIMEOUT_SEND 1800 /* 30 minut */
1365 #define GG_DCC_TIMEOUT_GET 1800 /* 30 minut */
1366 #define GG_DCC_TIMEOUT_FILE_ACK 300 /* 5 minut */
1367 #define GG_DCC_TIMEOUT_VOICE_ACK 300 /* 5 minut */
1376 #endif /* __GG_LIBGADU_H */
1380 * c-indentation-style: k&r
1382 * indent-tabs-mode: notnil
1385 * vim: shiftwidth=8: