litespeed-quic/docs/html/lsquic_8h.html

1731 lines
104 KiB
HTML
Raw Normal View History

<!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.11"/>
<title>LiteSpeed QUIC Library: include/lsquic.h File 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>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<link href="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">LiteSpeed QUIC Library
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
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.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</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="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">lsquic.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &lt;stdarg.h&gt;</code><br />
<code>#include &lt;<a class="el" href="lsquic__types_8h_source.html">lsquic_types.h</a>&gt;</code><br />
<code>#include &lt;sys/uio.h&gt;</code><br />
<code>#include &lt;sys/types.h&gt;</code><br />
<code>#include &lt;time.h&gt;</code><br />
</div><div class="textblock"><div class="dynheader">
Include dependency graph for lsquic.h:</div>
<div class="dyncontent">
<div class="center"><img src="lsquic_8h__incl.png" border="0" usemap="#include_2lsquic_8h" alt=""/></div>
<map name="include_2lsquic_8h" id="include_2lsquic_8h">
<area shape="rect" id="node3" href="lsquic__types_8h.html" title="lsquic_types.h" alt="" coords="99,80,205,107"/>
</map>
</div>
</div>
<p><a href="lsquic_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlsquic__stream__if.html">lsquic_stream_if</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The definition of callback functions call by lsquic_stream to process events. <a href="structlsquic__stream__if.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlsquic__engine__settings.html">lsquic_engine_settings</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlsquic__out__spec.html">lsquic_out_spec</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlsquic__packout__mem__if.html">lsquic_packout_mem_if</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlsquic__engine__api.html">lsquic_engine_api</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlsquic__http__header.html">lsquic_http_header</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlsquic__http__headers.html">lsquic_http_headers</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlsquic__logger__if.html">lsquic_logger_if</a></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="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:abaf1fe07c4f99aa36d3d5502bbfc371d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#abaf1fe07c4f99aa36d3d5502bbfc371d">LSENG_SERVER</a>&#160;&#160;&#160;(1 &lt;&lt; 0)</td></tr>
<tr class="separator:abaf1fe07c4f99aa36d3d5502bbfc371d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8f395ac69797c7be8d9d524d464e7ed2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a8f395ac69797c7be8d9d524d464e7ed2">LSENG_HTTP</a>&#160;&#160;&#160;(1 &lt;&lt; 1)</td></tr>
<tr class="separator:a8f395ac69797c7be8d9d524d464e7ed2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad23057eb0b70da798468a1c6f3180eeb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad23057eb0b70da798468a1c6f3180eeb"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSENG_HTTP_SERVER</b>&#160;&#160;&#160;(<a class="el" href="lsquic_8h.html#abaf1fe07c4f99aa36d3d5502bbfc371d">LSENG_SERVER</a>|<a class="el" href="lsquic_8h.html#a8f395ac69797c7be8d9d524d464e7ed2">LSENG_HTTP</a>)</td></tr>
<tr class="separator:ad23057eb0b70da798468a1c6f3180eeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0420e68d347462080cf2e583b77d61a0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a0420e68d347462080cf2e583b77d61a0">LSQUIC_SUPPORTED_VERSIONS</a></td></tr>
<tr class="separator:a0420e68d347462080cf2e583b77d61a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9c4ad08207bd7865f40eeb18a23e04ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c4ad08207bd7865f40eeb18a23e04ed"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSQUIC_EXPERIMENTAL_VERSIONS</b>&#160;&#160;&#160;((1 &lt;&lt; <a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3">LSQVER_041</a>))</td></tr>
<tr class="separator:a9c4ad08207bd7865f40eeb18a23e04ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6fd9104d1ffa8c391dede0a714a5919b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a6fd9104d1ffa8c391dede0a714a5919b">LSQUIC_MIN_FCW</a>&#160;&#160;&#160;(16 * 1024)</td></tr>
<tr class="separator:a6fd9104d1ffa8c391dede0a714a5919b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aecb8427433af4e3fa5260fe71c313d8f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#aecb8427433af4e3fa5260fe71c313d8f">LSQUIC_DF_VERSIONS</a></td></tr>
<tr class="separator:aecb8427433af4e3fa5260fe71c313d8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac5b8b3cd4c53ab52a612f2e4775ae6cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac5b8b3cd4c53ab52a612f2e4775ae6cd"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSQUIC_DF_CFCW_SERVER</b>&#160;&#160;&#160;(3 * 1024 * 1024 / 2)</td></tr>
<tr class="separator:ac5b8b3cd4c53ab52a612f2e4775ae6cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a18508a76b094f630a3a62f5f6b1bb02a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18508a76b094f630a3a62f5f6b1bb02a"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSQUIC_DF_CFCW_CLIENT</b>&#160;&#160;&#160;(15 * 1024 * 1024)</td></tr>
<tr class="separator:a18508a76b094f630a3a62f5f6b1bb02a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4bf6b07f07a60ba33688ca1cd28c3327"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4bf6b07f07a60ba33688ca1cd28c3327"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSQUIC_DF_SFCW_SERVER</b>&#160;&#160;&#160;(1 * 1024 * 1024)</td></tr>
<tr class="separator:a4bf6b07f07a60ba33688ca1cd28c3327"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4f02572557fa8ebf50cfb7402690b8b4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f02572557fa8ebf50cfb7402690b8b4"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSQUIC_DF_SFCW_CLIENT</b>&#160;&#160;&#160;(6 * 1024 * 1024)</td></tr>
<tr class="separator:a4f02572557fa8ebf50cfb7402690b8b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a667b524e2dbf441d8c035303828aaa56"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a667b524e2dbf441d8c035303828aaa56"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSQUIC_DF_MAX_STREAMS_IN</b>&#160;&#160;&#160;100</td></tr>
<tr class="separator:a667b524e2dbf441d8c035303828aaa56"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1e7808ab9863e1ae4b44e7856e75eee8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a1e7808ab9863e1ae4b44e7856e75eee8">LSQUIC_DF_HANDSHAKE_TO</a>&#160;&#160;&#160;(10 * 1000 * 1000)</td></tr>
<tr class="separator:a1e7808ab9863e1ae4b44e7856e75eee8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ada93d1d80f1c0aa13c4477cf71801f96"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada93d1d80f1c0aa13c4477cf71801f96"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSQUIC_DF_IDLE_CONN_TO</b>&#160;&#160;&#160;(30 * 1000 * 1000)</td></tr>
<tr class="separator:ada93d1d80f1c0aa13c4477cf71801f96"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aef4b98e9a7b3b9eae66d20935ff5e996"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef4b98e9a7b3b9eae66d20935ff5e996"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSQUIC_DF_SILENT_CLOSE</b>&#160;&#160;&#160;1</td></tr>
<tr class="separator:aef4b98e9a7b3b9eae66d20935ff5e996"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1e1ab46b8acff52f127359bf68a8b297"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a1e1ab46b8acff52f127359bf68a8b297">LSQUIC_DF_MAX_HEADER_LIST_SIZE</a>&#160;&#160;&#160;0</td></tr>
<tr class="separator:a1e1ab46b8acff52f127359bf68a8b297"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeefb2f925217c311af00c92a77e0f191"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#aeefb2f925217c311af00c92a77e0f191">LSQUIC_DF_UA</a>&#160;&#160;&#160;&quot;LSQUIC&quot;</td></tr>
<tr class="separator:aeefb2f925217c311af00c92a77e0f191"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac45fd3328a7fd232d5e03ffc1dd2f570"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac45fd3328a7fd232d5e03ffc1dd2f570"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSQUIC_DF_STTL</b>&#160;&#160;&#160;86400</td></tr>
<tr class="separator:ac45fd3328a7fd232d5e03ffc1dd2f570"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3568118d3800e5b0437a39f58f363f99"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3568118d3800e5b0437a39f58f363f99"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSQUIC_DF_MAX_INCHOATE</b>&#160;&#160;&#160;(1 * 1000 * 1000)</td></tr>
<tr class="separator:a3568118d3800e5b0437a39f58f363f99"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa1ecc663472d865eb5a434a5b6cc3507"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1ecc663472d865eb5a434a5b6cc3507"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSQUIC_DF_SUPPORT_SREJ_SERVER</b>&#160;&#160;&#160;1</td></tr>
<tr class="separator:aa1ecc663472d865eb5a434a5b6cc3507"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acad8d2fa968a651fb6537e522a718e3a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acad8d2fa968a651fb6537e522a718e3a"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSQUIC_DF_SUPPORT_SREJ_CLIENT</b>&#160;&#160;&#160;0 /* TODO: client support */</td></tr>
<tr class="separator:acad8d2fa968a651fb6537e522a718e3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9e3f5f4a0ecb53f96d2b9249cded3aef"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a9e3f5f4a0ecb53f96d2b9249cded3aef">LSQUIC_DF_SUPPORT_NSTP</a>&#160;&#160;&#160;0</td></tr>
<tr class="separator:a9e3f5f4a0ecb53f96d2b9249cded3aef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aae817e32bec2ea7b979f0e4ede77a6c4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae817e32bec2ea7b979f0e4ede77a6c4"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSQUIC_DF_SUPPORT_PUSH</b>&#160;&#160;&#160;1</td></tr>
<tr class="separator:aae817e32bec2ea7b979f0e4ede77a6c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5355f98b0c12d3c771a13131f8a812be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5355f98b0c12d3c771a13131f8a812be"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSQUIC_DF_SUPPORT_TCID0</b>&#160;&#160;&#160;1</td></tr>
<tr class="separator:a5355f98b0c12d3c771a13131f8a812be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a13d1cb05ad19ae5cd016e016d228326c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a13d1cb05ad19ae5cd016e016d228326c">LSQUIC_DF_HONOR_PRST</a>&#160;&#160;&#160;0</td></tr>
<tr class="separator:a13d1cb05ad19ae5cd016e016d228326c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afc995b576f8013a43436201a7adf0221"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#afc995b576f8013a43436201a7adf0221">LSQUIC_DF_PROGRESS_CHECK</a>&#160;&#160;&#160;1000</td></tr>
<tr class="separator:afc995b576f8013a43436201a7adf0221"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a472d9508529e22b2be78b48d0fd69529"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a472d9508529e22b2be78b48d0fd69529">LSQUIC_DF_PENDRW_CHECK</a>&#160;&#160;&#160;10</td></tr>
<tr class="separator:a472d9508529e22b2be78b48d0fd69529"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5665ba68a62be14aa1332316512ec4fe"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a5665ba68a62be14aa1332316512ec4fe">LSQUIC_DF_RW_ONCE</a>&#160;&#160;&#160;0</td></tr>
<tr class="separator:a5665ba68a62be14aa1332316512ec4fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4a8cbc259dcff01fa93959ca5b2a0a35"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a4a8cbc259dcff01fa93959ca5b2a0a35">LSQUIC_DF_PROC_TIME_THRESH</a>&#160;&#160;&#160;0</td></tr>
<tr class="separator:a4a8cbc259dcff01fa93959ca5b2a0a35"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a332b2fcfbbd83bbeb6027a622ec72f69"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a332b2fcfbbd83bbeb6027a622ec72f69">LSQUIC_DF_PACE_PACKETS</a>&#160;&#160;&#160;1</td></tr>
<tr class="separator:a332b2fcfbbd83bbeb6027a622ec72f69"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:add59f38ae0a3bea39bd3c5c86b70c63c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#add59f38ae0a3bea39bd3c5c86b70c63c">LSQUIC_GLOBAL_CLIENT</a>&#160;&#160;&#160;(1 &lt;&lt; 0)</td></tr>
<tr class="separator:add59f38ae0a3bea39bd3c5c86b70c63c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a632ff4c3837f60fae3436db6e5f3e039"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a632ff4c3837f60fae3436db6e5f3e039">LSQUIC_GLOBAL_SERVER</a>&#160;&#160;&#160;(1 &lt;&lt; 1)</td></tr>
<tr class="separator:a632ff4c3837f60fae3436db6e5f3e039"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:aade9ff8d34cbcb33cd04a41377797fcf"><td class="memItemLeft" align="right" valign="top">typedef int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#aade9ff8d34cbcb33cd04a41377797fcf">lsquic_packets_out_f</a>) (void *packets_out_ctx, const struct <a class="el" href="structlsquic__out__spec.html">lsquic_out_spec</a> *out_spec, unsigned n_packets_out)</td></tr>
<tr class="separator:aade9ff8d34cbcb33cd04a41377797fcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a845b7f51c2453111a948d1af8957c348"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a845b7f51c2453111a948d1af8957c348"></a>
typedef struct <a class="el" href="structlsquic__engine__api.html">lsquic_engine_api</a>&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_engine_api_t</b></td></tr>
<tr class="separator:a845b7f51c2453111a948d1af8957c348"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a822627a87eb003fd9e2e56ebded5b3f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a822627a87eb003fd9e2e56ebded5b3f3"></a>
typedef struct <a class="el" href="structlsquic__http__header.html">lsquic_http_header</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a822627a87eb003fd9e2e56ebded5b3f3">lsquic_http_header_t</a></td></tr>
<tr class="memdesc:a822627a87eb003fd9e2e56ebded5b3f3"><td class="mdescLeft">&#160;</td><td class="mdescRight">HTTP header structure. Contains header name and value. <br /></td></tr>
<tr class="separator:a822627a87eb003fd9e2e56ebded5b3f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:a2633ae9ee8d564f4c499f6eb0913d4db"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4db">lsquic_version</a> { <br />
&#160;&#160;<a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba1956abef5d785f45310599e4fcd39c32">LSQVER_035</a>,
<a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7">LSQVER_037</a>,
<a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba2d39809298e0c7866b21fc7932504966">LSQVER_038</a>,
<a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3">LSQVER_039</a>,
<br />
&#160;&#160;<a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3">LSQVER_041</a>,
<b>N_LSQVER</b>
<br />
}</td></tr>
<tr class="separator:a2633ae9ee8d564f4c499f6eb0913d4db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac4584806627d352797a2e0cfae2e6235"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235">lsquic_logger_timestamp_style</a> { <br />
&#160;&#160;<a class="el" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a4bc180853f0f833b9c93bf7080ce2805">LLTS_NONE</a>,
<a class="el" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235aa00368e0a7e30628851ab624d6e7575b">LLTS_HHMMSSMS</a>,
<a class="el" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a8754c3fced294cfb146625c586a55a56">LLTS_YYYYMMDD_HHMMSSMS</a>,
<a class="el" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a5aa72ace83b5948f4d5a9ed5c72a4c4b">LLTS_CHROMELIKE</a>,
<br />
&#160;&#160;<a class="el" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a874a36df2ce02e162104c2345b176185">LLTS_HHMMSSUS</a>,
<b>N_LLTS</b>
<br />
}</td></tr>
<tr class="separator:ac4584806627d352797a2e0cfae2e6235"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:add83c0120731be7c42fa7c21d265c72a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add83c0120731be7c42fa7c21d265c72a"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_engine_init_settings</b> (struct <a class="el" href="structlsquic__engine__settings.html">lsquic_engine_settings</a> *, unsigned lsquic_engine_flags)</td></tr>
<tr class="separator:add83c0120731be7c42fa7c21d265c72a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a827d6567e492bd67c330e2d48047ad49"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a827d6567e492bd67c330e2d48047ad49">lsquic_engine_check_settings</a> (const struct <a class="el" href="structlsquic__engine__settings.html">lsquic_engine_settings</a> *settings, unsigned lsquic_engine_flags, char *err_buf, size_t err_buf_sz)</td></tr>
<tr class="separator:a827d6567e492bd67c330e2d48047ad49"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa6f69c943be0a943f28699af6ae1000"><td class="memItemLeft" align="right" valign="top"><a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#afa6f69c943be0a943f28699af6ae1000">lsquic_engine_new</a> (unsigned lsquic_engine_flags, const struct <a class="el" href="structlsquic__engine__api.html">lsquic_engine_api</a> *)</td></tr>
<tr class="separator:afa6f69c943be0a943f28699af6ae1000"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5e2335a871f1ab9b66e3c59b442e8cbe"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a5e2335a871f1ab9b66e3c59b442e8cbe">lsquic_engine_connect</a> (<a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *, const struct sockaddr *peer_sa, void *peer_ctx, const char *hostname, unsigned short max_packet_size)</td></tr>
<tr class="separator:a5e2335a871f1ab9b66e3c59b442e8cbe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adb3d3d822e9a8217d90acbf29594ae40"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#adb3d3d822e9a8217d90acbf29594ae40">lsquic_engine_packet_in</a> (<a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *, const unsigned char *packet_in_data, size_t packet_in_size, const struct sockaddr *sa_local, const struct sockaddr *sa_peer, void *peer_ctx)</td></tr>
<tr class="separator:adb3d3d822e9a8217d90acbf29594ae40"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a60427549acdb608cc360173d817393e3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a60427549acdb608cc360173d817393e3">lsquic_engine_proc_all</a> (<a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *engine)</td></tr>
<tr class="separator:a60427549acdb608cc360173d817393e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aefe24851a36ebe16289a6fa3c5a1c8cc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#aefe24851a36ebe16289a6fa3c5a1c8cc">lsquic_engine_process_conns_with_incoming</a> (<a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *)</td></tr>
<tr class="separator:aefe24851a36ebe16289a6fa3c5a1c8cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aefc66717813306c208483cccbb90ab9a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#aefc66717813306c208483cccbb90ab9a">lsquic_engine_process_conns_to_tick</a> (<a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *)</td></tr>
<tr class="separator:aefc66717813306c208483cccbb90ab9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a74d8c8f033c2e654fdb3487a2bf55d8a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a74d8c8f033c2e654fdb3487a2bf55d8a">lsquic_engine_has_pend_rw</a> (<a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *)</td></tr>
<tr class="separator:a74d8c8f033c2e654fdb3487a2bf55d8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aae156a499af8ae01ca6f4fa307da86c6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#aae156a499af8ae01ca6f4fa307da86c6">lsquic_engine_process_conns_with_pend_rw</a> (<a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *)</td></tr>
<tr class="separator:aae156a499af8ae01ca6f4fa307da86c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9d5d9609ca70350117994e2e2e934a22"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a9d5d9609ca70350117994e2e2e934a22">lsquic_engine_has_unsent_packets</a> (<a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *engine)</td></tr>
<tr class="separator:a9d5d9609ca70350117994e2e2e934a22"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a88a2040cc4b0e575b2fa2affe8597697"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a88a2040cc4b0e575b2fa2affe8597697">lsquic_engine_send_unsent_packets</a> (<a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *engine)</td></tr>
<tr class="separator:a88a2040cc4b0e575b2fa2affe8597697"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeb0caea9d9dc3cc9daff03eac2602faf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeb0caea9d9dc3cc9daff03eac2602faf"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_engine_destroy</b> (<a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *)</td></tr>
<tr class="separator:aeb0caea9d9dc3cc9daff03eac2602faf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a46049f424c3424f5744e8345920ec2b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46049f424c3424f5744e8345920ec2b5"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_conn_make_stream</b> (<a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *)</td></tr>
<tr class="separator:a46049f424c3424f5744e8345920ec2b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a33bb7961ffad842a052bcd81202de5b9"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a33bb7961ffad842a052bcd81202de5b9">lsquic_conn_n_pending_streams</a> (const <a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *)</td></tr>
<tr class="separator:a33bb7961ffad842a052bcd81202de5b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8fe1ef20026e5e68a892036005c20a19"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a8fe1ef20026e5e68a892036005c20a19">lsquic_conn_cancel_pending_streams</a> (<a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *, unsigned n)</td></tr>
<tr class="separator:a8fe1ef20026e5e68a892036005c20a19"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aff77b794b9ca995245cc9a739b76d197"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#aff77b794b9ca995245cc9a739b76d197">lsquic_conn_going_away</a> (<a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *conn)</td></tr>
<tr class="separator:aff77b794b9ca995245cc9a739b76d197"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad8f2345e0b9f8d19f7b6a1fa4e970aa8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#ad8f2345e0b9f8d19f7b6a1fa4e970aa8">lsquic_conn_close</a> (<a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *conn)</td></tr>
<tr class="separator:ad8f2345e0b9f8d19f7b6a1fa4e970aa8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0ca5e7da9c8646fdb9b34a8e103cf3a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ca5e7da9c8646fdb9b34a8e103cf3a2"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_stream_wantread</b> (<a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, int is_want)</td></tr>
<tr class="separator:a0ca5e7da9c8646fdb9b34a8e103cf3a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a725e0e615c557dfaaee76870793970bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a725e0e615c557dfaaee76870793970bd"></a>
ssize_t&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_stream_read</b> (<a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, void *buf, size_t len)</td></tr>
<tr class="separator:a725e0e615c557dfaaee76870793970bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9143202e570b0fdcd65928fc93dd42ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9143202e570b0fdcd65928fc93dd42ac"></a>
ssize_t&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_stream_readv</b> (<a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, const struct iovec *, int iovcnt)</td></tr>
<tr class="separator:a9143202e570b0fdcd65928fc93dd42ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a96da64e3694d9b79038ec7ada318bb4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a96da64e3694d9b79038ec7ada318bb4f"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_stream_wantwrite</b> (<a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, int is_want)</td></tr>
<tr class="separator:a96da64e3694d9b79038ec7ada318bb4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a97229544d7aaf6c5dcd5e071613f9c8f"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a97229544d7aaf6c5dcd5e071613f9c8f">lsquic_stream_write_avail</a> (const <a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s)</td></tr>
<tr class="separator:a97229544d7aaf6c5dcd5e071613f9c8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1071b7be4f2f28c5fedf957aa6309f9a"><td class="memItemLeft" align="right" valign="top">ssize_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a1071b7be4f2f28c5fedf957aa6309f9a">lsquic_stream_write</a> (<a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, const void *buf, size_t len)</td></tr>
<tr class="separator:a1071b7be4f2f28c5fedf957aa6309f9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af5b85bb360eb8316fd663d7c5bc149c9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#af5b85bb360eb8316fd663d7c5bc149c9">lsquic_stream_write_file</a> (<a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, const char *filename)</td></tr>
<tr class="separator:af5b85bb360eb8316fd663d7c5bc149c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a715b914c55b5e534cf75713353eb1589"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a715b914c55b5e534cf75713353eb1589"></a>
ssize_t&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_stream_writev</b> (<a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, const struct iovec *vec, int count)</td></tr>
<tr class="separator:a715b914c55b5e534cf75713353eb1589"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1700c950ace4e560d225b474a5e44d58"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a1700c950ace4e560d225b474a5e44d58">lsquic_stream_sendfile</a> (<a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, int fdSrc, off_t off, size_t size)</td></tr>
<tr class="separator:a1700c950ace4e560d225b474a5e44d58"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abcf25d8301c4a2796ea13e6e306a33a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abcf25d8301c4a2796ea13e6e306a33a9"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_stream_flush</b> (<a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s)</td></tr>
<tr class="separator:abcf25d8301c4a2796ea13e6e306a33a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae523cf75e48b86f5c4510b429b332acb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae523cf75e48b86f5c4510b429b332acb"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_stream_send_headers</b> (<a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, const <a class="el" href="lsquic__types_8h.html#a91f399fbcccaf01b47ca209c5c170ba2">lsquic_http_headers_t</a> *h, int eos)</td></tr>
<tr class="separator:ae523cf75e48b86f5c4510b429b332acb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a896e533ed90685d435afcec5a02130f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a896e533ed90685d435afcec5a02130f2"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_conn_is_push_enabled</b> (<a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c)</td></tr>
<tr class="separator:a896e533ed90685d435afcec5a02130f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7fee61cc609a4b274a4de2b41db6a9e4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a7fee61cc609a4b274a4de2b41db6a9e4">lsquic_stream_shutdown</a> (<a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, int how)</td></tr>
<tr class="separator:a7fee61cc609a4b274a4de2b41db6a9e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0854a4b52ff1b58ff202ff0fe1f2cb7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae0854a4b52ff1b58ff202ff0fe1f2cb7"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_stream_close</b> (<a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s)</td></tr>
<tr class="separator:ae0854a4b52ff1b58ff202ff0fe1f2cb7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a534523d663336969494d6a3721a63640"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a534523d663336969494d6a3721a63640">lsquic_stream_id</a> (const <a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s)</td></tr>
<tr class="separator:a534523d663336969494d6a3721a63640"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a26335cffe38e49a6e87d94967371150d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="lsquic__types_8h.html#a4012fdeb11382d691dfe5f025206b8f3">lsquic_stream_ctx_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a26335cffe38e49a6e87d94967371150d">lsquic_stream_get_ctx</a> (const <a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s)</td></tr>
<tr class="separator:a26335cffe38e49a6e87d94967371150d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a199b551bc87bb77814ab4ce58abcdff9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a199b551bc87bb77814ab4ce58abcdff9">lsquic_stream_is_pushed</a> (const <a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s)</td></tr>
<tr class="separator:a199b551bc87bb77814ab4ce58abcdff9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ada61e01ced7a7db11e5c503409c565be"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#ada61e01ced7a7db11e5c503409c565be">lsquic_stream_refuse_push</a> (<a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s)</td></tr>
<tr class="separator:ada61e01ced7a7db11e5c503409c565be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0b8525f7dac119f6122af564d0e17fd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#ae0b8525f7dac119f6122af564d0e17fd">lsquic_stream_push_info</a> (const <a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *, uint32_t *ref_stream_id, const char **headers, size_t *headers_sz)</td></tr>
<tr class="separator:ae0b8525f7dac119f6122af564d0e17fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa45f5d45b56f5a0d7f881dbccebc5fd8"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#aa45f5d45b56f5a0d7f881dbccebc5fd8">lsquic_stream_priority</a> (const <a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s)</td></tr>
<tr class="separator:aa45f5d45b56f5a0d7f881dbccebc5fd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa5e0ddfd53a44561248a286caacbd114"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#aa5e0ddfd53a44561248a286caacbd114">lsquic_stream_set_priority</a> (<a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, unsigned priority)</td></tr>
<tr class="separator:aa5e0ddfd53a44561248a286caacbd114"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a177184b3d7178dda5a3e95e539230b2b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a177184b3d7178dda5a3e95e539230b2b">lsquic_stream_conn</a> (const <a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s)</td></tr>
<tr class="separator:a177184b3d7178dda5a3e95e539230b2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4bf3aa4f4747e2b94606955c66648889"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4bf3aa4f4747e2b94606955c66648889"></a>
<a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_conn_get_stream_by_id</b> (<a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c, uint32_t stream_id)</td></tr>
<tr class="separator:a4bf3aa4f4747e2b94606955c66648889"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a487bffd57fd7febe4b316be7dc0a3016"><td class="memItemLeft" align="right" valign="top"><a class="el" href="lsquic__types_8h.html#acf675534bad01d31b48d9113feff1bbb">lsquic_cid_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a487bffd57fd7febe4b316be7dc0a3016">lsquic_conn_id</a> (const <a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c)</td></tr>
<tr class="separator:a487bffd57fd7febe4b316be7dc0a3016"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a67d182c6ba3c27ed490ccf1146ed4dc6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67d182c6ba3c27ed490ccf1146ed4dc6"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_conn_get_sockaddr</b> (const <a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c, const struct sockaddr **local, const struct sockaddr **peer)</td></tr>
<tr class="separator:a67d182c6ba3c27ed490ccf1146ed4dc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5059cabdc84335f56870c8bc7a1235e2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a5059cabdc84335f56870c8bc7a1235e2">lsquic_logger_init</a> (const struct <a class="el" href="structlsquic__logger__if.html">lsquic_logger_if</a> *, void *logger_ctx, enum <a class="el" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235">lsquic_logger_timestamp_style</a>)</td></tr>
<tr class="separator:a5059cabdc84335f56870c8bc7a1235e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a337f6adcc4ec9328e0f293d6128ee376"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a337f6adcc4ec9328e0f293d6128ee376">lsquic_set_log_level</a> (const char *log_level)</td></tr>
<tr class="separator:a337f6adcc4ec9328e0f293d6128ee376"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af8c718a3780425357d070419106e4bc8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#af8c718a3780425357d070419106e4bc8">lsquic_logger_lopt</a> (const char *optarg)</td></tr>
<tr class="separator:af8c718a3780425357d070419106e4bc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abebdca40ce630ad8272752da926d7a24"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#abebdca40ce630ad8272752da926d7a24">lsquic_engine_quic_versions</a> (const <a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *)</td></tr>
<tr class="separator:abebdca40ce630ad8272752da926d7a24"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a754a3d611e8c6f9a1daeb7b06c00af88"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a754a3d611e8c6f9a1daeb7b06c00af88">lsquic_global_init</a> (int flags)</td></tr>
<tr class="separator:a754a3d611e8c6f9a1daeb7b06c00af88"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a06b9ac9ba933a060b72975640b2d79a3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a06b9ac9ba933a060b72975640b2d79a3">lsquic_global_cleanup</a> (void)</td></tr>
<tr class="separator:a06b9ac9ba933a060b72975640b2d79a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2a07e308beb5e1f29ba62597c2a37b2b"><td class="memItemLeft" align="right" valign="top">enum <a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4db">lsquic_version</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a2a07e308beb5e1f29ba62597c2a37b2b">lsquic_conn_quic_version</a> (const <a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c)</td></tr>
<tr class="separator:a2a07e308beb5e1f29ba62597c2a37b2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8fef45d333b115d996080bb254077d8d"><td class="memItemLeft" align="right" valign="top">enum <a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4db">lsquic_version</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a8fef45d333b115d996080bb254077d8d">lsquic_str2ver</a> (const char *str, size_t len)</td></tr>
<tr class="separator:a8fef45d333b115d996080bb254077d8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a53d1105503b5ab46384451ff4bbd0391"><td class="memItemLeft" align="right" valign="top"><a class="el" href="lsquic__types_8h.html#a21c289bcbb4643effba8bb75eeffd8cd">lsquic_conn_ctx_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a53d1105503b5ab46384451ff4bbd0391">lsquic_conn_get_ctx</a> (const <a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c)</td></tr>
<tr class="separator:a53d1105503b5ab46384451ff4bbd0391"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8edf1874acb10f4b95abf8894023c3c9"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a8edf1874acb10f4b95abf8894023c3c9">lsquic_conn_get_peer_ctx</a> (const <a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *lconn)</td></tr>
<tr class="separator:a8edf1874acb10f4b95abf8894023c3c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6da1350d78db9a83810a00dcee3e4944"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a6da1350d78db9a83810a00dcee3e4944">lsquic_conn_abort</a> (<a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c)</td></tr>
<tr class="separator:a6da1350d78db9a83810a00dcee3e4944"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac864ff28dcaa1c09ef796a3cdcf83e27"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#ac864ff28dcaa1c09ef796a3cdcf83e27">lsquic_engine_earliest_adv_tick</a> (<a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *engine, int *diff)</td></tr>
<tr class="separator:ac864ff28dcaa1c09ef796a3cdcf83e27"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec59af9ee5cb005bef2e828ee8a0a4be"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#aec59af9ee5cb005bef2e828ee8a0a4be">lsquic_engine_count_attq</a> (<a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *engine, int from_now)</td></tr>
<tr class="separator:aec59af9ee5cb005bef2e828ee8a0a4be"><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>public API for using liblsquic is defined in this file. </p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="a8f395ac69797c7be8d9d524d464e7ed2"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSENG_HTTP&#160;&#160;&#160;(1 &lt;&lt; 1)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Treat stream 3 as headers stream and, in general, behave like the regular QUIC. </p>
</div>
</div>
<a class="anchor" id="abaf1fe07c4f99aa36d3d5502bbfc371d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSENG_SERVER&#160;&#160;&#160;(1 &lt;&lt; 0)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Engine flags:Server mode </p>
</div>
</div>
<a class="anchor" id="a1e7808ab9863e1ae4b44e7856e75eee8"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSQUIC_DF_HANDSHAKE_TO&#160;&#160;&#160;(10 * 1000 * 1000)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Default handshake timeout in microseconds. </p>
</div>
</div>
<a class="anchor" id="a13d1cb05ad19ae5cd016e016d228326c"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSQUIC_DF_HONOR_PRST&#160;&#160;&#160;0</td>
</tr>
</table>
</div><div class="memdoc">
<p>By default, LSQUIC ignores Public Reset packets. </p>
</div>
</div>
<a class="anchor" id="a1e1ab46b8acff52f127359bf68a8b297"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSQUIC_DF_MAX_HEADER_LIST_SIZE&#160;&#160;&#160;0</td>
</tr>
</table>
</div><div class="memdoc">
<p>Default value of maximum header list size. If set to non-zero value, SETTINGS_MAX_HEADER_LIST_SIZE will be sent to peer after handshake is completed (assuming the peer supports this setting frame type). </p>
</div>
</div>
<a class="anchor" id="a332b2fcfbbd83bbeb6027a622ec72f69"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSQUIC_DF_PACE_PACKETS&#160;&#160;&#160;1</td>
</tr>
</table>
</div><div class="memdoc">
<p>By default, packets are paced </p>
</div>
</div>
<a class="anchor" id="a472d9508529e22b2be78b48d0fd69529"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSQUIC_DF_PENDRW_CHECK&#160;&#160;&#160;10</td>
</tr>
</table>
</div><div class="memdoc">
<p>By default, Pending RW Queue infinite loop checks are turned on: </p>
</div>
</div>
<a class="anchor" id="a4a8cbc259dcff01fa93959ca5b2a0a35"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSQUIC_DF_PROC_TIME_THRESH&#160;&#160;&#160;0</td>
</tr>
</table>
</div><div class="memdoc">
<p>By default, the threshold is not enabled </p>
</div>
</div>
<a class="anchor" id="afc995b576f8013a43436201a7adf0221"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSQUIC_DF_PROGRESS_CHECK&#160;&#160;&#160;1000</td>
</tr>
</table>
</div><div class="memdoc">
<p>By default, infinite loop checks are turned on </p>
</div>
</div>
<a class="anchor" id="a5665ba68a62be14aa1332316512ec4fe"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSQUIC_DF_RW_ONCE&#160;&#160;&#160;0</td>
</tr>
</table>
</div><div class="memdoc">
<p>By default, read/write events are dispatched in a loop </p>
</div>
</div>
<a class="anchor" id="a9e3f5f4a0ecb53f96d2b9249cded3aef"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSQUIC_DF_SUPPORT_NSTP&#160;&#160;&#160;0</td>
</tr>
</table>
</div><div class="memdoc">
<p>Do not use NSTP by default </p>
</div>
</div>
<a class="anchor" id="aeefb2f925217c311af00c92a77e0f191"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSQUIC_DF_UA&#160;&#160;&#160;&quot;LSQUIC&quot;</td>
</tr>
</table>
</div><div class="memdoc">
<p>Default value of UAID (user-agent ID). </p>
</div>
</div>
<a class="anchor" id="aecb8427433af4e3fa5260fe71c313d8f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSQUIC_DF_VERSIONS</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(<a class="code" href="lsquic_8h.html#a0420e68d347462080cf2e583b77d61a0">LSQUIC_SUPPORTED_VERSIONS</a> &amp; \</div><div class="line"> ~LSQUIC_EXPERIMENTAL_VERSIONS)</div><div class="ttc" id="lsquic_8h_html_a0420e68d347462080cf2e583b77d61a0"><div class="ttname"><a href="lsquic_8h.html#a0420e68d347462080cf2e583b77d61a0">LSQUIC_SUPPORTED_VERSIONS</a></div><div class="ttdeci">#define LSQUIC_SUPPORTED_VERSIONS</div><div class="ttdef"><b>Definition:</b> lsquic.h:81</div></div>
</div><!-- fragment --><p>By default, experimental versions are not included. </p>
</div>
</div>
<a class="anchor" id="add59f38ae0a3bea39bd3c5c86b70c63c"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSQUIC_GLOBAL_CLIENT&#160;&#160;&#160;(1 &lt;&lt; 0)</td>
</tr>
</table>
</div><div class="memdoc">
<p>This is one of the flags that can be passed to <a class="el" href="lsquic_8h.html#a754a3d611e8c6f9a1daeb7b06c00af88">lsquic_global_init</a>. Use it to initialize LSQUIC for use in client mode. </p>
</div>
</div>
<a class="anchor" id="a632ff4c3837f60fae3436db6e5f3e039"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSQUIC_GLOBAL_SERVER&#160;&#160;&#160;(1 &lt;&lt; 1)</td>
</tr>
</table>
</div><div class="memdoc">
<p>This is one of the flags that can be passed to <a class="el" href="lsquic_8h.html#a754a3d611e8c6f9a1daeb7b06c00af88">lsquic_global_init</a>. Use it to initialize LSQUIC for use in server mode. </p>
</div>
</div>
<a class="anchor" id="a6fd9104d1ffa8c391dede0a714a5919b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSQUIC_MIN_FCW&#160;&#160;&#160;(16 * 1024)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Minimum flow control window is set to 16 KB for both client and server. This means we can send up to this amount of data before handshake gets completed. </p>
</div>
</div>
<a class="anchor" id="a0420e68d347462080cf2e583b77d61a0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LSQUIC_SUPPORTED_VERSIONS</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">((1 &lt;&lt; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba1956abef5d785f45310599e4fcd39c32">LSQVER_035</a>) | (1 &lt;&lt; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7">LSQVER_037</a>) | \</div><div class="line"> (1 &lt;&lt; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba2d39809298e0c7866b21fc7932504966">LSQVER_038</a>) | (1 &lt;&lt; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3">LSQVER_039</a>) | (1 &lt;&lt; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3">LSQVER_041</a>))</div><div class="ttc" id="lsquic_8h_html_a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7"><div class="ttname"><a href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7">LSQVER_037</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:54</div></div>
<div class="ttc" id="lsquic_8h_html_a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3"><div class="ttname"><a href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3">LSQVER_039</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:67</div></div>
<div class="ttc" id="lsquic_8h_html_a2633ae9ee8d564f4c499f6eb0913d4dba1956abef5d785f45310599e4fcd39c32"><div class="ttname"><a href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba1956abef5d785f45310599e4fcd39c32">LSQVER_035</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:46</div></div>
<div class="ttc" id="lsquic_8h_html_a2633ae9ee8d564f4c499f6eb0913d4dba2d39809298e0c7866b21fc7932504966"><div class="ttname"><a href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba2d39809298e0c7866b21fc7932504966">LSQVER_038</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:60</div></div>
<div class="ttc" id="lsquic_8h_html_a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3"><div class="ttname"><a href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3">LSQVER_041</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:72</div></div>
</div><!-- fragment --><p>We currently support versions 35, 37, 38, 39, and 40. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4db">lsquic_version</a> </dd></dl>
</div>
</div>
<h2 class="groupheader">Typedef Documentation</h2>
<a class="anchor" id="aade9ff8d34cbcb33cd04a41377797fcf"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int(* lsquic_packets_out_f) (void *packets_out_ctx, const struct <a class="el" href="structlsquic__out__spec.html">lsquic_out_spec</a> *out_spec, unsigned n_packets_out)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns number of packets successfully sent out or -1 on error. -1 should only be returned if no packets were sent out. </p>
</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="ac4584806627d352797a2e0cfae2e6235"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235">lsquic_logger_timestamp_style</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Enumerate timestamp styles supported by LSQUIC logger mechanism. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="ac4584806627d352797a2e0cfae2e6235a4bc180853f0f833b9c93bf7080ce2805"></a>LLTS_NONE&#160;</td><td class="fielddoc">
<p>No timestamp is generated. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ac4584806627d352797a2e0cfae2e6235aa00368e0a7e30628851ab624d6e7575b"></a>LLTS_HHMMSSMS&#160;</td><td class="fielddoc">
<p>The timestamp consists of 24 hours, minutes, seconds, and milliseconds. Example: 13:43:46.671 </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ac4584806627d352797a2e0cfae2e6235a8754c3fced294cfb146625c586a55a56"></a>LLTS_YYYYMMDD_HHMMSSMS&#160;</td><td class="fielddoc">
<p>Like above, plus date, e.g: 2017-03-21 13:43:46.671 </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ac4584806627d352797a2e0cfae2e6235a5aa72ace83b5948f4d5a9ed5c72a4c4b"></a>LLTS_CHROMELIKE&#160;</td><td class="fielddoc">
<p>This is Chrome-like timestamp used by proto-quic. The timestamp includes month, date, hours, minutes, seconds, and microseconds.</p>
<p>Example: 1223/104613.946956 (instead of 12/23 10:46:13.946956).</p>
<p>This is to facilitate reading two logs side-by-side. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ac4584806627d352797a2e0cfae2e6235a874a36df2ce02e162104c2345b176185"></a>LLTS_HHMMSSUS&#160;</td><td class="fielddoc">
<p>The timestamp consists of 24 hours, minutes, seconds, and microseconds. Example: 13:43:46.671123 </p>
</td></tr>
</table>
</div>
</div>
<a class="anchor" id="a2633ae9ee8d564f4c499f6eb0913d4db"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4db">lsquic_version</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>This is a list of QUIC versions that we know of. List of supported versions is in LSQUIC_SUPPORTED_VERSIONS. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="a2633ae9ee8d564f4c499f6eb0913d4dba1956abef5d785f45310599e4fcd39c32"></a>LSQVER_035&#160;</td><td class="fielddoc">
<p>Q035. This is the first version to be supported by LSQUIC. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7"></a>LSQVER_037&#160;</td><td class="fielddoc">
<p>Q037. This version is like Q035, except the way packet hashes are generated is different for clients and servers. In addition, new option NSTP (no STOP_WAITING frames) is rumored to be supported at some point in the future. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="a2633ae9ee8d564f4c499f6eb0913d4dba2d39809298e0c7866b21fc7932504966"></a>LSQVER_038&#160;</td><td class="fielddoc">
<p>Q038. Based on Q037, supports PADDING frames in the middle of packet and NSTP (no STOP_WAITING frames) option. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3"></a>LSQVER_039&#160;</td><td class="fielddoc">
<p>Q039. Switch to big endian. Do not ack acks. Send connection level WINDOW_UPDATE frame every 20 sent packets which do not contain retransmittable frames. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3"></a>LSQVER_041&#160;</td><td class="fielddoc">
<p>Q041. RST_STREAM, ACK and STREAM frames match IETF format. </p>
</td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="a6da1350d78db9a83810a00dcee3e4944"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lsquic_conn_abort </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *&#160;</td>
<td class="paramname"><em>c</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Abort connection. </p>
</div>
</div>
<a class="anchor" id="a8fe1ef20026e5e68a892036005c20a19"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned lsquic_conn_cancel_pending_streams </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned&#160;</td>
<td class="paramname"><em>n</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Cancel `n' pending streams. Returns new number of pending streams. </p>
</div>
</div>
<a class="anchor" id="ad8f2345e0b9f8d19f7b6a1fa4e970aa8"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lsquic_conn_close </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *&#160;</td>
<td class="paramname"><em>conn</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This forces connection close. on_conn_closed and on_close callbacks will be called. </p>
</div>
</div>
<a class="anchor" id="a53d1105503b5ab46384451ff4bbd0391"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="lsquic__types_8h.html#a21c289bcbb4643effba8bb75eeffd8cd">lsquic_conn_ctx_t</a>* lsquic_conn_get_ctx </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *&#160;</td>
<td class="paramname"><em>c</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get user-supplied context associated with the connection. </p>
</div>
</div>
<a class="anchor" id="a8edf1874acb10f4b95abf8894023c3c9"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* lsquic_conn_get_peer_ctx </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *&#160;</td>
<td class="paramname"><em>lconn</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get peer context associated with the connection. should be UdpListener *. </p>
</div>
</div>
<a class="anchor" id="aff77b794b9ca995245cc9a739b76d197"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lsquic_conn_going_away </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *&#160;</td>
<td class="paramname"><em>conn</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Mark connection as going away: send GOAWAY frame and do not accept any more incoming streams, nor generate streams of our own. </p>
</div>
</div>
<a class="anchor" id="a487bffd57fd7febe4b316be7dc0a3016"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="lsquic__types_8h.html#acf675534bad01d31b48d9113feff1bbb">lsquic_cid_t</a> lsquic_conn_id </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *&#160;</td>
<td class="paramname"><em>c</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get connection ID </p>
</div>
</div>
<a class="anchor" id="a33bb7961ffad842a052bcd81202de5b9"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned lsquic_conn_n_pending_streams </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Return number of delayed streams currently pending </p>
</div>
</div>
<a class="anchor" id="a2a07e308beb5e1f29ba62597c2a37b2b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4db">lsquic_version</a> lsquic_conn_quic_version </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *&#160;</td>
<td class="paramname"><em>c</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get QUIC version used by the connection.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4db">lsquic_version</a> </dd></dl>
</div>
</div>
<a class="anchor" id="a827d6567e492bd67c330e2d48047ad49"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int lsquic_engine_check_settings </td>
<td>(</td>
<td class="paramtype">const struct <a class="el" href="structlsquic__engine__settings.html">lsquic_engine_settings</a> *&#160;</td>
<td class="paramname"><em>settings</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned&#160;</td>
<td class="paramname"><em>lsquic_engine_flags</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>err_buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>err_buf_sz</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Check settings for errors.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">settings</td><td>Settings struct.</td></tr>
<tr><td class="paramname">flags</td><td>Engine flags.</td></tr>
<tr><td class="paramname">err_buf</td><td>Optional pointer to buffer into which error string is written.</td></tr>
<tr><td class="paramname">err_buf_sz</td><td>Size of err_buf. No more than this number of bytes will be written to err_buf, including the NUL byte.</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">0</td><td>Settings have no errors. </td></tr>
<tr><td class="paramname">-1</td><td>There are errors in settings. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a5e2335a871f1ab9b66e3c59b442e8cbe"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int lsquic_engine_connect </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct sockaddr *&#160;</td>
<td class="paramname"><em>peer_sa</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>peer_ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>hostname</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned short&#160;</td>
<td class="paramname"><em>max_packet_size</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a client connection to peer identified by `peer_ctx'. If `max_packet_size' is set to zero, it is inferred based on `peer_sa': 1350 for IPv6 and 1370 for IPv4. </p>
</div>
</div>
<a class="anchor" id="aec59af9ee5cb005bef2e828ee8a0a4be"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned lsquic_engine_count_attq </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *&#160;</td>
<td class="paramname"><em>engine</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>from_now</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Return number of connections whose advisory tick time is before $now plus `from_now' delta. `from_now' can be negative. </p>
</div>
</div>
<a class="anchor" id="ac864ff28dcaa1c09ef796a3cdcf83e27"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int lsquic_engine_earliest_adv_tick </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *&#160;</td>
<td class="paramname"><em>engine</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int *&#160;</td>
<td class="paramname"><em>diff</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true if there is a connection on the Advisory Tick Time queue, false otherwise. If true, `diff' is set to the difference between the earliest advisory tick time and now. If the former is in the past, the value of `diff' is negative. </p>
</div>
</div>
<a class="anchor" id="a74d8c8f033c2e654fdb3487a2bf55d8a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int lsquic_engine_has_pend_rw </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true if engine has connections that have pending read or write events.</p>
<p>Connections with pending read or write events are those that have at least one stream whose state changed outside of the regular callback mechanism. The simplest example is writing directly to the stream object when data comes in.</p>
<p>A call to <a class="el" href="lsquic_8h.html#a60427549acdb608cc360173d817393e3">lsquic_engine_proc_all</a>, <a class="el" href="lsquic_8h.html#aefe24851a36ebe16289a6fa3c5a1c8cc">lsquic_engine_process_conns_with_incoming</a>, <a class="el" href="lsquic_8h.html#aefc66717813306c208483cccbb90ab9a">lsquic_engine_process_conns_to_tick</a>, or <a class="el" href="lsquic_8h.html#aae156a499af8ae01ca6f4fa307da86c6">lsquic_engine_process_conns_with_pend_rw</a> removes processed connection from Pending RW queue. </p>
</div>
</div>
<a class="anchor" id="a9d5d9609ca70350117994e2e2e934a22"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int lsquic_engine_has_unsent_packets </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *&#160;</td>
<td class="paramname"><em>engine</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true if engine has some unsent packets. This happens if ea_packets_out() could not send everything out. </p>
</div>
</div>
<a class="anchor" id="afa6f69c943be0a943f28699af6ae1000"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a>* lsquic_engine_new </td>
<td>(</td>
<td class="paramtype">unsigned&#160;</td>
<td class="paramname"><em>lsquic_engine_flags</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct <a class="el" href="structlsquic__engine__api.html">lsquic_engine_api</a> *&#160;</td>
<td class="paramname">&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Create new engine.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lsquic_engine_flags</td><td>A bitmask of <a class="el" href="lsquic_8h.html#abaf1fe07c4f99aa36d3d5502bbfc371d">LSENG_SERVER</a> and <a class="el" href="lsquic_8h.html#a8f395ac69797c7be8d9d524d464e7ed2">LSENG_HTTP</a> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="adb3d3d822e9a8217d90acbf29594ae40"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int lsquic_engine_packet_in </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned char *&#160;</td>
<td class="paramname"><em>packet_in_data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>packet_in_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct sockaddr *&#160;</td>
<td class="paramname"><em>sa_local</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct sockaddr *&#160;</td>
<td class="paramname"><em>sa_peer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>peer_ctx</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Pass incoming packet to the QUIC engine. This function can be called more than once in a row. After you add one or more packets, call <a class="el" href="lsquic_8h.html#aefe24851a36ebe16289a6fa3c5a1c8cc">lsquic_engine_process_conns_with_incoming()</a> to schedule output, if any.</p>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">0</td><td>Packet was processed by a real connection.</td></tr>
<tr><td class="paramname">-1</td><td>Some error occurred. Possible reasons are invalid packet size or failure to allocate memory. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a60427549acdb608cc360173d817393e3"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lsquic_engine_proc_all </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *&#160;</td>
<td class="paramname"><em>engine</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Process all connections. This function must be called often enough so that packets and connections do not expire. </p>
</div>
</div>
<a class="anchor" id="aefc66717813306c208483cccbb90ab9a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lsquic_engine_process_conns_to_tick </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Process connections in Advisory Tick Time queue whose tick times are in the past. </p>
</div>
</div>
<a class="anchor" id="aefe24851a36ebe16289a6fa3c5a1c8cc"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lsquic_engine_process_conns_with_incoming </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Process connections that have incoming packets. Call this after adding one or more incoming packets using <a class="el" href="lsquic_8h.html#adb3d3d822e9a8217d90acbf29594ae40">lsquic_engine_packet_in()</a>. </p>
</div>
</div>
<a class="anchor" id="aae156a499af8ae01ca6f4fa307da86c6"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lsquic_engine_process_conns_with_pend_rw </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Process connections that have pending read or write events (</p><dl class="section see"><dt>See also</dt><dd><a class="el" href="lsquic_8h.html#a74d8c8f033c2e654fdb3487a2bf55d8a">lsquic_engine_has_pend_rw</a> for description). </dd></dl>
</div>
</div>
<a class="anchor" id="abebdca40ce630ad8272752da926d7a24"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned lsquic_engine_quic_versions </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Return the list of QUIC versions (as bitmask) this engine instance supports. </p>
</div>
</div>
<a class="anchor" id="a88a2040cc4b0e575b2fa2affe8597697"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lsquic_engine_send_unsent_packets </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *&#160;</td>
<td class="paramname"><em>engine</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Send out as many unsent packets as possibe: until we are out of unsent packets or until ea_packets_out() fails. </p>
</div>
</div>
<a class="anchor" id="a06b9ac9ba933a060b72975640b2d79a3"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lsquic_global_cleanup </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Clean up global state created by <a class="el" href="lsquic_8h.html#a754a3d611e8c6f9a1daeb7b06c00af88">lsquic_global_init</a>. Should be called after all LSQUIC engine instances are gone. </p>
</div>
</div>
<a class="anchor" id="a754a3d611e8c6f9a1daeb7b06c00af88"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int lsquic_global_init </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>flags</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initialize LSQUIC. This must be called before any other LSQUIC function is called. Returns 0 on success and -1 on failure.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">flags</td><td>This a bitmask of <a class="el" href="lsquic_8h.html#add59f38ae0a3bea39bd3c5c86b70c63c">LSQUIC_GLOBAL_CLIENT</a> and <a class="el" href="lsquic_8h.html#a632ff4c3837f60fae3436db6e5f3e039">LSQUIC_GLOBAL_SERVER</a>. At least one of these flags should be specified.</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">0</td><td>Success. </td></tr>
<tr><td class="paramname">-1</td><td>Initialization failed.</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="lsquic_8h.html#add59f38ae0a3bea39bd3c5c86b70c63c">LSQUIC_GLOBAL_CLIENT</a> </dd>
<dd>
<a class="el" href="lsquic_8h.html#a632ff4c3837f60fae3436db6e5f3e039">LSQUIC_GLOBAL_SERVER</a> </dd></dl>
</div>
</div>
<a class="anchor" id="a5059cabdc84335f56870c8bc7a1235e2"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void lsquic_logger_init </td>
<td>(</td>
<td class="paramtype">const struct <a class="el" href="structlsquic__logger__if.html">lsquic_logger_if</a> *&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>logger_ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum&#160;</td>
<td class="paramname"><em>lsquic_logger_timestamp_style</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Call this if you want to do something with LSQUIC log messages, as they are thrown out by default. </p>
</div>
</div>
<a class="anchor" id="af8c718a3780425357d070419106e4bc8"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int lsquic_logger_lopt </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>optarg</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>E.g. "event=debug" </p>
</div>
</div>
<a class="anchor" id="a337f6adcc4ec9328e0f293d6128ee376"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int lsquic_set_log_level </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>log_level</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set log level for all LSQUIC modules. Acceptable values are debug, info, notice, warning, error, alert, emerg, crit (case-insensitive).</p>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">0</td><td>Success. </td></tr>
<tr><td class="paramname">-1</td><td>Failure: log_level is not valid. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a8fef45d333b115d996080bb254077d8d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4db">lsquic_version</a> lsquic_str2ver </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>str</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Translate string QUIC version to LSQUIC QUIC version representation </p>
</div>
</div>
<a class="anchor" id="a177184b3d7178dda5a3e95e539230b2b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a>* lsquic_stream_conn </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *&#160;</td>
<td class="paramname"><em>s</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get a pointer to the connection object. Use it with lsquic_conn_* functions. </p>
</div>
</div>
<a class="anchor" id="a26335cffe38e49a6e87d94967371150d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="lsquic__types_8h.html#a4012fdeb11382d691dfe5f025206b8f3">lsquic_stream_ctx_t</a>* lsquic_stream_get_ctx </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *&#160;</td>
<td class="paramname"><em>s</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns stream ctx associated with the stream. (The context is what is returned by on_new_stream callback). </p>
</div>
</div>
<a class="anchor" id="a534523d663336969494d6a3721a63640"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint32_t lsquic_stream_id </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *&#160;</td>
<td class="paramname"><em>s</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns ID of the stream </p>
</div>
</div>
<a class="anchor" id="a199b551bc87bb77814ab4ce58abcdff9"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int lsquic_stream_is_pushed </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *&#160;</td>
<td class="paramname"><em>s</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true if this is a pushed stream </p>
</div>
</div>
<a class="anchor" id="aa45f5d45b56f5a0d7f881dbccebc5fd8"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned lsquic_stream_priority </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *&#160;</td>
<td class="paramname"><em>s</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Return current priority of the stream </p>
</div>
</div>
<a class="anchor" id="ae0b8525f7dac119f6122af564d0e17fd"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int lsquic_stream_push_info </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t *&#160;</td>
<td class="paramname"><em>ref_stream_id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char **&#160;</td>
<td class="paramname"><em>headers</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>headers_sz</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get information associated with pushed stream:</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ref_stream_id</td><td>Stream ID in response to which push promise was sent. </td></tr>
<tr><td class="paramname">headers</td><td>Uncompressed request headers. </td></tr>
<tr><td class="paramname">headers_sz</td><td>Size of uncompressed request headers, not counting the NUL byte.</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">0</td><td>Success. </td></tr>
<tr><td class="paramname">-1</td><td>This is not a pushed stream. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ada61e01ced7a7db11e5c503409c565be"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int lsquic_stream_refuse_push </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *&#160;</td>
<td class="paramname"><em>s</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Refuse pushed stream. Call it from on_new_stream.</p>
<p>No need to call lsquic_stream_close() after this. on_close will be called.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="lsquic_8h.html#a199b551bc87bb77814ab4ce58abcdff9">lsquic_stream_is_pushed</a> </dd></dl>
</div>
</div>
<a class="anchor" id="a1700c950ace4e560d225b474a5e44d58"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int lsquic_stream_sendfile </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *&#160;</td>
<td class="paramname"><em>s</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>fdSrc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">off_t&#160;</td>
<td class="paramname"><em>off</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>size</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns 0 if `fdSrc' was queued for writing, -1 on error. This function queues at most `size' bytes to be written. If the file shrinks, fewer bytes are written. </p>
</div>
</div>
<a class="anchor" id="aa5e0ddfd53a44561248a286caacbd114"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int lsquic_stream_set_priority </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *&#160;</td>
<td class="paramname"><em>s</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned&#160;</td>
<td class="paramname"><em>priority</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set stream priority. Valid priority values are 1 through 256, inclusive.</p>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">0</td><td>Success. </td></tr>
<tr><td class="paramname">-1</td><td>Priority value is invalid. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a7fee61cc609a4b274a4de2b41db6a9e4"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int lsquic_stream_shutdown </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *&#160;</td>
<td class="paramname"><em>s</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>how</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Possible values for how are 0, 1, and 2. See shutdown(2). </p>
</div>
</div>
<a class="anchor" id="a1071b7be4f2f28c5fedf957aa6309f9a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ssize_t lsquic_stream_write </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *&#160;</td>
<td class="paramname"><em>s</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Write `len' bytes to the stream. Returns number of bytes written, which may be smaller that `len'. Use <a class="el" href="lsquic_8h.html#a97229544d7aaf6c5dcd5e071613f9c8f">lsquic_stream_write_avail()</a> to find out maximum size of `len'. </p>
</div>
</div>
<a class="anchor" id="a97229544d7aaf6c5dcd5e071613f9c8f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">size_t lsquic_stream_write_avail </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *&#160;</td>
<td class="paramname"><em>s</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Return maximum number of bytes <a class="el" href="lsquic_8h.html#a1071b7be4f2f28c5fedf957aa6309f9a">lsquic_stream_write()</a> will write. This call is useful if you don't want to perform your own buffering. </p>
</div>
</div>
<a class="anchor" id="af5b85bb360eb8316fd663d7c5bc149c9"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int lsquic_stream_write_file </td>
<td>(</td>
<td class="paramtype"><a class="el" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *&#160;</td>
<td class="paramname"><em>s</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>filename</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns 0 if `filename' was queued for writing, -1 on error. This function queues the size of the file as it was when the function was called. The stream will write at most this number of bytes to the peer. If the file grows, appended data is not used. </p>
</div>
</div>
</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.11
</small></address>
</body>
</html>