libpurple/protocols/simple/sipmsg.c

Wed, 13 May 2009 20:29:03 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Wed, 13 May 2009 20:29:03 +0000
changeset 27110
05ca719b901b
parent 24590
43ba4176a7f9
child 29997
9a9b586ac254
permissions
-rw-r--r--

Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.

11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
1 /**
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
2 * @file sipmsg.c
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
4 * purple
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
5 *
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
6 * Copyright (C) 2005 Thomas Butter <butter@uni-mannheim.de>
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
7 *
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
11 * (at your option) any later version.
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
12 *
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
16 * GNU General Public License for more details.
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
17 *
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 17155
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
21 */
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
22
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
23 #include "internal.h"
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
24
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
25 #include "accountopt.h"
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
26 #include "blist.h"
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
27 #include "conversation.h"
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
28 #include "debug.h"
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
29 #include "notify.h"
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
30 #include "prpl.h"
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
31 #include "plugin.h"
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
32 #include "util.h"
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
33 #include "version.h"
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
34
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
35 #include "simple.h"
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
36 #include "sipmsg.h"
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
37
14131
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
38 struct sipmsg *sipmsg_parse_msg(const gchar *msg) {
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
39 const char *tmp = strstr(msg, "\r\n\r\n");
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
40 char *line;
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
41 struct sipmsg *smsg;
14131
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
42
11398
513a7f8f547a [gaim-migrate @ 13630]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11181
diff changeset
43 if(!tmp) return NULL;
14131
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
44
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
45 line = g_strndup(msg, tmp - msg);
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
46
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
47 smsg = sipmsg_parse_header(line);
21939
8d8200de2ade Fix #4345 by ignoring a malformed message.
Daniel Atallah <datallah@pidgin.im>
parents: 20287
diff changeset
48 if(smsg != NULL)
8d8200de2ade Fix #4345 by ignoring a malformed message.
Daniel Atallah <datallah@pidgin.im>
parents: 20287
diff changeset
49 smsg->body = g_strdup(tmp + 4);
8d8200de2ade Fix #4345 by ignoring a malformed message.
Daniel Atallah <datallah@pidgin.im>
parents: 20287
diff changeset
50 else
8d8200de2ade Fix #4345 by ignoring a malformed message.
Daniel Atallah <datallah@pidgin.im>
parents: 20287
diff changeset
51 purple_debug_error("SIMPLE", "No header parsed from line: %s\n", line);
14131
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
52
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
53 g_free(line);
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
54 return smsg;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
55 }
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
56
14131
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
57 struct sipmsg *sipmsg_parse_header(const gchar *header) {
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
58 struct sipmsg *msg = g_new0(struct sipmsg,1);
24590
43ba4176a7f9 Fix a potential leak, thanks to "KuSh". Fixes #7465.
Daniel Atallah <datallah@pidgin.im>
parents: 21939
diff changeset
59 gchar **parts, **lines = g_strsplit(header,"\r\n",0);
43ba4176a7f9 Fix a potential leak, thanks to "KuSh". Fixes #7465.
Daniel Atallah <datallah@pidgin.im>
parents: 21939
diff changeset
60 gchar *dummy, *dummy2, *tmp;
20287
4a25d4144f16 applied changes from 20395453ab17cd8dd060d4d0794affda17e3272f
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19859
diff changeset
61 const gchar *tmp2;
24590
43ba4176a7f9 Fix a potential leak, thanks to "KuSh". Fixes #7465.
Daniel Atallah <datallah@pidgin.im>
parents: 21939
diff changeset
62 int i = 1;
43ba4176a7f9 Fix a potential leak, thanks to "KuSh". Fixes #7465.
Daniel Atallah <datallah@pidgin.im>
parents: 21939
diff changeset
63
43ba4176a7f9 Fix a potential leak, thanks to "KuSh". Fixes #7465.
Daniel Atallah <datallah@pidgin.im>
parents: 21939
diff changeset
64 if(!lines[0]) {
43ba4176a7f9 Fix a potential leak, thanks to "KuSh". Fixes #7465.
Daniel Atallah <datallah@pidgin.im>
parents: 21939
diff changeset
65 g_strfreev(lines);
43ba4176a7f9 Fix a potential leak, thanks to "KuSh". Fixes #7465.
Daniel Atallah <datallah@pidgin.im>
parents: 21939
diff changeset
66 g_free(msg);
43ba4176a7f9 Fix a potential leak, thanks to "KuSh". Fixes #7465.
Daniel Atallah <datallah@pidgin.im>
parents: 21939
diff changeset
67 return NULL;
43ba4176a7f9 Fix a potential leak, thanks to "KuSh". Fixes #7465.
Daniel Atallah <datallah@pidgin.im>
parents: 21939
diff changeset
68 }
43ba4176a7f9 Fix a potential leak, thanks to "KuSh". Fixes #7465.
Daniel Atallah <datallah@pidgin.im>
parents: 21939
diff changeset
69
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
70 parts = g_strsplit(lines[0], " ", 3);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
71 if(!parts[0] || !parts[1] || !parts[2]) {
11439
e76bc2f9deb0 [gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents: 11398
diff changeset
72 g_strfreev(parts);
e76bc2f9deb0 [gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents: 11398
diff changeset
73 g_strfreev(lines);
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
74 g_free(msg);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
75 return NULL;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
76 }
24590
43ba4176a7f9 Fix a potential leak, thanks to "KuSh". Fixes #7465.
Daniel Atallah <datallah@pidgin.im>
parents: 21939
diff changeset
77
11820
534903b9226e [gaim-migrate @ 14111]
Richard Laager <rlaager@pidgin.im>
parents: 11483
diff changeset
78 if(strstr(parts[0],"SIP")) { /* numeric response */
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
79 msg->method = g_strdup(parts[2]);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
80 msg->response = strtol(parts[1],NULL,10);
11820
534903b9226e [gaim-migrate @ 14111]
Richard Laager <rlaager@pidgin.im>
parents: 11483
diff changeset
81 } else { /* request */
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
82 msg->method = g_strdup(parts[0]);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
83 msg->target = g_strdup(parts[1]);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
84 msg->response = 0;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
85 }
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
86 g_strfreev(parts);
24590
43ba4176a7f9 Fix a potential leak, thanks to "KuSh". Fixes #7465.
Daniel Atallah <datallah@pidgin.im>
parents: 21939
diff changeset
87
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
88 for(i=1; lines[i] && strlen(lines[i])>2; i++) {
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
89 parts = g_strsplit(lines[i], ":", 2);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
90 if(!parts[0] || !parts[1]) {
11439
e76bc2f9deb0 [gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents: 11398
diff changeset
91 g_strfreev(parts);
e76bc2f9deb0 [gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents: 11398
diff changeset
92 g_strfreev(lines);
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
93 g_free(msg);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
94 return NULL;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
95 }
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
96 dummy = parts[1];
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
97 dummy2 = 0;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
98 while(*dummy==' ' || *dummy=='\t') dummy++;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
99 dummy2 = g_strdup(dummy);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
100 while(lines[i+1] && (lines[i+1][0]==' ' || lines[i+1][0]=='\t')) {
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
101 i++;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
102 dummy = lines[i];
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
103 while(*dummy==' ' || *dummy=='\t') dummy++;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
104 tmp = g_strdup_printf("%s %s",dummy2, dummy);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
105 g_free(dummy2);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
106 dummy2 = tmp;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
107 }
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
108 sipmsg_add_header(msg, parts[0], dummy2);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
109 g_strfreev(parts);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
110 }
11439
e76bc2f9deb0 [gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents: 11398
diff changeset
111 g_strfreev(lines);
24590
43ba4176a7f9 Fix a potential leak, thanks to "KuSh". Fixes #7465.
Daniel Atallah <datallah@pidgin.im>
parents: 21939
diff changeset
112
20287
4a25d4144f16 applied changes from 20395453ab17cd8dd060d4d0794affda17e3272f
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19859
diff changeset
113 tmp2 = sipmsg_find_header(msg, "Content-Length");
4a25d4144f16 applied changes from 20395453ab17cd8dd060d4d0794affda17e3272f
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19859
diff changeset
114 if (tmp2 != NULL)
4a25d4144f16 applied changes from 20395453ab17cd8dd060d4d0794affda17e3272f
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19859
diff changeset
115 msg->bodylen = strtol(tmp2, NULL, 10);
24590
43ba4176a7f9 Fix a potential leak, thanks to "KuSh". Fixes #7465.
Daniel Atallah <datallah@pidgin.im>
parents: 21939
diff changeset
116
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
117 if(msg->response) {
20287
4a25d4144f16 applied changes from 20395453ab17cd8dd060d4d0794affda17e3272f
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19859
diff changeset
118 tmp2 = sipmsg_find_header(msg, "CSeq");
4a25d4144f16 applied changes from 20395453ab17cd8dd060d4d0794affda17e3272f
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19859
diff changeset
119 if(!tmp2) {
11820
534903b9226e [gaim-migrate @ 14111]
Richard Laager <rlaager@pidgin.im>
parents: 11483
diff changeset
120 /* SHOULD NOT HAPPEN */
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
121 msg->method = 0;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
122 } else {
20287
4a25d4144f16 applied changes from 20395453ab17cd8dd060d4d0794affda17e3272f
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19859
diff changeset
123 parts = g_strsplit(tmp2, " ", 2);
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
124 msg->method = g_strdup(parts[1]);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
125 g_strfreev(parts);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
126 }
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
127 }
24590
43ba4176a7f9 Fix a potential leak, thanks to "KuSh". Fixes #7465.
Daniel Atallah <datallah@pidgin.im>
parents: 21939
diff changeset
128
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
129 return msg;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
130 }
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
131
14131
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
132 void sipmsg_print(const struct sipmsg *msg) {
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
133 GSList *cur;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
134 struct siphdrelement *elem;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
135 purple_debug(PURPLE_DEBUG_MISC, "simple", "SIP MSG\n");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
136 purple_debug(PURPLE_DEBUG_MISC, "simple", "response: %d\nmethod: %s\nbodylen: %d\n",msg->response,msg->method,msg->bodylen);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
137 if(msg->target) purple_debug(PURPLE_DEBUG_MISC, "simple", "target: %s\n",msg->target);
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
138 cur = msg->headers;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
139 while(cur) {
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
140 elem = cur->data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
141 purple_debug(PURPLE_DEBUG_MISC, "simple", "name: %s value: %s\n",elem->name, elem->value);
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
142 cur = g_slist_next(cur);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
143 }
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
144 }
11439
e76bc2f9deb0 [gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents: 11398
diff changeset
145
14131
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
146 char *sipmsg_to_string(const struct sipmsg *msg) {
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
147 GSList *cur;
12743
dfc698f04f77 [gaim-migrate @ 15090]
Daniel Atallah <datallah@pidgin.im>
parents: 11820
diff changeset
148 GString *outstr = g_string_new("");
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
149 struct siphdrelement *elem;
12743
dfc698f04f77 [gaim-migrate @ 15090]
Daniel Atallah <datallah@pidgin.im>
parents: 11820
diff changeset
150
dfc698f04f77 [gaim-migrate @ 15090]
Daniel Atallah <datallah@pidgin.im>
parents: 11820
diff changeset
151 if(msg->response)
dfc698f04f77 [gaim-migrate @ 15090]
Daniel Atallah <datallah@pidgin.im>
parents: 11820
diff changeset
152 g_string_append_printf(outstr, "SIP/2.0 %d Unknown\r\n",
dfc698f04f77 [gaim-migrate @ 15090]
Daniel Atallah <datallah@pidgin.im>
parents: 11820
diff changeset
153 msg->response);
dfc698f04f77 [gaim-migrate @ 15090]
Daniel Atallah <datallah@pidgin.im>
parents: 11820
diff changeset
154 else
dfc698f04f77 [gaim-migrate @ 15090]
Daniel Atallah <datallah@pidgin.im>
parents: 11820
diff changeset
155 g_string_append_printf(outstr, "%s %s SIP/2.0\r\n",
dfc698f04f77 [gaim-migrate @ 15090]
Daniel Atallah <datallah@pidgin.im>
parents: 11820
diff changeset
156 msg->method, msg->target);
dfc698f04f77 [gaim-migrate @ 15090]
Daniel Atallah <datallah@pidgin.im>
parents: 11820
diff changeset
157
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
158 cur = msg->headers;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
159 while(cur) {
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
160 elem = cur->data;
12743
dfc698f04f77 [gaim-migrate @ 15090]
Daniel Atallah <datallah@pidgin.im>
parents: 11820
diff changeset
161 g_string_append_printf(outstr, "%s: %s\r\n", elem->name,
dfc698f04f77 [gaim-migrate @ 15090]
Daniel Atallah <datallah@pidgin.im>
parents: 11820
diff changeset
162 elem->value);
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
163 cur = g_slist_next(cur);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
164 }
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
165
12743
dfc698f04f77 [gaim-migrate @ 15090]
Daniel Atallah <datallah@pidgin.im>
parents: 11820
diff changeset
166 g_string_append_printf(outstr, "\r\n%s", msg->bodylen ? msg->body : "");
dfc698f04f77 [gaim-migrate @ 15090]
Daniel Atallah <datallah@pidgin.im>
parents: 11820
diff changeset
167
dfc698f04f77 [gaim-migrate @ 15090]
Daniel Atallah <datallah@pidgin.im>
parents: 11820
diff changeset
168 return g_string_free(outstr, FALSE);
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
169 }
14131
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
170 void sipmsg_add_header(struct sipmsg *msg, const gchar *name, const gchar *value) {
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
171 struct siphdrelement *element = g_new0(struct siphdrelement,1);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
172 element->name = g_strdup(name);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
173 element->value = g_strdup(value);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
174 msg->headers = g_slist_append(msg->headers, element);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
175 }
11439
e76bc2f9deb0 [gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents: 11398
diff changeset
176
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
177 void sipmsg_free(struct sipmsg *msg) {
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
178 struct siphdrelement *elem;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
179 while(msg->headers) {
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
180 elem = msg->headers->data;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
181 msg->headers = g_slist_remove(msg->headers,elem);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
182 g_free(elem->name);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
183 g_free(elem->value);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
184 g_free(elem);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
185 }
12747
189b28291088 [gaim-migrate @ 15094]
Daniel Atallah <datallah@pidgin.im>
parents: 12743
diff changeset
186 g_free(msg->method);
189b28291088 [gaim-migrate @ 15094]
Daniel Atallah <datallah@pidgin.im>
parents: 12743
diff changeset
187 g_free(msg->target);
189b28291088 [gaim-migrate @ 15094]
Daniel Atallah <datallah@pidgin.im>
parents: 12743
diff changeset
188 g_free(msg->body);
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
189 g_free(msg);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
190 }
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
191
14131
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
192 void sipmsg_remove_header(struct sipmsg *msg, const gchar *name) {
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
193 struct siphdrelement *elem;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
194 GSList *tmp = msg->headers;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
195 while(tmp) {
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
196 elem = tmp->data;
17155
143ff2796376 Replace strcasecmp() calls with glib equivalents.
Richard Laager <rlaager@pidgin.im>
parents: 16209
diff changeset
197 if(g_ascii_strcasecmp(elem->name, name)==0) {
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
198 msg->headers = g_slist_remove(msg->headers, elem);
14131
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
199 g_free(elem->name);
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
200 g_free(elem->value);
2cd4ddea2f52 [gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents: 12747
diff changeset
201 g_free(elem);
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
202 return;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
203 }
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
204 tmp = g_slist_next(tmp);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
205 }
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
206 return;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
207 }
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
208
20287
4a25d4144f16 applied changes from 20395453ab17cd8dd060d4d0794affda17e3272f
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19859
diff changeset
209 const gchar *sipmsg_find_header(struct sipmsg *msg, const gchar *name) {
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
210 GSList *tmp;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
211 struct siphdrelement *elem;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
212 tmp = msg->headers;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
213 while(tmp) {
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
214 elem = tmp->data;
17155
143ff2796376 Replace strcasecmp() calls with glib equivalents.
Richard Laager <rlaager@pidgin.im>
parents: 16209
diff changeset
215 if(g_ascii_strcasecmp(elem->name, name)==0) {
11181
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
216 return elem->value;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
217 }
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
218 tmp = g_slist_next(tmp);
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
219 }
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
220 return NULL;
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
221 }
e872a55b9524 [gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
222

mercurial