libpurple/mime.c

Tue, 19 Jun 2007 22:47:12 +0000

author
Sadrul Habib Chowdhury <sadrul@pidgin.im>
date
Tue, 19 Jun 2007 22:47:12 +0000
changeset 18265
9f26190d7f46
parent 18190
bcf28ef7e8ff
child 19859
71d37b57eff2
permissions
-rw-r--r--

Move the define in internal.h instead.
This requires all .c files to include internal.h before including the other
headers.
Perhaps we should add the define in CFLAGS instead, when necessary.

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

mercurial