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;