Sun, 20 May 2007 06:19:49 +0000
merge of 'b98e72d4089afb8a1879e5fe9627cfb132ee88de'
and 'b2836a24d81e7a1bd1d21b3aea8794b094391344'
| 10978 | 1 | /* |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
2 | * Gaim |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
3 | * |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
4 | * Gaim is the legal property of its developers, whose names are too |
|
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 | ||
| 32 | /* this should become "util.h" if we ever get this into gaim proper */ | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
33 | #include "debug.h" |
| 10978 | 34 | #include "mime.h" |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
35 | #include "util.h" |
| 10978 | 36 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
37 | /** |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
38 | * @struct mime_fields |
|
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 | * Utility structure used in both MIME document and parts, which maps |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
41 | * 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
|
42 | * keys. |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
43 | */ |
| 10978 | 44 | struct mime_fields { |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
45 | GHashTable *map; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
46 | GList *keys; |
| 10978 | 47 | }; |
| 48 | ||
| 49 | struct _GaimMimeDocument { | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
50 | struct mime_fields fields; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
51 | GList *parts; |
| 10978 | 52 | }; |
| 53 | ||
| 54 | struct _GaimMimePart { | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
55 | struct mime_fields fields; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
56 | struct _GaimMimeDocument *doc; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
57 | GString *data; |
| 10978 | 58 | }; |
| 59 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
60 | static void |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
61 | 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
|
62 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
63 | char *k, *v; |
| 10978 | 64 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
65 | g_return_if_fail(mf != NULL); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
66 | g_return_if_fail(mf->map != NULL); |
| 10978 | 67 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
68 | k = g_ascii_strdown(key, -1); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
69 | v = g_strdup(val); |
| 10978 | 70 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
71 | /* 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
|
72 | if(! g_hash_table_lookup(mf->map, k)) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
73 | mf->keys = g_list_append(mf->keys, k); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
74 | } |
| 10978 | 75 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
76 | /* 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
|
77 | 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
|
78 | of the key rather than the old instance. */ |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
79 | g_hash_table_insert(mf->map, k, v); |
| 10978 | 80 | } |
| 81 | ||
| 82 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
83 | static const char * |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
84 | fields_get(struct mime_fields *mf, const char *key) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
85 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
86 | char *kdown; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
87 | const char *ret; |
| 10978 | 88 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
89 | g_return_val_if_fail(mf != NULL, NULL); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
90 | g_return_val_if_fail(mf->map != NULL, NULL); |
| 10978 | 91 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
92 | kdown = g_ascii_strdown(key, -1); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
93 | ret = g_hash_table_lookup(mf->map, kdown); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
94 | g_free(kdown); |
| 10978 | 95 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
96 | return ret; |
| 10978 | 97 | } |
| 98 | ||
| 99 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
100 | static void |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
101 | fields_init(struct mime_fields *mf) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
102 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
103 | g_return_if_fail(mf != NULL); |
| 10978 | 104 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
105 | 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
|
106 | g_free, g_free); |
| 10978 | 107 | } |
| 108 | ||
| 109 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
110 | static void |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
111 | fields_loadline(struct mime_fields *mf, const char *line, gsize len) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
112 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
113 | /* split the line into key: value */ |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
114 | char *key, *val; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
115 | char **tokens; |
| 10978 | 116 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
117 | /* feh, need it to be NUL terminated */ |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
118 | key = g_strndup(line, len); |
| 10978 | 119 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
120 | /* split */ |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
121 | val = strchr(key, ':'); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
122 | if(! val) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
123 | g_free(key); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
124 | return; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
125 | } |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
126 | *val++ = '\0'; |
| 10978 | 127 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
128 | /* normalize whitespace (sorta) and trim on key and value */ |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
129 | tokens = g_strsplit(key, "\t\r\n", 0); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
130 | key = g_strjoinv("", tokens); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
131 | key = g_strstrip(key); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
132 | g_strfreev(tokens); |
| 10978 | 133 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
134 | tokens = g_strsplit(val, "\t\r\n", 0); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
135 | val = g_strjoinv("", tokens); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
136 | val = g_strstrip(val); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
137 | g_strfreev(tokens); |
| 10978 | 138 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
139 | fields_set(mf, key, val); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
140 | |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
141 | g_free(key); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
142 | g_free(val); |
| 10978 | 143 | } |
| 144 | ||
| 145 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
146 | static void |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
147 | fields_load(struct mime_fields *mf, char **buf, gsize *len) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
148 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
149 | char *tail; |
| 10978 | 150 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
151 | while ((tail = g_strstr_len(*buf, *len, "\r\n"))) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
152 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
153 | char *line; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
154 | gsize ln; |
| 10978 | 155 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
156 | /* determine the current line */ |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
157 | line = *buf; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
158 | ln = tail - line; |
| 10978 | 159 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
160 | /* advance our search space past the CRLF */ |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
161 | *buf = tail + 2; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
162 | *len -= (ln + 2); |
| 10978 | 163 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
164 | /* empty line, end of headers */ |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
165 | if(! ln) return; |
| 10978 | 166 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
167 | /* look out for line continuations */ |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
168 | if(line[ln-1] == ';') { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
169 | tail = g_strstr_len(*buf, *len, "\r\n"); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
170 | if(tail) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
171 | gsize cln; |
| 10978 | 172 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
173 | cln = tail - *buf; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
174 | ln = tail - line; |
| 10978 | 175 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
176 | /* advance our search space past the CRLF (again) */ |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
177 | *buf = tail + 2; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
178 | *len -= (cln + 2); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
179 | } |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
180 | } |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
181 | |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
182 | /* process our super-cool line */ |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
183 | fields_loadline(mf, line, ln); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
184 | } |
| 10978 | 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 | field_write(const char *key, const char *val, GString *str) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
190 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
191 | g_string_append_printf(str, "%s: %s\r\n", key, val); |
| 10978 | 192 | } |
| 193 | ||
| 194 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
195 | static void |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
196 | fields_write(struct mime_fields *mf, GString *str) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
197 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
198 | g_return_if_fail(mf != NULL); |
| 10978 | 199 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
200 | g_hash_table_foreach(mf->map, (GHFunc) field_write, str); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
201 | g_string_append(str, "\r\n"); |
| 10978 | 202 | } |
| 203 | ||
| 204 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
205 | static void |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
206 | fields_destroy(struct mime_fields *mf) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
207 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
208 | g_return_if_fail(mf != NULL); |
| 10978 | 209 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
210 | g_hash_table_destroy(mf->map); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
211 | g_list_free(mf->keys); |
| 10978 | 212 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
213 | mf->map = NULL; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
214 | mf->keys = NULL; |
| 10978 | 215 | } |
| 216 | ||
| 217 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
218 | static GaimMimePart * |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
219 | part_new(GaimMimeDocument *doc) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
220 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
221 | GaimMimePart *part; |
| 10978 | 222 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
223 | part = g_new0(GaimMimePart, 1); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
224 | fields_init(&part->fields); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
225 | part->doc = doc; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
226 | part->data = g_string_new(NULL); |
| 10978 | 227 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
228 | doc->parts = g_list_prepend(doc->parts, part); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
229 | |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
230 | return part; |
| 10978 | 231 | } |
| 232 | ||
| 233 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
234 | static void |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
235 | part_load(GaimMimePart *part, const char *buf, gsize len) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
236 | { |
| 10978 | 237 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
238 | char *b = (char *) buf; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
239 | gsize n = len; |
| 10978 | 240 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
241 | fields_load(&part->fields, &b, &n); |
| 10978 | 242 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
243 | /* the remainder will have a blank line, if there's anything at all, |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
244 | so check if there's anything then trim off the trailing four |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
245 | bytes, \r\n\r\n */ |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
246 | if(n > 4) n -= 4; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
247 | g_string_append_len(part->data, b, n); |
| 10978 | 248 | } |
| 249 | ||
| 250 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
251 | static void |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
252 | part_write(GaimMimePart *part, GString *str) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
253 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
254 | fields_write(&part->fields, str); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
255 | g_string_append_printf(str, "%s\r\n\r\n", part->data->str); |
| 10978 | 256 | } |
| 257 | ||
| 258 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
259 | static void |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
260 | part_free(GaimMimePart *part) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
261 | { |
| 10978 | 262 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
263 | fields_destroy(&part->fields); |
| 10978 | 264 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
265 | g_string_free(part->data, TRUE); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
266 | part->data = NULL; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
267 | |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
268 | g_free(part); |
| 10978 | 269 | } |
| 270 | ||
| 271 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
272 | GaimMimePart * |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
273 | gaim_mime_part_new(GaimMimeDocument *doc) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
274 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
275 | g_return_val_if_fail(doc != NULL, NULL); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
276 | return part_new(doc); |
| 10978 | 277 | } |
| 278 | ||
| 279 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
280 | const GList * |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
281 | gaim_mime_part_get_fields(GaimMimePart *part) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
282 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
283 | g_return_val_if_fail(part != NULL, NULL); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
284 | return part->fields.keys; |
| 10978 | 285 | } |
| 286 | ||
| 287 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
288 | const char * |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
289 | gaim_mime_part_get_field(GaimMimePart *part, const char *field) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
290 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
291 | g_return_val_if_fail(part != NULL, NULL); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
292 | return fields_get(&part->fields, field); |
| 10978 | 293 | } |
| 294 | ||
| 295 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
296 | char * |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
297 | gaim_mime_part_get_field_decoded(GaimMimePart *part, const char *field) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
298 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
299 | const char *f; |
| 10978 | 300 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
301 | g_return_val_if_fail(part != NULL, NULL); |
| 10978 | 302 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
303 | f = fields_get(&part->fields, field); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
304 | return gaim_mime_decode_field(f); |
| 10978 | 305 | } |
| 306 | ||
| 307 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
308 | void |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
309 | gaim_mime_part_set_field(GaimMimePart *part, const char *field, const char *value) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
310 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
311 | g_return_if_fail(part != NULL); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
312 | fields_set(&part->fields, field, value); |
| 10978 | 313 | } |
| 314 | ||
| 315 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
316 | const char * |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
317 | gaim_mime_part_get_data(GaimMimePart *part) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
318 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
319 | g_return_val_if_fail(part != NULL, NULL); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
320 | g_return_val_if_fail(part->data != NULL, NULL); |
| 10978 | 321 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
322 | return part->data->str; |
| 10978 | 323 | } |
| 324 | ||
| 325 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
326 | void |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
327 | gaim_mime_part_get_data_decoded(GaimMimePart *part, guchar **data, gsize *len) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
328 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
329 | const char *enc; |
| 10978 | 330 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
331 | g_return_if_fail(part != NULL); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
332 | g_return_if_fail(data != NULL); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
333 | g_return_if_fail(len != NULL); |
| 10978 | 334 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
335 | g_return_if_fail(part->data != NULL); |
| 10978 | 336 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
337 | enc = gaim_mime_part_get_field(part, "content-transfer-encoding"); |
| 10978 | 338 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
339 | if(! enc) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
340 | *data = (guchar *)g_strdup(part->data->str); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
341 | *len = part->data->len; |
| 10978 | 342 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
343 | } else if(! g_ascii_strcasecmp(enc, "7bit")) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
344 | *data = (guchar *)g_strdup(part->data->str); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
345 | *len = part->data->len; |
| 10978 | 346 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
347 | } else if(! g_ascii_strcasecmp(enc, "8bit")) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
348 | *data = (guchar *)g_strdup(part->data->str); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
349 | *len = part->data->len; |
|
11066
0d599a3a02c8
[gaim-migrate @ 13047]
Christopher O'Brien <siege@pidgin.im>
parents:
10978
diff
changeset
|
350 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
351 | } else if(! g_ascii_strcasecmp(enc, "base16")) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
352 | *data = gaim_base16_decode(part->data->str, len); |
| 10978 | 353 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
354 | } else if(! g_ascii_strcasecmp(enc, "base64")) { |
| 14781 | 355 | *data = gaim_base64_decode(part->data->str, len); |
| 10978 | 356 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
357 | } else if(! g_ascii_strcasecmp(enc, "quoted-printable")) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
358 | *data = gaim_quotedp_decode(part->data->str, len); |
| 10978 | 359 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
360 | } else { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
361 | gaim_debug_warning("mime", "gaim_mime_part_get_data_decoded:" |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
362 | " unknown encoding '%s'\n", enc); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
363 | *data = NULL; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
364 | *len = 0; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
365 | } |
| 10978 | 366 | } |
| 367 | ||
| 368 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
369 | gsize |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
370 | gaim_mime_part_get_length(GaimMimePart *part) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
371 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
372 | g_return_val_if_fail(part != NULL, 0); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
373 | g_return_val_if_fail(part->data != NULL, 0); |
| 10978 | 374 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
375 | return part->data->len; |
| 10978 | 376 | } |
| 377 | ||
| 378 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
379 | void |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
380 | gaim_mime_part_set_data(GaimMimePart *part, const char *data) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
381 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
382 | g_return_if_fail(part != NULL); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
383 | g_string_free(part->data, TRUE); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
384 | part->data = g_string_new(data); |
| 10978 | 385 | } |
| 386 | ||
| 387 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
388 | GaimMimeDocument * |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
389 | gaim_mime_document_new() |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
390 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
391 | GaimMimeDocument *doc; |
| 10978 | 392 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
393 | doc = g_new0(GaimMimeDocument, 1); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
394 | fields_init(&doc->fields); |
| 10978 | 395 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
396 | return doc; |
| 10978 | 397 | } |
| 398 | ||
| 399 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
400 | static void |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
401 | doc_parts_load(GaimMimeDocument *doc, const char *boundary, const char *buf, gsize len) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
402 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
403 | char *b = (char *) buf; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
404 | gsize n = len; |
| 10978 | 405 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
406 | const char *bnd; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
407 | gsize bl; |
| 10978 | 408 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
409 | bnd = g_strdup_printf("--%s", boundary); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
410 | bl = strlen(bnd); |
| 10978 | 411 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
412 | for(b = g_strstr_len(b, n, bnd); b; ) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
413 | char *tail; |
| 10978 | 414 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
415 | /* skip the boundary */ |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
416 | b += bl; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
417 | n -= bl; |
| 10978 | 418 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
419 | /* skip the trailing \r\n or -- as well */ |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
420 | if(n >= 2) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
421 | b += 2; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
422 | n -= 2; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
423 | } |
| 10978 | 424 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
425 | /* find the next boundary */ |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
426 | tail = g_strstr_len(b, n, bnd); |
| 10978 | 427 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
428 | if(tail) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
429 | gsize sl; |
| 10978 | 430 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
431 | sl = tail - b; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
432 | if(sl) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
433 | GaimMimePart *part = part_new(doc); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
434 | part_load(part, b, sl); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
435 | } |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
436 | } |
| 10978 | 437 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
438 | b = tail; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
439 | } |
| 10978 | 440 | } |
| 441 | ||
| 442 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
443 | GaimMimeDocument * |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
444 | gaim_mime_document_parsen(const char *buf, gsize len) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
445 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
446 | GaimMimeDocument *doc; |
| 10978 | 447 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
448 | char *b = (char *) buf; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
449 | gsize n = len; |
| 10978 | 450 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
451 | g_return_val_if_fail(buf != NULL, NULL); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
452 | |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
453 | doc = gaim_mime_document_new(); |
| 10978 | 454 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
455 | if (!len) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
456 | return doc; |
| 10978 | 457 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
458 | fields_load(&doc->fields, &b, &n); |
| 10978 | 459 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
460 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
461 | const char *ct = fields_get(&doc->fields, "content-type"); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
462 | if(ct && gaim_str_has_prefix(ct, "multipart")) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
463 | char *bd = strrchr(ct, '='); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
464 | if(bd++) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
465 | doc_parts_load(doc, bd, b, n); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
466 | } |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
467 | } |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
468 | } |
| 10978 | 469 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
470 | return doc; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
471 | } |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
472 | |
| 10978 | 473 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
474 | GaimMimeDocument * |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
475 | gaim_mime_document_parse(const char *buf) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
476 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
477 | g_return_val_if_fail(buf != NULL, NULL); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
478 | return gaim_mime_document_parsen(buf, strlen(buf)); |
| 10978 | 479 | } |
| 480 | ||
| 481 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
482 | void |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
483 | gaim_mime_document_write(GaimMimeDocument *doc, GString *str) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
484 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
485 | const char *bd = NULL; |
| 10978 | 486 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
487 | g_return_if_fail(doc != NULL); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
488 | g_return_if_fail(str != NULL); |
| 10978 | 489 | |
|
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 | const char *ct = fields_get(&doc->fields, "content-type"); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
492 | if(ct && gaim_str_has_prefix(ct, "multipart")) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
493 | char *b = strrchr(ct, '='); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
494 | if(b++) bd = b; |
|
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 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
498 | fields_write(&doc->fields, str); |
| 10978 | 499 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
500 | if(bd) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
501 | GList *l; |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
502 | |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
503 | for(l = doc->parts; l; l = l->next) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
504 | g_string_append_printf(str, "--%s\r\n", bd); |
| 10978 | 505 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
506 | part_write(l->data, str); |
| 10978 | 507 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
508 | if(! l->next) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
509 | g_string_append_printf(str, "--%s--\r\n", bd); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
510 | } |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
511 | } |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
512 | } |
| 10978 | 513 | } |
| 514 | ||
| 515 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
516 | const GList * |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
517 | gaim_mime_document_get_fields(GaimMimeDocument *doc) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
518 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
519 | g_return_val_if_fail(doc != NULL, NULL); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
520 | return doc->fields.keys; |
| 10978 | 521 | } |
| 522 | ||
| 523 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
524 | const char * |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
525 | gaim_mime_document_get_field(GaimMimeDocument *doc, const char *field) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
526 | { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
527 | g_return_val_if_fail(doc != NULL, NULL); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
528 | return fields_get(&doc->fields, field); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
529 | } |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
530 | |
|
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 | void |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
533 | gaim_mime_document_set_field(GaimMimeDocument *doc, const char *field, const char *value) |
|
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 | g_return_if_fail(doc != NULL); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
536 | fields_set(&doc->fields, field, value); |
| 10978 | 537 | } |
| 538 | ||
| 539 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
540 | const GList * |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
541 | gaim_mime_document_get_parts(GaimMimeDocument *doc) |
|
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->parts; |
| 10978 | 545 | } |
| 546 | ||
| 547 | ||
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
548 | void |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
549 | gaim_mime_document_free(GaimMimeDocument *doc) |
|
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 | if (!doc) |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
552 | return; |
| 10978 | 553 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
554 | fields_destroy(&doc->fields); |
| 10978 | 555 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
556 | while(doc->parts) { |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
557 | part_free(doc->parts->data); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
558 | doc->parts = g_list_delete_link(doc->parts, doc->parts); |
|
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
559 | } |
| 10978 | 560 | |
|
14100
cca65c2c0679
[gaim-migrate @ 16642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12105
diff
changeset
|
561 | g_free(doc); |
| 10978 | 562 | } |