Prosta łatka dodająca wsparcie dla pakietu GG_USERLIST100_VERSION=0x5c.
Mam nadzieję, że niczego nie przegapiłem.

Pozdro
Index: include/libgadu.h.in
===================================================================
--- include/libgadu.h.in	(wersja 1087)
+++ include/libgadu.h.in	(kopia robocza)
@@ -695,6 +695,8 @@
 	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 */
 };
 
 #define GG_EVENT_SEARCH50_REPLY GG_EVENT_PUBDIR50_SEARCH_REPLY
@@ -985,6 +987,13 @@
 };
 
 /**
+ * Opis zdarzenia \c GG_EVENT_USERLIST100_VERSION.
+ */
+struct gg_event_userlist100_version {
+	int version;		/**< numer wersji listy kontaktów na serwerze */
+};
+
+/**
  * Unia wszystkich zdarzeń zwracanych przez funkcje \c gg_watch_fd(), 
  * \c gg_dcc_watch_fd() i \c gg_dcc7_watch_fd().
  *
@@ -1018,6 +1027,7 @@
 	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) */
 };
 
 /**
@@ -2182,6 +2192,12 @@
 #define GG_DCC7_TIMEOUT_FILE_ACK 300	/* 5 minut */
 #define GG_DCC7_TIMEOUT_VOICE_ACK 300	/* 5 minut */
 
+#define GG_USERLIST100_VERSION 0x5c
+
+struct gg_userlist100_version {
+	uint32_t version;
+} GG_PACKED;
+
 #ifdef __cplusplus
 }
 #ifdef _WIN32
Index: src/handlers.c
===================================================================
--- src/handlers.c	(wersja 1087)
+++ src/handlers.c	(kopia robocza)
@@ -1695,6 +1695,36 @@
 }
 
 /**
+ * \internal Obsługuje pakiet GG_USERLIST100_VERSION.
+ *
+ * Patrz gg_packet_handler_t
+ */
+static int gg_session_handle_userlist_100_version(struct gg_session *gs, uint32_t type, const char *ptr, size_t len, struct gg_event *ge)
+{
+	struct gg_userlist100_version *version = (struct gg_userlist100_version*) ptr;
+	int res = 0;
+
+	gg_debug_session(gs, GG_DEBUG_MISC, "// gg_watch_fd_connected() received userlist 100 version\n");
+
+	int version_number = gg_fix32(version->version);
+
+	if (version_number > 0xffff) {
+		gg_debug_session(gs, GG_DEBUG_MISC, "// gg_session_userlist_100_version() malformed packet (1)\n");
+		goto malformed;
+	}
+
+	ge->type = GG_EVENT_USERLIST100_VERSION;
+	ge->event.userlist100_version.version = version_number;
+
+	return 0;
+
+malformed:
+	ge->type = GG_EVENT_NONE;
+
+	return res;
+}
+
+/**
  * \internal Tablica obsługiwanych pakietów
  */
 static const gg_packet_handler_t handlers[] =
@@ -1734,6 +1764,7 @@
 	{ GG_MULTILOGON_INFO, GG_STATE_CONNECTED, sizeof(struct gg_multilogon_info), gg_session_handle_multilogon_info },
 	{ GG_XML_ACTION, GG_STATE_CONNECTED, 0, gg_session_handle_xml_event },
 	{ GG_RECV_OWN_MSG, GG_STATE_CONNECTED, sizeof(struct gg_recv_msg80), gg_session_handle_recv_msg_80 },
+	{ GG_USERLIST100_VERSION, GG_STATE_CONNECTED, sizeof(struct gg_userlist100_version), gg_session_handle_userlist_100_version },
 };
 
 /**
Index: src/debug.c
===================================================================
--- src/debug.c	(wersja 1087)
+++ src/debug.c	(kopia robocza)
@@ -328,6 +328,7 @@
 	GG_DEBUG_EVENT(GG_EVENT_USER_DATA)
 	GG_DEBUG_EVENT(GG_EVENT_MULTILOGON_MSG)
 	GG_DEBUG_EVENT(GG_EVENT_MULTILOGON_INFO)
+	GG_DEBUG_EVENT(GG_EVENT_USERLIST100_VERSION)
 #undef GG_DEBUG_EVENT
 
 	// Celowo nie ma default, żeby kompilator wyłapał brakujące stany
_______________________________________________
libgadu-devel mailing list
[email protected]
http://lists.ziew.org/mailman/listinfo/libgadu-devel

Reply via email to