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