comparison src/protocols/msn/httpmethod.c @ 8298:c719f9a181d4

[gaim-migrate @ 9022] Though it doesn't fix a thing, this is a better timer implementation for HTTP polling. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Fri, 20 Feb 2004 21:37:45 +0000
parents ef881489396e
children 7402101c0319
comparison
equal deleted inserted replaced
8297:a6e8ef48c7a4 8298:c719f9a181d4
46 } MsnHttpQueueData; 46 } MsnHttpQueueData;
47 47
48 static gboolean 48 static gboolean
49 http_poll(gpointer data) 49 http_poll(gpointer data)
50 { 50 {
51 MsnServConn *servconn = data; 51 MsnSession *session = data;
52 52 MsnServConn *servconn;
53 gaim_debug_info("msn", "Polling server %s.\n", 53 GList *l;
54 servconn->http_data->gateway_ip); 54
55 msn_http_servconn_poll(servconn); 55 for (l = session->servconns; l != NULL; l = l->next)
56 56 {
57 servconn->http_data->timer = 0; 57 servconn = (MsnServConn *)l->data;
58 58
59 gaim_debug(GAIM_DEBUG_INFO, "msn", "Returning from http_poll\n"); 59 if (servconn->http_data->dirty)
60 60 {
61 return FALSE; 61 gaim_debug_info("msn", "Polling server %s.\n",
62 servconn->http_data->gateway_ip);
63 msn_http_servconn_poll(servconn);
64 }
65 }
66
67 return TRUE;
62 } 68 }
63 69
64 static void 70 static void
65 stop_timer(MsnServConn *servconn) 71 stop_timer(MsnSession *session)
66 { 72 {
67 if (servconn->http_data->timer) 73 if (session->http_poll_timer)
68 { 74 {
69 gaim_debug(GAIM_DEBUG_INFO, "msn", "Stopping timer\n"); 75 gaim_debug(GAIM_DEBUG_INFO, "msn", "Stopping timer\n");
70 gaim_timeout_remove(servconn->http_data->timer); 76 gaim_timeout_remove(session->http_poll_timer);
71 servconn->http_data->timer = 0; 77 session->http_poll_timer = 0;
72 } 78 }
73 } 79 }
74 80
75 static void 81 static void
76 start_timer(MsnServConn *servconn) 82 start_timer(MsnSession *session)
77 { 83 {
78 stop_timer(servconn); 84 stop_timer(session);
79 85
80 gaim_debug(GAIM_DEBUG_INFO, "msn", "Starting timer\n"); 86 gaim_debug(GAIM_DEBUG_INFO, "msn", "Starting timer\n");
81 servconn->http_data->timer = gaim_timeout_add(5000, http_poll, servconn); 87 session->http_poll_timer = gaim_timeout_add(5000, http_poll, session);
88 }
89
90 void
91 msn_http_session_init(MsnSession *session)
92 {
93 g_return_if_fail(session != NULL);
94
95 start_timer(session);
96 }
97
98 void
99 msn_http_session_uninit(MsnSession *session)
100 {
101 g_return_if_fail(session != NULL);
102
103 stop_timer(session);
82 } 104 }
83 105
84 size_t 106 size_t
85 msn_http_servconn_write(MsnServConn *servconn, const char *buf, size_t size, 107 msn_http_servconn_write(MsnServConn *servconn, const char *buf, size_t size,
86 const char *server_type) 108 const char *server_type)
178 } while (s < needed); 200 } while (s < needed);
179 201
180 g_free(temp); 202 g_free(temp);
181 203
182 servconn->http_data->waiting_response = TRUE; 204 servconn->http_data->waiting_response = TRUE;
183
184 servconn->http_data->virgin = FALSE; 205 servconn->http_data->virgin = FALSE;
185 206 servconn->http_data->dirty = FALSE;
186 stop_timer(servconn);
187 207
188 return s; 208 return s;
189 } 209 }
190 210
191 void 211 void
224 s = write(servconn->fd, temp, strlen(temp)); 244 s = write(servconn->fd, temp, strlen(temp));
225 245
226 g_free(temp); 246 g_free(temp);
227 247
228 servconn->http_data->waiting_response = TRUE; 248 servconn->http_data->waiting_response = TRUE;
229 249 servconn->http_data->dirty = FALSE;
230 stop_timer(servconn);
231 250
232 if (s <= 0) 251 if (s <= 0)
233 gaim_connection_error(servconn->session->account->gc, 252 gaim_connection_error(servconn->session->account->gc,
234 _("Write error")); 253 _("Write error"));
235 } 254 }
414 433
415 g_free(queue_data->buffer); 434 g_free(queue_data->buffer);
416 g_free(queue_data); 435 g_free(queue_data);
417 } 436 }
418 else 437 else
419 start_timer(servconn); 438 servconn->http_data->dirty = TRUE;
420 439
421 return TRUE; 440 return TRUE;
422 } 441 }
423 442