Tue, 19 Jun 2007 22:47:12 +0000
Move the define in internal.h instead.
This requires all .c files to include internal.h before including the other
headers.
Perhaps we should add the define in CFLAGS instead, when necessary.
| 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 |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
20 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
|
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 | } |