]>
Commit | Line | Data |
---|---|---|
b9f9d7d6 AM |
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 | |
8 | ||
9 | this is for irssi/irssi#1145 | |
10 | --- | |
11 | src/core/xep/ping.c | 50 +++++++++++++++++++++++++++++++++------------ | |
12 | 1 file changed, 37 insertions(+), 13 deletions(-) | |
13 | ||
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 | |
18 | @@ -36,15 +36,40 @@ | |
19 | ||
20 | #define XMLNS_PING "urn:xmpp:ping" | |
21 | ||
22 | +#if defined(IRSSI_ABI_VERSION) && IRSSI_ABI_VERSION >= 25 | |
23 | +#define NO_TIMEVAL | |
24 | +#define TimeType gint64 | |
25 | +#else | |
26 | +#define TimeType GTimeVal | |
27 | +#endif | |
28 | + | |
29 | struct ping_data { | |
30 | - char *id; | |
31 | - GTimeVal time; | |
32 | + char *id; | |
33 | + TimeType time; | |
34 | }; | |
35 | ||
36 | static int timeout_tag; | |
37 | static GSList *supported_servers; | |
38 | static DATALIST *pings; | |
39 | ||
40 | +#ifdef NO_TIMEVAL | |
41 | + | |
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) | |
47 | + | |
48 | +#else | |
49 | + | |
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)) | |
55 | + | |
56 | +#endif | |
57 | + | |
58 | static void | |
59 | request_ping(XMPP_SERVER_REC *server, const char *dest) | |
60 | { | |
61 | @@ -63,13 +88,13 @@ request_ping(XMPP_SERVER_REC *server, const char *dest) | |
62 | g_free(server->ping_id); | |
63 | 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); | |
68 | } else { | |
69 | pd = g_new0(struct ping_data, 1); | |
70 | pd->id = | |
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); | |
75 | } | |
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, | |
78 | { | |
79 | DATALIST_REC *rec; | |
80 | LmMessageNode *node; | |
81 | - GTimeVal now; | |
82 | + TimeType now; | |
83 | struct ping_data *pd; | |
84 | ||
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); | |
91 | - server->lag = | |
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) { | |
101 | pd = rec->data; | |
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)); | |
108 | } | |
109 | } | |
110 | } else if (type == LM_MESSAGE_SUB_TYPE_GET) { | |
111 | @@ -166,10 +190,10 @@ check_ping_func(void) | |
112 | now = time(NULL); | |
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 */ | |
118 | if (max_lag > 1 && | |
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, | |
123 | server); |