meta.c - rohrpost - A commandline mail client to change the world as we see it.
(HTM) git clone git://r-36.net/rohrpost
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
meta.c (2034B)
---
1 /*
2 * Copy me if you can.
3 * by 20h
4 */
5
6 #include <unistd.h>
7 #include <stdlib.h>
8 #include <string.h>
9
10 #include "ind.h"
11 #include "mime.h"
12 #include "meta.h"
13
14 #define meta_metadup meta_mimedup
15
16 meta_t *
17 meta_mimedup(mime_t *mime)
18 {
19 meta_t *meta, *mpart;
20 llistelem_t *part;
21
22 meta = mime_new();
23 meta->body = memdup(mime->body, mime->bodylen);
24 meta->bodylen = mime->bodylen;
25
26 meta->partid = memdups(mime->partid);
27 meta->ct = memdups(mime->ct);
28 meta->cte = memdups(mime->cte);
29 meta->charset = memdups(mime->charset);
30
31 meta->boundary = memdups(mime->boundary);
32
33 meta->state = mime->state;
34
35 meta->hdrs = llist_copy(mime->hdrs);
36
37 if (meta->parts->len > 0) {
38 forllist(mime->parts, part) {
39 mpart = meta_mimedup((mime_t *)part->data);
40 llist_addraw(meta->parts, NULL, mpart, sizeof(mpart));
41 }
42 }
43
44 return meta;
45 }
46
47 llist_t *
48 meta_headers2mime(mime_t *mime)
49 {
50 llistelem_t *header;
51 llist_t *mhdrs;
52 char *enc;
53
54 rhdr = llist_new();
55 forllist(meta->hdrs, header) {
56 enc = mime_encodeheader(header->data);
57 if (enc == NULL)
58 continue;
59
60 llist_add(mhdrs, header->key, enc, strlen(enc)+1);
61 free(enc);
62 }
63
64 return mhdrs;
65 }
66
67 llist_t *
68 meta_headers2meta(mime_t *mime)
69 {
70 llistelem_t *header;
71 llist_t *mhdrs;
72 char *enc;
73
74 rhdr = llist_new();
75 forllist(meta->hdrs, header) {
76 enc = mime_guessheader(header->data);
77 if (enc == NULL)
78 continue;
79
80 llist_add(mhdrs, header->key, enc, strlen(enc)+1);
81 free(enc);
82 }
83
84 return mhdrs;
85 }
86
87 mime_t *
88 meta2mime(meta_t *meta)
89 {
90 mime_t *mime;
91
92 mime = NULL;
93
94 return mime;
95 }
96
97 meta_t *
98 mime2meta(mime_t *mime)
99 {
100 llistelem_t *part;
101 llist_t *nhdrs;
102 mime_t *mpart;
103 meta_t *meta;
104
105 meta = meta_mimedup(mime);
106
107 forllist(mime->parts, part) {
108 mpart = (mime_t *)part->data;
109 meta = meta_headers2meta(mpart);
110
111
112 }
113
114 return meta;
115 }
116
117 meta_t *
118 meta_parsebuf(char *str, int len)
119 {
120 meta_t *rmeta;
121 mime_t *rmime;
122
123 rmime = mime_parsebuf(str, len);
124 if (rmime == NULL)
125 return NULL;
126 rmeta = mime2meta(rmime);
127 if (rmeta == NULL) {
128 mime_free(rmime);
129 return NULL;
130 }
131
132 return rmeta;
133 }
134