Mercurial > pidgin.yaz
diff libpurple/protocols/gg/lib/libgadu.h @ 32072:3a90a59ddea2
Update libgadu to 0.11.0 plus local changes; thanks to Tomasz Wasilczyk.
Fixes 14248
author | Ethan Blanton <elb@pidgin.im> |
---|---|
date | Sun, 05 Jun 2011 01:28:53 +0000 |
parents | 66b30e47caec |
children | 84f72590a319 |
line wrap: on
line diff
--- a/libpurple/protocols/gg/lib/libgadu.h Tue May 24 01:48:26 2011 +0000 +++ b/libpurple/protocols/gg/lib/libgadu.h Sun Jun 05 01:28:53 2011 +0000 @@ -1,4 +1,4 @@ -/* $Id: libgadu.h.in 1037 2010-12-17 22:18:08Z wojtekka $ */ +/* $Id: libgadu.h.in 1105 2011-05-25 21:34:50Z wojtekka $ */ /* * (C) Copyright 2001-2009 Wojtek Kaniewski <wojtekka@irc.pl> @@ -57,7 +57,7 @@ #undef GG_CONFIG_HAVE_PTHREAD /* Defined if pthread resolver is the default one. */ -#undef GG_CONFIG_PTHREAD_DEFAULT +#undef GG_CONFIG_PTHREAD_DEFAULT /* Defined if this machine has C99-compiliant vsnprintf(). */ #undef GG_CONFIG_HAVE_C99_VSNPRINTF @@ -72,15 +72,14 @@ #undef GG_CONFIG_HAVE_LONG_LONG /* Defined if libgadu was compiled and linked with GnuTLS support. */ -#ifdef USE_GNUTLS -# define GG_CONFIG_HAVE_GNUTLS -#else -# undef GG_CONFIG_HAVE_GNUTLS -#endif +#undef GG_CONFIG_HAVE_GNUTLS /* Defined if libgadu was compiled and linked with OpenSSL support. */ #undef GG_CONFIG_HAVE_OPENSSL +/* Defined if libgadu was compiled and linked with zlib support. */ +#undef GG_CONFIG_HAVE_ZLIB + /* Defined if uintX_t types are defined in <stdint.h>. */ #undef GG_CONFIG_HAVE_STDINT_H @@ -235,11 +234,11 @@ uint32_t hub_addr; /**< Adres huba po rozwiązaniu nazwy */ uint32_t server_addr; /**< Adres serwera otrzymany od huba */ - uint32_t client_addr; /**< Adres gniazda dla połączeń bezpośrednich do wersji Gadu-Gadu 6.x */ - uint16_t client_port; /**< Port gniazda dla połączeń bezpośrednich do wersji Gadu-Gadu 6.x */ + uint32_t client_addr; /**< Adres gniazda dla połączeń bezpośrednich */ + uint16_t client_port; /**< Port gniazda dla połączeń bezpośrednich */ - uint32_t external_addr; /**< Publiczny adres dla połączeń bezpośrednich do wersji Gadu-Gadu 6.x */ - uint16_t external_port; /**< Publiczny port dla połączeń bezpośrednich do wersji Gadu-Gadu 6.x */ + uint32_t external_addr; /**< Publiczny adres dla połączeń bezpośrednich */ + uint16_t external_port; /**< Publiczny port dla połączeń bezpośrednich */ uin_t uin; /**< Własny numer Gadu-Gadu */ char *password; /**< Hasło (zwalniane po użyciu) */ @@ -284,7 +283,7 @@ int send_left; /**< Liczba bajtów do wysłania */ struct gg_dcc7 *dcc7_list; /**< Lista połączeń bezpośrednich skojarzonych z sesją */ - + int soft_timeout; /**< Flaga mówiąca, że po przekroczeniu \c timeout należy wywołać \c gg_watch_fd() */ int protocol_flags; /**< Flagi protokołu */ @@ -573,6 +572,17 @@ }; /** + * Flaga połączenia szyfrowanego. + * + * \ingroup login + */ +typedef enum { + GG_SSL_DISABLED = 0, /**< Połączenie SSL wyłączone */ + GG_SSL_ENABLED, /**< Połączenie SSL włączone gdy dostępne */ + GG_SSL_REQUIRED /**< Połączenie SSL wymagane */ +} gg_ssl_t; + +/** * Parametry połączenia z serwerem Gadu-Gadu. Parametry zostały przeniesione * do struktury, by uniknąć zmian API po rozszerzeniu protokołu i dodaniu * kolejnych opcji połączenia. Część parametrów, które nie są już aktualne @@ -588,19 +598,15 @@ char *status_descr; /**< Początkowy opis użytkownika (domyślnie brak) */ uint32_t server_addr; /**< Adres serwera Gadu-Gadu (domyślnie pobierany automatycznie) */ uint16_t server_port; /**< Port serwera Gadu-Gadu (domyślnie pobierany automatycznie) */ -#ifndef DOXYGEN - uint32_t client_addr; /**< Adres połączeń bezpośrednich (nieaktualne) */ - uint16_t client_port; /**< Port połączeń bezpośrednich (nieaktualne) */ -#endif + uint32_t client_addr; /**< Adres połączeń bezpośrednich (domyślnie dobierany automatycznie) */ + uint16_t client_port; /**< Port połączeń bezpośrednich (domyślnie dobierany automatycznie) */ int protocol_version; /**< Wersja protokołu wysyłana do serwera (domyślnie najnowsza obsługiwana) */ char *client_version; /**< Wersja klienta wysyłana do serwera (domyślnie najnowsza znana) */ int has_audio; /**< Flaga obsługi połączeń głosowych */ int last_sysmsg; /**< Numer ostatnio odebranej wiadomości systemowej */ - uint32_t external_addr; /**< Adres publiczny dla połączeń bezpośrednich (6.x) */ - uint16_t external_port; /**< Port publiczny dla połączeń bezpośrednich (6.x) */ -#ifndef DOXYGEN - int tls; /**< Flaga połączenia szyfrowanego (nieaktualna) */ -#endif + uint32_t external_addr; /**< Adres publiczny dla połączeń bezpośrednich (domyślnie dobierany automatycznie) */ + uint16_t external_port; /**< Port publiczny dla połączeń bezpośrednich (domyślnie dobierany automatycznie) */ + int tls; /**< Flaga połączenia szyfrowanego (patrz \ref gg_ssl_t) */ int image_size; /**< Maksymalny rozmiar obsługiwanych obrazków w kilobajtach */ #ifndef DOXYGEN int era_omnix; /**< Flaga udawania klienta Era Omnix (nieaktualna) */ @@ -633,6 +639,7 @@ int gg_send_message_ctcp(struct gg_session *sess, int msgclass, uin_t recipient, const unsigned char *message, int message_len); int gg_ping(struct gg_session *sess); int gg_userlist_request(struct gg_session *sess, char type, const char *request); +int gg_userlist100_request(struct gg_session *sess, char type, unsigned int version, char format_type, const char *request); int gg_image_request(struct gg_session *sess, uin_t recipient, int size, uint32_t crc32); int gg_image_reply(struct gg_session *sess, uin_t recipient, const char *filename, const char *image, int size); int gg_typing_notification(struct gg_session *sess, uin_t recipient, int length); @@ -705,6 +712,9 @@ GG_EVENT_USER_DATA, /**< Informacja o kontaktach */ GG_EVENT_MULTILOGON_MSG, /**< Wiadomość wysłana z innej sesji multilogowania */ GG_EVENT_MULTILOGON_INFO, /**< Informacja o innych sesjach multilogowania */ + + GG_EVENT_USERLIST100_VERSION, /**< Otrzymano numer wersji listy kontaktów na serwerze (10.0) */ + GG_EVENT_USERLIST100_REPLY, /**< Wynik importu lub eksportu listy kontaktów (10.0) */ }; #define GG_EVENT_SEARCH50_REPLY GG_EVENT_PUBDIR50_SEARCH_REPLY @@ -723,7 +733,9 @@ GG_FAILURE_TLS, /**< Błąd negocjacji szyfrowanego połączenia */ GG_FAILURE_NEED_EMAIL, /**< Serwer rozłączył nas z prośbą o zmianę adresu e-mail */ GG_FAILURE_INTRUDER, /**< Zbyt wiele prób połączenia z nieprawidłowym hasłem */ - GG_FAILURE_UNAVAILABLE /**< Serwery są wyłączone */ + GG_FAILURE_UNAVAILABLE, /**< Serwery są wyłączone */ + GG_FAILURE_PROXY, /**< Błąd serwera pośredniczącego */ + GG_FAILURE_HUB, /**< Błąd połączenia z hubem */ }; /** @@ -995,7 +1007,24 @@ }; /** - * Unia wszystkich zdarzeń zwracanych przez funkcje \c gg_watch_fd(), + * Opis zdarzenia \c GG_EVENT_USERLIST100_VERSION. + */ +struct gg_event_userlist100_version { + uint32_t version; /**< Numer wersji listy kontaktów na serwerze */ +}; + +/** + * Opis zdarzenia \c GG_EVENT_USERLIST100_REPLY. + */ +struct gg_event_userlist100_reply { + char type; /**< Rodzaj odpowiedzi */ + uint32_t version; /**< Aktualna wersja listy kontaktów na serwerze */ + char format_type; /**< Typ formatu listy kontaktów (żądany w \c gg_userlist100_request.format_type) */ + char *reply; /**< Treść listy kontaktów w przesyłanej wersji i formacie */ +}; + +/** + * Unia wszystkich zdarzeń zwracanych przez funkcje \c gg_watch_fd(), * \c gg_dcc_watch_fd() i \c gg_dcc7_watch_fd(). * * \ingroup events @@ -1028,6 +1057,8 @@ struct gg_event_user_data user_data; /**< Informacje o kontaktach */ struct gg_event_msg multilogon_msg; /**< Inna sesja wysłała wiadomość (\c GG_EVENT_MULTILOGON_MSG) */ struct gg_event_multilogon_info multilogon_info; /**< Informacja o innych sesjach multilogowania (\c GG_EVENT_MULTILOGON_INFO) */ + struct gg_event_userlist100_version userlist100_version; /**< Informacja o numerze wersji listy kontaktów na serwerze (\c GG_EVENT_USERLIST100_VERSION) */ + struct gg_event_userlist100_reply userlist100_reply; /**< Odpowiedź listy kontaktów (10.0) (\c GG_EVENT_USERLIST100_REPLY) */ }; /** @@ -1092,7 +1123,7 @@ #else -/** +/** * \ingroup pubdir50 * * Rodzaj pola zapytania. @@ -1158,7 +1189,7 @@ /** * Token autoryzacji niektórych operacji HTTP. - * + * * \ingroup token */ struct gg_token { @@ -1257,6 +1288,19 @@ const char *gg_libgadu_version(void); +/** + * Lista funkcji biblioteki, które zależą od zewnętrznych bibliotek. + * + * \ingroup version + */ +typedef enum { + GG_LIBGADU_FEATURE_SSL, /**< Biblioteka obsługuje połączenia szyfrowane */ + GG_LIBGADU_FEATURE_PTHREAD, /**< Biblioteka obsługuje rozwiązywanie nazw za pomocą wątków */ + GG_LIBGADU_FEATURE_USERLIST100, /**< Biblioteka obsługuje listę kontaktów zgodną z Gadu-Gadu 10 */ +} gg_libgadu_feature_t; + +int gg_libgadu_check_feature(gg_libgadu_feature_t feature); + extern int gg_proxy_enabled; extern char *gg_proxy_host; extern int gg_proxy_port; @@ -1281,7 +1325,7 @@ /** * \ingroup pubdir50 - * + * * Rodzaj zapytania lub odpowiedzi katalogu publicznego. */ enum { @@ -1362,10 +1406,6 @@ struct gg_http *gg_change_passwd2(uin_t uin, const char *passwd, const char *newpasswd, const char *email, const char *newemail, int async) GG_DEPRECATED; struct gg_http *gg_change_passwd3(uin_t uin, const char *passwd, const char *newpasswd, const char *qa, int async) GG_DEPRECATED; -int gg_resolve(int *fd, int *pid, const char *hostname) GG_DEPRECATED; -int gg_resolve_pthread(int *fd, void **resolver, const char *hostname) GG_DEPRECATED; -void gg_resolve_pthread_cleanup(void *arg, int kill) GG_DEPRECATED; - struct gg_change_info_request { char *first_name; char *last_name; @@ -1427,8 +1467,8 @@ int gg_send_packet(struct gg_session *sess, int type, ...) GG_DEPRECATED; unsigned int gg_login_hash(const unsigned char *password, unsigned int seed) GG_DEPRECATED; void gg_login_hash_sha1(const char *password, uint32_t seed, uint8_t *result) GG_DEPRECATED; -uint32_t gg_fix32(uint32_t x) GG_DEPRECATED;; -uint16_t gg_fix16(uint16_t x) GG_DEPRECATED;; +uint32_t gg_fix32(uint32_t x); +uint16_t gg_fix16(uint16_t x); #define fix16 gg_fix16 #define fix32 gg_fix32 char *gg_proxy_auth(void) GG_DEPRECATED; @@ -1506,7 +1546,7 @@ #else -/** +/** * \ingroup login * * Flagi opcji protokołu. @@ -2087,6 +2127,67 @@ uint8_t type; } GG_PACKED; +#ifndef DOXYGEN + +#define GG_USERLIST100_PUT 0x00 +#define GG_USERLIST100_GET 0x02 + +#else + +/** + * \ingroup importexport + * + * Rodzaj zapytania (10.0). + */ +enum { + GG_USERLIST100_PUT, /**< Eksport listy kontaktów. */ + GG_USERLIST100_GET, /**< Import listy kontaktów. */ +}; + +#endif /* DOXYGEN */ + +#ifndef DOXYGEN + +#define GG_USERLIST100_FORMAT_TYPE_NONE 0x00 +#define GG_USERLIST100_FORMAT_TYPE_GG70 0x01 +#define GG_USERLIST100_FORMAT_TYPE_GG100 0x02 + +#else + +/** + * \ingroup importexport + * + * Typ formatu listy kontaktów (10.0). + */ +enum { + GG_USERLIST100_FORMAT_TYPE_NONE, /**< Brak treści listy kontaktów. */ + GG_USERLIST100_FORMAT_TYPE_GG70, /**< Format listy kontaktów zgodny z Gadu-Gadu 7.0. */ + GG_USERLIST100_FORMAT_TYPE_GG100, /**< Format listy kontaktów zgodny z Gadu-Gadu 10.0. */ +}; + +#endif /* DOXYGEN */ + +#ifndef DOXYGEN + +#define GG_USERLIST100_REPLY_LIST 0x00 +#define GG_USERLIST100_REPLY_ACK 0x10 +#define GG_USERLIST100_REPLY_REJECT 0x12 + +#else + +/** + * \ingroup importexport + * + * Typ odpowiedzi listy kontaktów (10.0). + */ +enum { + GG_USERLIST100_REPLY_LIST, /**< W odpowiedzi znajduje się aktualna lista kontaktów na serwerze. */ + GG_USERLIST100_REPLY_ACK, /**< Potwierdzenie odebrania nowej wersji listy kontaktów. W polu \c gg_userlist100_reply.version znajduje się numer nowej wersji listy kontaktów. */ + GG_USERLIST100_REPLY_REJECT, /**< Odmowa przyjęcia nowej wersji listy kontaktów. W polu \c gg_userlist100_reply.version znajduje się numer wersji listy kontaktów aktualnie przechowywanej przez serwer. */ +}; + +#endif /* DOXYGEN */ + struct gg_dcc_tiny_packet { uint8_t type; /* rodzaj pakietu */ } GG_PACKED;