litespeed-quic/docs/html/lsquic_8h_source.html
Dmitri Tikhonov c51ce3387f Latest changes
- [API Change] Sendfile-like functionality is gone.  The stream no
  longer opens files and deals with file descriptors.  (Among other
  things, this makes the code more portable.)  Three writing functions
  are provided:

    lsquic_stream_write
    lsquic_stream_writev
    lsquic_stream_writef    (NEW)

  lsquic_stream_writef() is given an abstract reader that has function
  pointers for size() and read() functions which the user can implement.
  This is the most flexible way.  lsquic_stream_write() and
  lsquic_stream_writev() are now both implemented as wrappers around
  lsquic_stream_writef().

- [OPTIMIZATION] When writing to stream, be it within or without the
  on_write() callback, place data directly into packet buffer,
  bypassing auxiliary data structures.  This reduces amount of memory
  required, for the amount of data that can be written is limited
  by the congestion window.

  To support writes outside the on_write() callback, we keep N
  outgoing packet buffers per connection which can be written to
  by any stream.  One half of these are reserved for the highest
  priority stream(s), the other half for all other streams.  This way,
  low-priority streams cannot write instead of high-priority streams
  and, on the other hand, low-priority streams get a chance to send
  their packets out.

  The algorithm is as follows:

  - When user writes to stream outside of the callback:
    - If this is the highest priority stream, place it onto the
      reserved N/2 queue or fail.
        (The actual size of this queue is dynamic -- MAX(N/2, CWND) --
         rather than N/2, allowing high-priority streams to write as
         much as can be sent.)
    - If the stream is not the highest priority, try to place the
      data onto the reserved N/2 queue or fail.
  - When tick occurs *and* more packets can be scheduled:
    - Transfer packets from the high N/2 queue to the scheduled
      queue.
    - If more scheduling is allowed:
      - Call on_write callbacks for highest-priority streams,
        placing resulting packets directly onto the scheduled queue.
    - If more scheduling is allowed:
      - Transfer packets from the low N/2 queue to the scheduled
        queue.
    - If more scheduling is allowed:
      - Call on_write callbacks for non-highest-priority streams,
        placing resulting packets directly onto the scheduled queue

  The number N is currently 20, but it could be varied based on
  resource usage.

- If stream is created due to incoming headers, make headers readable
  from on_new.

- Outgoing packets are no longer marked non-writeable to prevent placing
  more than one STREAM frame from the same stream into a single packet.
  This property is maintained via code flow and an explicit check.
  Packets for stream data are allocated using a special function.

- STREAM frame elision is cheaper, as we only perform it if a reset
  stream has outgoing packets referencing it.

- lsquic_packet_out_t is smaller, as stream_rec elements are now
  inside a union.
2017-10-31 09:35:58 -04:00

