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