comparison src/protocols/msn/cmdproc.c @ 10481:bcfea6c3d5c9

[gaim-migrate @ 11769] Patch 1093958 from Felipe Contreras. It fixes stuff. I also made some tweaks to make valgrind a bit happier. committer: Tailor Script <tailor@pidgin.im>
author Stu Tomlinson <stu@nosnilmot.com>
date Fri, 07 Jan 2005 02:48:33 +0000
parents e5455f1dc9b6
children 1a97d5e88d12
comparison
equal deleted inserted replaced
10480:8e0a91d11362 10481:bcfea6c3d5c9
41 void 41 void
42 msn_cmdproc_destroy(MsnCmdProc *cmdproc) 42 msn_cmdproc_destroy(MsnCmdProc *cmdproc)
43 { 43 {
44 MsnTransaction *trans; 44 MsnTransaction *trans;
45 45
46 if (cmdproc->last_trans != NULL)
47 g_free(cmdproc->last_trans);
48
49 while ((trans = g_queue_pop_head(cmdproc->txqueue)) != NULL) 46 while ((trans = g_queue_pop_head(cmdproc->txqueue)) != NULL)
50 msn_transaction_destroy(trans); 47 msn_transaction_destroy(trans);
51 48
52 g_queue_free(cmdproc->txqueue); 49 g_queue_free(cmdproc->txqueue);
53 50
54 msn_history_destroy(cmdproc->history); 51 msn_history_destroy(cmdproc->history);
52 g_free(cmdproc);
55 } 53 }
56 54
57 void 55 void
58 msn_cmdproc_process_queue(MsnCmdProc *cmdproc) 56 msn_cmdproc_process_queue(MsnCmdProc *cmdproc)
59 { 57 {
60 MsnTransaction *trans; 58 MsnTransaction *trans;
61 59
62 while ((trans = g_queue_pop_head(cmdproc->txqueue)) != NULL && 60 while ((trans = g_queue_pop_head(cmdproc->txqueue)) != NULL)
63 cmdproc->error == 0)
64 {
65 msn_cmdproc_send_trans(cmdproc, trans); 61 msn_cmdproc_send_trans(cmdproc, trans);
66 }
67 } 62 }
68 63
69 void 64 void
70 msn_cmdproc_queue_trans(MsnCmdProc *cmdproc, MsnTransaction *trans) 65 msn_cmdproc_queue_trans(MsnCmdProc *cmdproc, MsnTransaction *trans)
71 { 66 {
107 MsnServConn *servconn; 102 MsnServConn *servconn;
108 char *data; 103 char *data;
109 size_t len; 104 size_t len;
110 105
111 g_return_if_fail(cmdproc != NULL); 106 g_return_if_fail(cmdproc != NULL);
112 g_return_if_fail(cmdproc->ready);
113 g_return_if_fail(trans != NULL); 107 g_return_if_fail(trans != NULL);
114 108
115 servconn = cmdproc->servconn; 109 servconn = cmdproc->servconn;
110
111 if (!servconn->connected)
112 return;
113
116 msn_history_add(cmdproc->history, trans); 114 msn_history_add(cmdproc->history, trans);
117 115
118 data = msn_transaction_to_string(trans); 116 data = msn_transaction_to_string(trans);
119
120 if (cmdproc->last_trans != NULL)
121 g_free(cmdproc->last_trans);
122
123 cmdproc->last_trans = g_strdup(data);
124 117
125 len = strlen(data); 118 len = strlen(data);
126 119
127 show_debug_cmd(cmdproc, FALSE, data); 120 show_debug_cmd(cmdproc, FALSE, data);
128 121
151 char *params = NULL; 144 char *params = NULL;
152 va_list arg; 145 va_list arg;
153 size_t len; 146 size_t len;
154 147
155 g_return_if_fail(cmdproc != NULL); 148 g_return_if_fail(cmdproc != NULL);
156 g_return_if_fail(cmdproc->ready);
157 g_return_if_fail(command != NULL); 149 g_return_if_fail(command != NULL);
158 150
159 servconn = cmdproc->servconn; 151 servconn = cmdproc->servconn;
152
153 if (!servconn->connected)
154 return;
160 155
161 if (format != NULL) 156 if (format != NULL)
162 { 157 {
163 va_start(arg, format); 158 va_start(arg, format);
164 params = g_strdup_vprintf(format, arg); 159 params = g_strdup_vprintf(format, arg);
187 { 182 {
188 MsnTransaction *trans; 183 MsnTransaction *trans;
189 va_list arg; 184 va_list arg;
190 185
191 g_return_if_fail(cmdproc != NULL); 186 g_return_if_fail(cmdproc != NULL);
192 g_return_if_fail(cmdproc->ready);
193 g_return_if_fail(command != NULL); 187 g_return_if_fail(command != NULL);
188
189 if (!cmdproc->servconn->connected)
190 return;
194 191
195 trans = g_new0(MsnTransaction, 1); 192 trans = g_new0(MsnTransaction, 1);
196 193
197 trans->command = g_strdup(command); 194 trans->command = g_strdup(command);
198 195
315 { 312 {
316 gaim_debug_warning("msn", "Unhandled command '%s'\n", 313 gaim_debug_warning("msn", "Unhandled command '%s'\n",
317 cmd->command); 314 cmd->command);
318 } 315 }
319 316
320 #if 1
321 /* TODO this is really ugly */
322 /* Since commands have not stored payload and we need it for pendent
323 * commands at the time we process again the same command we will try
324 * to read again the payload of payload_len size but we will actually
325 * read sometime else, and reading from server synchronization goes to
326 * hell. */
327 /* Now we store the payload in the command when we queue them :D */
328
329 if (trans != NULL && trans->pendent_cmd != NULL) 317 if (trans != NULL && trans->pendent_cmd != NULL)
330 if (cmdproc->ready) 318 msn_transaction_unqueue_cmd(trans, cmdproc);
331 msn_transaction_unqueue_cmd(trans, cmdproc);
332 #endif
333 } 319 }
334 320
335 void 321 void
336 msn_cmdproc_process_cmd_text(MsnCmdProc *cmdproc, const char *command) 322 msn_cmdproc_process_cmd_text(MsnCmdProc *cmdproc, const char *command)
337 { 323 {
342 328
343 cmdproc->last_cmd = msn_command_from_string(command); 329 cmdproc->last_cmd = msn_command_from_string(command);
344 330
345 msn_cmdproc_process_cmd(cmdproc, cmdproc->last_cmd); 331 msn_cmdproc_process_cmd(cmdproc, cmdproc->last_cmd);
346 } 332 }
347
348 void
349 msn_cmdproc_show_error(MsnCmdProc *cmdproc, int error)
350 {
351 GaimConnection *gc =
352 gaim_account_get_connection(cmdproc->session->account);
353
354 char *tmp;
355
356 tmp = NULL;
357
358 switch (error)
359 {
360 case MSN_ERROR_MISC:
361 tmp = _("Miscellaneous error"); break;
362 case MSN_ERROR_SIGNOTHER:
363 gc->wants_to_die = TRUE;
364 tmp = _("You have signed on from another location."); break;
365 case MSN_ERROR_SERVDOWN:
366 tmp = _("The MSN servers are going down temporarily."); break;
367 default:
368 break;
369 }
370
371 if (tmp != NULL)
372 {
373 gaim_connection_error(gc, tmp);
374 }
375 }