Wed, 13 May 2009 20:29:03 +0000
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 | 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 | 135 | purple_debug(PURPLE_DEBUG_MISC, "simple", "SIP MSG\n"); |
| 136 | purple_debug(PURPLE_DEBUG_MISC, "simple", "response: %d\nmethod: %s\nbodylen: %d\n",msg->response,msg->method,msg->bodylen); | |
| 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 | 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 |