1 From c7728ea5aa2f4e584159b3d12ad815294c44ca6a Mon Sep 17 00:00:00 2001
2 From: Ailin Nemui <ailin@z30a.localdomain>
3 Date: Tue, 17 Mar 2020 14:32:52 +0100
4 Subject: [PATCH] add compatibility code to GTimeVal -> gint64 transition
5 Origin: https://github.com/cdidier/irssi-xmpp/pull/53
6 Reviewed-By: Simon Chopin <schopin@ubuntu.com>
7 Last-Update: 2022-07-29
9 this is for irssi/irssi#1145
11 src/core/xep/ping.c | 50 +++++++++++++++++++++++++++++++++------------
12 1 file changed, 37 insertions(+), 13 deletions(-)
14 diff --git a/src/core/xep/ping.c b/src/core/xep/ping.c
15 index d51930a..7b811cb 100644
16 --- a/src/core/xep/ping.c
17 +++ b/src/core/xep/ping.c
20 #define XMLNS_PING "urn:xmpp:ping"
22 +#if defined(IRSSI_ABI_VERSION) && IRSSI_ABI_VERSION >= 25
24 +#define TimeType gint64
26 +#define TimeType GTimeVal
36 static int timeout_tag;
37 static GSList *supported_servers;
38 static DATALIST *pings;
42 +#define set_current_time(var) (var) = g_get_real_time()
43 +#define clear_time(var) (var) = 0
44 +#define has_time(var) ((var) != 0)
45 +#define get_time_sec(var) ((var) / G_TIME_SPAN_SECOND)
46 +#define get_time_diff(to, from) (to) - (from)
50 +#define set_current_time(var) g_get_current_time(&(var))
51 +#define clear_time(var) memset(&(var), 0, sizeof((var)))
52 +#define has_time(var) ((var).tv_sec != 0)
53 +#define get_time_sec(var) ((var).tv_sec)
54 +#define get_time_diff(to, from) (int) get_timeval_diff(&(to), &(from))
59 request_ping(XMPP_SERVER_REC *server, const char *dest)
61 @@ -63,13 +88,13 @@ request_ping(XMPP_SERVER_REC *server, const char *dest)
62 g_free(server->ping_id);
64 g_strdup(lm_message_node_get_attribute(lmsg->node, "id"));
65 - g_get_current_time(&server->lag_sent);
66 + set_current_time(server->lag_sent);
67 server->lag_last_check = time(NULL);
69 pd = g_new0(struct ping_data, 1);
71 g_strdup(lm_message_node_get_attribute(lmsg->node, "id"));
72 - g_get_current_time(&pd->time);
73 + set_current_time(pd->time);
74 datalist_add(pings, server, dest, pd);
76 signal_emit("xmpp send iq", 2, server, lmsg);
77 @@ -98,7 +123,7 @@ sig_recv_iq(XMPP_SERVER_REC *server, LmMessage *lmsg, const int type,
85 if (type == LM_MESSAGE_SUB_TYPE_RESULT) {
86 @@ -106,19 +131,18 @@ sig_recv_iq(XMPP_SERVER_REC *server, LmMessage *lmsg, const int type,
87 if (server->ping_id != NULL
88 && (*from == '\0' || strcmp(from, server->domain) == 0)
89 && strcmp(id, server->ping_id) == 0) {
90 - g_get_current_time(&now);
92 - (int)get_timeval_diff(&now, &server->lag_sent);
93 - memset(&server->lag_sent, 0, sizeof(server->lag_sent));
94 + set_current_time(now);
95 + server->lag = get_time_diff(now, server->lag_sent);
96 + clear_time(server->lag_sent);
97 g_free_and_null(server->ping_id);
98 signal_emit("server lag", 1, server);
99 } else if (lmsg->node->children == NULL
100 && (rec = datalist_find(pings, server, from)) != NULL) {
102 if (strcmp(id, pd->id) == 0) {
103 - g_get_current_time(&now);
104 + set_current_time(now);
105 signal_emit("xmpp ping", 3, server, from,
106 - get_timeval_diff(&now, &pd->time));
107 + get_time_diff(now, pd->time));
110 } else if (type == LM_MESSAGE_SUB_TYPE_GET) {
111 @@ -166,10 +190,10 @@ check_ping_func(void)
113 for (tmp = supported_servers; tmp != NULL; tmp = tmp->next) {
114 server = XMPP_SERVER(tmp->data);
115 - if (server->lag_sent.tv_sec != 0) {
116 + if (has_time(server->lag_sent)) {
117 /* waiting for lag reply */
119 - (now - server->lag_sent.tv_sec) > max_lag) {
120 + (now - get_time_sec(server->lag_sent)) > max_lag) {
121 /* too much lag - disconnect */
122 signal_emit("server lag disconnect", 1,