Files
asterisk/main/minimime/mm-docs/html/mm__parse_8c.html
Russell Bryant 06ff84b549 To be able to achieve the things that we would like to achieve with the
Asterisk GUI project, we need a fully functional HTTP interface with access
to the Asterisk manager interface.  One of the things that was intended to be
a part of this system, but was never actually implemented, was the ability for
the GUI to be able to upload files to Asterisk.  So, this commit adds this in
the most minimally invasive way that we could come up with.

A lot of work on minimime was done by Steve Murphy.  He fixed a lot of bugs in
the parser, and updated it to be thread-safe.  The ability to check
permissions of active manager sessions was added by Dwayne Hubbard.  Then,
hacking this all together and do doing the modifications necessary to the HTTP
interface was done by me.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@60603 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-06 20:58:43 +00:00

199 lines
9.7 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>MiniMIME: mm_parse.c File Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.1 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li id="current"><a href="files.html"><span>Files</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
</ul></div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul></div>
<h1>mm_parse.c File Reference</h1><code>#include &lt;sys/types.h&gt;</code><br>
<code>#include &lt;sys/stat.h&gt;</code><br>
<code>#include &lt;stdio.h&gt;</code><br>
<code>#include &lt;stdlib.h&gt;</code><br>
<code>#include &lt;unistd.h&gt;</code><br>
<code>#include &lt;fcntl.h&gt;</code><br>
<code>#include &lt;string.h&gt;</code><br>
<code>#include &lt;ctype.h&gt;</code><br>
<code>#include &lt;assert.h&gt;</code><br>
<code>#include &quot;<a class="el" href="mm__internal_8h-source.html">mm_internal.h</a>&quot;</code><br>
<code>#include &quot;mm_util.h&quot;</code><br>
<code>#include &quot;mimeparser.h&quot;</code><br>
<code>#include &quot;mimeparser.tab.h&quot;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mm__parse_8c.html#187cf71c0f6c2da1384823e3f20aa1a2">PARSER_initialize</a> (MM_CTX *, int)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="92d7d8e20b6def16fcf2649e0d88651f"></a><!-- doxytag: member="mm_parse.c::PARSER_setbuffer" ref="92d7d8e20b6def16fcf2649e0d88651f" args="(const char *)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>PARSER_setbuffer</b> (const char *)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="04446354e4248226578b90007d728a7b"></a><!-- doxytag: member="mm_parse.c::PARSER_setfp" ref="04446354e4248226578b90007d728a7b" args="(FILE *)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>PARSER_setfp</b> (FILE *)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mm__parse_8c.html#58c960b6017f13d4e4ec5f09b3c38495">mm_parse_mem</a> (MM_CTX *ctx, const char *text, int parsemode, int flags)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mm__parse_8c.html#cc9f623682b05f330c46e72e4e9d66cc">mm_parse_file</a> (MM_CTX *ctx, const char *filename, int parsemode, int flags)</td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
Functions to parse MIME messages <hr><h2>Function Documentation</h2>
<a class="anchor" name="cc9f623682b05f330c46e72e4e9d66cc"></a><!-- doxytag: member="mm_parse.c::mm_parse_file" ref="cc9f623682b05f330c46e72e4e9d66cc" args="(MM_CTX *ctx, const char *filename, int parsemode, int flags)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int mm_parse_file </td>
<td>(</td>
<td class="paramtype">MM_CTX *&nbsp;</td>
<td class="paramname"> <em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>filename</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>parsemode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>flags</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td width="100%"></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Parses a file into a MiniMIME context<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>ctx</em>&nbsp;</td><td>A valid MiniMIME context object </td></tr>
<tr><td valign="top"></td><td valign="top"><em>filename</em>&nbsp;</td><td>The name of the file to parse </td></tr>
<tr><td valign="top"></td><td valign="top"><em>parsemode</em>&nbsp;</td><td>The parsemode </td></tr>
<tr><td valign="top"></td><td valign="top"><em>flags</em>&nbsp;</td><td>The flags to pass to the parser </td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success or -1 on failure </dd></dl>
<dl class="note" compact><dt><b>Note:</b></dt><dd>Sets mm_errno if an error occurs</dd></dl>
This function parses a MIME message, stored in the filesystem according to the parseflags and stores the results in the MiniMIME context specified by ctx.<p>
The following modes can be used to specify how the message should be parsed:<p>
<ul>
<li>MM_PARSE_STRICT: Do not tolerate MIME violations</li><li>MM_PARSE_LOOSE: Tolerate as much MIME violations as possible</li></ul>
<p>
The context needs to be initialized before using <a class="el" href="group__context.html#g919fd41f85534d9c87c256857faa2610">mm_context_new()</a> and may be freed using <a class="el" href="group__context.html#g76392d5269e9ef340c2f5f8336f7193b">mm_context_free()</a>.
</div>
</div><p>
<a class="anchor" name="58c960b6017f13d4e4ec5f09b3c38495"></a><!-- doxytag: member="mm_parse.c::mm_parse_mem" ref="58c960b6017f13d4e4ec5f09b3c38495" args="(MM_CTX *ctx, const char *text, int parsemode, int flags)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int mm_parse_mem </td>
<td>(</td>
<td class="paramtype">MM_CTX *&nbsp;</td>
<td class="paramname"> <em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>text</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>parsemode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>flags</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td width="100%"></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Parses a NUL-terminated string into a MiniMIME context<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>ctx</em>&nbsp;</td><td>A valid MiniMIME context object </td></tr>
<tr><td valign="top"></td><td valign="top"><em>text</em>&nbsp;</td><td>The NUL-terminated string to parse </td></tr>
<tr><td valign="top"></td><td valign="top"><em>parsemode</em>&nbsp;</td><td>The parsemode </td></tr>
<tr><td valign="top"></td><td valign="top"><em>flags</em>&nbsp;</td><td>The flags to pass to the parser </td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success or -1 on failure </dd></dl>
<dl class="note" compact><dt><b>Note:</b></dt><dd>Sets mm_errno if an error occurs</dd></dl>
This function parses a MIME message, stored in the memory region pointed to by text (must be NUL-terminated) according to the parseflags and stores the results in the MiniMIME context specified by ctx.<p>
The following modes can be used to specify how the message should be parsed:<p>
<ul>
<li>MM_PARSE_STRICT: Do not tolerate MIME violations</li><li>MM_PARSE_LOOSE: Tolerate as much MIME violations as possible</li></ul>
<p>
The context needs to be initialized before using <a class="el" href="group__context.html#g919fd41f85534d9c87c256857faa2610">mm_context_new()</a> and may be freed using <a class="el" href="group__context.html#g76392d5269e9ef340c2f5f8336f7193b">mm_context_free()</a>.
</div>
</div><p>
<a class="anchor" name="187cf71c0f6c2da1384823e3f20aa1a2"></a><!-- doxytag: member="mm_parse.c::PARSER_initialize" ref="187cf71c0f6c2da1384823e3f20aa1a2" args="(MM_CTX *, int)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void PARSER_initialize </td>
<td>(</td>
<td class="paramtype">MM_CTX *&nbsp;</td>
<td class="paramname"> <em>newctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>mode</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td width="100%"></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Initializes the parser engine.
</div>
</div><p>
<hr size="1"><address style="align: right;"><small>Generated on Thu Mar 29 17:59:08 2007 for MiniMIME by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address>
</body>
</html>