Statistics
| Branch: | Tag: | Revision:

root / libsylph / procmime.h @ aebfd4cc

History | View | Annotate | Download (4.4 kB)

1 8d7dcace Hiroyuki Yamamoto
/*
2 8d7dcace Hiroyuki Yamamoto
 * LibSylph -- E-Mail client library
3 aebfd4cc Hiroyuki Yamamoto
 * Copyright (C) 1999-2011 Hiroyuki Yamamoto
4 8d7dcace Hiroyuki Yamamoto
 */
5 8d7dcace Hiroyuki Yamamoto
6 8d7dcace Hiroyuki Yamamoto
#ifndef __PROCMIME_H__
7 8d7dcace Hiroyuki Yamamoto
#define __PROCMIME_H__
8 8d7dcace Hiroyuki Yamamoto
9 8d7dcace Hiroyuki Yamamoto
#ifdef HAVE_CONFIG_H
10 8d7dcace Hiroyuki Yamamoto
#  include "config.h"
11 8d7dcace Hiroyuki Yamamoto
#endif
12 8d7dcace Hiroyuki Yamamoto
13 8d7dcace Hiroyuki Yamamoto
#include <glib.h>
14 8d7dcace Hiroyuki Yamamoto
#include <stdio.h>
15 8d7dcace Hiroyuki Yamamoto
16 8d7dcace Hiroyuki Yamamoto
typedef struct _MimeType        MimeType;
17 8d7dcace Hiroyuki Yamamoto
typedef struct _MailCap                MailCap;
18 8d7dcace Hiroyuki Yamamoto
typedef struct _MimeInfo        MimeInfo;
19 8d7dcace Hiroyuki Yamamoto
20 8d7dcace Hiroyuki Yamamoto
#include "procmsg.h"
21 8d7dcace Hiroyuki Yamamoto
#include "utils.h"
22 8d7dcace Hiroyuki Yamamoto
23 8d7dcace Hiroyuki Yamamoto
typedef enum
24 8d7dcace Hiroyuki Yamamoto
{
25 8d7dcace Hiroyuki Yamamoto
        ENC_7BIT,
26 8d7dcace Hiroyuki Yamamoto
        ENC_8BIT,
27 8d7dcace Hiroyuki Yamamoto
        ENC_QUOTED_PRINTABLE,
28 8d7dcace Hiroyuki Yamamoto
        ENC_BASE64,
29 8d7dcace Hiroyuki Yamamoto
        ENC_X_UUENCODE,
30 8d7dcace Hiroyuki Yamamoto
        ENC_UNKNOWN
31 8d7dcace Hiroyuki Yamamoto
} EncodingType;
32 8d7dcace Hiroyuki Yamamoto
33 8d7dcace Hiroyuki Yamamoto
typedef enum
34 8d7dcace Hiroyuki Yamamoto
{
35 8d7dcace Hiroyuki Yamamoto
        MIME_TEXT,
36 8d7dcace Hiroyuki Yamamoto
        MIME_TEXT_HTML,
37 8d7dcace Hiroyuki Yamamoto
        MIME_MESSAGE_RFC822,
38 8d7dcace Hiroyuki Yamamoto
        MIME_APPLICATION,
39 8d7dcace Hiroyuki Yamamoto
        MIME_APPLICATION_OCTET_STREAM,
40 8d7dcace Hiroyuki Yamamoto
        MIME_MULTIPART,
41 8d7dcace Hiroyuki Yamamoto
        MIME_IMAGE,
42 8d7dcace Hiroyuki Yamamoto
        MIME_AUDIO,
43 8d7dcace Hiroyuki Yamamoto
        MIME_VIDEO,
44 8d7dcace Hiroyuki Yamamoto
        MIME_UNKNOWN
45 8d7dcace Hiroyuki Yamamoto
} ContentType;
46 8d7dcace Hiroyuki Yamamoto
47 8d7dcace Hiroyuki Yamamoto
struct _MimeType
48 8d7dcace Hiroyuki Yamamoto
{
49 8d7dcace Hiroyuki Yamamoto
        gchar *type;
50 8d7dcace Hiroyuki Yamamoto
        gchar *sub_type;
51 8d7dcace Hiroyuki Yamamoto
52 8d7dcace Hiroyuki Yamamoto
        gchar *extension;
53 8d7dcace Hiroyuki Yamamoto
};
54 8d7dcace Hiroyuki Yamamoto
55 8d7dcace Hiroyuki Yamamoto
struct _MailCap
56 8d7dcace Hiroyuki Yamamoto
{
57 8d7dcace Hiroyuki Yamamoto
        gchar *mime_type;
58 8d7dcace Hiroyuki Yamamoto
        gchar *cmdline_fmt;
59 8d7dcace Hiroyuki Yamamoto
        gboolean needs_terminal;
60 8d7dcace Hiroyuki Yamamoto
};
61 8d7dcace Hiroyuki Yamamoto
62 8d7dcace Hiroyuki Yamamoto
/*
63 8d7dcace Hiroyuki Yamamoto
 * An example of MimeInfo structure:
64 8d7dcace Hiroyuki Yamamoto
 *
65 8d7dcace Hiroyuki Yamamoto
 * multipart/mixed            root  <-+ parent
66 8d7dcace Hiroyuki Yamamoto
 *                                    |
67 8d7dcace Hiroyuki Yamamoto
 *   multipart/alternative      children <-+ parent
68 8d7dcace Hiroyuki Yamamoto
 *                                         |
69 8d7dcace Hiroyuki Yamamoto
 *     text/plain                 children  --+
70 8d7dcace Hiroyuki Yamamoto
 *                                            |
71 8d7dcace Hiroyuki Yamamoto
 *     text/html                  next      <-+
72 8d7dcace Hiroyuki Yamamoto
 *
73 8d7dcace Hiroyuki Yamamoto
 *   message/rfc822             next  <-+ main
74 8d7dcace Hiroyuki Yamamoto
 *                                      |
75 8d7dcace Hiroyuki Yamamoto
 *                                sub (capsulated message)
76 8d7dcace Hiroyuki Yamamoto
 *
77 8d7dcace Hiroyuki Yamamoto
 *   image/jpeg                 next
78 8d7dcace Hiroyuki Yamamoto
 */
