litespeed-quic/docs/html/lsquic_8h_source.html

193 lines
99 KiB
HTML
Raw Normal View History

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>LiteSpeed QUIC Library: include/lsquic.h 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">
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 13:35:58 +00:00
<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="
<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>
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 13:35:58 +00:00
<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>
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 13:35:58 +00:00
<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>
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 13:35:58 +00:00
<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>
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 13:35:58 +00:00
<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>
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 13:35:58 +00:00
<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>
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 13:35:58 +00:00
<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>
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 13:35:58 +00:00
<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>
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 13:35:58 +00:00
<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>
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 13:35:58 +00:00
<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>
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 13:35:58 +00:00
<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>
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 13:35:58 +00:00
<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>