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