79 8d7dcace Hiroyuki Yamamoto
80 8d7dcace Hiroyuki Yamamoto
struct _MimeInfo
81 8d7dcace Hiroyuki Yamamoto
{
82 8d7dcace Hiroyuki Yamamoto
        gchar *encoding;
83 8d7dcace Hiroyuki Yamamoto
84 8d7dcace Hiroyuki Yamamoto
        EncodingType encoding_type;
85 8d7dcace Hiroyuki Yamamoto
        ContentType  mime_type;
86 8d7dcace Hiroyuki Yamamoto
87 8d7dcace Hiroyuki Yamamoto
        gchar *content_type;
88 8d7dcace Hiroyuki Yamamoto
        gchar *charset;
89 8d7dcace Hiroyuki Yamamoto
        gchar *name;
90 8d7dcace Hiroyuki Yamamoto
        gchar *boundary;
91 8d7dcace Hiroyuki Yamamoto
92 8d7dcace Hiroyuki Yamamoto
        gchar *content_disposition;
93 8d7dcace Hiroyuki Yamamoto
        gchar *filename;
94 8d7dcace Hiroyuki Yamamoto
95 8d7dcace Hiroyuki Yamamoto
        glong fpos;
96 8d7dcace Hiroyuki Yamamoto
        guint size;
97 8d7dcace Hiroyuki Yamamoto
        guint content_size;
98 8d7dcace Hiroyuki Yamamoto
99 8d7dcace Hiroyuki Yamamoto
        MimeInfo *main;
100 8d7dcace Hiroyuki Yamamoto
        MimeInfo *sub;
101 8d7dcace Hiroyuki Yamamoto
102 8d7dcace Hiroyuki Yamamoto
        MimeInfo *next;
103 8d7dcace Hiroyuki Yamamoto
        MimeInfo *parent;
104 8d7dcace Hiroyuki Yamamoto
        MimeInfo *children;
105 8d7dcace Hiroyuki Yamamoto
106 8d7dcace Hiroyuki Yamamoto
        MimeInfo *plaintext;
107 8d7dcace Hiroyuki Yamamoto
        gchar *sigstatus;
108 8d7dcace Hiroyuki Yamamoto
        gchar *sigstatus_full;
109 8d7dcace Hiroyuki Yamamoto
110 8d7dcace Hiroyuki Yamamoto
        gint level;
111 8d7dcace Hiroyuki Yamamoto
};
112 8d7dcace Hiroyuki Yamamoto
113 8d7dcace Hiroyuki Yamamoto
#define IS_BOUNDARY(s, bnd, len) \
114 8d7dcace Hiroyuki Yamamoto
        (bnd && s[0] == '-' && s[1] == '-' && !strncmp(s + 2, bnd, len))
