crashpad/doc/generated/doxygen/classcrashpad_1_1MachMessageServer.html
2017-02-22 23:37:31 -05:00

246 lines
18 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Crashpad: crashpad::MachMessageServer Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="crashpad_doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Crashpad
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespacecrashpad.html">crashpad</a></li><li class="navelem"><a class="el" href="classcrashpad_1_1MachMessageServer.html">MachMessageServer</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="classcrashpad_1_1MachMessageServer-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">crashpad::MachMessageServer Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Runs a Mach message server to handle a Mach RPC request for MIG servers.
<a href="classcrashpad_1_1MachMessageServer.html#details">More...</a></p>
<p><code>#include &quot;util/mach/mach_message_server.h&quot;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1MachMessageServer_1_1Interface.html">Interface</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A Mach RPC callback interface, called by <a class="el" href="classcrashpad_1_1MachMessageServer.html#ace981f2e495984f119aa074f7d33bff6" title="Runs a Mach message server to handle a Mach RPC request for MIG servers. ">Run()</a>. <a href="classcrashpad_1_1MachMessageServer_1_1Interface.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a737f51adaf8725883f1158ef2576aae8"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1MachMessageServer.html#a737f51adaf8725883f1158ef2576aae8">Persistent</a> <tr class="memdesc:a737f51adaf8725883f1158ef2576aae8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Informs <a class="el" href="classcrashpad_1_1MachMessageServer.html#ace981f2e495984f119aa074f7d33bff6" title="Runs a Mach message server to handle a Mach RPC request for MIG servers. ">Run()</a> whether to handle a single request-reply transaction or to run in a loop. <a href="classcrashpad_1_1MachMessageServer.html#a737f51adaf8725883f1158ef2576aae8">More...</a><br /></td></tr>
</td></tr>
<tr class="separator:a737f51adaf8725883f1158ef2576aae8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad4e5a9fe58ebd1a86f21d8a2284129ed"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1MachMessageServer.html#ad4e5a9fe58ebd1a86f21d8a2284129ed">ReceiveLarge</a> <tr class="memdesc:ad4e5a9fe58ebd1a86f21d8a2284129ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines how to handle the reception of messages larger than the size of the buffer allocated to store them. <a href="classcrashpad_1_1MachMessageServer.html#ad4e5a9fe58ebd1a86f21d8a2284129ed">More...</a><br /></td></tr>
</td></tr>
<tr class="separator:ad4e5a9fe58ebd1a86f21d8a2284129ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:ace981f2e495984f119aa074f7d33bff6"><td class="memItemLeft" align="right" valign="top">static mach_msg_return_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1MachMessageServer.html#ace981f2e495984f119aa074f7d33bff6">Run</a> (<a class="el" href="classcrashpad_1_1MachMessageServer_1_1Interface.html">Interface</a> *interface, mach_port_t receive_port, mach_msg_options_t options, <a class="el" href="classcrashpad_1_1MachMessageServer.html#a737f51adaf8725883f1158ef2576aae8">Persistent</a> persistent, <a class="el" href="classcrashpad_1_1MachMessageServer.html#ad4e5a9fe58ebd1a86f21d8a2284129ed">ReceiveLarge</a> receive_large, mach_msg_timeout_t timeout_ms)</td></tr>
<tr class="memdesc:ace981f2e495984f119aa074f7d33bff6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Runs a Mach message server to handle a Mach RPC request for MIG servers. <a href="#ace981f2e495984f119aa074f7d33bff6">More...</a><br /></td></tr>
<tr class="separator:ace981f2e495984f119aa074f7d33bff6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Runs a Mach message server to handle a Mach RPC request for MIG servers. </p>
<p>The principal entry point to this interface is the static <a class="el" href="classcrashpad_1_1MachMessageServer.html#ace981f2e495984f119aa074f7d33bff6" title="Runs a Mach message server to handle a Mach RPC request for MIG servers. ">Run()</a> method. </p>
</div><h2 class="groupheader">Member Enumeration Documentation</h2>
<a id="a737f51adaf8725883f1158ef2576aae8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a737f51adaf8725883f1158ef2576aae8">&#9670;&nbsp;</a></span>Persistent</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="classcrashpad_1_1MachMessageServer.html#a737f51adaf8725883f1158ef2576aae8">crashpad::MachMessageServer::Persistent</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Informs <a class="el" href="classcrashpad_1_1MachMessageServer.html#ace981f2e495984f119aa074f7d33bff6" title="Runs a Mach message server to handle a Mach RPC request for MIG servers. ">Run()</a> whether to handle a single request-reply transaction or to run in a loop. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a737f51adaf8725883f1158ef2576aae8aa2c8263ef8e0afb54cc5d01c6ac3a735"></a>kOneShot&#160;</td><td class="fielddoc"><p>Handle a single request-reply transaction and then return. </p>
</td></tr>
<tr><td class="fieldname"><a id="a737f51adaf8725883f1158ef2576aae8a9f7aa4de8d84bd299a296d7b289c6047"></a>kPersistent&#160;</td><td class="fielddoc"><p>Run in a loop, potentially handling multiple request-reply transactions. </p>
</td></tr>
</table>
</div>
</div>
<a id="ad4e5a9fe58ebd1a86f21d8a2284129ed"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad4e5a9fe58ebd1a86f21d8a2284129ed">&#9670;&nbsp;</a></span>ReceiveLarge</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="classcrashpad_1_1MachMessageServer.html#ad4e5a9fe58ebd1a86f21d8a2284129ed">crashpad::MachMessageServer::ReceiveLarge</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Determines how to handle the reception of messages larger than the size of the buffer allocated to store them. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ad4e5a9fe58ebd1a86f21d8a2284129eda9d5505bdd5aa2fd0789d3e79befd5d11"></a>kReceiveLargeError&#160;</td><td class="fielddoc"><p>Return <code>MACH_RCV_TOO_LARGE</code> upon receipt of a large message. </p>
<p>This mimics the default behavior of <code>mach_msg_server()</code> when <code>options</code> does not contain <code>MACH_RCV_LARGE</code>. </p>
</td></tr>
<tr><td class="fieldname"><a id="ad4e5a9fe58ebd1a86f21d8a2284129eda1ffaaf6cc781039178422e5d05204b71"></a>kReceiveLargeIgnore&#160;</td><td class="fielddoc"><p>Ignore large messages, and attempt to receive the next queued message upon encountering one. </p>
<p>When a large message is encountered, a warning will be logged.</p>
<p><code>mach_msg()</code> will be called to receive the next message after a large one even when accompanied by a <a class="el" href="classcrashpad_1_1MachMessageServer.html#a737f51adaf8725883f1158ef2576aae8" title="Informs Run() whether to handle a single request-reply transaction or to run in a loop...">Persistent</a> value of <a class="el" href="classcrashpad_1_1MachMessageServer.html#a737f51adaf8725883f1158ef2576aae8aa2c8263ef8e0afb54cc5d01c6ac3a735" title="Handle a single request-reply transaction and then return. ">kOneShot</a>. </p>
</td></tr>
<tr><td class="fieldname"><a id="ad4e5a9fe58ebd1a86f21d8a2284129eda865451f339d9413541ca25c22d9b2c71"></a>kReceiveLargeResize&#160;</td><td class="fielddoc"><p>Allocate an appropriately-sized buffer upon encountering a large message. The buffer will be used to receive the message. This. </p>
<p>This mimics the behavior of <code>mach_msg_server()</code> when <code>options</code> contains <code>MACH_RCV_LARGE</code>. </p>
</td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="ace981f2e495984f119aa074f7d33bff6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ace981f2e495984f119aa074f7d33bff6">&#9670;&nbsp;</a></span>Run()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">mach_msg_return_t crashpad::MachMessageServer::Run </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classcrashpad_1_1MachMessageServer_1_1Interface.html">Interface</a> *&#160;</td>
<td class="paramname"><em>interface</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">mach_port_t&#160;</td>
<td class="paramname"><em>receive_port</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">mach_msg_options_t&#160;</td>
<td class="paramname"><em>options</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classcrashpad_1_1MachMessageServer.html#a737f51adaf8725883f1158ef2576aae8">Persistent</a>&#160;</td>
<td class="paramname"><em>persistent</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classcrashpad_1_1MachMessageServer.html#ad4e5a9fe58ebd1a86f21d8a2284129ed">ReceiveLarge</a>&#160;</td>
<td class="paramname"><em>receive_large</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">mach_msg_timeout_t&#160;</td>
<td class="paramname"><em>timeout_ms</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Runs a Mach message server to handle a Mach RPC request for MIG servers. </p>
<p>This function listens for a request message and passes it to a callback interface. A reponse is collected from that interface, and is sent back as a reply.</p>
<p>This function is similar to <code>mach_msg_server()</code> and <code>mach_msg_server_once()</code>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">interface</td><td>The MachMessageServerInterface that is responsible for handling the message. <a class="el" href="classcrashpad_1_1MachMessageServer_1_1Interface.html#a319dd9279e87b4407cee3c8feca405ab">Interface::MachMessageServerRequestSize()</a> is used as the receive size for the request message, and <a class="el" href="classcrashpad_1_1MachMessageServer_1_1Interface.html#ad4e6169aeb91074d573e77b9a47266c5">Interface::MachMessageServerReplySize()</a> is used as the maximum size of the reply message. If <em>options</em> contains <code>MACH_RCV_LARGE</code>, this function will retry a receive operation that returns <code>MACH_RCV_TOO_LARGE</code> with an appropriately-sized buffer. MachMessageServerInterface::MachMessageServerFunction() is called to handle the request and populate the reply. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">receive_port</td><td>The port on which to receive the request message. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">options</td><td>Options suitable for mach_msg. For the defaults, use <code>MACH_MSG_OPTION_NONE</code>. <code>MACH_RCV_LARGE</code> when specified here is ignored. Set <em>receive_large</em> to <a class="el" href="classcrashpad_1_1MachMessageServer.html#ad4e5a9fe58ebd1a86f21d8a2284129eda865451f339d9413541ca25c22d9b2c71" title="Allocate an appropriately-sized buffer upon encountering a large message. The buffer will be used to ...">kReceiveLargeResize</a> instead. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">persistent</td><td>Chooses between one-shot and persistent operation. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">receive_large</td><td>Determines the behavior upon encountering a message larger than the receive buffers size. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">timeout_ms</td><td>The maximum duration that this entire function will run, in milliseconds. This may be <a class="el" href="namespacecrashpad.html#a0720c6dd92c22f4946aeeb17d638f5aba15aaf8991271871ab08493449c00a048" title="When passed to MachMessageDeadlineFromTimeout(), that function will return kMachMessageDeadlineNonblo...">kMachMessageTimeoutNonblocking</a> or <a class="el" href="namespacecrashpad.html#a0720c6dd92c22f4946aeeb17d638f5abaaf4f2c8a649ea6bcfe896e77c312315f" title="When passed to MachMessageDeadlineFromTimeout(), that function will return kMachMessageDeadlineWaitIn...">kMachMessageTimeoutWaitIndefinitely</a>. When <em>persistent</em> is <a class="el" href="classcrashpad_1_1MachMessageServer.html#a737f51adaf8725883f1158ef2576aae8a9f7aa4de8d84bd299a296d7b289c6047" title="Run in a loop, potentially handling multiple request-reply transactions. ">kPersistent</a>, the timeout applies to the overall duration of this function, not to any individual <code>mach_msg()</code> call.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>On success, <code>MACH_MSG_SUCCESS</code> (when <em>persistent</em> is <a class="el" href="classcrashpad_1_1MachMessageServer.html#a737f51adaf8725883f1158ef2576aae8aa2c8263ef8e0afb54cc5d01c6ac3a735" title="Handle a single request-reply transaction and then return. ">kOneShot</a>) or <code>MACH_RCV_TIMED_OUT</code> (when <em>persistent</em> is <a class="el" href="classcrashpad_1_1MachMessageServer.html#a737f51adaf8725883f1158ef2576aae8aa2c8263ef8e0afb54cc5d01c6ac3a735" title="Handle a single request-reply transaction and then return. ">kOneShot</a> and <em>timeout_ms</em> is not <a class="el" href="namespacecrashpad.html#a0720c6dd92c22f4946aeeb17d638f5abaaf4f2c8a649ea6bcfe896e77c312315f" title="When passed to MachMessageDeadlineFromTimeout(), that function will return kMachMessageDeadlineWaitIn...">kMachMessageTimeoutWaitIndefinitely</a>). This function has no successful return value when <em>persistent</em> is <a class="el" href="classcrashpad_1_1MachMessageServer.html#a737f51adaf8725883f1158ef2576aae8a9f7aa4de8d84bd299a296d7b289c6047" title="Run in a loop, potentially handling multiple request-reply transactions. ">kPersistent</a> and <em>timeout_ms</em> is <a class="el" href="namespacecrashpad.html#a0720c6dd92c22f4946aeeb17d638f5abaaf4f2c8a649ea6bcfe896e77c312315f" title="When passed to MachMessageDeadlineFromTimeout(), that function will return kMachMessageDeadlineWaitIn...">kMachMessageTimeoutWaitIndefinitely</a>. On failure, returns a value identifying the nature of the error. </dd></dl>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>util/mach/mach_message_server.h</li>
<li>util/mach/mach_message_server.cc</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>