Mercurial > pidgin.yaz
comparison src/protocols/simple/simple.c @ 12741:2b61e6ed85c3
[gaim-migrate @ 15088]
use GStrings to avoid unnecessary allocations and freeings
committer: Tailor Script <tailor@pidgin.im>
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Fri, 06 Jan 2006 00:32:19 +0000 |
parents | d5b8f4dc1622 |
children | e788741f4840 |
comparison
equal
deleted
inserted
replaced
12740:a7ad7fa611e6 | 12741:2b61e6ed85c3 |
---|---|
424 } | 424 } |
425 return ret; | 425 return ret; |
426 } | 426 } |
427 | 427 |
428 static void sendout_sipmsg(struct simple_account_data *sip, struct sipmsg *msg) { | 428 static void sendout_sipmsg(struct simple_account_data *sip, struct sipmsg *msg) { |
429 gchar *oldstr; | 429 GSList *tmp = msg->headers; |
430 gchar *outstr = g_strdup_printf("%s %s SIP/2.0\r\n", msg->method, msg->target); | |
431 gchar *name; | 430 gchar *name; |
432 gchar *value; | 431 gchar *value; |
433 GSList *tmp = msg->headers; | 432 GString *outstr = g_string_new(""); |
433 g_string_append_printf(outstr, "%s %s SIP/2.0\r\n", msg->method, msg->target); | |
434 while(tmp) { | 434 while(tmp) { |
435 oldstr = outstr; | 435 name = ((struct siphdrelement*) (tmp->data))->name; |
436 name = ((struct siphdrelement*)(tmp->data))->name; | 436 value = ((struct siphdrelement*) (tmp->data))->value; |
437 value = ((struct siphdrelement*)(tmp->data))->value; | 437 g_string_append_printf(outstr, "%s: %s\r\n", name, value); |
438 outstr = g_strdup_printf("%s%s: %s\r\n",oldstr, name, value); | |
439 g_free(oldstr); | |
440 tmp = g_slist_next(tmp); | 438 tmp = g_slist_next(tmp); |
441 } | 439 } |
442 oldstr = outstr; | 440 g_string_append_printf(outstr, "\r\n%s", msg->body ? msg->body : ""); |
443 if(msg->body) outstr = g_strdup_printf("%s\r\n%s", outstr, msg->body); | 441 sendout_pkt(sip->gc, outstr->str); |
444 else outstr = g_strdup_printf("%s\r\n", outstr); | 442 g_string_free(outstr, TRUE); |
445 g_free(oldstr); | |
446 sendout_pkt(sip->gc, outstr); | |
447 g_free(outstr); | |
448 } | 443 } |
449 | 444 |
450 static void send_sip_response(GaimConnection *gc, struct sipmsg *msg, int code, char *text, char *body) { | 445 static void send_sip_response(GaimConnection *gc, struct sipmsg *msg, int code, char *text, char *body) { |
451 GSList *tmp = msg->headers; | 446 GSList *tmp = msg->headers; |
452 char *oldstr; | 447 gchar *name; |
453 char *name; | 448 gchar *value; |
454 char *value; | 449 GString *outstr = g_string_new(""); |
455 char *outstr = g_strdup_printf("SIP/2.0 %d %s\r\n",code, text); | 450 g_string_append_printf(outstr, "SIP/2.0 %d %s\r\n", code, text); |
456 while(tmp) { | 451 while(tmp) { |
457 oldstr = outstr; | 452 name = ((struct siphdrelement*) (tmp->data))->name; |
458 name = ((struct siphdrelement*)(tmp->data))->name; | 453 value = ((struct siphdrelement*) (tmp->data))->value; |
459 value = ((struct siphdrelement*)(tmp->data))->value; | 454 g_string_append_printf(outstr, "%s: %s\r\n", name, value); |
460 outstr = g_strdup_printf("%s%s: %s\r\n",oldstr, name, value); | |
461 g_free(oldstr); | |
462 tmp = g_slist_next(tmp); | 455 tmp = g_slist_next(tmp); |
463 } | 456 } |
464 oldstr = outstr; | 457 g_string_append_printf(outstr, "\r\n%s", body ? body : ""); |
465 if(body) outstr = g_strdup_printf("%s\r\n%s",outstr,body); | 458 sendout_pkt(gc, outstr->str); |
466 else outstr = g_strdup_printf("%s\r\n",outstr); | 459 g_string_free(outstr, TRUE); |
467 g_free(oldstr); | |
468 sendout_pkt(gc, outstr); | |
469 g_free(outstr); | |
470 } | 460 } |
471 | 461 |
472 static void transactions_remove(struct simple_account_data *sip, struct transaction *trans) { | 462 static void transactions_remove(struct simple_account_data *sip, struct transaction *trans) { |
473 if(trans->msg) sipmsg_free(trans->msg); | 463 if(trans->msg) sipmsg_free(trans->msg); |
474 sip->transactions = g_slist_remove(sip->transactions, trans); | 464 sip->transactions = g_slist_remove(sip->transactions, trans); |