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