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