Mercurial > pidgin
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); |