115 8d7dcace Hiroyuki Yamamoto
116 8d7dcace Hiroyuki Yamamoto
/* MimeInfo handling */
117 8d7dcace Hiroyuki Yamamoto
118 8d7dcace Hiroyuki Yamamoto
MimeInfo *procmime_mimeinfo_new                (void);
119 8d7dcace Hiroyuki Yamamoto
void procmime_mimeinfo_free_all                (MimeInfo        *mimeinfo);
120 8d7dcace Hiroyuki Yamamoto
121 8d7dcace Hiroyuki Yamamoto
MimeInfo *procmime_mimeinfo_insert        (MimeInfo        *parent,
122 8d7dcace Hiroyuki Yamamoto
                                         MimeInfo        *mimeinfo);
123 8d7dcace Hiroyuki Yamamoto
#if 0
124 8d7dcace Hiroyuki Yamamoto
void procmime_mimeinfo_replace                (MimeInfo        *old,
125 8d7dcace Hiroyuki Yamamoto
                                         MimeInfo        *new);
126 8d7dcace Hiroyuki Yamamoto
#endif
127 8d7dcace Hiroyuki Yamamoto
128 8d7dcace Hiroyuki Yamamoto
MimeInfo *procmime_mimeinfo_next        (MimeInfo        *mimeinfo);
129 8d7dcace Hiroyuki Yamamoto
130 8d7dcace Hiroyuki Yamamoto
MimeInfo *procmime_scan_message                (MsgInfo        *msginfo);
131 8d7dcace Hiroyuki Yamamoto
void procmime_scan_multipart_message        (MimeInfo        *mimeinfo,
132 8d7dcace Hiroyuki Yamamoto
                                         FILE                *fp);
133 8d7dcace Hiroyuki Yamamoto
134 8d7dcace Hiroyuki Yamamoto
/* scan headers */
135 8d7dcace Hiroyuki Yamamoto
136 8d7dcace Hiroyuki Yamamoto
void procmime_scan_encoding                (MimeInfo        *mimeinfo,
137 8d7dcace Hiroyuki Yamamoto
                                         const gchar        *encoding);
138 8d7dcace Hiroyuki Yamamoto
void procmime_scan_content_type                (MimeInfo        *mimeinfo,
139 8d7dcace Hiroyuki Yamamoto
                                         const gchar        *content_type);
140 8d7dcace Hiroyuki Yamamoto
void procmime_scan_content_type_str        (const gchar        *content_type,
141 8d7dcace Hiroyuki Yamamoto
                                         gchar               **mime_type,
142 8d7dcace Hiroyuki Yamamoto
                                         gchar               **charset,
143 8d7dcace Hiroyuki Yamamoto
                                         gchar               **name,
144 8d7dcace Hiroyuki Yamamoto
                                         gchar               **boundary);
145 8d7dcace Hiroyuki Yamamoto
void procmime_scan_content_type_partial        (const gchar        *content_type,
146 8d7dcace Hiroyuki Yamamoto
                                         gint                *total,
147 8d7dcace Hiroyuki Yamamoto
                                         gchar               **part_id,
148 8d7dcace Hiroyuki Yamamoto
                                         gint                *number);
149 8d7dcace Hiroyuki Yamamoto
void procmime_scan_content_disposition        (MimeInfo        *mimeinfo,
150 8d7dcace Hiroyuki Yamamoto
                                         const gchar        *content_disposition);
