static void delayed_invite_destroy(gpointer data) { struct sipe_delayed_invite *delayed_invite = data; sipmsg_free(delayed_invite->msg); g_free(delayed_invite->action); g_free(delayed_invite); }
static void conf_accept_ctx_free(struct conf_accept_ctx *ctx) { g_return_if_fail(ctx != NULL); sipmsg_free(ctx->msg); g_free(ctx->focus_uri); g_free(ctx); }
static void transactions_remove(struct fetion_account_data *sip, struct transaction *trans) { if (trans->msg) sipmsg_free(trans->msg); if (trans->timer) purple_timeout_remove(trans->timer); sip->transactions = g_slist_remove(sip->transactions, trans); g_free(trans); }
struct sipmsg *sipmsg_parse_header(const gchar *header) { struct sipmsg *msg = g_new0(struct sipmsg,1); gchar **lines = g_strsplit(header,"\r\n",0); gchar **parts; const gchar *contentlength; if(!lines[0]) { g_strfreev(lines); g_free(msg); return NULL; } parts = g_strsplit(lines[0], " ", 3); if(!parts[0] || !parts[1] || !parts[2]) { g_strfreev(parts); g_strfreev(lines); g_free(msg); return NULL; } if(strstr(parts[0],"SIP") || strstr(parts[0],"HTTP")) { /* numeric response */ msg->responsestr = g_strdup(parts[2]); msg->response = strtol(parts[1],NULL,10); } else { /* request */ msg->method = g_strdup(parts[0]); msg->target = g_strdup(parts[1]); msg->response = 0; } g_strfreev(parts); if (sipe_utils_parse_lines(&msg->headers, lines + 1, ":") == FALSE) { g_strfreev(lines); sipmsg_free(msg); return NULL; } g_strfreev(lines); contentlength = sipmsg_find_header(msg, "Content-Length"); if (contentlength) { msg->bodylen = strtol(contentlength,NULL,10); } else { SIPE_DEBUG_FATAL_NOFORMAT("sipmsg_parse_header(): Content-Length header not found"); } if(msg->response) { const gchar *tmp; tmp = sipmsg_find_header(msg, "CSeq"); if(!tmp) { /* SHOULD NOT HAPPEN */ msg->method = 0; } else { parts = g_strsplit(tmp, " ", 2); msg->method = g_strdup(parts[1]); g_strfreev(parts); } } return msg; }