431 lines
7.8 KiB
HTML
431 lines
7.8 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
|
|
<HTML
|
|
><HEAD
|
|
><TITLE
|
|
>Helper functions</TITLE
|
|
><META
|
|
NAME="GENERATOR"
|
|
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
|
|
REL="HOME"
|
|
TITLE="libEtPan! API"
|
|
HREF="book1.htm"><LINK
|
|
REL="UP"
|
|
TITLE="MIME"
|
|
HREF="c1586.htm"><LINK
|
|
REL="PREVIOUS"
|
|
TITLE="Creation functions"
|
|
HREF="x2669.htm"><LINK
|
|
REL="NEXT"
|
|
TITLE="Storages, folders, messages"
|
|
HREF="c2988.htm"></HEAD
|
|
><BODY
|
|
CLASS="SECT1"
|
|
BGCOLOR="#FFFFFF"
|
|
TEXT="#000000"
|
|
LINK="#0000FF"
|
|
VLINK="#840084"
|
|
ALINK="#0000FF"
|
|
><DIV
|
|
CLASS="NAVHEADER"
|
|
><TABLE
|
|
SUMMARY="Header navigation table"
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
CELLPADDING="0"
|
|
CELLSPACING="0"
|
|
><TR
|
|
><TH
|
|
COLSPAN="3"
|
|
ALIGN="center"
|
|
>libEtPan! API</TH
|
|
></TR
|
|
><TR
|
|
><TD
|
|
WIDTH="10%"
|
|
ALIGN="left"
|
|
VALIGN="bottom"
|
|
><A
|
|
HREF="x2669.htm"
|
|
ACCESSKEY="P"
|
|
>Prev</A
|
|
></TD
|
|
><TD
|
|
WIDTH="80%"
|
|
ALIGN="center"
|
|
VALIGN="bottom"
|
|
>Chapter 4. MIME</TD
|
|
><TD
|
|
WIDTH="10%"
|
|
ALIGN="right"
|
|
VALIGN="bottom"
|
|
><A
|
|
HREF="c2988.htm"
|
|
ACCESSKEY="N"
|
|
>Next</A
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><HR
|
|
ALIGN="LEFT"
|
|
WIDTH="100%"></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><H1
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN2946"
|
|
>Helper functions</A
|
|
></H1
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><H2
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="MAILMIME-TRANSFER-ENCODING-GET"
|
|
>mailmime_transfer_encoding_get</A
|
|
></H2
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
>#include <libetpan/libetpan.h>
|
|
|
|
int mailmime_transfer_encoding_get(struct mailmime_fields * fields);
|
|
</PRE
|
|
><P
|
|
> <B
|
|
CLASS="COMMAND"
|
|
>mailmime_transfer_encoding_get()</B
|
|
> will
|
|
return the standard MIME encoding mechanism.
|
|
</P
|
|
><P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> <B
|
|
CLASS="COMMAND"
|
|
>fields</B
|
|
> is the list of MIME header
|
|
fields.
|
|
</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> An integer representing the MIME encoding mechanism will
|
|
be returned
|
|
(see <A
|
|
HREF="x1614.htm#MAILMIME-MECHANISM"
|
|
>the Section called <I
|
|
>mailmime_mechanism - MIME transfer encoding mechanism (Content-Transfer-Encoding)</I
|
|
></A
|
|
>).
|
|
</P
|
|
></LI
|
|
></UL
|
|
><DIV
|
|
CLASS="EXAMPLE"
|
|
><A
|
|
NAME="AEN2960"
|
|
></A
|
|
><P
|
|
><B
|
|
>Example 4-46. extracting MIME encoding mechanism</B
|
|
></P
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
>#include <libetpan/libetpan.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/mman.h>
|
|
|
|
int main(int argc, char ** argv)
|
|
{
|
|
int fd;
|
|
int r;
|
|
|
|
status = EXIT_FAILURE;
|
|
|
|
fd = open("message.rfc2822", O_RDONLY);
|
|
if (fd >= 0) {
|
|
void * mem;
|
|
struct stat stat_info;
|
|
|
|
r = fstat(fd, &stat_info);
|
|
if (r >= 0) {
|
|
mem = mmap(NULL, stat_info.st_size, PROT_READ, MAP_PRIVATE);
|
|
if (mem != MAP_FAILED) {
|
|
struct mailimf_fields * f;
|
|
size_t current_index;
|
|
|
|
current_index = 0;
|
|
r = mailimf_fields_parse(mem, stat_info.st_size,
|
|
&current_index, &f);
|
|
if (r == MAILIMF_NO_ERROR) {
|
|
struct mailmime_fields * mime_fields;
|
|
|
|
r = mailmime_fields_parse(f, &mime_fields);
|
|
if (r == MAILIMF_NO_ERROR) {
|
|
int encoding;
|
|
|
|
encoding = mailmime_transfer_encoding_get(mime_fields);
|
|
|
|
/* do the things */
|
|
|
|
mailmime_fields_free(mime_fields);
|
|
status = EXIT_SUCCESS;
|
|
}
|
|
|
|
mailimf_fields_free(f);
|
|
}
|
|
}
|
|
munmap(mem, stat_info.st_size);
|
|
}
|
|
|
|
close(fd);
|
|
}
|
|
|
|
exit(status);
|
|
}
|
|
</PRE
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><H2
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="MAILMIME-CONTENT-CHARSET-GET"
|
|
>mailmime_content_charset_get and
|
|
mailmime_content_param_get</A
|
|
></H2
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
>#include <libetpan/libetpan.h>
|
|
|
|
char * mailmime_content_charset_get(struct mailmime_content * content);
|
|
|
|
char * mailmime_content_param_get(struct mailmime_content * content,
|
|
char * name);
|
|
|
|
char * mailmime_extract_boundary(struct mailmime_content * content_type);
|
|
</PRE
|
|
><P
|
|
> <B
|
|
CLASS="COMMAND"
|
|
>mailmime_content_charset_get()</B
|
|
> will
|
|
return the <B
|
|
CLASS="COMMAND"
|
|
>charset</B
|
|
> parameter of
|
|
MIME content type.
|
|
</P
|
|
><P
|
|
> <B
|
|
CLASS="COMMAND"
|
|
>mailmime_content_param_get()</B
|
|
> will
|
|
return the value of a given parameter of
|
|
MIME content type.
|
|
</P
|
|
><P
|
|
> <B
|
|
CLASS="COMMAND"
|
|
>mailmime_extract_boundary()</B
|
|
> will
|
|
return the <B
|
|
CLASS="COMMAND"
|
|
>charset</B
|
|
> parameter of
|
|
MIME content type.
|
|
</P
|
|
><P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
>
|
|
<B
|
|
CLASS="COMMAND"
|
|
>content</B
|
|
> is the MIME content type.
|
|
</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> <B
|
|
CLASS="COMMAND"
|
|
>name</B
|
|
> is the name of the parameter to
|
|
extract.
|
|
</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> With <B
|
|
CLASS="COMMAND"
|
|
>mailmime_extract_boundary()</B
|
|
>, the
|
|
returned value must be freed with
|
|
<B
|
|
CLASS="COMMAND"
|
|
>free()</B
|
|
>.
|
|
</P
|
|
></LI
|
|
></UL
|
|
><DIV
|
|
CLASS="EXAMPLE"
|
|
><A
|
|
NAME="AEN2985"
|
|
></A
|
|
><P
|
|
><B
|
|
>Example 4-47. extracting information from MIME content type</B
|
|
></P
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
>#include <libetpan/libetpan.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/mman.h>
|
|
|
|
int main(int argc, char ** argv)
|
|
{
|
|
int fd;
|
|
int r;
|
|
|
|
status = EXIT_FAILURE;
|
|
|
|
fd = open("message.rfc2822", O_RDONLY);
|
|
if (fd >= 0) {
|
|
void * mem;
|
|
struct stat stat_info;
|
|
|
|
r = fstat(fd, &stat_info);
|
|
if (r >= 0) {
|
|
mem = mmap(NULL, stat_info.st_size, PROT_READ, MAP_PRIVATE);
|
|
if (mem != MAP_FAILED) {
|
|
struct mailimf_fields * f;
|
|
size_t current_index;
|
|
|
|
current_index = 0;
|
|
r = mailimf_fields_parse(mem, stat_info.st_size,
|
|
&current_index, &f);
|
|
if (r == MAILIMF_NO_ERROR) {
|
|
clistiter * cur;
|
|
|
|
for(cur = clist_begin(f->fld_list) ; cur != NULL ; cur =
|
|
clist_next(cur)) {
|
|
struct mailmime_field * mime_field;
|
|
struct mailimf_field * field;
|
|
|
|
field = clist_content(cur);
|
|
|
|
if (field->fld_type == MAILIMF_FIELD_OPTIONAL_FIELD) {
|
|
if (strcasecmp(field->fld_data.fld_optional_field->fld_name,
|
|
"Content-Type") == 0) {
|
|
struct mailmime_content * content_type;
|
|
size_t current_index;
|
|
|
|
current_index = 0;
|
|
r = mailmime_content_parse(field->fld_data.fld_optional_field->fld_value,
|
|
strlen(field->fld_data.fld_optional_field->fld_value),
|
|
&current_index, &content_type);
|
|
if (r == MAILIMF_NO_ERROR) {
|
|
char * charset;
|
|
char * name;
|
|
char * boundary;
|
|
|
|
charset = mailmime_content_charset_get(content_type);
|
|
name = mailmime_content_param_get(content_type, "name");
|
|
boundary = mailmime_extract_boundary(content_type);
|
|
|
|
/* do the things */
|
|
|
|
free(boundary);
|
|
|
|
status = EXIT_SUCCESS;
|
|
mailmime_content_free(content_type);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
mailimf_fields_free(f);
|
|
}
|
|
}
|
|
munmap(mem, stat_info.st_size);
|
|
}
|
|
|
|
close(fd);
|
|
}
|
|
|
|
exit(status);
|
|
}
|
|
</PRE
|
|
></DIV
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="NAVFOOTER"
|
|
><HR
|
|
ALIGN="LEFT"
|
|
WIDTH="100%"><TABLE
|
|
SUMMARY="Footer navigation table"
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
CELLPADDING="0"
|
|
CELLSPACING="0"
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="x2669.htm"
|
|
ACCESSKEY="P"
|
|
>Prev</A
|
|
></TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="book1.htm"
|
|
ACCESSKEY="H"
|
|
>Home</A
|
|
></TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="c2988.htm"
|
|
ACCESSKEY="N"
|
|
>Next</A
|
|
></TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
>Creation functions</TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="c1586.htm"
|
|
ACCESSKEY="U"
|
|
>Up</A
|
|
></TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
>Storages, folders, messages</TD
|
|
></TR
|
|
></TABLE
|
|
></DIV
|
|
></BODY
|
|
></HTML
|
|
> |