151 8d7dcace Hiroyuki Yamamoto
MimeInfo *procmime_scan_mime_header        (FILE                *fp);
152 8d7dcace Hiroyuki Yamamoto
153 8d7dcace Hiroyuki Yamamoto
FILE *procmime_decode_content                (FILE                *outfp,
154 8d7dcace Hiroyuki Yamamoto
                                         FILE                *infp,
155 8d7dcace Hiroyuki Yamamoto
                                         MimeInfo        *mimeinfo);
156 8d7dcace Hiroyuki Yamamoto
gint procmime_get_part                        (const gchar        *outfile,
157 8d7dcace Hiroyuki Yamamoto
                                         const gchar        *infile,
158 8d7dcace Hiroyuki Yamamoto
                                         MimeInfo        *mimeinfo);
159 8d7dcace Hiroyuki Yamamoto
gint procmime_get_part_fp                (const gchar        *outfile,
160 8d7dcace Hiroyuki Yamamoto
                                         FILE                *infp,
161 8d7dcace Hiroyuki Yamamoto
                                         MimeInfo        *mimeinfo);
162 8d7dcace Hiroyuki Yamamoto
FILE *procmime_get_part_fp_fp                (FILE                *outfp,
163 8d7dcace Hiroyuki Yamamoto
                                         FILE                *infp,
164 8d7dcace Hiroyuki Yamamoto
                                         MimeInfo        *mimeinfo);
165 8d7dcace Hiroyuki Yamamoto
gint procmime_get_all_parts                (const gchar        *dir,
166 8d7dcace Hiroyuki Yamamoto
                                         const gchar        *infile,
167 8d7dcace Hiroyuki Yamamoto
                                         MimeInfo        *mimeinfo);
168 8d7dcace Hiroyuki Yamamoto
FILE *procmime_get_text_content                (MimeInfo        *mimeinfo,
169 8d7dcace Hiroyuki Yamamoto
                                         FILE                *infp,
170 8d7dcace Hiroyuki Yamamoto
                                         const gchar        *encoding);
171 8d7dcace Hiroyuki Yamamoto
FILE *procmime_get_first_text_content        (MsgInfo        *msginfo,
172 8d7dcace Hiroyuki Yamamoto
                                         const gchar        *encoding);
173 8d7dcace Hiroyuki Yamamoto
174 8d7dcace Hiroyuki Yamamoto
gboolean procmime_find_string_part        (MimeInfo        *mimeinfo,
175 8d7dcace Hiroyuki Yamamoto
                                         const gchar        *filename,
176 8d7dcace Hiroyuki Yamamoto
                                         const gchar        *str,
177 8d7dcace Hiroyuki Yamamoto
                                         StrFindFunc         find_func);
178 8d7dcace Hiroyuki Yamamoto
gboolean procmime_find_string                (MsgInfo        *msginfo,
179 8d7dcace Hiroyuki Yamamoto
                                         const gchar        *str,
180 8d7dcace Hiroyuki Yamamoto
                                         StrFindFunc         find_func);
181 8d7dcace Hiroyuki Yamamoto
182 8d7dcace Hiroyuki Yamamoto
gchar *procmime_get_part_file_name        (MimeInfo        *mimeinfo);
183 8d7dcace Hiroyuki Yamamoto
gchar *procmime_get_tmp_file_name        (MimeInfo        *mimeinfo);
184 8d7dcace Hiroyuki Yamamoto
185 8d7dcace Hiroyuki Yamamoto
ContentType procmime_scan_mime_type        (const gchar        *mime_type);
186 8d7dcace Hiroyuki Yamamoto
gchar *procmime_get_mime_type                (const gchar        *filename);
187 8d7dcace Hiroyuki Yamamoto
188 8d7dcace Hiroyuki Yamamoto
EncodingType procmime_get_encoding_for_charset        (const gchar        *charset);
189 8d7dcace Hiroyuki Yamamoto
EncodingType procmime_get_encoding_for_text_file(const gchar        *file);
190 8d7dcace Hiroyuki Yamamoto
EncodingType procmime_get_encoding_for_str        (const gchar        *str);
191 8d7dcace Hiroyuki Yamamoto
const gchar *procmime_get_encoding_str                (EncodingType         encoding);
192 8d7dcace Hiroyuki Yamamoto
193 8d7dcace Hiroyuki Yamamoto
#endif /* __PROCMIME_H__ */