libgadu.h   libgadu.h 
/* include/libgadu.h. Generated from libgadu.h.in by configure. */ /* include/libgadu.h. Generated from libgadu.h.in by configure. */
/* $Id$ */ /* $Id$ */
/* /*
* (C) Copyright 2001-2003 Wojtek Kaniewski <wojtekka@irc.pl> * (C) Copyright 2001-2009 Wojtek Kaniewski <wojtekka@irc.pl>
* Robert J. Woźny <speedy@ziew.org> * Robert J. Woźny <speedy@ziew.org>
* Arkadiusz Miśkiewicz <arekm@pld-linux.org> * Arkadiusz Miśkiewicz <arekm@pld-linux.org>
* Tomasz Chiliński <chilek@chilan.com> * Tomasz Chiliński <chilek@chilan.com>
* Piotr Wysocki <wysek@linux.bydg.org> * Piotr Wysocki <wysek@linux.bydg.org>
* Dawid Jarosz <dawjar@poczta.onet.pl> * Dawid Jarosz <dawjar@poczta.onet.pl>
* Jakub Zawadzki <darkjames@darkjames.ath.cx>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License Version * it under the terms of the GNU Lesser General Public License Version
* 2.1 as published by the Free Software Foundation. * 2.1 as published by the Free Software Foundation.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details. * GNU Lesser General Public License for more details.
* *
skipping to change at line 56 skipping to change at line 57
/** \cond ignore */ /** \cond ignore */
/* Defined if libgadu was compiled for bigendian machine. */ /* Defined if libgadu was compiled for bigendian machine. */
/* #undef GG_CONFIG_BIGENDIAN */ /* #undef GG_CONFIG_BIGENDIAN */
/* Defined if this machine has gethostbyname_r(). */ /* Defined if this machine has gethostbyname_r(). */
#define GG_CONFIG_HAVE_GETHOSTBYNAME_R /**/ #define GG_CONFIG_HAVE_GETHOSTBYNAME_R /**/
/* Defined if libgadu was compiled and linked with pthread support. */ /* Defined if libgadu was compiled and linked with pthread support. */
/* #undef GG_CONFIG_HAVE_PTHREAD */ #define GG_CONFIG_HAVE_PTHREAD /**/
/* Defined if pthread resolver is the default one. */
/* #undef GG_CONFIG_PTHREAD_DEFAULT */
/* Defined if this machine has C99-compiliant vsnprintf(). */ /* Defined if this machine has C99-compiliant vsnprintf(). */
#define GG_CONFIG_HAVE_C99_VSNPRINTF /**/ #define GG_CONFIG_HAVE_C99_VSNPRINTF /**/
/* Defined if this machine has va_copy(). */ /* Defined if this machine has va_copy(). */
#define GG_CONFIG_HAVE_VA_COPY /**/ #define GG_CONFIG_HAVE_VA_COPY /**/
/* Defined if this machine has __va_copy(). */ /* Defined if this machine has __va_copy(). */
#define GG_CONFIG_HAVE___VA_COPY /**/ #define GG_CONFIG_HAVE___VA_COPY /**/
skipping to change at line 173 skipping to change at line 177
*/ */
struct gg_common { struct gg_common {
gg_common_head(struct gg_common) gg_common_head(struct gg_common)
}; };
struct gg_image_queue; struct gg_image_queue;
struct gg_dcc7; struct gg_dcc7;
/** /**
* Sposób rozwiązywania nazw serwerów.
*/
typedef enum {
GG_RESOLVER_DEFAULT = 0, /**< Domyślny sposób rozwiązywania n
azw (jeden z poniższych) */
GG_RESOLVER_FORK, /**< Rozwiązywanie nazw bazujące na
procesach */
GG_RESOLVER_PTHREAD, /**< Rozwiązywanie nazw bazujące na
wątkach */
GG_RESOLVER_CUSTOM, /**< Funkcje rozwiązywania nazw dost
arczone przed aplikację */
GG_RESOLVER_INVALID = -1 /**< Nieprawidłowy sposób rozwiązywa
nia nazw (wynik \c gg_session_get_resolver) */
} gg_resolver_t;
/**
* Rodzaj kodowania znaków.
*/
typedef enum {
GG_ENCODING_CP1250 = 0, /**< Kodowanie CP1250 */
GG_ENCODING_UTF8, /**< Kodowanie UTF-8 */
GG_ENCODING_INVALID = -1 /**< Nieprawidłowe kodowanie */
} gg_encoding_t;
/**
* Sesja Gadu-Gadu. * Sesja Gadu-Gadu.
* *
* Tworzona przez funkcję \c gg_login(), zwalniana przez \c gg_free_session (). * Tworzona przez funkcję \c gg_login(), zwalniana przez \c gg_free_session ().
* *
* \ingroup login * \ingroup login
*/ */
struct gg_session { struct gg_session {
gg_common_head(struct gg_session) gg_common_head(struct gg_session)
int async; /**< Flaga połączenia asynchronicznego */ int async; /**< Flaga połączenia asynchronicznego */
skipping to change at line 213 skipping to change at line 237
uin_t uin; /**< Własny numer Gadu-Gadu */ uin_t uin; /**< Własny numer Gadu-Gadu */
char *password; /**< Hasło (zwalniane po użyciu) */ char *password; /**< Hasło (zwalniane po użyciu) */
int initial_status; /**< Początkowy status */ int initial_status; /**< Początkowy status */
int status; /**< Aktualny status */ int status; /**< Aktualny status */
char *recv_buf; /**< Bufor na odbierany pakiety */ char *recv_buf; /**< Bufor na odbierany pakiety */
int recv_done; /**< Liczba wczytanych bajtów pakietu */ int recv_done; /**< Liczba wczytanych bajtów pakietu */
int recv_left; /**< Liczba pozostałych do wczytania bajtów pakietu */ int recv_left; /**< Liczba pozostałych do wczytania bajtów pakietu */
int protocol_version; /**< Wersja protokołu */ int protocol_version; /**< Wersja protokołu (bez flag) */
char *client_version; /**< Wersja klienta */ char *client_version; /**< Wersja klienta */
int last_sysmsg; /**< Numer ostatniej wiadomości systemowej * / int last_sysmsg; /**< Numer ostatniej wiadomości systemowej * /
char *initial_descr; /**< Początkowy opis statusu */ char *initial_descr; /**< Początkowy opis statusu */
void *resolver; /**< Dane prywatne procesu lub wątku rozwiąz ującego nazwę serwera */ void *resolver; /**< Dane prywatne procesu lub wątku rozwiąz ującego nazwę serwera */
char *header_buf; /**< Bufor na początek nagłówka pakietu */ char *header_buf; /**< Bufor na początek nagłówka pakietu */
unsigned int header_done; /**< Liczba wczytanych bajtów nagłów ka pakietu */ unsigned int header_done; /**< Liczba wczytanych bajtów nagłów ka pakietu */
skipping to change at line 240 skipping to change at line 264
#endif #endif
int image_size; /**< Maksymalny rozmiar obsługiwanych obrazk ów w KiB */ int image_size; /**< Maksymalny rozmiar obsługiwanych obrazk ów w KiB */
char *userlist_reply; /**< Bufor z odbieraną listą kontaktów */ char *userlist_reply; /**< Bufor z odbieraną listą kontaktów */
int userlist_blocks; /**< Liczba części listy kontaktów */ int userlist_blocks; /**< Liczba części listy kontaktów */
struct gg_image_queue *images; /**< Lista wczytywanych obrazków */ struct gg_image_queue *images; /**< Lista wczytywanych obrazków */
int hash_type; /**< Rodzaj funkcji skrótu hasła */ int hash_type; /**< Rodzaj funkcji skrótu hasła (\c GG_LOGI N_HASH_GG32 lub \c GG_LOGIN_HASH_SHA1) */
char *send_buf; /**< Bufor z danymi do wysłania */ char *send_buf; /**< Bufor z danymi do wysłania */
int send_left; /**< Liczba bajtów do wysłania */ int send_left; /**< Liczba bajtów do wysłania */
struct gg_dcc7 *dcc7_list; /**< Lista połączeń bezpośrednich sk ojarzonych z sesją */ struct gg_dcc7 *dcc7_list; /**< Lista połączeń bezpośrednich sk ojarzonych z sesją */
int soft_timeout; /**< Flaga mówiąca, że po przekroczeniu \c t imeout należy wywołać \c gg_watch_fd() */ int soft_timeout; /**< Flaga mówiąca, że po przekroczeniu \c t imeout należy wywołać \c gg_watch_fd() */
int protocol_flags; /**< Flagi protokołu */
gg_encoding_t encoding; /**< Rodzaj kodowania znaków */
gg_resolver_t resolver_type; /**< Sposób rozwiązywania nazw serwe
rów */
int (*resolver_start)(int *fd, void **private_data, const char *host
name); /**< Funkcja rozpoczynająca rozwiązywanie nazwy */
void (*resolver_cleanup)(void **private_data, int force); /**<
Funkcja zwalniająca zasoby po rozwiązaniu nazwy */
int protocol_features; /**< Opcje protokołu */
}; };
/** /**
* Połączenie HTTP. * Połączenie HTTP.
* *
* Tworzone przez \c gg_http_connect(), zwalniane przez \c gg_http_free(). * Tworzone przez \c gg_http_connect(), zwalniane przez \c gg_http_free().
* *
* \ingroup http * \ingroup http
*/ */
struct gg_http { struct gg_http {
skipping to change at line 277 skipping to change at line 311
char *body; /**< Odebrana strona */ char *body; /**< Odebrana strona */
unsigned int body_size; /**< Rozmiar strony */ unsigned int body_size; /**< Rozmiar strony */
void *data; /**< Dane prywatne usługi HTTP */ void *data; /**< Dane prywatne usługi HTTP */
char *user_data; /**< Dane prywatne użytkownika (nie są zwaln iane) */ char *user_data; /**< Dane prywatne użytkownika (nie są zwaln iane) */
void *resolver; /**< Dane prywatne procesu lub wątku rozwiąz ującego nazwę */ void *resolver; /**< Dane prywatne procesu lub wątku rozwiąz ującego nazwę */
unsigned int body_done; /**< Liczba odebranych bajtów strony */ unsigned int body_done; /**< Liczba odebranych bajtów strony */
gg_resolver_t resolver_type; /**< Sposób rozwiązywania nazw serwe
rów */
int (*resolver_start)(int *fd, void **private_data, const char *host
name); /**< Funkcja rozpoczynająca rozwiązywanie nazwy */
void (*resolver_cleanup)(void **private_data, int force); /**<
Funkcja zwalniająca zasoby po rozwiązaniu nazwy */
}; };
/** \cond ignore */ /** \cond ignore */
#ifdef __GNUC__ #ifdef __GNUC__
#define GG_PACKED __attribute__ ((packed)) #define GG_PACKED __attribute__ ((packed))
#ifndef GG_IGNORE_DEPRECATED
#define GG_DEPRECATED __attribute__ ((deprecated))
#else
#define GG_DEPRECATED
#endif
#else #else
#define GG_PACKED #define GG_PACKED
#define GG_DEPRECATED
#endif #endif
/** \endcond */ /** \endcond */
#define GG_MAX_PATH 276 /**< Maksymalny rozmiar nazwy pliku w strukturze \c gg_file_info */ #define GG_MAX_PATH 276 /**< Maksymalny rozmiar nazwy pliku w strukturze \c gg_file_info */
/** /**
* Odpowiednik struktury WIN32_FIND_DATA z API WIN32. * Odpowiednik struktury WIN32_FIND_DATA z API WIN32.
* *
* Wykorzystywana przy połączeniach bezpośrednich do wersji Gadu-Gadu 6.x. * Wykorzystywana przy połączeniach bezpośrednich do wersji Gadu-Gadu 6.x.
skipping to change at line 530 skipping to change at line 574
int last_sysmsg; /**< Numer ostatnio odebranej wiadom ości systemowej */ int last_sysmsg; /**< Numer ostatnio odebranej wiadom ości systemowej */
uint32_t external_addr; /**< Adres publiczny dla połączeń be zpośrednich (6.x) */ uint32_t external_addr; /**< Adres publiczny dla połączeń be zpośrednich (6.x) */
uint16_t external_port; /**< Port publiczny dla połączeń bez pośrednich (6.x) */ uint16_t external_port; /**< Port publiczny dla połączeń bez pośrednich (6.x) */
#ifndef DOXYGEN #ifndef DOXYGEN
int tls; /**< Flaga połączenia szyfrowanego ( nieaktualna) */ int tls; /**< Flaga połączenia szyfrowanego ( nieaktualna) */
#endif #endif
int image_size; /**< Maksymalny rozmiar obsługiwanyc h obrazków w kilobajtach */ int image_size; /**< Maksymalny rozmiar obsługiwanyc h obrazków w kilobajtach */
#ifndef DOXYGEN #ifndef DOXYGEN
int era_omnix; /**< Flaga udawania klienta Era Omni x (nieaktualna) */ int era_omnix; /**< Flaga udawania klienta Era Omni x (nieaktualna) */
#endif #endif
int hash_type; /**< Rodzaj skrótu hasła (domyślnie int hash_type; /**< Rodzaj skrótu hasła (\c GG_LOGI
SHA1) */ N_HASH_GG32 lub \c GG_LOGIN_HASH_SHA1, domyślnie SHA1) */
gg_encoding_t encoding; /**< Rodzaj kodowania używanego w se
sji (domyślnie CP1250) */
gg_resolver_t resolver; /**< Sposób rozwiązywania nazw (patr
z \ref build-resolver) */
int protocol_features; /**< Opcje protokołu (flagi GG_FEATU
RE_*). */
#ifndef DOXYGEN #ifndef DOXYGEN
char dummy[5 * sizeof(int)]; /**< \internal Miejsce na kilka kole jnych char dummy[2 * sizeof(int)]; /**< \internal Miejsce na kilka kole jnych
parametrów, żeby wraz z dodawaniem kolejnych parametrów, żeby wraz z dodawaniem kolejnych
parametrów nie zmieniał się rozmia r struktury */ parametrów nie zmieniał się rozmia r struktury */
#endif #endif
}; };
struct gg_session *gg_login(const struct gg_login_params *p); struct gg_session *gg_login(const struct gg_login_params *p);
void gg_free_session(struct gg_session *sess); void gg_free_session(struct gg_session *sess);
void gg_logoff(struct gg_session *sess); void gg_logoff(struct gg_session *sess);
int gg_change_status(struct gg_session *sess, int status); int gg_change_status(struct gg_session *sess, int status);
skipping to change at line 558 skipping to change at line 605
int gg_send_message_confer(struct gg_session *sess, int msgclass, int recip ients_count, uin_t *recipients, const unsigned char *message); int gg_send_message_confer(struct gg_session *sess, int msgclass, int recip ients_count, uin_t *recipients, const unsigned char *message);
int gg_send_message_confer_richtext(struct gg_session *sess, int msgclass, int recipients_count, uin_t *recipients, const unsigned char *message, cons t unsigned char *format, int formatlen); int gg_send_message_confer_richtext(struct gg_session *sess, int msgclass, int recipients_count, uin_t *recipients, const unsigned char *message, cons t unsigned char *format, int formatlen);
int gg_send_message_ctcp(struct gg_session *sess, int msgclass, uin_t recip ient, const unsigned char *message, int message_len); int gg_send_message_ctcp(struct gg_session *sess, int msgclass, uin_t recip ient, const unsigned char *message, int message_len);
int gg_ping(struct gg_session *sess); int gg_ping(struct gg_session *sess);
int gg_userlist_request(struct gg_session *sess, char type, const char *req uest); int gg_userlist_request(struct gg_session *sess, char type, const char *req uest);
int gg_image_request(struct gg_session *sess, uin_t recipient, int size, ui nt32_t crc32); int gg_image_request(struct gg_session *sess, uin_t recipient, int size, ui nt32_t crc32);
int gg_image_reply(struct gg_session *sess, uin_t recipient, const char *fi lename, const char *image, int size); int gg_image_reply(struct gg_session *sess, uin_t recipient, const char *fi lename, const char *image, int size);
uint32_t gg_crc32(uint32_t crc, const unsigned char *buf, int len); uint32_t gg_crc32(uint32_t crc, const unsigned char *buf, int len);
int gg_session_set_resolver(struct gg_session *gs, gg_resolver_t type);
gg_resolver_t gg_session_get_resolver(struct gg_session *gs);
int gg_session_set_custom_resolver(struct gg_session *gs, int (*resolver_st
art)(int*, void**, const char*), void (*resolver_cleanup)(void**, int));
int gg_http_set_resolver(struct gg_http *gh, gg_resolver_t type);
gg_resolver_t gg_http_get_resolver(struct gg_http *gh);
int gg_http_set_custom_resolver(struct gg_http *gh, int (*resolver_start)(i
nt*, void**, const char*), void (*resolver_cleanup)(void**, int));
int gg_global_set_resolver(gg_resolver_t type);
gg_resolver_t gg_global_get_resolver(void);
int gg_global_set_custom_resolver(int (*resolver_start)(int*, void**, const
char*), void (*resolver_cleanup)(void**, int));
/** /**
* Rodzaj zdarzenia. * Rodzaj zdarzenia.
* *
* \ingroup events * \ingroup events
*/ */
enum gg_event_t { enum gg_event_t {
GG_EVENT_NONE = 0, /**< Nie wydarzyło się nic wartego u wagi */ GG_EVENT_NONE = 0, /**< Nie wydarzyło się nic wartego u wagi */
GG_EVENT_MSG, /**< \brief Otrzymano wiadomość. Prz ekazuje również wiadomości systemowe od numeru 0. */ GG_EVENT_MSG, /**< \brief Otrzymano wiadomość. Prz ekazuje również wiadomości systemowe od numeru 0. */
GG_EVENT_NOTIFY, /**< \brief Informacja o statusach o sób z listy kontaktów (przed 6.0). Zdarzenie należy obsługiwać, jeśli planu je się używać protokołu w wersji starszej niż domyślna. */ GG_EVENT_NOTIFY, /**< \brief Informacja o statusach o sób z listy kontaktów (przed 6.0). Zdarzenie należy obsługiwać, jeśli planu je się używać protokołu w wersji starszej niż domyślna. */
GG_EVENT_NOTIFY_DESCR, /**< \brief Informacja o statusie op isowym osoby z listy kontaktów (przed 6.0). Zdarzenie należy obsługiwać, je śli planuje się używać protokołu w wersji starszej niż domyślna. */ GG_EVENT_NOTIFY_DESCR, /**< \brief Informacja o statusie op isowym osoby z listy kontaktów (przed 6.0). Zdarzenie należy obsługiwać, je śli planuje się używać protokołu w wersji starszej niż domyślna. */
skipping to change at line 604 skipping to change at line 663
GG_EVENT_DCC_ACK, /**< Potwierdzenie transmisji w połą czeniu bezpośrednim (6.x) */ GG_EVENT_DCC_ACK, /**< Potwierdzenie transmisji w połą czeniu bezpośrednim (6.x) */
GG_EVENT_DCC7_NEW, /**< Nowe połączenie bezpośrednie (7 .x) */ GG_EVENT_DCC7_NEW, /**< Nowe połączenie bezpośrednie (7 .x) */
GG_EVENT_DCC7_ACCEPT, /**< Zaakceptowano połączenie bezpoś rednie (7.x), nowy deskryptor */ GG_EVENT_DCC7_ACCEPT, /**< Zaakceptowano połączenie bezpoś rednie (7.x), nowy deskryptor */
GG_EVENT_DCC7_REJECT, /**< Odrzucono połączenie bezpośredn ie (7.x) */ GG_EVENT_DCC7_REJECT, /**< Odrzucono połączenie bezpośredn ie (7.x) */
GG_EVENT_DCC7_CONNECTED, /**< Zestawiono połączenie bezpośred nie (7.x), nowy deskryptor */ GG_EVENT_DCC7_CONNECTED, /**< Zestawiono połączenie bezpośred nie (7.x), nowy deskryptor */
GG_EVENT_DCC7_ERROR, /**< Błąd połączenia bezpośredniego (7.x) */ GG_EVENT_DCC7_ERROR, /**< Błąd połączenia bezpośredniego (7.x) */
GG_EVENT_DCC7_DONE, /**< Zakończono połączenie bezpośred nie (7.x) */ GG_EVENT_DCC7_DONE, /**< Zakończono połączenie bezpośred nie (7.x) */
GG_EVENT_DCC7_PENDING, /**< Trwa próba połączenia bezpośred niego (7.x), nowy deskryptor */ GG_EVENT_DCC7_PENDING, /**< Trwa próba połączenia bezpośred niego (7.x), nowy deskryptor */
GG_EVENT_XML_EVENT /**< Otrzymano komunikat systemowy ( GG_EVENT_XML_EVENT, /**< Otrzymano komunikat systemowy (
7.7) */ 7.7) */
GG_EVENT_DISCONNECT_ACK, /**< \brief Potwierdzenie zakończeni
a sesji. Informuje o tym, że zmiana stanu na niedostępny z opisem dotarła d
o serwera i można zakończyć połączenie TCP. */
}; };
#define GG_EVENT_SEARCH50_REPLY GG_EVENT_PUBDIR50_SEARCH_REPLY #define GG_EVENT_SEARCH50_REPLY GG_EVENT_PUBDIR50_SEARCH_REPLY
/** /**
* Powód nieudanego połączenia. * Powód nieudanego połączenia.
*/ */
enum gg_failure_t { enum gg_failure_t {
GG_FAILURE_RESOLVING = 1, /**< Nie znaleziono serwera */ GG_FAILURE_RESOLVING = 1, /**< Nie znaleziono serwera */
GG_FAILURE_CONNECTING, /**< Błąd połączenia */ GG_FAILURE_CONNECTING, /**< Błąd połączenia */
skipping to change at line 659 skipping to change at line 719
GG_ERROR_DCC7_REFUSED /**< Połączenie odrzucone */ GG_ERROR_DCC7_REFUSED /**< Połączenie odrzucone */
}; };
/** /**
* Pole zapytania lub odpowiedzi katalogu publicznego. * Pole zapytania lub odpowiedzi katalogu publicznego.
*/ */
struct gg_pubdir50_entry { struct gg_pubdir50_entry {
int num; /**< Numer wyniku */ int num; /**< Numer wyniku */
char *field; /**< Nazwa pola */ char *field; /**< Nazwa pola */
char *value; /**< Wartość pola */ char *value; /**< Wartość pola */
}; } /* GG_DEPRECATED */;
/** /**
* Zapytanie lub odpowiedź katalogu publicznego. * Zapytanie lub odpowiedź katalogu publicznego.
* *
* Patrz \c gg_pubdir50_t. * Patrz \c gg_pubdir50_t.
*/ */
struct gg_pubdir50_s { struct gg_pubdir50_s {
int count; /**< Liczba wyników odpowiedzi */ int count; /**< Liczba wyników odpowiedzi */
uin_t next; /**< Numer początkowy następnego zapytania */ uin_t next; /**< Numer początkowy następnego zapytania */
int type; /**< Rodzaj zapytania */ int type; /**< Rodzaj zapytania */
uint32_t seq; /**< Numer sekwencyjny */ uint32_t seq; /**< Numer sekwencyjny */
struct gg_pubdir50_entry *entries; /**< Pola zapytania lub odpo wiedzi */ struct gg_pubdir50_entry *entries; /**< Pola zapytania lub odpo wiedzi */
int entries_count; /**< Liczba pól */ int entries_count; /**< Liczba pól */
}; } /* GG_DEPRECATED */;
/** /**
* Zapytanie lub odpowiedź katalogu publicznego. * Zapytanie lub odpowiedź katalogu publicznego.
* *
* Do pól nie należy się odwoływać bezpośrednio -- wszystkie niezbędne * Do pól nie należy się odwoływać bezpośrednio -- wszystkie niezbędne
* informacje są dostępne za pomocą funkcji \c gg_pubdir50_* * informacje są dostępne za pomocą funkcji \c gg_pubdir50_*
*/ */
typedef struct gg_pubdir50_s *gg_pubdir50_t; typedef struct gg_pubdir50_s *gg_pubdir50_t;
/** /**
skipping to change at line 698 skipping to change at line 758
int msgclass; /**< Klasa wiadomości */ int msgclass; /**< Klasa wiadomości */
time_t time; /**< Czas nadania */ time_t time; /**< Czas nadania */
unsigned char *message; /**< Treść wiadomości */ unsigned char *message; /**< Treść wiadomości */
int recipients_count; /**< Liczba odbiorców konferencji */ int recipients_count; /**< Liczba odbiorców konferencji */
uin_t *recipients; /**< Odbiorcy konferencji */ uin_t *recipients; /**< Odbiorcy konferencji */
int formats_length; /**< Długość informacji o formatowaniu tekst u */ int formats_length; /**< Długość informacji o formatowaniu tekst u */
void *formats; /**< Informacje o formatowaniu tekstu */ void *formats; /**< Informacje o formatowaniu tekstu */
uint32_t seq; /**< Numer sekwencyjny wiadomości */ uint32_t seq; /**< Numer sekwencyjny wiadomości */
char *xhtml_message; /**< Treść wiadomości w formacie XHTML (może
być równe \c NULL, jeśli wiadomość nie zawiera treści XHTML) */
}; };
/** /**
* Opis zdarzenia \c GG_EVENT_NOTIFY_DESCR. * Opis zdarzenia \c GG_EVENT_NOTIFY_DESCR.
*/ */
struct gg_event_notify_descr { struct gg_event_notify_descr {
struct gg_notify_reply *notify; /**< Informacje o liście kontaktów * / struct gg_notify_reply *notify; /**< Informacje o liście kontaktów * /
char *descr; /**< Opis status */ char *descr; /**< Opis status */
}; };
skipping to change at line 806 skipping to change at line 868
/** /**
* Opis zdarzenia \c GG_EVENT_DCC7_CONNECTED. * Opis zdarzenia \c GG_EVENT_DCC7_CONNECTED.
*/ */
struct gg_event_dcc7_connected { struct gg_event_dcc7_connected {
struct gg_dcc7 *dcc7; /**< Struktura połączenia */ struct gg_dcc7 *dcc7; /**< Struktura połączenia */
// XXX czy coś się przyda? // XXX czy coś się przyda?
}; };
/** /**
* Opis zdarzenia \c GG_EVENT_DCC7_PENDING.
*/
struct gg_event_dcc7_pending {
struct gg_dcc7 *dcc7; /**< Struktura połączenia */
};
/**
* Opis zdarzenia \c GG_EVENT_DCC7_REJECT. * Opis zdarzenia \c GG_EVENT_DCC7_REJECT.
*/ */
struct gg_event_dcc7_reject { struct gg_event_dcc7_reject {
struct gg_dcc7 *dcc7; /**< Struktura połączenia */ struct gg_dcc7 *dcc7; /**< Struktura połączenia */
int reason; /**< powód odrzucenia */ int reason; /**< powód odrzucenia */
}; };
/** /**
* Opis zdarzenia \c GG_EVENT_DCC7_ACCEPT. * Opis zdarzenia \c GG_EVENT_DCC7_ACCEPT.
*/ */
skipping to change at line 849 skipping to change at line 918
struct gg_event_image_reply image_reply; /**< Odpowiedź z obr azkiem (\c GG_EVENT_IMAGE_REPLY) */ struct gg_event_image_reply image_reply; /**< Odpowiedź z obr azkiem (\c GG_EVENT_IMAGE_REPLY) */
struct gg_event_userlist userlist; /**< Odpowiedź listy kontakt ów (\c GG_EVENT_USERLIST) */ struct gg_event_userlist userlist; /**< Odpowiedź listy kontakt ów (\c GG_EVENT_USERLIST) */
gg_pubdir50_t pubdir50; /**< Odpowiedź katalogu publicznego (\c GG_E VENT_PUBDIR50_*) */ gg_pubdir50_t pubdir50; /**< Odpowiedź katalogu publicznego (\c GG_E VENT_PUBDIR50_*) */
struct gg_event_xml_event xml_event; /**< Zdarzenie systemowe (\c GG_EVENT_XML_EVENT) */ struct gg_event_xml_event xml_event; /**< Zdarzenie systemowe (\c GG_EVENT_XML_EVENT) */
struct gg_dcc *dcc_new; /**< Nowe połączenie bezpośrednie (\c GG_EVE NT_DCC_NEW) */ struct gg_dcc *dcc_new; /**< Nowe połączenie bezpośrednie (\c GG_EVE NT_DCC_NEW) */
enum gg_error_t dcc_error; /**< Błąd połączenia bezpośredniego (\c GG_EVENT_DCC_ERROR) */ enum gg_error_t dcc_error; /**< Błąd połączenia bezpośredniego (\c GG_EVENT_DCC_ERROR) */
struct gg_event_dcc_voice_data dcc_voice_data; /**< Dane połączenia głosowego (\c GG_EVENT_DCC_VOICE_DATA) */ struct gg_event_dcc_voice_data dcc_voice_data; /**< Dane połączenia głosowego (\c GG_EVENT_DCC_VOICE_DATA) */
struct gg_dcc7 *dcc7_new; /**< Nowe połączenie bezpośrednie (\ c GG_EVENT_DCC7_NEW) */ struct gg_dcc7 *dcc7_new; /**< Nowe połączenie bezpośrednie (\ c GG_EVENT_DCC7_NEW) */
enum gg_error_t dcc7_error; /**< Błąd połączenia bezpośredniego (\c GG_EVENT_DCC7_ERROR) */ enum gg_error_t dcc7_error; /**< Błąd połączenia bezpośredniego (\c GG_EVENT_DCC7_ERROR) */
struct gg_event_dcc7_connected dcc7_connected; /**< Informacja o ze stawieniu połączenia bezpośredniego (\c GG_EVENT_DCC7_CONNECTED) */ struct gg_event_dcc7_connected dcc7_connected; /**< Informacja o ze stawieniu połączenia bezpośredniego (\c GG_EVENT_DCC7_CONNECTED) */
struct gg_event_dcc7_pending dcc7_pending; /**< Trwa próba połą czenia bezpośredniego (\c GG_EVENT_DCC7_PENDING) */
struct gg_event_dcc7_reject dcc7_reject; /**< Odrzucono połąc zenia bezpośredniego (\c GG_EVENT_DCC7_REJECT) */ struct gg_event_dcc7_reject dcc7_reject; /**< Odrzucono połąc zenia bezpośredniego (\c GG_EVENT_DCC7_REJECT) */
struct gg_event_dcc7_accept dcc7_accept; /**< Zaakceptowano p ołączenie bezpośrednie (\c GG_EVENT_DCC7_ACCEPT) */ struct gg_event_dcc7_accept dcc7_accept; /**< Zaakceptowano p ołączenie bezpośrednie (\c GG_EVENT_DCC7_ACCEPT) */
}; };
/** /**
* Opis zdarzenia. * Opis zdarzenia.
* *
* Zwracany przez funkcje \c gg_watch_fd(), \c gg_dcc_watch_fd() * Zwracany przez funkcje \c gg_watch_fd(), \c gg_dcc_watch_fd()
* i \c gg_dcc7_watch_fd(). Po przeanalizowaniu należy zwolnić * i \c gg_dcc7_watch_fd(). Po przeanalizowaniu należy zwolnić
* za pomocą \c gg_event_free(). * za pomocą \c gg_event_free().
skipping to change at line 1139 skipping to change at line 1209
char *nickname; char *nickname;
char *first_name; char *first_name;
char *last_name; char *last_name;
char *city; char *city;
int gender; int gender;
int min_birth; int min_birth;
int max_birth; int max_birth;
char *email; char *email;
char *phone; char *phone;
uin_t uin; uin_t uin;
}; } /* GG_DEPRECATED */;
struct gg_search { struct gg_search {
int count; int count;
struct gg_search_result *results; struct gg_search_result *results;
}; } GG_DEPRECATED;
struct gg_search_result { struct gg_search_result {
uin_t uin; uin_t uin;
char *first_name; char *first_name;
char *last_name; char *last_name;
char *nickname; char *nickname;
int born; int born;
int gender; int gender;
char *city; char *city;
int active; int active;
}; } GG_DEPRECATED;
#define GG_GENDER_NONE 0 #define GG_GENDER_NONE 0
#define GG_GENDER_FEMALE 1 #define GG_GENDER_FEMALE 1
#define GG_GENDER_MALE 2 #define GG_GENDER_MALE 2
struct gg_http *gg_search(const struct gg_search_request *r, int async); struct gg_http *gg_search(const struct gg_search_request *r, int async) GG_
int gg_search_watch_fd(struct gg_http *f); DEPRECATED;
void gg_free_search(struct gg_http *f); int gg_search_watch_fd(struct gg_http *f) GG_DEPRECATED;
void gg_free_search(struct gg_http *f) GG_DEPRECATED;
#define gg_search_free gg_free_search #define gg_search_free gg_free_search
const struct gg_search_request *gg_search_request_mode_0(char *nickname, ch const struct gg_search_request *gg_search_request_mode_0(char *nickname, ch
ar *first_name, char *last_name, char *city, int gender, int min_birth, int ar *first_name, char *last_name, char *city, int gender, int min_birth, int
max_birth, int active, int start); max_birth, int active, int start) GG_DEPRECATED;
const struct gg_search_request *gg_search_request_mode_1(char *email, int a const struct gg_search_request *gg_search_request_mode_1(char *email, int a
ctive, int start); ctive, int start) GG_DEPRECATED;
const struct gg_search_request *gg_search_request_mode_2(char *phone, int a const struct gg_search_request *gg_search_request_mode_2(char *phone, int a
ctive, int start); ctive, int start) GG_DEPRECATED;
const struct gg_search_request *gg_search_request_mode_3(uin_t uin, int act const struct gg_search_request *gg_search_request_mode_3(uin_t uin, int act
ive, int start); ive, int start) GG_DEPRECATED;
void gg_search_request_free(struct gg_search_request *r); void gg_search_request_free(struct gg_search_request *r) GG_DEPRECATED;
struct gg_http *gg_register(const char *email, const char *password, int as struct gg_http *gg_register(const char *email, const char *password, int as
ync); ync) GG_DEPRECATED;
struct gg_http *gg_register2(const char *email, const char *password, const struct gg_http *gg_register2(const char *email, const char *password, const
char *qa, int async); char *qa, int async) GG_DEPRECATED;
struct gg_http *gg_unregister(uin_t uin, const char *password, const char * struct gg_http *gg_unregister(uin_t uin, const char *password, const char *
email, int async); email, int async) GG_DEPRECATED;
struct gg_http *gg_unregister2(uin_t uin, const char *password, const char struct gg_http *gg_unregister2(uin_t uin, const char *password, const char
*qa, int async); *qa, int async) GG_DEPRECATED;
struct gg_http *gg_remind_passwd(uin_t uin, int async); struct gg_http *gg_remind_passwd(uin_t uin, int async) GG_DEPRECATED;
struct gg_http *gg_remind_passwd2(uin_t uin, const char *tokenid, const cha struct gg_http *gg_remind_passwd2(uin_t uin, const char *tokenid, const cha
r *tokenval, int async); r *tokenval, int async) GG_DEPRECATED;
struct gg_http *gg_change_passwd(uin_t uin, const char *passwd, const char struct gg_http *gg_change_passwd(uin_t uin, const char *passwd, const char
*newpasswd, const char *newemail, int async); *newpasswd, const char *newemail, int async) GG_DEPRECATED;
struct gg_http *gg_change_passwd2(uin_t uin, const char *passwd, const char struct gg_http *gg_change_passwd2(uin_t uin, const char *passwd, const char
*newpasswd, const char *email, const char *newemail, int async); *newpasswd, const char *email, const char *newemail, int async) GG_DEPRECA
struct gg_http *gg_change_passwd3(uin_t uin, const char *passwd, const char TED;
*newpasswd, const char *qa, int async); struct gg_http *gg_change_passwd3(uin_t uin, const char *passwd, const char
*newpasswd, const char *qa, int async) GG_DEPRECATED;
struct gg_change_info_request { struct gg_change_info_request {
char *first_name; char *first_name;
char *last_name; char *last_name;
char *nickname; char *nickname;
char *email; char *email;
int born; int born;
int gender; int gender;
char *city; char *city;
}; } /* GG_DEPRECATED */;
struct gg_change_info_request *gg_change_info_request_new(const char *first 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 _name, const char *last_name, const char *nickname, const char *email, int
born, int gender, const char *city); born, int gender, const char *city) GG_DEPRECATED;
void gg_change_info_request_free(struct gg_change_info_request *r); void gg_change_info_request_free(struct gg_change_info_request *r) GG_DEPRE
CATED;
struct gg_http *gg_change_info(uin_t uin, const char *passwd, const struct gg_change_info_request *request, int async); struct gg_http *gg_change_info(uin_t uin, const char *passwd, const struct gg_change_info_request *request, int async) GG_DEPRECATED;
#define gg_change_pubdir_watch_fd gg_pubdir_watch_fd #define gg_change_pubdir_watch_fd gg_pubdir_watch_fd
#define gg_change_pubdir_free gg_pubdir_free #define gg_change_pubdir_free gg_pubdir_free
#define gg_free_change_pubdir gg_pubdir_free #define gg_free_change_pubdir gg_pubdir_free
struct gg_http *gg_userlist_get(uin_t uin, const char *password, int async) struct gg_http *gg_userlist_get(uin_t uin, const char *password, int async)
; GG_DEPRECATED;
int gg_userlist_get_watch_fd(struct gg_http *f); int gg_userlist_get_watch_fd(struct gg_http *f) GG_DEPRECATED;
void gg_userlist_get_free(struct gg_http *f); void gg_userlist_get_free(struct gg_http *f) GG_DEPRECATED;
struct gg_http *gg_userlist_put(uin_t uin, const char *password, const char struct gg_http *gg_userlist_put(uin_t uin, const char *password, const char
*contacts, int async); *contacts, int async) GG_DEPRECATED;
int gg_userlist_put_watch_fd(struct gg_http *f); int gg_userlist_put_watch_fd(struct gg_http *f) GG_DEPRECATED;
void gg_userlist_put_free(struct gg_http *f); void gg_userlist_put_free(struct gg_http *f) GG_DEPRECATED;
struct gg_http *gg_userlist_remove(uin_t uin, const char *password, int asy struct gg_http *gg_userlist_remove(uin_t uin, const char *password, int asy
nc); nc) GG_DEPRECATED;
int gg_userlist_remove_watch_fd(struct gg_http *f); int gg_userlist_remove_watch_fd(struct gg_http *f) GG_DEPRECATED;
void gg_userlist_remove_free(struct gg_http *f); void gg_userlist_remove_free(struct gg_http *f) GG_DEPRECATED;
/** \endcond */ int gg_pubdir50_handle_reply(struct gg_event *e, const char *packet, int le
ngth) GG_DEPRECATED;
int gg_pubdir50_handle_reply(struct gg_event *e, const char *packet, int le
ngth);
int gg_file_hash_sha1(int fd, uint8_t *result); /** \endcond */
#ifdef GG_CONFIG_HAVE_PTHREAD
int gg_resolve_pthread(int *fd, void **resolver, const char *hostname);
void gg_resolve_pthread_cleanup(void *resolver, int kill);
#endif
#ifdef _WIN32
int gg_thread_socket(int thread_id, int socket);
#endif
int gg_resolve(int *fd, int *pid, const char *hostname); int gg_file_hash_sha1(int fd, uint8_t *result) GG_DEPRECATED;
#ifdef __GNUC__ #ifdef __GNUC__
char *gg_saprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2))); char *gg_saprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2))) GG_DEPRECATED;
#else #else
char *gg_saprintf(const char *format, ...); char *gg_saprintf(const char *format, ...) GG_DEPRECATED;
#endif #endif
char *gg_vsaprintf(const char *format, va_list ap); char *gg_vsaprintf(const char *format, va_list ap) GG_DEPRECATED;
#define gg_alloc_sprintf gg_saprintf #define gg_alloc_sprintf gg_saprintf
char *gg_get_line(char **ptr); char *gg_get_line(char **ptr) GG_DEPRECATED;
int gg_connect(void *addr, int port, int async); int gg_connect(void *addr, int port, int async) GG_DEPRECATED;
struct in_addr *gg_gethostbyname(const char *hostname); struct in_addr *gg_gethostbyname(const char *hostname) GG_DEPRECATED;
char *gg_read_line(int sock, char *buf, int length); char *gg_read_line(int sock, char *buf, int length) GG_DEPRECATED;
void gg_chomp(char *line); void gg_chomp(char *line) GG_DEPRECATED;
char *gg_urlencode(const char *str); char *gg_urlencode(const char *str) GG_DEPRECATED;
int gg_http_hash(const char *format, ...); int gg_http_hash(const char *format, ...) GG_DEPRECATED;
void gg_http_free_fields(struct gg_http *h); void gg_http_free_fields(struct gg_http *h) GG_DEPRECATED;
int gg_read(struct gg_session *sess, char *buf, int length); int gg_read(struct gg_session *sess, char *buf, int length) GG_DEPRECATED;
int gg_write(struct gg_session *sess, const char *buf, int length); int gg_write(struct gg_session *sess, const char *buf, int length) GG_DEPRE
void *gg_recv_packet(struct gg_session *sess); CATED;
int gg_send_packet(struct gg_session *sess, int type, ...); void *gg_recv_packet(struct gg_session *sess) GG_DEPRECATED;
unsigned int gg_login_hash(const unsigned char *password, unsigned int seed int gg_send_packet(struct gg_session *sess, int type, ...) GG_DEPRECATED;
); unsigned int gg_login_hash(const unsigned char *password, unsigned int seed
void gg_login_hash_sha1(const char *password, uint32_t seed, uint8_t *resul ) GG_DEPRECATED;
t); void gg_login_hash_sha1(const char *password, uint32_t seed, uint8_t *resul
t) GG_DEPRECATED;
uint32_t gg_fix32(uint32_t x); uint32_t gg_fix32(uint32_t x);
uint16_t gg_fix16(uint16_t x); uint16_t gg_fix16(uint16_t x);
#define fix16 gg_fix16 #define fix16 gg_fix16
#define fix32 gg_fix32 #define fix32 gg_fix32
char *gg_proxy_auth(void); char *gg_proxy_auth(void) GG_DEPRECATED;
char *gg_base64_encode(const char *buf); char *gg_base64_encode(const char *buf) GG_DEPRECATED;
char *gg_base64_decode(const char *buf); char *gg_base64_decode(const char *buf) GG_DEPRECATED;
int gg_image_queue_remove(struct gg_session *s, struct gg_image_queue *q, i int gg_image_queue_remove(struct gg_session *s, struct gg_image_queue *q, i
nt freeq); nt freeq) GG_DEPRECATED;
/** /**
* Kolejka odbieranych obrazków. * Kolejka odbieranych obrazków.
*/ */
struct gg_image_queue { struct gg_image_queue {
uin_t sender; /**< Nadawca obrazka */ uin_t sender; /**< Nadawca obrazka */
uint32_t size; /**< Rozmiar obrazka */ uint32_t size; /**< Rozmiar obrazka */
uint32_t crc32; /**< Suma kontrolna CRC32 */ uint32_t crc32; /**< Suma kontrolna CRC32 */
char *filename; /**< Nazwa pliku */ char *filename; /**< Nazwa pliku */
char *image; /**< Bufor z odebranymi danymi */ char *image; /**< Bufor z odebranymi danymi */
uint32_t done; /**< Rozmiar odebranych danych */ uint32_t done; /**< Rozmiar odebranych danych */
struct gg_image_queue *next; /**< Kolejny element listy */ struct gg_image_queue *next; /**< Kolejny element listy */
}; } GG_DEPRECATED;
int gg_dcc7_handle_id(struct gg_session *sess, struct gg_event *e, void *pa int gg_dcc7_handle_id(struct gg_session *sess, struct gg_event *e, void *pa
yload, int len); yload, int len) GG_DEPRECATED;
int gg_dcc7_handle_new(struct gg_session *sess, struct gg_event *e, void *p int gg_dcc7_handle_new(struct gg_session *sess, struct gg_event *e, void *p
ayload, int len); ayload, int len) GG_DEPRECATED;
int gg_dcc7_handle_info(struct gg_session *sess, struct gg_event *e, void * int gg_dcc7_handle_info(struct gg_session *sess, struct gg_event *e, void *
payload, int len); payload, int len) GG_DEPRECATED;
int gg_dcc7_handle_accept(struct gg_session *sess, struct gg_event *e, void int gg_dcc7_handle_accept(struct gg_session *sess, struct gg_event *e, void
*payload, int len); *payload, int len) GG_DEPRECATED;
int gg_dcc7_handle_reject(struct gg_session *sess, struct gg_event *e, void int gg_dcc7_handle_reject(struct gg_session *sess, struct gg_event *e, void
*payload, int len); *payload, int len) GG_DEPRECATED;
#define GG_APPMSG_HOST "appmsg.gadu-gadu.pl" #define GG_APPMSG_HOST "appmsg.gadu-gadu.pl"
#define GG_APPMSG_PORT 80 #define GG_APPMSG_PORT 80
#define GG_PUBDIR_HOST "pubdir.gadu-gadu.pl" #define GG_PUBDIR_HOST "pubdir.gadu-gadu.pl"
#define GG_PUBDIR_PORT 80 #define GG_PUBDIR_PORT 80
#define GG_REGISTER_HOST "register.gadu-gadu.pl" #define GG_REGISTER_HOST "register.gadu-gadu.pl"
#define GG_REGISTER_PORT 80 #define GG_REGISTER_PORT 80
#define GG_REMIND_HOST "retr.gadu-gadu.pl" #define GG_REMIND_HOST "retr.gadu-gadu.pl"
#define GG_REMIND_PORT 80 #define GG_REMIND_PORT 80
#define GG_DEFAULT_PORT 8074 #define GG_DEFAULT_PORT 8074
#define GG_HTTPS_PORT 443 #define GG_HTTPS_PORT 443
#define GG_HTTP_USERAGENT "Mozilla/4.7 [en] (Win98; I)" #define GG_HTTP_USERAGENT "Mozilla/4.7 [en] (Win98; I)"
#define GG_DEFAULT_CLIENT_VERSION "7, 7, 0, 3351" #define GG_DEFAULT_CLIENT_VERSION "8.0.0.7669"
#define GG_DEFAULT_PROTOCOL_VERSION 0x2a #define GG_DEFAULT_PROTOCOL_VERSION 0x2e
#define GG_DEFAULT_TIMEOUT 30 #define GG_DEFAULT_TIMEOUT 30
#define GG_HAS_AUDIO_MASK 0x40000000 #define GG_HAS_AUDIO_MASK 0x40000000
#define GG_HAS_AUDIO7_MASK 0x20000000 #define GG_HAS_AUDIO7_MASK 0x20000000
#define GG_ERA_OMNIX_MASK 0x04000000 #define GG_ERA_OMNIX_MASK 0x04000000
#define GG_LIBGADU_VERSION "1.8.2" #define GG_LIBGADU_VERSION "1.9.0"
#ifndef DOXYGEN
#define GG_FEATURE_MSG77 0x01
#define GG_FEATURE_STATUS77 0x02
#define GG_FEATURE_DND_FFC 0x10
#define GG_FEATURE_IMAGE_DESCR 0x20
/* Poniższe makra zostały zachowane dla zgodności API */
#define GG_FEATURE_MSG80 0
#define GG_FEATURE_STATUS80 0
#define GG_FEATURE_STATUS80BETA 0
#define GG_FEATURE_ALL (GG_FEATURE_DND_FFC | GG_FEATURE_IMA
GE_DESCR)
#else
/**
* \ingroup login
*
* Flagi opcji protokołu.
*/
enum {
GG_FEATURE_MSG77, /**< Klient życzy sobie otrzymywać wiadomośc
i zgodnie z protokołem 7.7 */
GG_FEATURE_STATUS77, /**< Klient życzy sobie otrzymywać zmiany st
anu zgodnie z protokołem 7.7 */
GG_FEATURE_DND_FFC, /**< Klient obsługuje statusy "nie przeszkad
zać" i "poGGadaj ze mną" */
GG_FEATURE_IMAGE_DESCR, /**< Klient obsługuje opisy graficzne oraz f
lagę \c GG_STATUS80_DESCR_MASK */
};
#endif
#define GG_DEFAULT_DCC_PORT 1550 #define GG_DEFAULT_DCC_PORT 1550
struct gg_header { struct gg_header {
uint32_t type; /* typ pakietu */ uint32_t type; /* typ pakietu */
uint32_t length; /* długość reszty pakietu */ uint32_t length; /* długość reszty pakietu */
} GG_PACKED; } GG_PACKED;
#define GG_WELCOME 0x0001 #define GG_WELCOME 0x0001
#define GG_NEED_EMAIL 0x0014 #define GG_NEED_EMAIL 0x0014
skipping to change at line 1361 skipping to change at line 1449
uint32_t version; /* moja wersja klienta */ uint32_t version; /* moja wersja klienta */
uint8_t dunno1; /* 0x00 */ uint8_t dunno1; /* 0x00 */
uint32_t local_ip; /* mój adres ip */ uint32_t local_ip; /* mój adres ip */
uint16_t local_port; /* port, na którym słucham */ uint16_t local_port; /* port, na którym słucham */
uint32_t external_ip; /* zewnętrzny adres ip */ uint32_t external_ip; /* zewnętrzny adres ip */
uint16_t external_port; /* zewnętrzny port */ uint16_t external_port; /* zewnętrzny port */
uint8_t image_size; /* maksymalny rozmiar grafiki w KiB */ uint8_t image_size; /* maksymalny rozmiar grafiki w KiB */
uint8_t dunno2; /* 0xbe */ uint8_t dunno2; /* 0xbe */
} GG_PACKED; } GG_PACKED;
#define GG_LOGIN70 0x19 #define GG_LOGIN70 0x0019
struct gg_login70 { struct gg_login70 {
uint32_t uin; /* mój numerek */ uint32_t uin; /* mój numerek */
uint8_t hash_type; /* rodzaj hashowania hasła */ uint8_t hash_type; /* rodzaj hashowania hasła */
uint8_t hash[64]; /* hash hasła dopełniony zerami */ uint8_t hash[64]; /* hash hasła dopełniony zerami */
uint32_t status; /* status na dzień dobry */ uint32_t status; /* status na dzień dobry */
uint32_t version; /* moja wersja klienta */ uint32_t version; /* moja wersja klienta */
uint8_t dunno1; /* 0x00 */ uint8_t dunno1; /* 0x00 */
uint32_t local_ip; /* mój adres ip */ uint32_t local_ip; /* mój adres ip */
uint16_t local_port; /* port, na którym słucham */ uint16_t local_port; /* port, na którym słucham */
skipping to change at line 1402 skipping to change at line 1490
uint8_t type; /* GG_PUBDIR50_* */ uint8_t type; /* GG_PUBDIR50_* */
uint32_t seq; /* czas wysłania zapytania */ uint32_t seq; /* czas wysłania zapytania */
} GG_PACKED; } GG_PACKED;
#define GG_NEW_STATUS 0x0002 #define GG_NEW_STATUS 0x0002
#ifndef DOXYGEN #ifndef DOXYGEN
#define GG_STATUS_NOT_AVAIL 0x0001 #define GG_STATUS_NOT_AVAIL 0x0001
#define GG_STATUS_NOT_AVAIL_DESCR 0x0015 #define GG_STATUS_NOT_AVAIL_DESCR 0x0015
#define GG_STATUS_FFC 0x0017
#define GG_STATUS_FFC_DESCR 0x0018
#define GG_STATUS_AVAIL 0x0002 #define GG_STATUS_AVAIL 0x0002
#define GG_STATUS_AVAIL_DESCR 0x0004 #define GG_STATUS_AVAIL_DESCR 0x0004
#define GG_STATUS_BUSY 0x0003 #define GG_STATUS_BUSY 0x0003
#define GG_STATUS_BUSY_DESCR 0x0005 #define GG_STATUS_BUSY_DESCR 0x0005
#define GG_STATUS_DND 0x0021
#define GG_STATUS_DND_DESCR 0x0022
#define GG_STATUS_INVISIBLE 0x0014 #define GG_STATUS_INVISIBLE 0x0014
#define GG_STATUS_INVISIBLE_DESCR 0x0016 #define GG_STATUS_INVISIBLE_DESCR 0x0016
#define GG_STATUS_BLOCKED 0x0006 #define GG_STATUS_BLOCKED 0x0006
#define GG_STATUS_IMAGE_MASK 0x0100
#define GG_STATUS_DESCR_MASK 0x4000
#define GG_STATUS_FRIENDS_MASK 0x8000 #define GG_STATUS_FRIENDS_MASK 0x8000
#else #else
/** /**
* Rodzaje statusów użytkownika. * Rodzaje statusów użytkownika.
* *
* \ingroup status * \ingroup status
*/ */
enum { enum {
GG_STATUS_NOT_AVAIL, /**< Niedostępny */ GG_STATUS_NOT_AVAIL, /**< Niedostępny */
GG_STATUS_NOT_AVAIL_DESCR, /**< Niedostępny z opisem */ GG_STATUS_NOT_AVAIL_DESCR, /**< Niedostępny z opisem */
GG_STATUS_FFC, /**< PoGGadaj ze mną */
GG_STATUS_FFC_DESCR, /**< PoGGadaj ze mną z opisem */
GG_STATUS_AVAIL, /**< Dostępny */ GG_STATUS_AVAIL, /**< Dostępny */
GG_STATUS_AVAIL_DESCR, /**< Dostępny z opisem */ GG_STATUS_AVAIL_DESCR, /**< Dostępny z opisem */
GG_STATUS_BUSY, /**< Zajęty */ GG_STATUS_BUSY, /**< Zajęty */
GG_STATUS_BUSY_DESCR, /**< Zajęty z opisem */ GG_STATUS_BUSY_DESCR, /**< Zajęty z opisem */
GG_STATUS_DND, /**< Nie przeszkadzać */
GG_STATUS_DND_DESCR, /**< Nie przeszakdzać z opisem */
GG_STATUS_INVISIBLE, /**< Niewidoczny (tylko własny statu s) */ GG_STATUS_INVISIBLE, /**< Niewidoczny (tylko własny statu s) */
GG_STATUS_INVISIBLE_DESCR, /**< Niewidoczny z opisem (tylko wła sny status) */ GG_STATUS_INVISIBLE_DESCR, /**< Niewidoczny z opisem (tylko wła sny status) */
GG_STATUS_BLOCKED, /**< Zablokowany (tylko status innyc h) */ GG_STATUS_BLOCKED, /**< Zablokowany (tylko status innyc h) */
GG_STATUS_IMAGE_MASK, /**< Flaga bitowa oznaczająca opis g
raficzny (tylko jeśli wybrano \c GG_FEATURE_IMAGE_DESCR) */
GG_STATUS_DESCR_MASK, /**< Flaga bitowa oznaczająca status
z opisem (tylko jeśli wybrano \c GG_FEATURE_IMAGE_DESCR) */
GG_STATUS_FRIENDS_MASK, /**< Flaga bitowa dostępności tylko dla znajomych */ GG_STATUS_FRIENDS_MASK, /**< Flaga bitowa dostępności tylko dla znajomych */
}; };
#endif /* DOXYGEN */ #endif /* DOXYGEN */
/** /**
* \ingroup status * \ingroup status
* *
* Flaga bitowa dostepnosci informujaca ze mozemy voipowac
*/
#define GG_STATUS_VOICE_MASK 0x20000 /**< czy ma wlaczone audio (7.7) */
/**
* \ingroup status
*
* Maksymalna długośc opisu. * Maksymalna długośc opisu.
*/ */
#define GG_STATUS_DESCR_MAXSIZE 70 #define GG_STATUS_DESCR_MAXSIZE 255
#define GG_STATUS_DESCR_MAXSIZE_PRE_8_0 70
#define GG_STATUS_MASK 0xff
/* GG_S_F() tryb tylko dla znajomych */ /* GG_S_F() tryb tylko dla znajomych */
#define GG_S_F(x) (((x) & GG_STATUS_FRIENDS_MASK) != 0) #define GG_S_F(x) (((x) & GG_STATUS_FRIENDS_MASK) != 0)
/* GG_S() stan bez uwzględnienia trybu tylko dla znajomych */ /* GG_S() stan bez uwzględnienia dodatkowych flag */
#define GG_S(x) ((x) & ~GG_STATUS_FRIENDS_MASK) #define GG_S(x) ((x) & GG_STATUS_MASK)
/* GG_S_A() dostępny */ /* GG_S_FF() chętny do rozmowy */
#define GG_S_A(x) (GG_S(x) == GG_STATUS_AVAIL || GG_S(x) == GG_STATUS_AVAIL #define GG_S_FF(x) (GG_S(x) == GG_STATUS_FFC || GG_S(x) == GG_STATUS_FFC_DE
_DESCR) SCR)
/* GG_S_AV() dostępny */
#define GG_S_AV(x) (GG_S(x) == GG_STATUS_AVAIL || GG_S(x) == GG_STATUS_AVAI
L_DESCR)
/* GG_S_AW() zaraz wracam */
#define GG_S_AW(x) (GG_S(x) == GG_STATUS_BUSY || GG_S(x) == GG_STATUS_BUSY_
DESCR)
/* GG_S_DD() nie przeszkadzać */
#define GG_S_DD(x) (GG_S(x) == GG_STATUS_DND || GG_S(x) == GG_STATUS_DND_DE
SCR)
/* GG_S_NA() niedostępny */ /* GG_S_NA() niedostępny */
#define GG_S_NA(x) (GG_S(x) == GG_STATUS_NOT_AVAIL || GG_S(x) == GG_STATUS_ NOT_AVAIL_DESCR) #define GG_S_NA(x) (GG_S(x) == GG_STATUS_NOT_AVAIL || GG_S(x) == GG_STATUS_ NOT_AVAIL_DESCR)
/* GG_S_B() zajęty */
#define GG_S_B(x) (GG_S(x) == GG_STATUS_BUSY || GG_S(x) == GG_STATUS_BUSY_D
ESCR)
/* GG_S_I() niewidoczny */ /* GG_S_I() niewidoczny */
#define GG_S_I(x) (GG_S(x) == GG_STATUS_INVISIBLE || GG_S(x) == GG_STATUS_I NVISIBLE_DESCR) #define GG_S_I(x) (GG_S(x) == GG_STATUS_INVISIBLE || GG_S(x) == GG_STATUS_I NVISIBLE_DESCR)
/* GG_S_A() dostępny lub chętny do rozmowy */
#define GG_S_A(x) (GG_S_FF(x) || GG_S_AV(x))
/* GG_S_B() zajęty lub nie przeszkadzać */
#define GG_S_B(x) (GG_S_AW(x) || GG_S_DD(x))
/* GG_S_D() stan opisowy */ /* GG_S_D() stan opisowy */
#define GG_S_D(x) (GG_S(x) == GG_STATUS_NOT_AVAIL_DESCR || GG_S(x) == GG_ST #define GG_S_D(x) (GG_S(x) == GG_STATUS_NOT_AVAIL_DESCR || \
ATUS_AVAIL_DESCR || GG_S(x) == GG_STATUS_BUSY_DESCR || GG_S(x) == GG_STATUS GG_S(x) == GG_STATUS_FFC_DESCR || \
_INVISIBLE_DESCR) GG_S(x) == GG_STATUS_AVAIL_DESCR || \
GG_S(x) == GG_STATUS_BUSY_DESCR || \
GG_S(x) == GG_STATUS_DND_DESCR || \
GG_S(x) == GG_STATUS_INVISIBLE_DESCR)
/* GG_S_BL() blokowany lub blokujący */ /* GG_S_BL() blokowany lub blokujący */
#define GG_S_BL(x) (GG_S(x) == GG_STATUS_BLOCKED) #define GG_S_BL(x) (GG_S(x) == GG_STATUS_BLOCKED)
/** /**
* Zmiana statusu (pakiet \c GG_NEW_STATUS) * Zmiana statusu (pakiet \c GG_NEW_STATUS i \c GG_NEW_STATUS80BETA)
*/ */
struct gg_new_status { struct gg_new_status {
uint32_t status; /**< Nowy status */ uint32_t status; /**< Nowy status */
} GG_PACKED; } GG_PACKED;
#define GG_NOTIFY_FIRST 0x000f #define GG_NOTIFY_FIRST 0x000f
#define GG_NOTIFY_LAST 0x0010 #define GG_NOTIFY_LAST 0x0010
#define GG_NOTIFY 0x0010 #define GG_NOTIFY 0x0010
skipping to change at line 1862 skipping to change at line 1990
#define GG_DCC7_NEW 0x20 #define GG_DCC7_NEW 0x20
struct gg_dcc7_new { struct gg_dcc7_new {
gg_dcc7_id_t id; /* identyfikator połączenia */ gg_dcc7_id_t id; /* identyfikator połączenia */
uint32_t uin_from; /* numer nadawcy */ uint32_t uin_from; /* numer nadawcy */
uint32_t uin_to; /* numer odbiorcy */ uint32_t uin_to; /* numer odbiorcy */
uint32_t type; /* rodzaj transmisji */ uint32_t type; /* rodzaj transmisji */
unsigned char filename[GG_DCC7_FILENAME_LEN]; /* nazwa pliku */ unsigned char filename[GG_DCC7_FILENAME_LEN]; /* nazwa pliku */
uint32_t size; /* rozmiar pliku */ uint32_t size; /* rozmiar pliku */
uint32_t dunno1; /* 0x00000000 */ uint32_t size_hi; /* rozmiar pliku (starsze bajty) */
unsigned char hash[GG_DCC7_HASH_LEN]; /* hash SHA1 */ unsigned char hash[GG_DCC7_HASH_LEN]; /* hash SHA1 */
} GG_PACKED; } GG_PACKED;
#define GG_DCC7_ACCEPT 0x21 #define GG_DCC7_ACCEPT 0x21
struct gg_dcc7_accept { struct gg_dcc7_accept {
uint32_t uin; /* numer przyjmującego połączenie */ uint32_t uin; /* numer przyjmującego połączenie */
gg_dcc7_id_t id; /* identyfikator połączenia */ gg_dcc7_id_t id; /* identyfikator połączenia */
uint32_t offset; /* offset przy wznawianiu transmisji */ uint32_t offset; /* offset przy wznawianiu transmisji */
uint32_t dunno1; /* 0x00000000 */ uint32_t dunno1; /* 0x00000000 */
 End of changes. 57 change blocks. 
137 lines changed or deleted 296 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/