src/protocols/simple/sipmsg.c

changeset 14131
2cd4ddea2f52
parent 12747
189b28291088
--- a/src/protocols/simple/sipmsg.c	Thu Aug 10 21:22:55 2006 +0000
+++ b/src/protocols/simple/sipmsg.c	Thu Aug 10 23:42:17 2006 +0000
@@ -35,18 +35,23 @@
 #include "simple.h"
 #include "sipmsg.h"
 
-struct sipmsg *sipmsg_parse_msg(gchar *msg) {
-	char *tmp = strstr(msg, "\r\n\r\n");
+struct sipmsg *sipmsg_parse_msg(const gchar *msg) {
+	const char *tmp = strstr(msg, "\r\n\r\n");
+	char *line;
 	struct sipmsg *smsg;
+
 	if(!tmp) return NULL;
-	tmp[0]=0;
-	smsg = sipmsg_parse_header(msg);
-	tmp[0]='\r';
-	smsg->body = g_strdup(tmp+4);
+
+	line = g_strndup(msg, tmp - msg);
+
+	smsg = sipmsg_parse_header(line);
+	smsg->body = g_strdup(tmp + 4);
+
+	g_free(line);
 	return smsg;
 }
 
-struct sipmsg *sipmsg_parse_header(gchar *header) {
+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;
@@ -110,7 +115,7 @@
 	return msg;
 }
 
-void sipmsg_print(struct sipmsg *msg) {
+void sipmsg_print(const struct sipmsg *msg) {
 	GSList *cur;
 	struct siphdrelement *elem;
 	gaim_debug(GAIM_DEBUG_MISC, "simple", "SIP MSG\n");
@@ -124,7 +129,7 @@
 	}
 }
 
-char *sipmsg_to_string(struct sipmsg *msg) {
+char *sipmsg_to_string(const struct sipmsg *msg) {
 	GSList *cur;
 	GString *outstr = g_string_new("");
 	struct siphdrelement *elem;
@@ -148,7 +153,7 @@
 
 	return g_string_free(outstr, FALSE);
 }
-void sipmsg_add_header(struct sipmsg *msg, gchar *name, gchar *value) {
+void sipmsg_add_header(struct sipmsg *msg, const gchar *name, const gchar *value) {
 	struct siphdrelement *element = g_new0(struct siphdrelement,1);
 	element->name = g_strdup(name);
 	element->value = g_strdup(value);
@@ -170,13 +175,16 @@
 	g_free(msg);
 }
 
-void sipmsg_remove_header(struct sipmsg *msg, gchar *name) {
+void sipmsg_remove_header(struct sipmsg *msg, const gchar *name) {
 	struct siphdrelement *elem;
 	GSList *tmp = msg->headers;
 	while(tmp) {
 		elem = tmp->data;
 		if(strcmp(elem->name, name)==0) {
 			msg->headers = g_slist_remove(msg->headers, elem);
+			g_free(elem->name);
+			g_free(elem->value);
+			g_free(elem);
 			return;
 		}
 		tmp = g_slist_next(tmp);
@@ -184,7 +192,7 @@
 	return;
 }
 
-gchar *sipmsg_find_header(struct sipmsg *msg, gchar *name) {
+gchar *sipmsg_find_header(struct sipmsg *msg, const gchar *name) {
 	GSList *tmp;
 	struct siphdrelement *elem;
 	tmp = msg->headers;

mercurial