192 lines
99 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>LiteSpeed QUIC Library: include/lsquic.h Source File</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="headertitle">
<div class="title">lsquic.h</div> </div>
</div><!--header-->
<div class="contents">
<a href="lsquic_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* Copyright (c) 2017 LiteSpeed Technologies Inc. See LICENSE. */</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#ifndef __LSQUIC_H__</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="preprocessor">#define __LSQUIC_H__</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;stdarg.h&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="lsquic__types_8h.html">lsquic_types.h</a>&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;sys/uio.h&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;sys/types.h&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;time.h&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">struct </span>iovec;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">struct </span>sockaddr;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="lsquic_8h.html#abaf1fe07c4f99aa36d3d5502bbfc371d"> 29</a></span>&#160;<span class="preprocessor">#define LSENG_SERVER (1 &lt;&lt; 0)</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a8f395ac69797c7be8d9d524d464e7ed2"> 34</a></span>&#160;<span class="preprocessor">#define LSENG_HTTP (1 &lt;&lt; 1)</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#define LSENG_HTTP_SERVER (LSENG_SERVER|LSENG_HTTP)</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4db"> 42</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4db">lsquic_version</a></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba1956abef5d785f45310599e4fcd39c32"> 46</a></span>&#160; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba1956abef5d785f45310599e4fcd39c32">LSQVER_035</a>,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7"> 54</a></span>&#160; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7">LSQVER_037</a>,</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba2d39809298e0c7866b21fc7932504966"> 60</a></span>&#160; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba2d39809298e0c7866b21fc7932504966">LSQVER_038</a>,</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3"> 67</a></span>&#160; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3">LSQVER_039</a>,</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3"> 72</a></span>&#160; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3">LSQVER_041</a>,</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; N_LSQVER</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;};</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a0420e68d347462080cf2e583b77d61a0"> 81</a></span>&#160;<span class="preprocessor">#define LSQUIC_SUPPORTED_VERSIONS ((1 &lt;&lt; LSQVER_035) | (1 &lt;&lt; LSQVER_037) | \</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="preprocessor"> (1 &lt;&lt; LSQVER_038) | (1 &lt;&lt; LSQVER_039) | (1 &lt;&lt; LSQVER_041))</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="preprocessor">#define LSQUIC_EXPERIMENTAL_VERSIONS ((1 &lt;&lt; LSQVER_041))</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="structlsquic__stream__if.html"> 92</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlsquic__stream__if.html">lsquic_stream_if</a> {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="structlsquic__stream__if.html#a1eb8c7575d67c7b1c75c472288751adb"> 98</a></span>&#160; <a class="code" href="lsquic__types_8h.html#a21c289bcbb4643effba8bb75eeffd8cd">lsquic_conn_ctx_t</a> *(*on_new_conn)(<span class="keywordtype">void</span> *stream_if_ctx,</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="structlsquic__stream__if.html#afdab3bce65931517452d2ddd979596d7"> 104</a></span>&#160; void (*<a class="code" href="structlsquic__stream__if.html#afdab3bce65931517452d2ddd979596d7">on_goaway_received</a>)(<a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; void (*on_conn_closed)(<a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="lsquic__types_8h.html#a4012fdeb11382d691dfe5f025206b8f3">lsquic_stream_ctx_t</a> *</div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="structlsquic__stream__if.html#aa9c28eae8f3bd33d028578e0aef24402"> 115</a></span>&#160; (*on_new_stream)(<span class="keywordtype">void</span> *stream_if_ctx, <a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; void (*on_read) (<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, <a class="code" href="lsquic__types_8h.html#a4012fdeb11382d691dfe5f025206b8f3">lsquic_stream_ctx_t</a> *h);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; void (*on_write) (<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, <a class="code" href="lsquic__types_8h.html#a4012fdeb11382d691dfe5f025206b8f3">lsquic_stream_ctx_t</a> *h);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; void (*on_close) (<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, <a class="code" href="lsquic__types_8h.html#a4012fdeb11382d691dfe5f025206b8f3">lsquic_stream_ctx_t</a> *h);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;};</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a6fd9104d1ffa8c391dede0a714a5919b"> 127</a></span>&#160;<span class="preprocessor">#define LSQUIC_MIN_FCW (16 * 1024)</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="comment">/* Each LSQUIC_DF_* value corresponds to es_* entry in</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="comment"> * lsquic_engine_settings below.</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="lsquic_8h.html#aecb8427433af4e3fa5260fe71c313d8f"> 136</a></span>&#160;<span class="preprocessor">#define LSQUIC_DF_VERSIONS (LSQUIC_SUPPORTED_VERSIONS &amp; \</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="preprocessor"> ~LSQUIC_EXPERIMENTAL_VERSIONS)</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="preprocessor">#define LSQUIC_DF_CFCW_SERVER (3 * 1024 * 1024 / 2)</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="preprocessor">#define LSQUIC_DF_CFCW_CLIENT (15 * 1024 * 1024)</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="preprocessor">#define LSQUIC_DF_SFCW_SERVER (1 * 1024 * 1024)</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="preprocessor">#define LSQUIC_DF_SFCW_CLIENT (6 * 1024 * 1024)</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="preprocessor">#define LSQUIC_DF_MAX_STREAMS_IN 100</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a1e7808ab9863e1ae4b44e7856e75eee8"> 148</a></span>&#160;<span class="preprocessor">#define LSQUIC_DF_HANDSHAKE_TO (10 * 1000 * 1000)</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="preprocessor">#define LSQUIC_DF_IDLE_CONN_TO (30 * 1000 * 1000)</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="preprocessor">#define LSQUIC_DF_SILENT_CLOSE 1</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a1e1ab46b8acff52f127359bf68a8b297"> 157</a></span>&#160;<span class="preprocessor">#define LSQUIC_DF_MAX_HEADER_LIST_SIZE 0</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="lsquic_8h.html#aeefb2f925217c311af00c92a77e0f191"> 160</a></span>&#160;<span class="preprocessor">#define LSQUIC_DF_UA &quot;LSQUIC&quot;</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="preprocessor">#define LSQUIC_DF_STTL 86400</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="preprocessor">#define LSQUIC_DF_MAX_INCHOATE (1 * 1000 * 1000)</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="preprocessor">#define LSQUIC_DF_SUPPORT_SREJ_SERVER 1</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="preprocessor">#define LSQUIC_DF_SUPPORT_SREJ_CLIENT 0 </span><span class="comment">/* TODO: client support */</span><span class="preprocessor"></span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a9e3f5f4a0ecb53f96d2b9249cded3aef"> 167</a></span>&#160;<span class="preprocessor">#define LSQUIC_DF_SUPPORT_NSTP 0</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="preprocessor">#define LSQUIC_DF_SUPPORT_PUSH 1</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="preprocessor">#define LSQUIC_DF_SUPPORT_TCID0 1</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a13d1cb05ad19ae5cd016e016d228326c"> 171</a></span>&#160;<span class="preprocessor">#define LSQUIC_DF_HONOR_PRST 0</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="lsquic_8h.html#afc995b576f8013a43436201a7adf0221"> 174</a></span>&#160;<span class="preprocessor">#define LSQUIC_DF_PROGRESS_CHECK 1000</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a472d9508529e22b2be78b48d0fd69529"> 177</a></span>&#160;<span class="preprocessor">#define LSQUIC_DF_PENDRW_CHECK 10</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a5665ba68a62be14aa1332316512ec4fe"> 180</a></span>&#160;<span class="preprocessor">#define LSQUIC_DF_RW_ONCE 0</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a4a8cbc259dcff01fa93959ca5b2a0a35"> 183</a></span>&#160;<span class="preprocessor">#define LSQUIC_DF_PROC_TIME_THRESH 0</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a332b2fcfbbd83bbeb6027a622ec72f69"> 186</a></span>&#160;<span class="preprocessor">#define LSQUIC_DF_PACE_PACKETS 1</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html"> 188</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlsquic__engine__settings.html">lsquic_engine_settings</a> {</div><div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#a9dca1ee29ab43ca9454b6b0a8d5e2799"> 197</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="structlsquic__engine__settings.html#a9dca1ee29ab43ca9454b6b0a8d5e2799">es_versions</a>;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#a2931ff6b1bc06429379debcc2c5cc5fa"> 209</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="structlsquic__engine__settings.html#a2931ff6b1bc06429379debcc2c5cc5fa">es_cfcw</a>;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div><div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#ac88c5a68eac5f324a1b1524a962be26d"> 221</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="structlsquic__engine__settings.html#ac88c5a68eac5f324a1b1524a962be26d">es_sfcw</a>;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#a7297980e558cd2deafb955534520934b"> 231</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="structlsquic__engine__settings.html#a7297980e558cd2deafb955534520934b">es_max_cfcw</a>;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordtype">unsigned</span> es_max_sfcw;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#ab6848de0e8025b08398ba43445de7405"> 236</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="structlsquic__engine__settings.html#ab6848de0e8025b08398ba43445de7405">es_max_streams_in</a>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#aeaef9bb4ecadb340cd05cfb85a6901a5"> 245</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="structlsquic__engine__settings.html#aeaef9bb4ecadb340cd05cfb85a6901a5">es_handshake_to</a>;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#a4ba2bd3e85b8b4d0d929e31d675554e2"> 248</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="structlsquic__engine__settings.html#a4ba2bd3e85b8b4d0d929e31d675554e2">es_idle_conn_to</a>;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;</div><div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#aebf95d077a1a0de005b2ddac5afdfdc4"> 251</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structlsquic__engine__settings.html#aebf95d077a1a0de005b2ddac5afdfdc4">es_silent_close</a>;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#ab7b7eb8ab17eb47b8ea69d8ee8ef4a5b"> 258</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="structlsquic__engine__settings.html#ab7b7eb8ab17eb47b8ea69d8ee8ef4a5b">es_max_header_list_size</a>;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#a578718dc886cffa23e97fa11fb26138b"> 261</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structlsquic__engine__settings.html#a578718dc886cffa23e97fa11fb26138b">es_ua</a>;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; uint32_t es_pdmd; <span class="comment">/* One fixed value X509 */</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; uint32_t es_aead; <span class="comment">/* One fixed value AESG */</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; uint32_t es_kexs; <span class="comment">/* One fixed value C255 */</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#adfd0c61d3243d85d3676876ca67e6466"> 272</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structlsquic__engine__settings.html#adfd0c61d3243d85d3676876ca67e6466">es_support_srej</a>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#a8b68eb068b40eb24e5e08cab097f077a"> 284</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structlsquic__engine__settings.html#a8b68eb068b40eb24e5e08cab097f077a">es_support_push</a>;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#a1570dc65c3b4d097987f08ade3cfd993"> 293</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structlsquic__engine__settings.html#a1570dc65c3b4d097987f08ade3cfd993">es_support_tcid0</a>;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div><div class="line"><a name="l00305"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#addfa7e19884a81f50ca4d573b9aa16a3"> 305</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structlsquic__engine__settings.html#addfa7e19884a81f50ca4d573b9aa16a3">es_support_nstp</a>;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#ac5a3d759dcdf8915a98cbc3dd56d5f22"> 312</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structlsquic__engine__settings.html#ac5a3d759dcdf8915a98cbc3dd56d5f22">es_honor_prst</a>;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div><div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#a85a83ab74a018c293f83d9b78a797d8e"> 327</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="structlsquic__engine__settings.html#a85a83ab74a018c293f83d9b78a797d8e">es_progress_check</a>;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;</div><div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#a9baca38fb49c0028941a54de17a3580a"> 344</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="structlsquic__engine__settings.html#a9baca38fb49c0028941a54de17a3580a">es_pendrw_check</a>;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#a59907a4c1080bd6eb5c5c7776b968af4"> 358</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structlsquic__engine__settings.html#a59907a4c1080bd6eb5c5c7776b968af4">es_rw_once</a>;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#aaa9758b94c763b457c4a6ccc4f1e8100"> 378</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="structlsquic__engine__settings.html#aaa9758b94c763b457c4a6ccc4f1e8100">es_proc_time_thresh</a>;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="structlsquic__engine__settings.html#a90403ce7cbb10f9ddf438cfc1bd62530"> 385</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structlsquic__engine__settings.html#a90403ce7cbb10f9ddf438cfc1bd62530">es_pace_packets</a>;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;};</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="comment">/* Initialize `settings&#39; to default values */</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;lsquic_engine_init_settings (<span class="keyword">struct</span> <a class="code" href="structlsquic__engine__settings.html">lsquic_engine_settings</a> *,</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordtype">unsigned</span> lsquic_engine_flags);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;<a class="code" href="lsquic_8h.html#a827d6567e492bd67c330e2d48047ad49">lsquic_engine_check_settings</a> (<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlsquic__engine__settings.html">lsquic_engine_settings</a> *settings,</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordtype">unsigned</span> lsquic_engine_flags,</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordtype">char</span> *err_buf, <span class="keywordtype">size_t</span> err_buf_sz);</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;</div><div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="structlsquic__out__spec.html"> 415</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlsquic__out__spec.html">lsquic_out_spec</a></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;{</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordtype">size_t</span> sz;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keyword">const</span> <span class="keyword">struct </span>sockaddr *local_sa;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keyword">const</span> <span class="keyword">struct </span>sockaddr *dest_sa;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordtype">void</span> *peer_ctx;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;};</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;</div><div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="lsquic_8h.html#aade9ff8d34cbcb33cd04a41377797fcf"> 428</a></span>&#160;<span class="keyword">typedef</span> int (*<a class="code" href="lsquic_8h.html#aade9ff8d34cbcb33cd04a41377797fcf">lsquic_packets_out_f</a>)(</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordtype">void</span> *packets_out_ctx,</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlsquic__out__spec.html">lsquic_out_spec</a> *out_spec,</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordtype">unsigned</span> n_packets_out</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;</div><div class="line"><a name="l00443"></a><span class="lineno"><a class="line" href="structlsquic__packout__mem__if.html"> 443</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlsquic__packout__mem__if.html">lsquic_packout_mem_if</a></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;{</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keywordtype">void</span> * (*pmi_allocate) (<span class="keywordtype">void</span> *pmi_ctx, <span class="keywordtype">size_t</span> sz);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; void (*pmi_release) (<span class="keywordtype">void</span> *pmi_ctx, <span class="keywordtype">void</span> *obj);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;};</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="comment">/* TODO: describe this important data structure */</span></div><div class="line"><a name="l00450"></a><span class="lineno"><a class="line" href="structlsquic__engine__api.html"> 450</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structlsquic__engine__api.html">lsquic_engine_api</a></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;{</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlsquic__engine__settings.html">lsquic_engine_settings</a> *ea_settings; <span class="comment">/* Optional */</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlsquic__stream__if.html">lsquic_stream_if</a> *ea_stream_if;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordtype">void</span> *ea_stream_if_ctx;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <a class="code" href="lsquic_8h.html#aade9ff8d34cbcb33cd04a41377797fcf">lsquic_packets_out_f</a> ea_packets_out;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordtype">void</span> *ea_packets_out_ctx;</div><div class="line"><a name="l00460"></a><span class="lineno"><a class="line" href="structlsquic__engine__api.html#ab1c6af0c63f81cfa0c9ed6d6952b5482"> 460</a></span>&#160; <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structlsquic__packout__mem__if.html">lsquic_packout_mem_if</a> *<a class="code" href="structlsquic__engine__api.html#ab1c6af0c63f81cfa0c9ed6d6952b5482">ea_pmi</a>;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordtype">void</span> *ea_pmi_ctx;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;} <a class="code" href="structlsquic__engine__api.html">lsquic_engine_api_t</a>;</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<a class="code" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;<a class="code" href="lsquic_8h.html#afa6f69c943be0a943f28699af6ae1000">lsquic_engine_new</a> (<span class="keywordtype">unsigned</span> lsquic_engine_flags,</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlsquic__engine__api.html">lsquic_engine_api</a> *);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<a class="code" href="lsquic_8h.html#a5e2335a871f1ab9b66e3c59b442e8cbe">lsquic_engine_connect</a> (<a class="code" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *, <span class="keyword">const</span> <span class="keyword">struct</span> sockaddr *peer_sa,</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordtype">void</span> *peer_ctx, <span class="keyword">const</span> <span class="keywordtype">char</span> *hostname,</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> max_packet_size);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;<a class="code" href="lsquic_8h.html#adb3d3d822e9a8217d90acbf29594ae40">lsquic_engine_packet_in</a> (<a class="code" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *,</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *packet_in_data, <span class="keywordtype">size_t</span> packet_in_size,</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keyword">const</span> <span class="keyword">struct</span> sockaddr *sa_local, <span class="keyword">const</span> <span class="keyword">struct</span> sockaddr *sa_peer,</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordtype">void</span> *peer_ctx);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;<a class="code" href="lsquic_8h.html#a60427549acdb608cc360173d817393e3">lsquic_engine_proc_all</a> (<a class="code" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *engine);</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;<a class="code" href="lsquic_8h.html#aefe24851a36ebe16289a6fa3c5a1c8cc">lsquic_engine_process_conns_with_incoming</a> (<a class="code" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *);</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160;<a class="code" href="lsquic_8h.html#aefc66717813306c208483cccbb90ab9a">lsquic_engine_process_conns_to_tick</a> (<a class="code" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;<a class="code" href="lsquic_8h.html#a74d8c8f033c2e654fdb3487a2bf55d8a">lsquic_engine_has_pend_rw</a> (<a class="code" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;<a class="code" href="lsquic_8h.html#aae156a499af8ae01ca6f4fa307da86c6">lsquic_engine_process_conns_with_pend_rw</a> (<a class="code" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;<a class="code" href="lsquic_8h.html#a9d5d9609ca70350117994e2e2e934a22">lsquic_engine_has_unsent_packets</a> (<a class="code" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *engine);</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;<a class="code" href="lsquic_8h.html#a88a2040cc4b0e575b2fa2affe8597697">lsquic_engine_send_unsent_packets</a> (<a class="code" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *engine);</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;lsquic_engine_destroy (<a class="code" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;<span class="keywordtype">void</span> lsquic_conn_make_stream(<a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;<span class="keywordtype">unsigned</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;<a class="code" href="lsquic_8h.html#a33bb7961ffad842a052bcd81202de5b9">lsquic_conn_n_pending_streams</a> (<span class="keyword">const</span> <a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;<span class="keywordtype">unsigned</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;<a class="code" href="lsquic_8h.html#a8fe1ef20026e5e68a892036005c20a19">lsquic_conn_cancel_pending_streams</a> (<a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *, <span class="keywordtype">unsigned</span> n);</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;<a class="code" href="lsquic_8h.html#aff77b794b9ca995245cc9a739b76d197">lsquic_conn_going_away</a>(<a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *conn);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;<span class="keywordtype">void</span> <a class="code" href="lsquic_8h.html#ad8f2345e0b9f8d19f7b6a1fa4e970aa8">lsquic_conn_close</a>(<a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *conn);</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;<span class="keywordtype">int</span> lsquic_stream_wantread(<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, <span class="keywordtype">int</span> is_want);</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;ssize_t lsquic_stream_read(<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, <span class="keywordtype">void</span> *buf, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;ssize_t lsquic_stream_readv(<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, <span class="keyword">const</span> <span class="keyword">struct</span> iovec *,</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordtype">int</span> iovcnt);</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;<span class="keywordtype">int</span> lsquic_stream_wantwrite(<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, <span class="keywordtype">int</span> is_want);</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160;ssize_t <a class="code" href="lsquic_8h.html#a1071b7be4f2f28c5fedf957aa6309f9a">lsquic_stream_write</a>(<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, <span class="keyword">const</span> <span class="keywordtype">void</span> *buf, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;ssize_t lsquic_stream_writev(<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, <span class="keyword">const</span> <span class="keyword">struct</span> iovec *vec, <span class="keywordtype">int</span> count);</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;</div><div class="line"><a name="l00604"></a><span class="lineno"><a class="line" href="structlsquic__reader.html"> 604</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlsquic__reader.html">lsquic_reader</a></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;{</div><div class="line"><a name="l00612"></a><span class="lineno"><a class="line" href="structlsquic__reader.html#ae6a68ebf2a1fb77160b0bac599d42790"> 612</a></span>&#160; size_t (*lsqr_read) (<span class="keywordtype">void</span> *lsqr_ctx, <span class="keywordtype">void</span> *buf, <span class="keywordtype">size_t</span> count);</div><div class="line"><a name="l00616"></a><span class="lineno"><a class="line" href="structlsquic__reader.html#aaf6c91ecaf35ca6faa39dde9ea401f17"> 616</a></span>&#160; size_t (*lsqr_size) (<span class="keywordtype">void</span> *lsqr_ctx);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordtype">void</span> *lsqr_ctx;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;};</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;ssize_t</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;<a class="code" href="lsquic_8h.html#a49f11caabdf3638d3a3217ebdd21c3af">lsquic_stream_writef</a> (<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *, <span class="keyword">struct</span> <a class="code" href="structlsquic__reader.html">lsquic_reader</a> *);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;<a class="code" href="lsquic_8h.html#abcf25d8301c4a2796ea13e6e306a33a9">lsquic_stream_flush</a> (<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s);</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;</div><div class="line"><a name="l00645"></a><span class="lineno"><a class="line" href="structlsquic__http__header.html"> 645</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structlsquic__http__header.html">lsquic_http_header</a></div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160;{</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keyword">struct </span>iovec name;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keyword">struct </span>iovec value;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;} <a class="code" href="lsquic_8h.html#a822627a87eb003fd9e2e56ebded5b3f3">lsquic_http_header_t</a>;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160;</div><div class="line"><a name="l00656"></a><span class="lineno"><a class="line" href="structlsquic__http__headers.html"> 656</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlsquic__http__headers.html">lsquic_http_headers</a></div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;{</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="keywordtype">int</span> count;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; lsquic_http_header_t *headers;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;};</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;<span class="keywordtype">int</span> lsquic_stream_send_headers(<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s,</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="keyword">const</span> <a class="code" href="structlsquic__http__headers.html">lsquic_http_headers_t</a> *h, <span class="keywordtype">int</span> eos);</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;<span class="keywordtype">int</span> lsquic_conn_is_push_enabled(<a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c);</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160;<span class="keywordtype">int</span> <a class="code" href="lsquic_8h.html#a7fee61cc609a4b274a4de2b41db6a9e4">lsquic_stream_shutdown</a>(<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, <span class="keywordtype">int</span> how);</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;<span class="keywordtype">int</span> lsquic_stream_close(<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s);</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160;uint32_t</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;<a class="code" href="lsquic_8h.html#a534523d663336969494d6a3721a63640">lsquic_stream_id</a> (<span class="keyword">const</span> <a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s);</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;<a class="code" href="lsquic__types_8h.html#a4012fdeb11382d691dfe5f025206b8f3">lsquic_stream_ctx_t</a> *</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160;<a class="code" href="lsquic_8h.html#a26335cffe38e49a6e87d94967371150d">lsquic_stream_get_ctx</a> (<span class="keyword">const</span> <a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s);</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160;<a class="code" href="lsquic_8h.html#a199b551bc87bb77814ab4ce58abcdff9">lsquic_stream_is_pushed</a> (<span class="keyword">const</span> <a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s);</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160;<a class="code" href="lsquic_8h.html#ada61e01ced7a7db11e5c503409c565be">lsquic_stream_refuse_push</a> (<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s);</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;<a class="code" href="lsquic_8h.html#ae0b8525f7dac119f6122af564d0e17fd">lsquic_stream_push_info</a> (<span class="keyword">const</span> <a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *, uint32_t *ref_stream_id,</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> **headers, <span class="keywordtype">size_t</span> *headers_sz);</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160;</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;<span class="keywordtype">unsigned</span> <a class="code" href="lsquic_8h.html#aa45f5d45b56f5a0d7f881dbccebc5fd8">lsquic_stream_priority</a> (<span class="keyword">const</span> <a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160;</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;<span class="keywordtype">int</span> <a class="code" href="lsquic_8h.html#aa5e0ddfd53a44561248a286caacbd114">lsquic_stream_set_priority</a> (<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s, <span class="keywordtype">unsigned</span> priority);</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160;<a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> * <a class="code" href="lsquic_8h.html#a177184b3d7178dda5a3e95e539230b2b">lsquic_stream_conn</a>(<span class="keyword">const</span> <a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *s);</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;<a class="code" href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a> *</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160;lsquic_conn_get_stream_by_id (<a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c, uint32_t stream_id);</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160;</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160;<a class="code" href="lsquic__types_8h.html#acf675534bad01d31b48d9113feff1bbb">lsquic_cid_t</a></div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160;<a class="code" href="lsquic_8h.html#a487bffd57fd7febe4b316be7dc0a3016">lsquic_conn_id</a> (<span class="keyword">const</span> <a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c);</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160;</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160;<span class="keywordtype">int</span> lsquic_conn_get_sockaddr(<span class="keyword">const</span> <a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c,</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keyword">const</span> <span class="keyword">struct</span> sockaddr **local, <span class="keyword">const</span> <span class="keyword">struct</span> sockaddr **peer);</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;</div><div class="line"><a name="l00740"></a><span class="lineno"><a class="line" href="structlsquic__logger__if.html"> 740</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structlsquic__logger__if.html">lsquic_logger_if</a> {</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; int (*vprintf)(<span class="keywordtype">void</span> *logger_ctx, <span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, va_list args);</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160;};</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160;</div><div class="line"><a name="l00747"></a><span class="lineno"><a class="line" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235"> 747</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235">lsquic_logger_timestamp_style</a> {</div><div class="line"><a name="l00751"></a><span class="lineno"><a class="line" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a4bc180853f0f833b9c93bf7080ce2805"> 751</a></span>&#160; <a class="code" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a4bc180853f0f833b9c93bf7080ce2805">LLTS_NONE</a>,</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160;</div><div class="line"><a name="l00757"></a><span class="lineno"><a class="line" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235aa00368e0a7e30628851ab624d6e7575b"> 757</a></span>&#160; <a class="code" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235aa00368e0a7e30628851ab624d6e7575b">LLTS_HHMMSSMS</a>,</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;</div><div class="line"><a name="l00762"></a><span class="lineno"><a class="line" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a8754c3fced294cfb146625c586a55a56"> 762</a></span>&#160; <a class="code" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a8754c3fced294cfb146625c586a55a56">LLTS_YYYYMMDD_HHMMSSMS</a>,</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;</div><div class="line"><a name="l00772"></a><span class="lineno"><a class="line" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a5aa72ace83b5948f4d5a9ed5c72a4c4b"> 772</a></span>&#160; <a class="code" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a5aa72ace83b5948f4d5a9ed5c72a4c4b">LLTS_CHROMELIKE</a>,</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;</div><div class="line"><a name="l00778"></a><span class="lineno"><a class="line" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a874a36df2ce02e162104c2345b176185"> 778</a></span>&#160; <a class="code" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a874a36df2ce02e162104c2345b176185">LLTS_HHMMSSUS</a>,</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160;</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; N_LLTS</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;};</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;<span class="keywordtype">void</span> <a class="code" href="lsquic_8h.html#a5059cabdc84335f56870c8bc7a1235e2">lsquic_logger_init</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structlsquic__logger__if.html">lsquic_logger_if</a> *, <span class="keywordtype">void</span> *logger_ctx,</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keyword">enum</span> <a class="code" href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235">lsquic_logger_timestamp_style</a>);</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160;</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160;<a class="code" href="lsquic_8h.html#a337f6adcc4ec9328e0f293d6128ee376">lsquic_set_log_level</a> (<span class="keyword">const</span> <span class="keywordtype">char</span> *log_level);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160;</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160;<a class="code" href="lsquic_8h.html#af8c718a3780425357d070419106e4bc8">lsquic_logger_lopt</a> (<span class="keyword">const</span> <span class="keywordtype">char</span> *optarg);</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;<span class="keywordtype">unsigned</span> <a class="code" href="lsquic_8h.html#abebdca40ce630ad8272752da926d7a24">lsquic_engine_quic_versions</a> (<span class="keyword">const</span> <a class="code" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *);</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160;</div><div class="line"><a name="l00816"></a><span class="lineno"><a class="line" href="lsquic_8h.html#add59f38ae0a3bea39bd3c5c86b70c63c"> 816</a></span>&#160;<span class="preprocessor">#define LSQUIC_GLOBAL_CLIENT (1 &lt;&lt; 0)</span></div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;</div><div class="line"><a name="l00822"></a><span class="lineno"><a class="line" href="lsquic_8h.html#a632ff4c3837f60fae3436db6e5f3e039"> 822</a></span>&#160;<span class="preprocessor">#define LSQUIC_GLOBAL_SERVER (1 &lt;&lt; 1)</span></div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160;<a class="code" href="lsquic_8h.html#a754a3d611e8c6f9a1daeb7b06c00af88">lsquic_global_init</a> (<span class="keywordtype">int</span> flags);</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160;</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160;<a class="code" href="lsquic_8h.html#a06b9ac9ba933a060b72975640b2d79a3">lsquic_global_cleanup</a> (<span class="keywordtype">void</span>);</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160;</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160;<span class="keyword">enum</span> <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4db">lsquic_version</a></div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160;<a class="code" href="lsquic_8h.html#a2a07e308beb5e1f29ba62597c2a37b2b">lsquic_conn_quic_version</a> (<span class="keyword">const</span> <a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c);</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160;</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160;<span class="keyword">enum</span> <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4db">lsquic_version</a></div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160;<a class="code" href="lsquic_8h.html#a8fef45d333b115d996080bb254077d8d">lsquic_str2ver</a> (<span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160;</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160;<a class="code" href="lsquic__types_8h.html#a21c289bcbb4643effba8bb75eeffd8cd">lsquic_conn_ctx_t</a> *</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160;<a class="code" href="lsquic_8h.html#a53d1105503b5ab46384451ff4bbd0391">lsquic_conn_get_ctx</a> (<span class="keyword">const</span> <a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c);</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160;<span class="keywordtype">void</span> *<a class="code" href="lsquic_8h.html#a8edf1874acb10f4b95abf8894023c3c9">lsquic_conn_get_peer_ctx</a>( <span class="keyword">const</span> <a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *lconn);</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160;</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160;<a class="code" href="lsquic_8h.html#a6da1350d78db9a83810a00dcee3e4944">lsquic_conn_abort</a> (<a class="code" href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a> *c);</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160;</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160;<a class="code" href="lsquic_8h.html#ac864ff28dcaa1c09ef796a3cdcf83e27">lsquic_engine_earliest_adv_tick</a> (<a class="code" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *engine, <span class="keywordtype">int</span> *diff);</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160;</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160;<span class="keywordtype">unsigned</span></div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160;<a class="code" href="lsquic_8h.html#aec59af9ee5cb005bef2e828ee8a0a4be">lsquic_engine_count_attq</a> (<a class="code" href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a> *engine, <span class="keywordtype">int</span> from_now);</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160;</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160;}</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160;</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160;<span class="preprocessor">#endif //__LSQUIC_H__</span></div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160;</div><div class="ttc" id="lsquic_8h_html_a74d8c8f033c2e654fdb3487a2bf55d8a"><div class="ttname"><a href="lsquic_8h.html#a74d8c8f033c2e654fdb3487a2bf55d8a">lsquic_engine_has_pend_rw</a></div><div class="ttdeci">int lsquic_engine_has_pend_rw(lsquic_engine_t *)</div></div>
<div class="ttc" id="lsquic_8h_html_a06b9ac9ba933a060b72975640b2d79a3"><div class="ttname"><a href="lsquic_8h.html#a06b9ac9ba933a060b72975640b2d79a3">lsquic_global_cleanup</a></div><div class="ttdeci">void lsquic_global_cleanup(void)</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_a7297980e558cd2deafb955534520934b"><div class="ttname"><a href="structlsquic__engine__settings.html#a7297980e558cd2deafb955534520934b">lsquic_engine_settings::es_max_cfcw</a></div><div class="ttdeci">unsigned es_max_cfcw</div><div class="ttdef"><b>Definition:</b> lsquic.h:231</div></div>
<div class="ttc" id="lsquic_8h_html_abebdca40ce630ad8272752da926d7a24"><div class="ttname"><a href="lsquic_8h.html#abebdca40ce630ad8272752da926d7a24">lsquic_engine_quic_versions</a></div><div class="ttdeci">unsigned lsquic_engine_quic_versions(const lsquic_engine_t *)</div></div>
<div class="ttc" id="lsquic_8h_html_ac4584806627d352797a2e0cfae2e6235a4bc180853f0f833b9c93bf7080ce2805"><div class="ttname"><a href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a4bc180853f0f833b9c93bf7080ce2805">LLTS_NONE</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:751</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_a578718dc886cffa23e97fa11fb26138b"><div class="ttname"><a href="structlsquic__engine__settings.html#a578718dc886cffa23e97fa11fb26138b">lsquic_engine_settings::es_ua</a></div><div class="ttdeci">const char * es_ua</div><div class="ttdef"><b>Definition:</b> lsquic.h:261</div></div>
<div class="ttc" id="lsquic_8h_html_ac4584806627d352797a2e0cfae2e6235aa00368e0a7e30628851ab624d6e7575b"><div class="ttname"><a href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235aa00368e0a7e30628851ab624d6e7575b">LLTS_HHMMSSMS</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:757</div></div>
<div class="ttc" id="lsquic_8h_html_a88a2040cc4b0e575b2fa2affe8597697"><div class="ttname"><a href="lsquic_8h.html#a88a2040cc4b0e575b2fa2affe8597697">lsquic_engine_send_unsent_packets</a></div><div class="ttdeci">void lsquic_engine_send_unsent_packets(lsquic_engine_t *engine)</div></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="structlsquic__engine__settings_html_a9baca38fb49c0028941a54de17a3580a"><div class="ttname"><a href="structlsquic__engine__settings.html#a9baca38fb49c0028941a54de17a3580a">lsquic_engine_settings::es_pendrw_check</a></div><div class="ttdeci">unsigned es_pendrw_check</div><div class="ttdef"><b>Definition:</b> lsquic.h:344</div></div>
<div class="ttc" id="lsquic_8h_html_ac864ff28dcaa1c09ef796a3cdcf83e27"><div class="ttname"><a href="lsquic_8h.html#ac864ff28dcaa1c09ef796a3cdcf83e27">lsquic_engine_earliest_adv_tick</a></div><div class="ttdeci">int lsquic_engine_earliest_adv_tick(lsquic_engine_t *engine, int *diff)</div></div>
<div class="ttc" id="structlsquic__out__spec_html"><div class="ttname"><a href="structlsquic__out__spec.html">lsquic_out_spec</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:415</div></div>
<div class="ttc" id="lsquic_8h_html_ac4584806627d352797a2e0cfae2e6235a8754c3fced294cfb146625c586a55a56"><div class="ttname"><a href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a8754c3fced294cfb146625c586a55a56">LLTS_YYYYMMDD_HHMMSSMS</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:762</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_a1570dc65c3b4d097987f08ade3cfd993"><div class="ttname"><a href="structlsquic__engine__settings.html#a1570dc65c3b4d097987f08ade3cfd993">lsquic_engine_settings::es_support_tcid0</a></div><div class="ttdeci">int es_support_tcid0</div><div class="ttdef"><b>Definition:</b> lsquic.h:293</div></div>
<div class="ttc" id="structlsquic__engine__api_html"><div class="ttname"><a href="structlsquic__engine__api.html">lsquic_engine_api</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:450</div></div>
<div class="ttc" id="lsquic_8h_html_a199b551bc87bb77814ab4ce58abcdff9"><div class="ttname"><a href="lsquic_8h.html#a199b551bc87bb77814ab4ce58abcdff9">lsquic_stream_is_pushed</a></div><div class="ttdeci">int lsquic_stream_is_pushed(const lsquic_stream_t *s)</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_aeaef9bb4ecadb340cd05cfb85a6901a5"><div class="ttname"><a href="structlsquic__engine__settings.html#aeaef9bb4ecadb340cd05cfb85a6901a5">lsquic_engine_settings::es_handshake_to</a></div><div class="ttdeci">unsigned long es_handshake_to</div><div class="ttdef"><b>Definition:</b> lsquic.h:245</div></div>
<div class="ttc" id="lsquic_8h_html_a1071b7be4f2f28c5fedf957aa6309f9a"><div class="ttname"><a href="lsquic_8h.html#a1071b7be4f2f28c5fedf957aa6309f9a">lsquic_stream_write</a></div><div class="ttdeci">ssize_t lsquic_stream_write(lsquic_stream_t *s, const void *buf, size_t len)</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_ab6848de0e8025b08398ba43445de7405"><div class="ttname"><a href="structlsquic__engine__settings.html#ab6848de0e8025b08398ba43445de7405">lsquic_engine_settings::es_max_streams_in</a></div><div class="ttdeci">unsigned es_max_streams_in</div><div class="ttdef"><b>Definition:</b> lsquic.h:236</div></div>
<div class="ttc" id="lsquic_8h_html_a337f6adcc4ec9328e0f293d6128ee376"><div class="ttname"><a href="lsquic_8h.html#a337f6adcc4ec9328e0f293d6128ee376">lsquic_set_log_level</a></div><div class="ttdeci">int lsquic_set_log_level(const char *log_level)</div></div>
<div class="ttc" id="structlsquic__stream__if_html"><div class="ttname"><a href="structlsquic__stream__if.html">lsquic_stream_if</a></div><div class="ttdoc">The definition of callback functions call by lsquic_stream to process events. </div><div class="ttdef"><b>Definition:</b> lsquic.h:92</div></div>
<div class="ttc" id="lsquic_8h_html_aefe24851a36ebe16289a6fa3c5a1c8cc"><div class="ttname"><a href="lsquic_8h.html#aefe24851a36ebe16289a6fa3c5a1c8cc">lsquic_engine_process_conns_with_incoming</a></div><div class="ttdeci">void lsquic_engine_process_conns_with_incoming(lsquic_engine_t *)</div></div>
<div class="ttc" id="lsquic_8h_html_aec59af9ee5cb005bef2e828ee8a0a4be"><div class="ttname"><a href="lsquic_8h.html#aec59af9ee5cb005bef2e828ee8a0a4be">lsquic_engine_count_attq</a></div><div class="ttdeci">unsigned lsquic_engine_count_attq(lsquic_engine_t *engine, int from_now)</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_a2931ff6b1bc06429379debcc2c5cc5fa"><div class="ttname"><a href="structlsquic__engine__settings.html#a2931ff6b1bc06429379debcc2c5cc5fa">lsquic_engine_settings::es_cfcw</a></div><div class="ttdeci">unsigned es_cfcw</div><div class="ttdef"><b>Definition:</b> lsquic.h:209</div></div>
<div class="ttc" id="lsquic__types_8h_html_acf675534bad01d31b48d9113feff1bbb"><div class="ttname"><a href="lsquic__types_8h.html#acf675534bad01d31b48d9113feff1bbb">lsquic_cid_t</a></div><div class="ttdeci">uint64_t lsquic_cid_t</div><div class="ttdef"><b>Definition:</b> lsquic_types.h:15</div></div>
<div class="ttc" id="lsquic__types_8h_html"><div class="ttname"><a href="lsquic__types_8h.html">lsquic_types.h</a></div></div>
<div class="ttc" id="lsquic_8h_html_ac4584806627d352797a2e0cfae2e6235a5aa72ace83b5948f4d5a9ed5c72a4c4b"><div class="ttname"><a href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a5aa72ace83b5948f4d5a9ed5c72a4c4b">LLTS_CHROMELIKE</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:772</div></div>
<div class="ttc" id="lsquic_8h_html_a26335cffe38e49a6e87d94967371150d"><div class="ttname"><a href="lsquic_8h.html#a26335cffe38e49a6e87d94967371150d">lsquic_stream_get_ctx</a></div><div class="ttdeci">lsquic_stream_ctx_t * lsquic_stream_get_ctx(const lsquic_stream_t *s)</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_a9dca1ee29ab43ca9454b6b0a8d5e2799"><div class="ttname"><a href="structlsquic__engine__settings.html#a9dca1ee29ab43ca9454b6b0a8d5e2799">lsquic_engine_settings::es_versions</a></div><div class="ttdeci">unsigned es_versions</div><div class="ttdef"><b>Definition:</b> lsquic.h:197</div></div>
<div class="ttc" id="lsquic_8h_html_a8fe1ef20026e5e68a892036005c20a19"><div class="ttname"><a href="lsquic_8h.html#a8fe1ef20026e5e68a892036005c20a19">lsquic_conn_cancel_pending_streams</a></div><div class="ttdeci">unsigned lsquic_conn_cancel_pending_streams(lsquic_conn_t *, unsigned n)</div></div>
<div class="ttc" id="lsquic_8h_html_ac4584806627d352797a2e0cfae2e6235a874a36df2ce02e162104c2345b176185"><div class="ttname"><a href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a874a36df2ce02e162104c2345b176185">LLTS_HHMMSSUS</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:778</div></div>
<div class="ttc" id="structlsquic__http__header_html"><div class="ttname"><a href="structlsquic__http__header.html">lsquic_http_header</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:645</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_a4ba2bd3e85b8b4d0d929e31d675554e2"><div class="ttname"><a href="structlsquic__engine__settings.html#a4ba2bd3e85b8b4d0d929e31d675554e2">lsquic_engine_settings::es_idle_conn_to</a></div><div class="ttdeci">unsigned long es_idle_conn_to</div><div class="ttdef"><b>Definition:</b> lsquic.h:248</div></div>
<div class="ttc" id="structlsquic__reader_html"><div class="ttname"><a href="structlsquic__reader.html">lsquic_reader</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:604</div></div>
<div class="ttc" id="lsquic_8h_html_a8fef45d333b115d996080bb254077d8d"><div class="ttname"><a href="lsquic_8h.html#a8fef45d333b115d996080bb254077d8d">lsquic_str2ver</a></div><div class="ttdeci">enum lsquic_version lsquic_str2ver(const char *str, size_t len)</div></div>
<div class="ttc" id="lsquic__types_8h_html_a7e5d9c467ebef6810d3c5100e4684036"><div class="ttname"><a href="lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036">lsquic_conn_t</a></div><div class="ttdeci">struct lsquic_conn lsquic_conn_t</div><div class="ttdef"><b>Definition:</b> lsquic_types.h:21</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_addfa7e19884a81f50ca4d573b9aa16a3"><div class="ttname"><a href="structlsquic__engine__settings.html#addfa7e19884a81f50ca4d573b9aa16a3">lsquic_engine_settings::es_support_nstp</a></div><div class="ttdeci">int es_support_nstp</div><div class="ttdef"><b>Definition:</b> lsquic.h:305</div></div>
<div class="ttc" id="lsquic_8h_html_ae0b8525f7dac119f6122af564d0e17fd"><div class="ttname"><a href="lsquic_8h.html#ae0b8525f7dac119f6122af564d0e17fd">lsquic_stream_push_info</a></div><div class="ttdeci">int lsquic_stream_push_info(const lsquic_stream_t *, uint32_t *ref_stream_id, const char **headers, size_t *headers_sz)</div></div>
<div class="ttc" id="lsquic_8h_html_ac4584806627d352797a2e0cfae2e6235"><div class="ttname"><a href="lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235">lsquic_logger_timestamp_style</a></div><div class="ttdeci">lsquic_logger_timestamp_style</div><div class="ttdef"><b>Definition:</b> lsquic.h:747</div></div>
<div class="ttc" id="lsquic_8h_html_adb3d3d822e9a8217d90acbf29594ae40"><div class="ttname"><a href="lsquic_8h.html#adb3d3d822e9a8217d90acbf29594ae40">lsquic_engine_packet_in</a></div><div class="ttdeci">int lsquic_engine_packet_in(lsquic_engine_t *, const unsigned char *packet_in_data, size_t packet_in_size, const struct sockaddr *sa_local, const struct sockaddr *sa_peer, void *peer_ctx)</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_aaa9758b94c763b457c4a6ccc4f1e8100"><div class="ttname"><a href="structlsquic__engine__settings.html#aaa9758b94c763b457c4a6ccc4f1e8100">lsquic_engine_settings::es_proc_time_thresh</a></div><div class="ttdeci">unsigned es_proc_time_thresh</div><div class="ttdef"><b>Definition:</b> lsquic.h:378</div></div>
<div class="ttc" id="lsquic_8h_html_a60427549acdb608cc360173d817393e3"><div class="ttname"><a href="lsquic_8h.html#a60427549acdb608cc360173d817393e3">lsquic_engine_proc_all</a></div><div class="ttdeci">void lsquic_engine_proc_all(lsquic_engine_t *engine)</div></div>
<div class="ttc" id="lsquic_8h_html_aa5e0ddfd53a44561248a286caacbd114"><div class="ttname"><a href="lsquic_8h.html#aa5e0ddfd53a44561248a286caacbd114">lsquic_stream_set_priority</a></div><div class="ttdeci">int lsquic_stream_set_priority(lsquic_stream_t *s, unsigned priority)</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="structlsquic__logger__if_html"><div class="ttname"><a href="structlsquic__logger__if.html">lsquic_logger_if</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:740</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="structlsquic__engine__settings_html_aebf95d077a1a0de005b2ddac5afdfdc4"><div class="ttname"><a href="structlsquic__engine__settings.html#aebf95d077a1a0de005b2ddac5afdfdc4">lsquic_engine_settings::es_silent_close</a></div><div class="ttdeci">int es_silent_close</div><div class="ttdef"><b>Definition:</b> lsquic.h:251</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_ac5a3d759dcdf8915a98cbc3dd56d5f22"><div class="ttname"><a href="structlsquic__engine__settings.html#ac5a3d759dcdf8915a98cbc3dd56d5f22">lsquic_engine_settings::es_honor_prst</a></div><div class="ttdeci">int es_honor_prst</div><div class="ttdef"><b>Definition:</b> lsquic.h:312</div></div>
<div class="ttc" id="lsquic_8h_html_aefc66717813306c208483cccbb90ab9a"><div class="ttname"><a href="lsquic_8h.html#aefc66717813306c208483cccbb90ab9a">lsquic_engine_process_conns_to_tick</a></div><div class="ttdeci">void lsquic_engine_process_conns_to_tick(lsquic_engine_t *)</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_ab7b7eb8ab17eb47b8ea69d8ee8ef4a5b"><div class="ttname"><a href="structlsquic__engine__settings.html#ab7b7eb8ab17eb47b8ea69d8ee8ef4a5b">lsquic_engine_settings::es_max_header_list_size</a></div><div class="ttdeci">unsigned es_max_header_list_size</div><div class="ttdef"><b>Definition:</b> lsquic.h:258</div></div>
<div class="ttc" id="lsquic_8h_html_a827d6567e492bd67c330e2d48047ad49"><div class="ttname"><a href="lsquic_8h.html#a827d6567e492bd67c330e2d48047ad49">lsquic_engine_check_settings</a></div><div class="ttdeci">int lsquic_engine_check_settings(const struct lsquic_engine_settings *settings, unsigned lsquic_engine_flags, char *err_buf, size_t err_buf_sz)</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_a59907a4c1080bd6eb5c5c7776b968af4"><div class="ttname"><a href="structlsquic__engine__settings.html#a59907a4c1080bd6eb5c5c7776b968af4">lsquic_engine_settings::es_rw_once</a></div><div class="ttdeci">int es_rw_once</div><div class="ttdef"><b>Definition:</b> lsquic.h:358</div></div>
<div class="ttc" id="lsquic_8h_html_a2633ae9ee8d564f4c499f6eb0913d4db"><div class="ttname"><a href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4db">lsquic_version</a></div><div class="ttdeci">lsquic_version</div><div class="ttdef"><b>Definition:</b> lsquic.h:42</div></div>
<div class="ttc" id="lsquic_8h_html_a754a3d611e8c6f9a1daeb7b06c00af88"><div class="ttname"><a href="lsquic_8h.html#a754a3d611e8c6f9a1daeb7b06c00af88">lsquic_global_init</a></div><div class="ttdeci">int lsquic_global_init(int flags)</div></div>
<div class="ttc" id="lsquic_8h_html_a5e2335a871f1ab9b66e3c59b442e8cbe"><div class="ttname"><a href="lsquic_8h.html#a5e2335a871f1ab9b66e3c59b442e8cbe">lsquic_engine_connect</a></div><div class="ttdeci">int lsquic_engine_connect(lsquic_engine_t *, const struct sockaddr *peer_sa, void *peer_ctx, const char *hostname, unsigned short max_packet_size)</div></div>
<div class="ttc" id="lsquic__types_8h_html_a41d83b8270d6f12d2812203a7614b55f"><div class="ttname"><a href="lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f">lsquic_engine_t</a></div><div class="ttdeci">struct lsquic_engine lsquic_engine_t</div><div class="ttdef"><b>Definition:</b> lsquic_types.h:18</div></div>
<div class="ttc" id="lsquic_8h_html_ada61e01ced7a7db11e5c503409c565be"><div class="ttname"><a href="lsquic_8h.html#ada61e01ced7a7db11e5c503409c565be">lsquic_stream_refuse_push</a></div><div class="ttdeci">int lsquic_stream_refuse_push(lsquic_stream_t *s)</div></div>
<div class="ttc" id="structlsquic__packout__mem__if_html"><div class="ttname"><a href="structlsquic__packout__mem__if.html">lsquic_packout_mem_if</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:443</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_adfd0c61d3243d85d3676876ca67e6466"><div class="ttname"><a href="structlsquic__engine__settings.html#adfd0c61d3243d85d3676876ca67e6466">lsquic_engine_settings::es_support_srej</a></div><div class="ttdeci">int es_support_srej</div><div class="ttdef"><b>Definition:</b> lsquic.h:272</div></div>
<div class="ttc" id="lsquic_8h_html_a53d1105503b5ab46384451ff4bbd0391"><div class="ttname"><a href="lsquic_8h.html#a53d1105503b5ab46384451ff4bbd0391">lsquic_conn_get_ctx</a></div><div class="ttdeci">lsquic_conn_ctx_t * lsquic_conn_get_ctx(const lsquic_conn_t *c)</div></div>
<div class="ttc" id="lsquic_8h_html_a5059cabdc84335f56870c8bc7a1235e2"><div class="ttname"><a href="lsquic_8h.html#a5059cabdc84335f56870c8bc7a1235e2">lsquic_logger_init</a></div><div class="ttdeci">void lsquic_logger_init(const struct lsquic_logger_if *, void *logger_ctx, enum lsquic_logger_timestamp_style)</div></div>
<div class="ttc" id="lsquic_8h_html_aade9ff8d34cbcb33cd04a41377797fcf"><div class="ttname"><a href="lsquic_8h.html#aade9ff8d34cbcb33cd04a41377797fcf">lsquic_packets_out_f</a></div><div class="ttdeci">int(* lsquic_packets_out_f)(void *packets_out_ctx, const struct lsquic_out_spec *out_spec, unsigned n_packets_out)</div><div class="ttdef"><b>Definition:</b> lsquic.h:428</div></div>
<div class="ttc" id="lsquic_8h_html_a49f11caabdf3638d3a3217ebdd21c3af"><div class="ttname"><a href="lsquic_8h.html#a49f11caabdf3638d3a3217ebdd21c3af">lsquic_stream_writef</a></div><div class="ttdeci">ssize_t lsquic_stream_writef(lsquic_stream_t *, struct lsquic_reader *)</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_ac88c5a68eac5f324a1b1524a962be26d"><div class="ttname"><a href="structlsquic__engine__settings.html#ac88c5a68eac5f324a1b1524a962be26d">lsquic_engine_settings::es_sfcw</a></div><div class="ttdeci">unsigned es_sfcw</div><div class="ttdef"><b>Definition:</b> lsquic.h:221</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_a90403ce7cbb10f9ddf438cfc1bd62530"><div class="ttname"><a href="structlsquic__engine__settings.html#a90403ce7cbb10f9ddf438cfc1bd62530">lsquic_engine_settings::es_pace_packets</a></div><div class="ttdeci">int es_pace_packets</div><div class="ttdef"><b>Definition:</b> lsquic.h:385</div></div>
<div class="ttc" id="lsquic_8h_html_a7fee61cc609a4b274a4de2b41db6a9e4"><div class="ttname"><a href="lsquic_8h.html#a7fee61cc609a4b274a4de2b41db6a9e4">lsquic_stream_shutdown</a></div><div class="ttdeci">int lsquic_stream_shutdown(lsquic_stream_t *s, int how)</div></div>
<div class="ttc" id="lsquic_8h_html_afa6f69c943be0a943f28699af6ae1000"><div class="ttname"><a href="lsquic_8h.html#afa6f69c943be0a943f28699af6ae1000">lsquic_engine_new</a></div><div class="ttdeci">lsquic_engine_t * lsquic_engine_new(unsigned lsquic_engine_flags, const struct lsquic_engine_api *)</div></div>
<div class="ttc" id="lsquic_8h_html_abcf25d8301c4a2796ea13e6e306a33a9"><div class="ttname"><a href="lsquic_8h.html#abcf25d8301c4a2796ea13e6e306a33a9">lsquic_stream_flush</a></div><div class="ttdeci">int lsquic_stream_flush(lsquic_stream_t *s)</div></div>
<div class="ttc" id="lsquic_8h_html_a487bffd57fd7febe4b316be7dc0a3016"><div class="ttname"><a href="lsquic_8h.html#a487bffd57fd7febe4b316be7dc0a3016">lsquic_conn_id</a></div><div class="ttdeci">lsquic_cid_t lsquic_conn_id(const lsquic_conn_t *c)</div></div>
<div class="ttc" id="structlsquic__http__headers_html"><div class="ttname"><a href="structlsquic__http__headers.html">lsquic_http_headers</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:656</div></div>
<div class="ttc" id="lsquic_8h_html_a8edf1874acb10f4b95abf8894023c3c9"><div class="ttname"><a href="lsquic_8h.html#a8edf1874acb10f4b95abf8894023c3c9">lsquic_conn_get_peer_ctx</a></div><div class="ttdeci">void * lsquic_conn_get_peer_ctx(const lsquic_conn_t *lconn)</div></div>
<div class="ttc" id="lsquic_8h_html_aa45f5d45b56f5a0d7f881dbccebc5fd8"><div class="ttname"><a href="lsquic_8h.html#aa45f5d45b56f5a0d7f881dbccebc5fd8">lsquic_stream_priority</a></div><div class="ttdeci">unsigned lsquic_stream_priority(const lsquic_stream_t *s)</div></div>
<div class="ttc" id="lsquic_8h_html_a822627a87eb003fd9e2e56ebded5b3f3"><div class="ttname"><a href="lsquic_8h.html#a822627a87eb003fd9e2e56ebded5b3f3">lsquic_http_header_t</a></div><div class="ttdeci">struct lsquic_http_header lsquic_http_header_t</div><div class="ttdoc">HTTP header structure. Contains header name and value. </div></div>
<div class="ttc" id="lsquic_8h_html_af8c718a3780425357d070419106e4bc8"><div class="ttname"><a href="lsquic_8h.html#af8c718a3780425357d070419106e4bc8">lsquic_logger_lopt</a></div><div class="ttdeci">int lsquic_logger_lopt(const char *optarg)</div></div>
<div class="ttc" id="structlsquic__engine__api_html_ab1c6af0c63f81cfa0c9ed6d6952b5482"><div class="ttname"><a href="structlsquic__engine__api.html#ab1c6af0c63f81cfa0c9ed6d6952b5482">lsquic_engine_api::ea_pmi</a></div><div class="ttdeci">const struct lsquic_packout_mem_if * ea_pmi</div><div class="ttdef"><b>Definition:</b> lsquic.h:460</div></div>
<div class="ttc" id="lsquic__types_8h_html_a21c289bcbb4643effba8bb75eeffd8cd"><div class="ttname"><a href="lsquic__types_8h.html#a21c289bcbb4643effba8bb75eeffd8cd">lsquic_conn_ctx_t</a></div><div class="ttdeci">struct lsquic_conn_ctx lsquic_conn_ctx_t</div><div class="ttdef"><b>Definition:</b> lsquic_types.h:24</div></div>
<div class="ttc" id="lsquic__types_8h_html_a4012fdeb11382d691dfe5f025206b8f3"><div class="ttname"><a href="lsquic__types_8h.html#a4012fdeb11382d691dfe5f025206b8f3">lsquic_stream_ctx_t</a></div><div class="ttdeci">struct lsquic_stream_ctx lsquic_stream_ctx_t</div><div class="ttdef"><b>Definition:</b> lsquic_types.h:30</div></div>
<div class="ttc" id="lsquic_8h_html_aae156a499af8ae01ca6f4fa307da86c6"><div class="ttname"><a href="lsquic_8h.html#aae156a499af8ae01ca6f4fa307da86c6">lsquic_engine_process_conns_with_pend_rw</a></div><div class="ttdeci">void lsquic_engine_process_conns_with_pend_rw(lsquic_engine_t *)</div></div>
<div class="ttc" id="lsquic__types_8h_html_ad286bcdd799bb3733f1d6568e25c57c6"><div class="ttname"><a href="lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6">lsquic_stream_t</a></div><div class="ttdeci">struct lsquic_stream lsquic_stream_t</div><div class="ttdef"><b>Definition:</b> lsquic_types.h:27</div></div>
<div class="ttc" id="lsquic_8h_html_a177184b3d7178dda5a3e95e539230b2b"><div class="ttname"><a href="lsquic_8h.html#a177184b3d7178dda5a3e95e539230b2b">lsquic_stream_conn</a></div><div class="ttdeci">lsquic_conn_t * lsquic_stream_conn(const lsquic_stream_t *s)</div></div>
<div class="ttc" id="lsquic_8h_html_a9d5d9609ca70350117994e2e2e934a22"><div class="ttname"><a href="lsquic_8h.html#a9d5d9609ca70350117994e2e2e934a22">lsquic_engine_has_unsent_packets</a></div><div class="ttdeci">int lsquic_engine_has_unsent_packets(lsquic_engine_t *engine)</div></div>
<div class="ttc" id="lsquic_8h_html_aff77b794b9ca995245cc9a739b76d197"><div class="ttname"><a href="lsquic_8h.html#aff77b794b9ca995245cc9a739b76d197">lsquic_conn_going_away</a></div><div class="ttdeci">void lsquic_conn_going_away(lsquic_conn_t *conn)</div></div>
<div class="ttc" id="structlsquic__engine__settings_html"><div class="ttname"><a href="structlsquic__engine__settings.html">lsquic_engine_settings</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:188</div></div>
<div class="ttc" id="lsquic_8h_html_a2a07e308beb5e1f29ba62597c2a37b2b"><div class="ttname"><a href="lsquic_8h.html#a2a07e308beb5e1f29ba62597c2a37b2b">lsquic_conn_quic_version</a></div><div class="ttdeci">enum lsquic_version lsquic_conn_quic_version(const lsquic_conn_t *c)</div></div>
<div class="ttc" id="lsquic_8h_html_ad8f2345e0b9f8d19f7b6a1fa4e970aa8"><div class="ttname"><a href="lsquic_8h.html#ad8f2345e0b9f8d19f7b6a1fa4e970aa8">lsquic_conn_close</a></div><div class="ttdeci">void lsquic_conn_close(lsquic_conn_t *conn)</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_a534523d663336969494d6a3721a63640"><div class="ttname"><a href="lsquic_8h.html#a534523d663336969494d6a3721a63640">lsquic_stream_id</a></div><div class="ttdeci">uint32_t lsquic_stream_id(const lsquic_stream_t *s)</div></div>
<div class="ttc" id="structlsquic__stream__if_html_afdab3bce65931517452d2ddd979596d7"><div class="ttname"><a href="structlsquic__stream__if.html#afdab3bce65931517452d2ddd979596d7">lsquic_stream_if::on_goaway_received</a></div><div class="ttdeci">void(* on_goaway_received)(lsquic_conn_t *c)</div><div class="ttdef"><b>Definition:</b> lsquic.h:104</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 class="ttc" id="structlsquic__engine__settings_html_a85a83ab74a018c293f83d9b78a797d8e"><div class="ttname"><a href="structlsquic__engine__settings.html#a85a83ab74a018c293f83d9b78a797d8e">lsquic_engine_settings::es_progress_check</a></div><div class="ttdeci">unsigned es_progress_check</div><div class="ttdef"><b>Definition:</b> lsquic.h:327</div></div>
<div class="ttc" id="structlsquic__engine__settings_html_a8b68eb068b40eb24e5e08cab097f077a"><div class="ttname"><a href="structlsquic__engine__settings.html#a8b68eb068b40eb24e5e08cab097f077a">lsquic_engine_settings::es_support_push</a></div><div class="ttdeci">int es_support_push</div><div class="ttdef"><b>Definition:</b> lsquic.h:284</div></div>
<div class="ttc" id="lsquic_8h_html_a33bb7961ffad842a052bcd81202de5b9"><div class="ttname"><a href="lsquic_8h.html#a33bb7961ffad842a052bcd81202de5b9">lsquic_conn_n_pending_streams</a></div><div class="ttdeci">unsigned lsquic_conn_n_pending_streams(const lsquic_conn_t *)</div></div>
<div class="ttc" id="lsquic_8h_html_a6da1350d78db9a83810a00dcee3e4944"><div class="ttname"><a href="lsquic_8h.html#a6da1350d78db9a83810a00dcee3e4944">lsquic_conn_abort</a></div><div class="ttdeci">void lsquic_conn_abort(lsquic_conn_t *c)</div></div>
</div><!-- fragment --></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>