Crow/master/reference/classcrow_1_1_crow.html

525 lines
48 KiB
HTML

<!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.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Crow: crow::Crow&lt; Middlewares &gt; Class Template 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="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.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>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="custom.css" rel="stylesheet" type="text/css"/>
<link href="custom_dark_theme.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="projectlogo"><img alt="Logo" src="logo55.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Crow
&#160;<span id="projectnumber">1.1</span>
</div>
<div id="projectbrief">A C++ microframework for the web</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.svg"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part --><!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classcrow_1_1_crow.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- 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 class="header">
<div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classcrow_1_1_crow-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">crow::Crow&lt; Middlewares &gt; Class Template Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>The main server application class.
<a href="classcrow_1_1_crow.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="app_8h_source.html">app.h</a>&gt;</code></p>
<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:a5b0a203a6f9070ea8010227dcdbcec60"><td class="memItemLeft" align="right" valign="top"><a id="a5b0a203a6f9070ea8010227dcdbcec60"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> = <a class="el" href="classcrow_1_1_crow.html">Crow</a></td></tr>
<tr class="memdesc:a5b0a203a6f9070ea8010227dcdbcec60"><td class="mdescLeft">&#160;</td><td class="mdescRight">This is the crow application. <br /></td></tr>
<tr class="separator:a5b0a203a6f9070ea8010227dcdbcec60"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5df810d2619e31c2f024cc4e45898997"><td class="memItemLeft" align="right" valign="top"><a id="a5df810d2619e31c2f024cc4e45898997"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a5df810d2619e31c2f024cc4e45898997">server_t</a> = <a class="el" href="classcrow_1_1_server.html">Server</a>&lt; <a class="el" href="classcrow_1_1_crow.html">Crow</a>, <a class="el" href="structcrow_1_1_socket_adaptor.html">SocketAdaptor</a>, Middlewares... &gt;</td></tr>
<tr class="memdesc:a5df810d2619e31c2f024cc4e45898997"><td class="mdescLeft">&#160;</td><td class="mdescRight">The HTTP server. <br /></td></tr>
<tr class="separator:a5df810d2619e31c2f024cc4e45898997"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aac04f81d0bc897267d092bb8af1513d4"><td class="memItemLeft" align="right" valign="top"><a id="aac04f81d0bc897267d092bb8af1513d4"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#aac04f81d0bc897267d092bb8af1513d4">ssl_server_t</a> = <a class="el" href="classcrow_1_1_server.html">Server</a>&lt; <a class="el" href="classcrow_1_1_crow.html">Crow</a>, <a class="el" href="structcrow_1_1_s_s_l_adaptor.html">SSLAdaptor</a>, Middlewares... &gt;</td></tr>
<tr class="memdesc:aac04f81d0bc897267d092bb8af1513d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">An HTTP server that runs on SSL with an <a class="el" href="structcrow_1_1_s_s_l_adaptor.html">SSLAdaptor</a>. <br /></td></tr>
<tr class="separator:aac04f81d0bc897267d092bb8af1513d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a980ca09ad971f8915a3575d9a94fe78c"><td class="memItemLeft" align="right" valign="top"><a id="a980ca09ad971f8915a3575d9a94fe78c"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>context_t</b> = <a class="el" href="structcrow_1_1detail_1_1context.html">detail::context</a>&lt; Middlewares... &gt;</td></tr>
<tr class="separator:a980ca09ad971f8915a3575d9a94fe78c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa78aacbc64349155aab3f81d32715189"><td class="memItemLeft" align="right" valign="top"><a id="aa78aacbc64349155aab3f81d32715189"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>mw_container_t</b> = std::tuple&lt; Middlewares... &gt;</td></tr>
<tr class="separator:aa78aacbc64349155aab3f81d32715189"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:abb69a7bf5d4a791a398c838d37086d94"><td class="memTemplParams" colspan="2"><a id="abb69a7bf5d4a791a398c838d37086d94"></a>
template&lt;typename... Ts&gt; </td></tr>
<tr class="memitem:abb69a7bf5d4a791a398c838d37086d94"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#abb69a7bf5d4a791a398c838d37086d94">Crow</a> (Ts &amp;&amp;... ts)</td></tr>
<tr class="memdesc:abb69a7bf5d4a791a398c838d37086d94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct <a class="el" href="classcrow_1_1_crow.html" title="The main server application class.">Crow</a> with a subset of middleware. <br /></td></tr>
<tr class="separator:abb69a7bf5d4a791a398c838d37086d94"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6e435bf5275735effd32647772bdbd04"><td class="memTemplParams" colspan="2">template&lt;typename Adaptor &gt; </td></tr>
<tr class="memitem:a6e435bf5275735effd32647772bdbd04"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a6e435bf5275735effd32647772bdbd04">handle_upgrade</a> (const <a class="el" href="structcrow_1_1request.html">request</a> &amp;req, <a class="el" href="structcrow_1_1response.html">response</a> &amp;res, Adaptor &amp;&amp;adaptor)</td></tr>
<tr class="memdesc:a6e435bf5275735effd32647772bdbd04"><td class="mdescLeft">&#160;</td><td class="mdescRight">Process an Upgrade request. <a href="classcrow_1_1_crow.html#a6e435bf5275735effd32647772bdbd04">More...</a><br /></td></tr>
<tr class="separator:a6e435bf5275735effd32647772bdbd04"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a761ebd8c33ae35a3c61c7a160ad40789"><td class="memItemLeft" align="right" valign="top"><a id="a761ebd8c33ae35a3c61c7a160ad40789"></a>
std::unique_ptr&lt; <a class="el" href="structcrow_1_1routing__handle__result.html">routing_handle_result</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a761ebd8c33ae35a3c61c7a160ad40789">handle_initial</a> (<a class="el" href="structcrow_1_1request.html">request</a> &amp;req, <a class="el" href="structcrow_1_1response.html">response</a> &amp;res)</td></tr>
<tr class="memdesc:a761ebd8c33ae35a3c61c7a160ad40789"><td class="mdescLeft">&#160;</td><td class="mdescRight">Process only the method and URL of a request and provide a route (or an error response) <br /></td></tr>
<tr class="separator:a761ebd8c33ae35a3c61c7a160ad40789"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a866cb219bb77c19326f39f431424e1c7"><td class="memItemLeft" align="right" valign="top"><a id="a866cb219bb77c19326f39f431424e1c7"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a866cb219bb77c19326f39f431424e1c7">handle</a> (<a class="el" href="structcrow_1_1request.html">request</a> &amp;req, <a class="el" href="structcrow_1_1response.html">response</a> &amp;res, std::unique_ptr&lt; <a class="el" href="structcrow_1_1routing__handle__result.html">routing_handle_result</a> &gt; &amp;found)</td></tr>
<tr class="memdesc:a866cb219bb77c19326f39f431424e1c7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Process the fully parsed request and generate a response for it. <br /></td></tr>
<tr class="separator:a866cb219bb77c19326f39f431424e1c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:accf00be55c273297b758fa243f107018"><td class="memItemLeft" align="right" valign="top"><a id="accf00be55c273297b758fa243f107018"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#accf00be55c273297b758fa243f107018">handle_full</a> (<a class="el" href="structcrow_1_1request.html">request</a> &amp;req, <a class="el" href="structcrow_1_1response.html">response</a> &amp;res)</td></tr>
<tr class="memdesc:accf00be55c273297b758fa243f107018"><td class="mdescLeft">&#160;</td><td class="mdescRight">Process a fully parsed request from start to finish (primarily used for debugging) <br /></td></tr>
<tr class="separator:accf00be55c273297b758fa243f107018"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0822a573ed653c3218f06c819a773ec2"><td class="memItemLeft" align="right" valign="top"><a id="a0822a573ed653c3218f06c819a773ec2"></a>
<a class="el" href="classcrow_1_1_dynamic_rule.html">DynamicRule</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a0822a573ed653c3218f06c819a773ec2">route_dynamic</a> (const std::string &amp;rule)</td></tr>
<tr class="memdesc:a0822a573ed653c3218f06c819a773ec2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a dynamic route using a rule (<b>Use CROW_ROUTE instead</b>) <br /></td></tr>
<tr class="separator:a0822a573ed653c3218f06c819a773ec2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5e1e54d49ff3015fd08f545b574ab44f"><td class="memTemplParams" colspan="2"><a id="a5e1e54d49ff3015fd08f545b574ab44f"></a>
template&lt;uint64_t Tag&gt; </td></tr>
<tr class="memitem:a5e1e54d49ff3015fd08f545b574ab44f"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a5e1e54d49ff3015fd08f545b574ab44f">route</a> (const std::string &amp;rule) -&gt; typename std::result_of&lt; decltype(&amp;Router::new_rule_tagged&lt; Tag &gt;)(<a class="el" href="classcrow_1_1_router.html">Router</a>, const std::string &amp;)&gt;::type</td></tr>
<tr class="memdesc:a5e1e54d49ff3015fd08f545b574ab44f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a route using a rule (<b>Use CROW_ROUTE instead</b>) <br /></td></tr>
<tr class="separator:a5e1e54d49ff3015fd08f545b574ab44f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab1beefb0c6fc3c534160ba3bbc615069"><td class="memItemLeft" align="right" valign="top"><a id="ab1beefb0c6fc3c534160ba3bbc615069"></a>
<a class="el" href="classcrow_1_1_catchall_rule.html">CatchallRule</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#ab1beefb0c6fc3c534160ba3bbc615069">catchall_route</a> ()</td></tr>
<tr class="memdesc:ab1beefb0c6fc3c534160ba3bbc615069"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a route for any requests without a proper route (<b>Use CROW_CATCHALL_ROUTE instead</b>) <br /></td></tr>
<tr class="separator:ab1beefb0c6fc3c534160ba3bbc615069"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a30d9cbcaa6aa3c3e44a8a3c4479fd7cf"><td class="memItemLeft" align="right" valign="top"><a id="a30d9cbcaa6aa3c3e44a8a3c4479fd7cf"></a>
<a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a30d9cbcaa6aa3c3e44a8a3c4479fd7cf">websocket_max_payload</a> (uint64_t max_payload)</td></tr>
<tr class="memdesc:a30d9cbcaa6aa3c3e44a8a3c4479fd7cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default max payload size for websockets. <br /></td></tr>
<tr class="separator:a30d9cbcaa6aa3c3e44a8a3c4479fd7cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a391a488c01ce53c0ccfd502c7ad15640"><td class="memItemLeft" align="right" valign="top"><a id="a391a488c01ce53c0ccfd502c7ad15640"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a391a488c01ce53c0ccfd502c7ad15640">websocket_max_payload</a> ()</td></tr>
<tr class="memdesc:a391a488c01ce53c0ccfd502c7ad15640"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default max payload size for websockets. <br /></td></tr>
<tr class="separator:a391a488c01ce53c0ccfd502c7ad15640"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a11832be23c0a0296b5ed2023361f6205"><td class="memItemLeft" align="right" valign="top"><a id="a11832be23c0a0296b5ed2023361f6205"></a>
<a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>signal_clear</b> ()</td></tr>
<tr class="separator:a11832be23c0a0296b5ed2023361f6205"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acf706e62049ea737aec5a79e61e1fe3f"><td class="memItemLeft" align="right" valign="top"><a id="acf706e62049ea737aec5a79e61e1fe3f"></a>
<a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>signal_add</b> (int signal_number)</td></tr>
<tr class="separator:acf706e62049ea737aec5a79e61e1fe3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41804939e4051bee424689fe4fb80baa"><td class="memItemLeft" align="right" valign="top"><a id="a41804939e4051bee424689fe4fb80baa"></a>
std::vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>signals</b> ()</td></tr>
<tr class="separator:a41804939e4051bee424689fe4fb80baa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a365f9c95fc2bd8bb583967f499c1f4a1"><td class="memItemLeft" align="right" valign="top"><a id="a365f9c95fc2bd8bb583967f499c1f4a1"></a>
<a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a365f9c95fc2bd8bb583967f499c1f4a1">port</a> (std::uint16_t port)</td></tr>
<tr class="memdesc:a365f9c95fc2bd8bb583967f499c1f4a1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the port that <a class="el" href="classcrow_1_1_crow.html" title="The main server application class.">Crow</a> will handle requests on. <br /></td></tr>
<tr class="separator:a365f9c95fc2bd8bb583967f499c1f4a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a87d0e10ed791c6847d8b7dfff2369aae"><td class="memItemLeft" align="right" valign="top"><a id="a87d0e10ed791c6847d8b7dfff2369aae"></a>
std::uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a87d0e10ed791c6847d8b7dfff2369aae">port</a> ()</td></tr>
<tr class="memdesc:a87d0e10ed791c6847d8b7dfff2369aae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the port that <a class="el" href="classcrow_1_1_crow.html" title="The main server application class.">Crow</a> will handle requests on. <br /></td></tr>
<tr class="separator:a87d0e10ed791c6847d8b7dfff2369aae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a47ed9a118820f6e6ba0b2bc37f0997fb"><td class="memItemLeft" align="right" valign="top"><a id="a47ed9a118820f6e6ba0b2bc37f0997fb"></a>
<a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a47ed9a118820f6e6ba0b2bc37f0997fb">timeout</a> (std::uint8_t timeout)</td></tr>
<tr class="memdesc:a47ed9a118820f6e6ba0b2bc37f0997fb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the connection timeout in seconds (default is 5) <br /></td></tr>
<tr class="separator:a47ed9a118820f6e6ba0b2bc37f0997fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0e400a1757bd68f716b82753a5a1a73"><td class="memItemLeft" align="right" valign="top"><a id="ae0e400a1757bd68f716b82753a5a1a73"></a>
<a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#ae0e400a1757bd68f716b82753a5a1a73">server_name</a> (std::string server_name)</td></tr>
<tr class="memdesc:ae0e400a1757bd68f716b82753a5a1a73"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the server name. <br /></td></tr>
<tr class="separator:ae0e400a1757bd68f716b82753a5a1a73"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a75777f82b6519c86d71446eb9285d774"><td class="memItemLeft" align="right" valign="top"><a id="a75777f82b6519c86d71446eb9285d774"></a>
<a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a75777f82b6519c86d71446eb9285d774">bindaddr</a> (std::string bindaddr)</td></tr>
<tr class="memdesc:a75777f82b6519c86d71446eb9285d774"><td class="mdescLeft">&#160;</td><td class="mdescRight">The IP address that <a class="el" href="classcrow_1_1_crow.html" title="The main server application class.">Crow</a> will handle requests on (default is 0.0.0.0) <br /></td></tr>
<tr class="separator:a75777f82b6519c86d71446eb9285d774"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8c816534804e7bd351ca692005bf3343"><td class="memItemLeft" align="right" valign="top"><a id="a8c816534804e7bd351ca692005bf3343"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a8c816534804e7bd351ca692005bf3343">bindaddr</a> ()</td></tr>
<tr class="memdesc:a8c816534804e7bd351ca692005bf3343"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the address that <a class="el" href="classcrow_1_1_crow.html" title="The main server application class.">Crow</a> will handle requests on. <br /></td></tr>
<tr class="separator:a8c816534804e7bd351ca692005bf3343"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0149b20b7f6c0123292286f54638d456"><td class="memItemLeft" align="right" valign="top"><a id="a0149b20b7f6c0123292286f54638d456"></a>
<a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a0149b20b7f6c0123292286f54638d456">multithreaded</a> ()</td></tr>
<tr class="memdesc:a0149b20b7f6c0123292286f54638d456"><td class="mdescLeft">&#160;</td><td class="mdescRight">Run the server on multiple threads using all available threads. <br /></td></tr>
<tr class="separator:a0149b20b7f6c0123292286f54638d456"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41686e6025705c1ab379b5ec71bbf983"><td class="memItemLeft" align="right" valign="top"><a id="a41686e6025705c1ab379b5ec71bbf983"></a>
<a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a41686e6025705c1ab379b5ec71bbf983">concurrency</a> (std::uint16_t concurrency)</td></tr>
<tr class="memdesc:a41686e6025705c1ab379b5ec71bbf983"><td class="mdescLeft">&#160;</td><td class="mdescRight">Run the server on multiple threads using a specific number. <br /></td></tr>
<tr class="separator:a41686e6025705c1ab379b5ec71bbf983"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd824d73fdd02ba810b8dd37e2900240"><td class="memItemLeft" align="right" valign="top"><a id="abd824d73fdd02ba810b8dd37e2900240"></a>
std::uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#abd824d73fdd02ba810b8dd37e2900240">concurrency</a> ()</td></tr>
<tr class="memdesc:abd824d73fdd02ba810b8dd37e2900240"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the number of threads that server is using. <br /></td></tr>
<tr class="separator:abd824d73fdd02ba810b8dd37e2900240"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b6c225d3bba772eeadad89ebde68d21"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a7b6c225d3bba772eeadad89ebde68d21">loglevel</a> (LogLevel level)</td></tr>
<tr class="memdesc:a7b6c225d3bba772eeadad89ebde68d21"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the server's log level. <a href="classcrow_1_1_crow.html#a7b6c225d3bba772eeadad89ebde68d21">More...</a><br /></td></tr>
<tr class="separator:a7b6c225d3bba772eeadad89ebde68d21"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae92390d22f6fc99987c41a617be71d64"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#ae92390d22f6fc99987c41a617be71d64">stream_threshold</a> (size_t threshold)</td></tr>
<tr class="memdesc:ae92390d22f6fc99987c41a617be71d64"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the response body size (in bytes) beyond which <a class="el" href="classcrow_1_1_crow.html" title="The main server application class.">Crow</a> automatically streams responses (Default is 1MiB) <a href="classcrow_1_1_crow.html#ae92390d22f6fc99987c41a617be71d64">More...</a><br /></td></tr>
<tr class="separator:ae92390d22f6fc99987c41a617be71d64"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0a7b45c935e58d199eb1bcba86003232"><td class="memItemLeft" align="right" valign="top"><a id="a0a7b45c935e58d199eb1bcba86003232"></a>
size_t &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a0a7b45c935e58d199eb1bcba86003232">stream_threshold</a> ()</td></tr>
<tr class="memdesc:a0a7b45c935e58d199eb1bcba86003232"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the response body size (in bytes) beyond which <a class="el" href="classcrow_1_1_crow.html" title="The main server application class.">Crow</a> automatically streams responses. <br /></td></tr>
<tr class="separator:a0a7b45c935e58d199eb1bcba86003232"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7d16da8824a6d6c376395f4bfa73430e"><td class="memItemLeft" align="right" valign="top"><a id="a7d16da8824a6d6c376395f4bfa73430e"></a>
<a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>register_blueprint</b> (<a class="el" href="classcrow_1_1_blueprint.html">Blueprint</a> &amp;blueprint)</td></tr>
<tr class="separator:a7d16da8824a6d6c376395f4bfa73430e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a872d39321015ac4f48ec8a6659dda99b"><td class="memTemplParams" colspan="2">template&lt;typename Func &gt; </td></tr>
<tr class="memitem:a872d39321015ac4f48ec8a6659dda99b"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a872d39321015ac4f48ec8a6659dda99b">exception_handler</a> (Func &amp;&amp;f)</td></tr>
<tr class="memdesc:a872d39321015ac4f48ec8a6659dda99b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the function to call to handle uncaught exceptions generated in routes (Default generates error 500). <a href="classcrow_1_1_crow.html#a872d39321015ac4f48ec8a6659dda99b">More...</a><br /></td></tr>
<tr class="separator:a872d39321015ac4f48ec8a6659dda99b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a46c77db2adcad57e95b807e6f58fc006"><td class="memItemLeft" align="right" valign="top"><a id="a46c77db2adcad57e95b807e6f58fc006"></a>
std::function&lt; void(<a class="el" href="structcrow_1_1response.html">crow::response</a> &amp;)&gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>exception_handler</b> ()</td></tr>
<tr class="separator:a46c77db2adcad57e95b807e6f58fc006"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a068042431b0be5911ee1689a285f4693"><td class="memTemplParams" colspan="2"><a id="a068042431b0be5911ee1689a285f4693"></a>
template&lt;typename Duration , typename Func &gt; </td></tr>
<tr class="memitem:a068042431b0be5911ee1689a285f4693"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a068042431b0be5911ee1689a285f4693">tick</a> (Duration d, Func f)</td></tr>
<tr class="memdesc:a068042431b0be5911ee1689a285f4693"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set a custom duration and function to run on every tick. <br /></td></tr>
<tr class="separator:a068042431b0be5911ee1689a285f4693"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae53a1544edf04f08eeb2e35f01dc25d3"><td class="memItemLeft" align="right" valign="top"><a id="ae53a1544edf04f08eeb2e35f01dc25d3"></a>
<a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>use_compression</b> (compression::algorithm algorithm)</td></tr>
<tr class="separator:ae53a1544edf04f08eeb2e35f01dc25d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a261b73d1f1f463856cceee2c589cbbf4"><td class="memItemLeft" align="right" valign="top"><a id="a261b73d1f1f463856cceee2c589cbbf4"></a>
compression::algorithm&#160;</td><td class="memItemRight" valign="bottom"><b>compression_algorithm</b> ()</td></tr>
<tr class="separator:a261b73d1f1f463856cceee2c589cbbf4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a022f4943770af09b032552e62715ee7e"><td class="memItemLeft" align="right" valign="top"><a id="a022f4943770af09b032552e62715ee7e"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>compression_used</b> () const</td></tr>
<tr class="separator:a022f4943770af09b032552e62715ee7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af0d01b97da7d4d20844a80fd31b74f46"><td class="memItemLeft" align="right" valign="top"><a id="af0d01b97da7d4d20844a80fd31b74f46"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#af0d01b97da7d4d20844a80fd31b74f46">add_blueprint</a> ()</td></tr>
<tr class="memdesc:af0d01b97da7d4d20844a80fd31b74f46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Apply blueprints. <br /></td></tr>
<tr class="separator:af0d01b97da7d4d20844a80fd31b74f46"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3cbe89120e47d2bd3d05376b9129adfa"><td class="memItemLeft" align="right" valign="top"><a id="a3cbe89120e47d2bd3d05376b9129adfa"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a3cbe89120e47d2bd3d05376b9129adfa">add_static_dir</a> ()</td></tr>
<tr class="memdesc:a3cbe89120e47d2bd3d05376b9129adfa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Go through the rules, upgrade them if possible, and add them to the list of rules. <br /></td></tr>
<tr class="separator:a3cbe89120e47d2bd3d05376b9129adfa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab9a22c981e0afec0d55ee234683a6d38"><td class="memItemLeft" align="right" valign="top"><a id="ab9a22c981e0afec0d55ee234683a6d38"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#ab9a22c981e0afec0d55ee234683a6d38">validate</a> ()</td></tr>
<tr class="memdesc:ab9a22c981e0afec0d55ee234683a6d38"><td class="mdescLeft">&#160;</td><td class="mdescRight">A wrapper for <code><a class="el" href="classcrow_1_1_crow.html#ab9a22c981e0afec0d55ee234683a6d38" title="A wrapper for validate() in the router.">validate()</a></code> in the router. <br /></td></tr>
<tr class="separator:ab9a22c981e0afec0d55ee234683a6d38"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a193d8b03f717234a841cd92f72c6b4b5"><td class="memItemLeft" align="right" valign="top"><a id="a193d8b03f717234a841cd92f72c6b4b5"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a193d8b03f717234a841cd92f72c6b4b5">run</a> ()</td></tr>
<tr class="memdesc:a193d8b03f717234a841cd92f72c6b4b5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Run the server. <br /></td></tr>
<tr class="separator:a193d8b03f717234a841cd92f72c6b4b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aac4f72d944fb35caaf2d82cd21287269"><td class="memItemLeft" align="right" valign="top">std::future&lt; void &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#aac4f72d944fb35caaf2d82cd21287269">run_async</a> ()</td></tr>
<tr class="memdesc:aac4f72d944fb35caaf2d82cd21287269"><td class="mdescLeft">&#160;</td><td class="mdescRight">Non-blocking version of <a class="el" href="classcrow_1_1_crow.html#a193d8b03f717234a841cd92f72c6b4b5">run()</a> <a href="classcrow_1_1_crow.html#aac4f72d944fb35caaf2d82cd21287269">More...</a><br /></td></tr>
<tr class="separator:aac4f72d944fb35caaf2d82cd21287269"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0266672657128919ab9a067d93f3868f"><td class="memItemLeft" align="right" valign="top"><a id="a0266672657128919ab9a067d93f3868f"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a0266672657128919ab9a067d93f3868f">stop</a> ()</td></tr>
<tr class="memdesc:a0266672657128919ab9a067d93f3868f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stop the server. <br /></td></tr>
<tr class="separator:a0266672657128919ab9a067d93f3868f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad38f39dc7ba97b9f298390565a88125a"><td class="memItemLeft" align="right" valign="top"><a id="ad38f39dc7ba97b9f298390565a88125a"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>add_websocket</b> (<a class="el" href="structcrow_1_1websocket_1_1connection.html">crow::websocket::connection</a> *conn)</td></tr>
<tr class="separator:ad38f39dc7ba97b9f298390565a88125a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5305aba0aea70aa0e283c4ff8d78bbbf"><td class="memItemLeft" align="right" valign="top"><a id="a5305aba0aea70aa0e283c4ff8d78bbbf"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>remove_websocket</b> (<a class="el" href="structcrow_1_1websocket_1_1connection.html">crow::websocket::connection</a> *conn)</td></tr>
<tr class="separator:a5305aba0aea70aa0e283c4ff8d78bbbf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a839c1e6f82d577308eb6f0d4948a4fbb"><td class="memItemLeft" align="right" valign="top"><a id="a839c1e6f82d577308eb6f0d4948a4fbb"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a839c1e6f82d577308eb6f0d4948a4fbb">debug_print</a> ()</td></tr>
<tr class="memdesc:a839c1e6f82d577308eb6f0d4948a4fbb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Print the routing paths defined for each HTTP method. <br /></td></tr>
<tr class="separator:a839c1e6f82d577308eb6f0d4948a4fbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a987e909347f0563f7b3dd97bbe271cea"><td class="memItemLeft" align="right" valign="top"><a id="a987e909347f0563f7b3dd97bbe271cea"></a>
<a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a987e909347f0563f7b3dd97bbe271cea">ssl_file</a> (const std::string &amp;crt_filename, const std::string &amp;key_filename)</td></tr>
<tr class="memdesc:a987e909347f0563f7b3dd97bbe271cea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Use certificate and key files for SSL. <br /></td></tr>
<tr class="separator:a987e909347f0563f7b3dd97bbe271cea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3e5aa337025914852fcbfd1aebbd3241"><td class="memItemLeft" align="right" valign="top"><a id="a3e5aa337025914852fcbfd1aebbd3241"></a>
<a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a3e5aa337025914852fcbfd1aebbd3241">ssl_file</a> (const std::string &amp;pem_filename)</td></tr>
<tr class="memdesc:a3e5aa337025914852fcbfd1aebbd3241"><td class="mdescLeft">&#160;</td><td class="mdescRight">Use <code>.pem</code> file for SSL. <br /></td></tr>
<tr class="separator:a3e5aa337025914852fcbfd1aebbd3241"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ade6bf7e56805c1112532807581293448"><td class="memItemLeft" align="right" valign="top"><a id="ade6bf7e56805c1112532807581293448"></a>
<a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#ade6bf7e56805c1112532807581293448">ssl_chainfile</a> (const std::string &amp;crt_filename, const std::string &amp;key_filename)</td></tr>
<tr class="memdesc:ade6bf7e56805c1112532807581293448"><td class="mdescLeft">&#160;</td><td class="mdescRight">Use certificate chain and key files for SSL. <br /></td></tr>
<tr class="separator:ade6bf7e56805c1112532807581293448"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad796f0d82060097a6cf776a3f1508b8d"><td class="memItemLeft" align="right" valign="top"><a id="ad796f0d82060097a6cf776a3f1508b8d"></a>
<a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>ssl</b> (asio::ssl::context &amp;&amp;ctx)</td></tr>
<tr class="separator:ad796f0d82060097a6cf776a3f1508b8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac804a73fa33d77a281c4609727ec1676"><td class="memItemLeft" align="right" valign="top"><a id="ac804a73fa33d77a281c4609727ec1676"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>ssl_used</b> () const</td></tr>
<tr class="separator:ac804a73fa33d77a281c4609727ec1676"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab9f401a95ab8fdc6ec65d542899954cc"><td class="memTemplParams" colspan="2"><a id="ab9f401a95ab8fdc6ec65d542899954cc"></a>
template&lt;typename T &gt; </td></tr>
<tr class="memitem:ab9f401a95ab8fdc6ec65d542899954cc"><td class="memTemplItemLeft" align="right" valign="top">T::context &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><b>get_context</b> (const <a class="el" href="structcrow_1_1request.html">request</a> &amp;req)</td></tr>
<tr class="separator:ab9f401a95ab8fdc6ec65d542899954cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a416e872b703c27154845aca516d0a417"><td class="memTemplParams" colspan="2"><a id="a416e872b703c27154845aca516d0a417"></a>
template&lt;typename T &gt; </td></tr>
<tr class="memitem:a416e872b703c27154845aca516d0a417"><td class="memTemplItemLeft" align="right" valign="top">T &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><b>get_middleware</b> ()</td></tr>
<tr class="separator:a416e872b703c27154845aca516d0a417"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5e39821ccc9cbf8c6400fd86fc406c21"><td class="memItemLeft" align="right" valign="top"><a id="a5e39821ccc9cbf8c6400fd86fc406c21"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrow_1_1_crow.html#a5e39821ccc9cbf8c6400fd86fc406c21">wait_for_server_start</a> ()</td></tr>
<tr class="memdesc:a5e39821ccc9cbf8c6400fd86fc406c21"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wait until the server has properly started. <br /></td></tr>
<tr class="separator:a5e39821ccc9cbf8c6400fd86fc406c21"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename... Middlewares&gt;<br />
class crow::Crow&lt; Middlewares &gt;</h3>
<p>The main server application class. </p>
<p>Use <a class="el" href="namespacecrow.html#a3603179c9794548cac2c9990685178b4" title="Alias of Crow&lt;&gt;. Useful if you want a instance of an Crow application that doesn&#39;t require of Middlew...">crow::SimpleApp</a> or <a class="el" href="namespacecrow.html#a153c1bf24903d1a8629ef6eaf045110b" title="Alias of Crow&lt;Middlewares...&gt;. Useful if you want a instance of an Crow application that require Midd...">crow::App&lt;Middleware1, Middleware2, etc...&gt;</a> instead of directly instantiate this class. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a872d39321015ac4f48ec8a6659dda99b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a872d39321015ac4f48ec8a6659dda99b">&#9670;&nbsp;</a></span>exception_handler()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename... Middlewares&gt; </div>
<div class="memtemplate">
template&lt;typename Func &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a>&amp; <a class="el" href="classcrow_1_1_crow.html">crow::Crow</a>&lt; Middlewares &gt;::exception_handler </td>
<td>(</td>
<td class="paramtype">Func &amp;&amp;&#160;</td>
<td class="paramname"><em>f</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Set the function to call to handle uncaught exceptions generated in routes (Default generates error 500). </p>
<p>The function must have the following signature: void(crow::response&amp;). It must set the response passed in argument to the function, which will be sent back to the client. See Router::default_exception_handler() for the default implementation. </p>
</div>
</div>
<a id="a6e435bf5275735effd32647772bdbd04"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6e435bf5275735effd32647772bdbd04">&#9670;&nbsp;</a></span>handle_upgrade()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename... Middlewares&gt; </div>
<div class="memtemplate">
template&lt;typename Adaptor &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classcrow_1_1_crow.html">crow::Crow</a>&lt; Middlewares &gt;::handle_upgrade </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structcrow_1_1request.html">request</a> &amp;&#160;</td>
<td class="paramname"><em>req</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structcrow_1_1response.html">response</a> &amp;&#160;</td>
<td class="paramname"><em>res</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Adaptor &amp;&amp;&#160;</td>
<td class="paramname"><em>adaptor</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">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Process an Upgrade request. </p>
<p>Currently used to upgrade an HTTP connection to a WebSocket connection </p>
</div>
</div>
<a id="a7b6c225d3bba772eeadad89ebde68d21"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7b6c225d3bba772eeadad89ebde68d21">&#9670;&nbsp;</a></span>loglevel()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename... Middlewares&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a>&amp; <a class="el" href="classcrow_1_1_crow.html">crow::Crow</a>&lt; Middlewares &gt;::loglevel </td>
<td>(</td>
<td class="paramtype">LogLevel&#160;</td>
<td class="paramname"><em>level</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Set the server's log level. </p>
<p>Possible values are:</p><ul>
<li>crow::LogLevel::Debug (0)</li>
<li>crow::LogLevel::Info (1)</li>
<li>crow::LogLevel::Warning (2)</li>
<li>crow::LogLevel::Error (3)</li>
<li>crow::LogLevel::Critical (4) </li>
</ul>
</div>
</div>
<a id="aac4f72d944fb35caaf2d82cd21287269"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aac4f72d944fb35caaf2d82cd21287269">&#9670;&nbsp;</a></span>run_async()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename... Middlewares&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::future&lt;void&gt; <a class="el" href="classcrow_1_1_crow.html">crow::Crow</a>&lt; Middlewares &gt;::run_async </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Non-blocking version of <a class="el" href="classcrow_1_1_crow.html#a193d8b03f717234a841cd92f72c6b4b5">run()</a> </p>
<p>The output from this method needs to be saved into a variable! Otherwise the call will be made on the same thread. </p>
</div>
</div>
<a id="ae92390d22f6fc99987c41a617be71d64"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae92390d22f6fc99987c41a617be71d64">&#9670;&nbsp;</a></span>stream_threshold()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename... Middlewares&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classcrow_1_1_crow.html#a5b0a203a6f9070ea8010227dcdbcec60">self_t</a>&amp; <a class="el" href="classcrow_1_1_crow.html">crow::Crow</a>&lt; Middlewares &gt;::stream_threshold </td>
<td>(</td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>threshold</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Set the response body size (in bytes) beyond which <a class="el" href="classcrow_1_1_crow.html" title="The main server application class.">Crow</a> automatically streams responses (Default is 1MiB) </p>
<p>Any streamed response is unaffected by <a class="el" href="classcrow_1_1_crow.html" title="The main server application class.">Crow</a>'s timer, and therefore won't timeout before a response is fully sent. </p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>include/crow/<a class="el" href="app_8h_source.html">app.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="namespacecrow.html">crow</a></li><li class="navelem"><a class="el" href="classcrow_1_1_crow.html">Crow</a></li>
<li class="footer">
Generated on Mon May 6 2024 for Crow by <a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.9.1.
Dark theme by <a href="http://majerle.eu" target="_new">Tilen Majerle</a>. Edited by <a href="https://github.com/The-EDev" target="_new">Farook Al-Sammarraie</a>. All rights reserved.
</li>
</ul>
</div>
<script src="custom.js"></script>
</body>
</html>