libpurple/mime.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 27020
3066128247a5
child 27361
62f1aa8045bb
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.

10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
1 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
2 * Purple
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
4 * Purple is the legal property of its developers, whose names are too
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
5 * numerous to list here. Please refer to the COPYRIGHT file distributed
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
6 * with this source distribution
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
7 *
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
8 * This program is free software; you can redistribute it and/or modify
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
9 * it under the terms of the GNU General Public License as published by
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or (at
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
11 * your option) any later version.
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
12 *
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
13 * This program is distributed in the hope that it will be useful, but
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
16 * General Public License for more details.
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
17 *
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
18 * You should have received a copy of the GNU General Public License
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
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: 18265
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301,
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
21 * USA.
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
22 */
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
23
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
24 #include <stdio.h>
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
25 #include <string.h>
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
26
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
27 #include <glib.h>
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
28
18265
9f26190d7f46 Move the define in internal.h instead.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18190
diff changeset
29 #include "internal.h"
9f26190d7f46 Move the define in internal.h instead.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18190
diff changeset
30
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
31 /* this should become "util.h" if we ever get this into purple proper */
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
32 #include "debug.h"
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
33 #include "mime.h"
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
34 #include "util.h"
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
35
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
36 /**
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
37 * @struct mime_fields
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
38 *
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
39 * Utility structure used in both MIME document and parts, which maps
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
40 * field names to their values, and keeps an easily accessible list of
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
41 * keys.
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
42 */
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
43 struct mime_fields {
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
44 GHashTable *map;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
45 GList *keys;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
46 };
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
47
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
48 struct _PurpleMimeDocument {
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
49 struct mime_fields fields;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
50 GList *parts;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
51 };
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
52
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
53 struct _PurpleMimePart {
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
54 struct mime_fields fields;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
55 struct _PurpleMimeDocument *doc;
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
56 GString *data;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
57 };
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
58
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
59 static void
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
60 fields_set(struct mime_fields *mf, const char *key, const char *val)
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
61 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
62 char *k, *v;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
63
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
64 g_return_if_fail(mf != NULL);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
65 g_return_if_fail(mf->map != NULL);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
66
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
67 k = g_ascii_strdown(key, -1);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
68 v = g_strdup(val);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
69
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
70 /* append to the keys list only if it's not already there */
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
71 if(! g_hash_table_lookup(mf->map, k)) {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
72 mf->keys = g_list_append(mf->keys, k);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
73 }
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
74
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
75 /* important to use insert. If the key is already in the table, then
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
76 it's already in the keys list. Insert will free the new instance
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
77 of the key rather than the old instance. */
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
78 g_hash_table_insert(mf->map, k, v);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
79 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
80
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
81
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
82 static const char *
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
83 fields_get(struct mime_fields *mf, const char *key)
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
84 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
85 char *kdown;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
86 const char *ret;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
87
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
88 g_return_val_if_fail(mf != NULL, NULL);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
89 g_return_val_if_fail(mf->map != NULL, NULL);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
90
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
91 kdown = g_ascii_strdown(key, -1);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
92 ret = g_hash_table_lookup(mf->map, kdown);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
93 g_free(kdown);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
94
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
95 return ret;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
96 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
97
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
98
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
99 static void
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
100 fields_init(struct mime_fields *mf)
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
101 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
102 g_return_if_fail(mf != NULL);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
103
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
104 mf->map = g_hash_table_new_full(g_str_hash, g_str_equal,
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
105 g_free, g_free);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
106 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
107
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
108
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
109 static void
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
110 fields_loadline(struct mime_fields *mf, const char *line, gsize len)
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
111 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
112 /* split the line into key: value */
26988
4c6f20b86062 Patch from Stefan Becker to plug a couple of memory leaks in libpurple/mime.c
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 26726
diff changeset
113 char *key, *newkey, *val;
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
114 char **tokens;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
115
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
116 /* feh, need it to be NUL terminated */
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
117 key = g_strndup(line, len);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
118
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
119 /* split */
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
120 val = strchr(key, ':');
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
121 if(! val) {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
122 g_free(key);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
123 return;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
124 }
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
125 *val++ = '\0';
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
126
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
127 /* normalize whitespace (sorta) and trim on key and value */
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
128 tokens = g_strsplit(key, "\t\r\n", 0);
26988
4c6f20b86062 Patch from Stefan Becker to plug a couple of memory leaks in libpurple/mime.c
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 26726
diff changeset
129 newkey = g_strjoinv("", tokens);
4c6f20b86062 Patch from Stefan Becker to plug a couple of memory leaks in libpurple/mime.c
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 26726
diff changeset
130 g_strstrip(newkey);
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
131 g_strfreev(tokens);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
132
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
133 tokens = g_strsplit(val, "\t\r\n", 0);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
134 val = g_strjoinv("", tokens);
26988
4c6f20b86062 Patch from Stefan Becker to plug a couple of memory leaks in libpurple/mime.c
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 26726
diff changeset
135 g_strstrip(val);
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
136 g_strfreev(tokens);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
137
26988
4c6f20b86062 Patch from Stefan Becker to plug a couple of memory leaks in libpurple/mime.c
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 26726
diff changeset
138 fields_set(mf, newkey, val);
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
139
26988
4c6f20b86062 Patch from Stefan Becker to plug a couple of memory leaks in libpurple/mime.c
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 26726
diff changeset
140 g_free(newkey);
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
141 g_free(key);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
142 g_free(val);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
143 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
144
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
145
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
146 static void
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
147 fields_load(struct mime_fields *mf, char **buf, gsize *len)
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
148 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
149 char *tail;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
150
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
151 while ((tail = g_strstr_len(*buf, *len, "\r\n")))
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
152 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
153 char *line;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
154 gsize ln;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
155
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
156 /* determine the current line */
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
157 line = *buf;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
158 ln = tail - line;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
159
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
160 /* advance our search space past the CRLF */
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
161 *buf = tail + 2;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
162 *len -= (ln + 2);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
163
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
164 /* empty line, end of headers */
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
165 if(! ln) return;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
166
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
167 /* look out for line continuations */
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
168 if(line[ln-1] == ';') {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
169 tail = g_strstr_len(*buf, *len, "\r\n");
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
170 if(tail) {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
171 gsize cln;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
172
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
173 cln = tail - *buf;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
174 ln = tail - line;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
175
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
176 /* advance our search space past the CRLF (again) */
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
177 *buf = tail + 2;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
178 *len -= (cln + 2);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
179 }
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
180 }
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
181
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
182 /* process our super-cool line */
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
183 fields_loadline(mf, line, ln);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
184 }
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
185 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
186
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
187
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
188 static void
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
189 field_write(const char *key, const char *val, GString *str)
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
190 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
191 g_string_append_printf(str, "%s: %s\r\n", key, val);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
192 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
193
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
194
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
195 static void
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
196 fields_write(struct mime_fields *mf, GString *str)
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
197 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
198 g_return_if_fail(mf != NULL);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
199
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
200 g_hash_table_foreach(mf->map, (GHFunc) field_write, str);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
201 g_string_append(str, "\r\n");
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
202 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
203
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
204
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
205 static void
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
206 fields_destroy(struct mime_fields *mf)
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
207 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
208 g_return_if_fail(mf != NULL);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
209
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
210 g_hash_table_destroy(mf->map);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
211 g_list_free(mf->keys);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
212
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
213 mf->map = NULL;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
214 mf->keys = NULL;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
215 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
216
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
217
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
218 static PurpleMimePart *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
219 part_new(PurpleMimeDocument *doc)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
220 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
221 PurpleMimePart *part;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
222
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
223 part = g_new0(PurpleMimePart, 1);
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
224 fields_init(&part->fields);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
225 part->doc = doc;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
226 part->data = g_string_new(NULL);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
227
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
228 doc->parts = g_list_prepend(doc->parts, part);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
229
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
230 return part;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
231 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
232
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
233
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
234 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
235 part_load(PurpleMimePart *part, const char *buf, gsize len)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
236 {
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
237
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
238 char *b = (char *) buf;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
239 gsize n = len;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
240
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
241 fields_load(&part->fields, &b, &n);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
242
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
243 /* the remainder will have a blank line, if there's anything at all,
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
244 so check if there's anything then trim off the trailing four
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
245 bytes, \r\n\r\n */
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
246 if(n > 4) n -= 4;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
247 g_string_append_len(part->data, b, n);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
248 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
249
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
250
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
251 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
252 part_write(PurpleMimePart *part, GString *str)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
253 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
254 fields_write(&part->fields, str);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
255 g_string_append_printf(str, "%s\r\n\r\n", part->data->str);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
256 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
257
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
258
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
259 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
260 part_free(PurpleMimePart *part)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
261 {
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
262
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
263 fields_destroy(&part->fields);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
264
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
265 g_string_free(part->data, TRUE);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
266 part->data = NULL;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
267
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
268 g_free(part);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
269 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
270
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
271
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
272 PurpleMimePart *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
273 purple_mime_part_new(PurpleMimeDocument *doc)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
274 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
275 g_return_val_if_fail(doc != NULL, NULL);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
276 return part_new(doc);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
277 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
278
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
279
18190
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
280 GList *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
281 purple_mime_part_get_fields(PurpleMimePart *part)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
282 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
283 g_return_val_if_fail(part != NULL, NULL);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
284 return part->fields.keys;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
285 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
286
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
287
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
288 const char *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
289 purple_mime_part_get_field(PurpleMimePart *part, const char *field)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
290 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
291 g_return_val_if_fail(part != NULL, NULL);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
292 return fields_get(&part->fields, field);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
293 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
294
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
295
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
296 char *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
297 purple_mime_part_get_field_decoded(PurpleMimePart *part, const char *field)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
298 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
299 const char *f;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
300
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
301 g_return_val_if_fail(part != NULL, NULL);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
302
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
303 f = fields_get(&part->fields, field);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
304 return purple_mime_decode_field(f);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
305 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
306
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
307
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
308 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
309 purple_mime_part_set_field(PurpleMimePart *part, const char *field, const char *value)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
310 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
311 g_return_if_fail(part != NULL);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
312 fields_set(&part->fields, field, value);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
313 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
314
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
315
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
316 const char *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
317 purple_mime_part_get_data(PurpleMimePart *part)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
318 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
319 g_return_val_if_fail(part != NULL, NULL);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
320 g_return_val_if_fail(part->data != NULL, NULL);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
321
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
322 return part->data->str;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
323 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
324
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
325
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
326 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
327 purple_mime_part_get_data_decoded(PurpleMimePart *part, guchar **data, gsize *len)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
328 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
329 const char *enc;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
330
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
331 g_return_if_fail(part != NULL);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
332 g_return_if_fail(data != NULL);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
333 g_return_if_fail(len != NULL);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
334
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
335 g_return_if_fail(part->data != NULL);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
336
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
337 enc = purple_mime_part_get_field(part, "content-transfer-encoding");
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
338
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
339 if(! enc) {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
340 *data = (guchar *)g_strdup(part->data->str);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
341 *len = part->data->len;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
342
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
343 } else if(! g_ascii_strcasecmp(enc, "7bit")) {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
344 *data = (guchar *)g_strdup(part->data->str);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
345 *len = part->data->len;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
346
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
347 } else if(! g_ascii_strcasecmp(enc, "8bit")) {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
348 *data = (guchar *)g_strdup(part->data->str);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
349 *len = part->data->len;
11066
0d599a3a02c8 [gaim-migrate @ 13047]
Christopher O'Brien <siege@pidgin.im>
parents: 10978
diff changeset
350
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
351 } else if(! g_ascii_strcasecmp(enc, "base16")) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
352 *data = purple_base16_decode(part->data->str, len);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
353
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
354 } else if(! g_ascii_strcasecmp(enc, "base64")) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
355 *data = purple_base64_decode(part->data->str, len);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
356
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
357 } else if(! g_ascii_strcasecmp(enc, "quoted-printable")) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
358 *data = purple_quotedp_decode(part->data->str, len);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
359
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
360 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
361 purple_debug_warning("mime", "purple_mime_part_get_data_decoded:"
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
362 " unknown encoding '%s'\n", enc);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
363 *data = NULL;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
364 *len = 0;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
365 }
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
366 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
367
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
368
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
369 gsize
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
370 purple_mime_part_get_length(PurpleMimePart *part)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
371 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
372 g_return_val_if_fail(part != NULL, 0);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
373 g_return_val_if_fail(part->data != NULL, 0);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
374
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
375 return part->data->len;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
376 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
377
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
378
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
379 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
380 purple_mime_part_set_data(PurpleMimePart *part, const char *data)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
381 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
382 g_return_if_fail(part != NULL);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
383 g_string_free(part->data, TRUE);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
384 part->data = g_string_new(data);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
385 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
386
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
387
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
388 PurpleMimeDocument *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
389 purple_mime_document_new()
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
390 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
391 PurpleMimeDocument *doc;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
392
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
393 doc = g_new0(PurpleMimeDocument, 1);
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
394 fields_init(&doc->fields);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
395
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
396 return doc;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
397 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
398
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
399
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
400 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
401 doc_parts_load(PurpleMimeDocument *doc, const char *boundary, const char *buf, gsize len)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
402 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
403 char *b = (char *) buf;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
404 gsize n = len;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
405
27020
3066128247a5 mime.c: In function ‘doc_parts_load’:
Paul Aurich <darkrain42@pidgin.im>
parents: 26988
diff changeset
406 char *bnd;
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
407 gsize bl;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
408
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
409 bnd = g_strdup_printf("--%s", boundary);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
410 bl = strlen(bnd);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
411
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
412 for(b = g_strstr_len(b, n, bnd); b; ) {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
413 char *tail;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
414
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
415 /* skip the boundary */
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
416 b += bl;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
417 n -= bl;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
418
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
419 /* skip the trailing \r\n or -- as well */
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
420 if(n >= 2) {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
421 b += 2;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
422 n -= 2;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
423 }
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
424
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
425 /* find the next boundary */
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
426 tail = g_strstr_len(b, n, bnd);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
427
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
428 if(tail) {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
429 gsize sl;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
430
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
431 sl = tail - b;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
432 if(sl) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
433 PurpleMimePart *part = part_new(doc);
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
434 part_load(part, b, sl);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
435 }
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
436 }
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
437
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
438 b = tail;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
439 }
26988
4c6f20b86062 Patch from Stefan Becker to plug a couple of memory leaks in libpurple/mime.c
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 26726
diff changeset
440
4c6f20b86062 Patch from Stefan Becker to plug a couple of memory leaks in libpurple/mime.c
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 26726
diff changeset
441 g_free(bnd);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
442 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
443
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
444
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
445 PurpleMimeDocument *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
446 purple_mime_document_parsen(const char *buf, gsize len)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
447 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
448 PurpleMimeDocument *doc;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
449
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
450 char *b = (char *) buf;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
451 gsize n = len;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
452
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
453 g_return_val_if_fail(buf != NULL, NULL);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
454
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
455 doc = purple_mime_document_new();
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
456
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
457 if (!len)
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
458 return doc;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
459
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
460 fields_load(&doc->fields, &b, &n);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
461
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
462 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
463 const char *ct = fields_get(&doc->fields, "content-type");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
464 if(ct && purple_str_has_prefix(ct, "multipart")) {
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
465 char *bd = strrchr(ct, '=');
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
466 if(bd++) {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
467 doc_parts_load(doc, bd, b, n);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
468 }
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
469 }
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
470 }
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
471
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
472 return doc;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
473 }
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
474
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
475
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
476 PurpleMimeDocument *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
477 purple_mime_document_parse(const char *buf)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
478 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
479 g_return_val_if_fail(buf != NULL, NULL);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
480 return purple_mime_document_parsen(buf, strlen(buf));
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
481 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
482
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
483
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
484 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
485 purple_mime_document_write(PurpleMimeDocument *doc, GString *str)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
486 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
487 const char *bd = NULL;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
488
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
489 g_return_if_fail(doc != NULL);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
490 g_return_if_fail(str != NULL);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
491
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
492 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
493 const char *ct = fields_get(&doc->fields, "content-type");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
494 if(ct && purple_str_has_prefix(ct, "multipart")) {
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
495 char *b = strrchr(ct, '=');
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
496 if(b++) bd = b;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
497 }
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
498 }
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
499
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
500 fields_write(&doc->fields, str);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
501
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
502 if(bd) {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
503 GList *l;
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
504
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
505 for(l = doc->parts; l; l = l->next) {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
506 g_string_append_printf(str, "--%s\r\n", bd);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
507
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
508 part_write(l->data, str);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
509
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
510 if(! l->next) {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
511 g_string_append_printf(str, "--%s--\r\n", bd);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
512 }
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
513 }
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
514 }
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
515 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
516
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
517
18190
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
518 GList *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
519 purple_mime_document_get_fields(PurpleMimeDocument *doc)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
520 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
521 g_return_val_if_fail(doc != NULL, NULL);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
522 return doc->fields.keys;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
523 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
524
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
525
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
526 const char *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
527 purple_mime_document_get_field(PurpleMimeDocument *doc, const char *field)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
528 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
529 g_return_val_if_fail(doc != NULL, NULL);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
530 return fields_get(&doc->fields, field);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
531 }
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
532
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
533
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
534 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
535 purple_mime_document_set_field(PurpleMimeDocument *doc, const char *field, const char *value)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
536 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
537 g_return_if_fail(doc != NULL);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
538 fields_set(&doc->fields, field, value);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
539 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
540
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
541
18190
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
542 GList *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
543 purple_mime_document_get_parts(PurpleMimeDocument *doc)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
544 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
545 g_return_val_if_fail(doc != NULL, NULL);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
546 return doc->parts;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
547 }
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
548
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
549
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
550 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
551 purple_mime_document_free(PurpleMimeDocument *doc)
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
552 {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
553 if (!doc)
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
554 return;
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
555
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
556 fields_destroy(&doc->fields);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
557
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
558 while(doc->parts) {
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
559 part_free(doc->parts->data);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
560 doc->parts = g_list_delete_link(doc->parts, doc->parts);
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
561 }
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
562
14100
cca65c2c0679 [gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents: 12105
diff changeset
563 g_free(doc);
10978
8044056090ea [gaim-migrate @ 12804]
Christopher O'Brien <siege@pidgin.im>
parents:
diff changeset
564 }

mercurial