Update doc

This commit is contained in:
Tatsuhiro Tsujikawa 2014-06-18 13:40:33 +09:00
parent 8a08654789
commit 5027d194af
14 changed files with 459 additions and 415 deletions

View File

@ -7,7 +7,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>API Reference &mdash; nghttp2 0.4.1 documentation</title> <title>API Reference &mdash; nghttp2 0.4.2-DEV documentation</title>
@ -28,7 +28,7 @@
<link rel="top" title="nghttp2 0.4.1 documentation" href="index.html"/> <link rel="top" title="nghttp2 0.4.2-DEV documentation" href="index.html"/>
<link rel="next" title="Python API Reference" href="python-apiref.html"/> <link rel="next" title="Python API Reference" href="python-apiref.html"/>
<link rel="prev" title="nghttpx - HOW-TO" href="nghttpx-howto.html"/> <link rel="prev" title="nghttpx - HOW-TO" href="nghttpx-howto.html"/>
@ -561,7 +561,7 @@ Indicates that this name/value pair must not be indexed.</p>
<dl class="type"> <dl class="type">
<dt id="c.nghttp2_frame_type"> <dt id="c.nghttp2_frame_type">
<tt class="descname">nghttp2_frame_type</tt><a class="headerlink" href="#c.nghttp2_frame_type" title="Permalink to this definition"></a></dt> <tt class="descname">nghttp2_frame_type</tt><a class="headerlink" href="#c.nghttp2_frame_type" title="Permalink to this definition"></a></dt>
<dd><p>The control frame types in HTTP/2.</p> <dd><p>The frame types in HTTP/2 specification.</p>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_DATA"> <dt id="c.NGHTTP2_DATA">
<tt class="descname">NGHTTP2_DATA</tt><a class="headerlink" href="#c.NGHTTP2_DATA" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_DATA</tt><a class="headerlink" href="#c.NGHTTP2_DATA" title="Permalink to this definition"></a></dt>
@ -632,18 +632,26 @@ The WINDOW_UPDATE frame.</p>
The CONTINUATION frame.</p> The CONTINUATION frame.</p>
</dd></dl> </dd></dl>
</dd></dl>
<dl class="type">
<dt id="c.nghttp2_ext_frame_type">
<tt class="descname">nghttp2_ext_frame_type</tt><a class="headerlink" href="#c.nghttp2_ext_frame_type" title="Permalink to this definition"></a></dt>
<dd><p>The extension frame types.</p>
<p>TODO: The assigned frame types were carried from draft-12, and now
actually TBD.</p>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_ALTSVC"> <dt id="c.NGHTTP2_EXT_ALTSVC">
<tt class="descname">NGHTTP2_ALTSVC</tt><a class="headerlink" href="#c.NGHTTP2_ALTSVC" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_EXT_ALTSVC</tt><a class="headerlink" href="#c.NGHTTP2_EXT_ALTSVC" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">0x0a</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x0a</span></tt>)
The ALTSVC frame.</p> The ALTSVC extension frame.</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_BLOCKED"> <dt id="c.NGHTTP2_EXT_BLOCKED">
<tt class="descname">NGHTTP2_BLOCKED</tt><a class="headerlink" href="#c.NGHTTP2_BLOCKED" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_EXT_BLOCKED</tt><a class="headerlink" href="#c.NGHTTP2_EXT_BLOCKED" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">0x0b</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x0b</span></tt>)
The BLOCKED frame.</p> The BLOCKED extension frame.</p>
</dd></dl> </dd></dl>
</dd></dl> </dd></dl>
@ -689,17 +697,10 @@ The END_SEGMENT flag.</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_FLAG_PAD_LOW"> <dt id="c.NGHTTP2_FLAG_PADDED">
<tt class="descname">NGHTTP2_FLAG_PAD_LOW</tt><a class="headerlink" href="#c.NGHTTP2_FLAG_PAD_LOW" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_FLAG_PADDED</tt><a class="headerlink" href="#c.NGHTTP2_FLAG_PADDED" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">0x08</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x08</span></tt>)
The PAD_LOW flag.</p> The PADDED flag.</p>
</dd></dl>
<dl class="macro">
<dt id="c.NGHTTP2_FLAG_PAD_HIGH">
<tt class="descname">NGHTTP2_FLAG_PAD_HIGH</tt><a class="headerlink" href="#c.NGHTTP2_FLAG_PAD_HIGH" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">0x10</span></tt>)
The PAD_HIGH flag.</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
@ -709,13 +710,6 @@ The PAD_HIGH flag.</p>
The PRIORITY flag.</p> The PRIORITY flag.</p>
</dd></dl> </dd></dl>
<dl class="macro">
<dt id="c.NGHTTP2_FLAG_COMPRESSED">
<tt class="descname">NGHTTP2_FLAG_COMPRESSED</tt><a class="headerlink" href="#c.NGHTTP2_FLAG_COMPRESSED" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">0x20</span></tt>)
THE COMPRESSED flag.</p>
</dd></dl>
</dd></dl> </dd></dl>
<dl class="type"> <dl class="type">
@ -725,45 +719,31 @@ THE COMPRESSED flag.</p>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_SETTINGS_HEADER_TABLE_SIZE"> <dt id="c.NGHTTP2_SETTINGS_HEADER_TABLE_SIZE">
<tt class="descname">NGHTTP2_SETTINGS_HEADER_TABLE_SIZE</tt><a class="headerlink" href="#c.NGHTTP2_SETTINGS_HEADER_TABLE_SIZE" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_SETTINGS_HEADER_TABLE_SIZE</tt><a class="headerlink" href="#c.NGHTTP2_SETTINGS_HEADER_TABLE_SIZE" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">1</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x01</span></tt>)
SETTINGS_HEADER_TABLE_SIZE</p> SETTINGS_HEADER_TABLE_SIZE</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_SETTINGS_ENABLE_PUSH"> <dt id="c.NGHTTP2_SETTINGS_ENABLE_PUSH">
<tt class="descname">NGHTTP2_SETTINGS_ENABLE_PUSH</tt><a class="headerlink" href="#c.NGHTTP2_SETTINGS_ENABLE_PUSH" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_SETTINGS_ENABLE_PUSH</tt><a class="headerlink" href="#c.NGHTTP2_SETTINGS_ENABLE_PUSH" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">2</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x02</span></tt>)
SETTINGS_ENABLE_PUSH</p> SETTINGS_ENABLE_PUSH</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS"> <dt id="c.NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS">
<tt class="descname">NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS</tt><a class="headerlink" href="#c.NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS</tt><a class="headerlink" href="#c.NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">3</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x03</span></tt>)
SETTINGS_MAX_CONCURRENT_STREAMS</p> SETTINGS_MAX_CONCURRENT_STREAMS</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE"> <dt id="c.NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE">
<tt class="descname">NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE</tt><a class="headerlink" href="#c.NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE</tt><a class="headerlink" href="#c.NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">4</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x04</span></tt>)
SETTINGS_INITIAL_WINDOW_SIZE</p> SETTINGS_INITIAL_WINDOW_SIZE</p>
</dd></dl> </dd></dl>
<dl class="macro">
<dt id="c.NGHTTP2_SETTINGS_COMPRESS_DATA">
<tt class="descname">NGHTTP2_SETTINGS_COMPRESS_DATA</tt><a class="headerlink" href="#c.NGHTTP2_SETTINGS_COMPRESS_DATA" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">5</span></tt>)
SETTINGS_COMPRESS_DATA</p>
</dd></dl>
<dl class="macro">
<dt id="c.NGHTTP2_SETTINGS_MAX">
<tt class="descname">NGHTTP2_SETTINGS_MAX</tt><a class="headerlink" href="#c.NGHTTP2_SETTINGS_MAX" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">5</span></tt>)
Maximum ID of <a class="reference internal" href="#c.nghttp2_settings_id" title="nghttp2_settings_id"><tt class="xref c c-type docutils literal"><span class="pre">nghttp2_settings_id</span></tt></a>.</p>
</dd></dl>
</dd></dl> </dd></dl>
<dl class="type"> <dl class="type">
@ -773,91 +753,91 @@ Maximum ID of <a class="reference internal" href="#c.nghttp2_settings_id" title=
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_NO_ERROR"> <dt id="c.NGHTTP2_NO_ERROR">
<tt class="descname">NGHTTP2_NO_ERROR</tt><a class="headerlink" href="#c.NGHTTP2_NO_ERROR" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_NO_ERROR</tt><a class="headerlink" href="#c.NGHTTP2_NO_ERROR" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">0</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x00</span></tt>)
No errors.</p> No errors.</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_PROTOCOL_ERROR"> <dt id="c.NGHTTP2_PROTOCOL_ERROR">
<tt class="descname">NGHTTP2_PROTOCOL_ERROR</tt><a class="headerlink" href="#c.NGHTTP2_PROTOCOL_ERROR" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_PROTOCOL_ERROR</tt><a class="headerlink" href="#c.NGHTTP2_PROTOCOL_ERROR" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">1</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x01</span></tt>)
PROTOCOL_ERROR</p> PROTOCOL_ERROR</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_INTERNAL_ERROR"> <dt id="c.NGHTTP2_INTERNAL_ERROR">
<tt class="descname">NGHTTP2_INTERNAL_ERROR</tt><a class="headerlink" href="#c.NGHTTP2_INTERNAL_ERROR" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_INTERNAL_ERROR</tt><a class="headerlink" href="#c.NGHTTP2_INTERNAL_ERROR" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">2</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x02</span></tt>)
INTERNAL_ERROR</p> INTERNAL_ERROR</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_FLOW_CONTROL_ERROR"> <dt id="c.NGHTTP2_FLOW_CONTROL_ERROR">
<tt class="descname">NGHTTP2_FLOW_CONTROL_ERROR</tt><a class="headerlink" href="#c.NGHTTP2_FLOW_CONTROL_ERROR" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_FLOW_CONTROL_ERROR</tt><a class="headerlink" href="#c.NGHTTP2_FLOW_CONTROL_ERROR" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">3</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x03</span></tt>)
FLOW_CONTROL_ERROR</p> FLOW_CONTROL_ERROR</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_SETTINGS_TIMEOUT"> <dt id="c.NGHTTP2_SETTINGS_TIMEOUT">
<tt class="descname">NGHTTP2_SETTINGS_TIMEOUT</tt><a class="headerlink" href="#c.NGHTTP2_SETTINGS_TIMEOUT" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_SETTINGS_TIMEOUT</tt><a class="headerlink" href="#c.NGHTTP2_SETTINGS_TIMEOUT" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">4</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x04</span></tt>)
SETTINGS_TIMEOUT</p> SETTINGS_TIMEOUT</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_STREAM_CLOSED"> <dt id="c.NGHTTP2_STREAM_CLOSED">
<tt class="descname">NGHTTP2_STREAM_CLOSED</tt><a class="headerlink" href="#c.NGHTTP2_STREAM_CLOSED" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_STREAM_CLOSED</tt><a class="headerlink" href="#c.NGHTTP2_STREAM_CLOSED" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">5</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x05</span></tt>)
STREAM_CLOSED</p> STREAM_CLOSED</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_FRAME_SIZE_ERROR"> <dt id="c.NGHTTP2_FRAME_SIZE_ERROR">
<tt class="descname">NGHTTP2_FRAME_SIZE_ERROR</tt><a class="headerlink" href="#c.NGHTTP2_FRAME_SIZE_ERROR" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_FRAME_SIZE_ERROR</tt><a class="headerlink" href="#c.NGHTTP2_FRAME_SIZE_ERROR" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">6</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x06</span></tt>)
FRAME_SIZE_ERROR</p> FRAME_SIZE_ERROR</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_REFUSED_STREAM"> <dt id="c.NGHTTP2_REFUSED_STREAM">
<tt class="descname">NGHTTP2_REFUSED_STREAM</tt><a class="headerlink" href="#c.NGHTTP2_REFUSED_STREAM" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_REFUSED_STREAM</tt><a class="headerlink" href="#c.NGHTTP2_REFUSED_STREAM" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">7</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x07</span></tt>)
REFUSED_STREAM</p> REFUSED_STREAM</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_CANCEL"> <dt id="c.NGHTTP2_CANCEL">
<tt class="descname">NGHTTP2_CANCEL</tt><a class="headerlink" href="#c.NGHTTP2_CANCEL" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_CANCEL</tt><a class="headerlink" href="#c.NGHTTP2_CANCEL" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">8</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x08</span></tt>)
CANCEL</p> CANCEL</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_COMPRESSION_ERROR"> <dt id="c.NGHTTP2_COMPRESSION_ERROR">
<tt class="descname">NGHTTP2_COMPRESSION_ERROR</tt><a class="headerlink" href="#c.NGHTTP2_COMPRESSION_ERROR" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_COMPRESSION_ERROR</tt><a class="headerlink" href="#c.NGHTTP2_COMPRESSION_ERROR" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">9</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x09</span></tt>)
COMPRESSION_ERROR</p> COMPRESSION_ERROR</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_CONNECT_ERROR"> <dt id="c.NGHTTP2_CONNECT_ERROR">
<tt class="descname">NGHTTP2_CONNECT_ERROR</tt><a class="headerlink" href="#c.NGHTTP2_CONNECT_ERROR" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_CONNECT_ERROR</tt><a class="headerlink" href="#c.NGHTTP2_CONNECT_ERROR" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">10</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x0a</span></tt>)
CONNECT_ERROR</p> CONNECT_ERROR</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_ENHANCE_YOUR_CALM"> <dt id="c.NGHTTP2_ENHANCE_YOUR_CALM">
<tt class="descname">NGHTTP2_ENHANCE_YOUR_CALM</tt><a class="headerlink" href="#c.NGHTTP2_ENHANCE_YOUR_CALM" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_ENHANCE_YOUR_CALM</tt><a class="headerlink" href="#c.NGHTTP2_ENHANCE_YOUR_CALM" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">11</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x0b</span></tt>)
ENHANCE_YOUR_CALM</p> ENHANCE_YOUR_CALM</p>
</dd></dl> </dd></dl>
<dl class="macro"> <dl class="macro">
<dt id="c.NGHTTP2_INADEQUATE_SECURITY"> <dt id="c.NGHTTP2_INADEQUATE_SECURITY">
<tt class="descname">NGHTTP2_INADEQUATE_SECURITY</tt><a class="headerlink" href="#c.NGHTTP2_INADEQUATE_SECURITY" title="Permalink to this definition"></a></dt> <tt class="descname">NGHTTP2_INADEQUATE_SECURITY</tt><a class="headerlink" href="#c.NGHTTP2_INADEQUATE_SECURITY" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">12</span></tt>) <dd><p>(<tt class="docutils literal"><span class="pre">0x0c</span></tt>)
INADEQUATE_SECURITY</p> INADEQUATE_SECURITY</p>
</dd></dl> </dd></dl>
@ -882,13 +862,6 @@ No flag set.</p>
Indicates EOF was sensed.</p> Indicates EOF was sensed.</p>
</dd></dl> </dd></dl>
<dl class="macro">
<dt id="c.NGHTTP2_DATA_FLAG_COMPRESSED">
<tt class="descname">NGHTTP2_DATA_FLAG_COMPRESSED</tt><a class="headerlink" href="#c.NGHTTP2_DATA_FLAG_COMPRESSED" title="Permalink to this definition"></a></dt>
<dd><p>(<tt class="docutils literal"><span class="pre">0x02</span></tt>)
Indicates data was compressed by application.</p>
</dd></dl>
</dd></dl> </dd></dl>
<dl class="type"> <dl class="type">
@ -1101,10 +1074,6 @@ The implementation of this function must read at most <em>length</em>
bytes of data from <em>source</em> (or possibly other places) and store bytes of data from <em>source</em> (or possibly other places) and store
them in <em>buf</em> and return number of data stored in <em>buf</em>. If EOF is them in <em>buf</em> and return number of data stored in <em>buf</em>. If EOF is
reached, set <a class="reference internal" href="#c.NGHTTP2_DATA_FLAG_EOF" title="NGHTTP2_DATA_FLAG_EOF"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_DATA_FLAG_EOF</span></tt></a> flag in <em>*data_flags</em>.</p> reached, set <a class="reference internal" href="#c.NGHTTP2_DATA_FLAG_EOF" title="NGHTTP2_DATA_FLAG_EOF"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_DATA_FLAG_EOF</span></tt></a> flag in <em>*data_flags</em>.</p>
<p>To send compressed data payload without affecting content-length,
set <a class="reference internal" href="#c.NGHTTP2_DATA_FLAG_COMPRESSED" title="NGHTTP2_DATA_FLAG_COMPRESSED"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_DATA_FLAG_COMPRESSED</span></tt></a> flag in <em>*data_flags</em>.
Compression must be done by application prior to fill data in
<em>buf</em>.</p>
<p>If the application wants to postpone DATA frames (e.g., <p>If the application wants to postpone DATA frames (e.g.,
asynchronous I/O, or reading data blocks for long time), it is asynchronous I/O, or reading data blocks for long time), it is
achieved by returning <a class="reference internal" href="#c.NGHTTP2_ERR_DEFERRED" title="NGHTTP2_ERR_DEFERRED"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_DEFERRED</span></tt></a> without reading achieved by returning <a class="reference internal" href="#c.NGHTTP2_ERR_DEFERRED" title="NGHTTP2_ERR_DEFERRED"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_DEFERRED</span></tt></a> without reading
@ -1407,73 +1376,78 @@ int32_t <tt class="descname">window_size_increment</tt><a class="headerlink" hre
</dd></dl> </dd></dl>
<dl class="type"> <dl class="type">
<dt id="c.nghttp2_altsvc"> <dt id="c.nghttp2_extension">
<tt class="descname">nghttp2_altsvc</tt><a class="headerlink" href="#c.nghttp2_altsvc" title="Permalink to this definition"></a></dt> <tt class="descname">nghttp2_extension</tt><a class="headerlink" href="#c.nghttp2_extension" title="Permalink to this definition"></a></dt>
<dd><p>The ALTSVC frame. It has following members:</p> <dd><p>The extension frame. It has following members:</p>
<dl class="member"> <dl class="member">
<dt id="c.nghttp2_altsvc.hd"> <dt id="c.nghttp2_extension.hd">
<a class="reference internal" href="#c.nghttp2_frame_hd" title="nghttp2_frame_hd">nghttp2_frame_hd</a> <tt class="descname">hd</tt><a class="headerlink" href="#c.nghttp2_altsvc.hd" title="Permalink to this definition"></a></dt> <a class="reference internal" href="#c.nghttp2_frame_hd" title="nghttp2_frame_hd">nghttp2_frame_hd</a> <tt class="descname">hd</tt><a class="headerlink" href="#c.nghttp2_extension.hd" title="Permalink to this definition"></a></dt>
<dd><p>The frame header.</p> <dd><p>The frame header.</p>
</dd></dl> </dd></dl>
<dl class="member"> <dl class="member">
<dt id="c.nghttp2_altsvc.protocol_id"> <dt id="c.nghttp2_extension.payload">
uint8_t *<tt class="descname">protocol_id</tt><a class="headerlink" href="#c.nghttp2_altsvc.protocol_id" title="Permalink to this definition"></a></dt> void *<tt class="descname">payload</tt><a class="headerlink" href="#c.nghttp2_extension.payload" title="Permalink to this definition"></a></dt>
<dd><p>Protocol ID</p> <dd><p>The pointer to extension payload. The exact pointer type is
</dd></dl> determined by hd.type.</p>
<p>If hd.type == <a class="reference internal" href="#c.NGHTTP2_EXT_ALTSVC" title="NGHTTP2_EXT_ALTSVC"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_EXT_ALTSVC</span></tt></a>, it is a pointer to
<dl class="member"> <a class="reference internal" href="#c.nghttp2_ext_altsvc" title="nghttp2_ext_altsvc"><tt class="xref c c-type docutils literal"><span class="pre">nghttp2_ext_altsvc</span></tt></a>.</p>
<dt id="c.nghttp2_altsvc.host"> <p>If hd.type == <a class="reference internal" href="#c.NGHTTP2_EXT_BLOCKED" title="NGHTTP2_EXT_BLOCKED"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_EXT_BLOCKED</span></tt></a>, it points to <tt class="docutils literal"><span class="pre">NULL</span></tt>,
uint8_t *<tt class="descname">host</tt><a class="headerlink" href="#c.nghttp2_altsvc.host" title="Permalink to this definition"></a></dt> since BLOCKED extension frame has no payload.</p>
<dd><p>Host</p>
</dd></dl>
<dl class="member">
<dt id="c.nghttp2_altsvc.origin">
uint8_t *<tt class="descname">origin</tt><a class="headerlink" href="#c.nghttp2_altsvc.origin" title="Permalink to this definition"></a></dt>
<dd><p>Origin</p>
</dd></dl>
<dl class="member">
<dt id="c.nghttp2_altsvc.protocol_id_len">
size_t <tt class="descname">protocol_id_len</tt><a class="headerlink" href="#c.nghttp2_altsvc.protocol_id_len" title="Permalink to this definition"></a></dt>
<dd><p>The length of <em>protocol_id</em></p>
</dd></dl>
<dl class="member">
<dt id="c.nghttp2_altsvc.host_len">
size_t <tt class="descname">host_len</tt><a class="headerlink" href="#c.nghttp2_altsvc.host_len" title="Permalink to this definition"></a></dt>
<dd><p>The length of <em>host</em></p>
</dd></dl>
<dl class="member">
<dt id="c.nghttp2_altsvc.origin_len">
size_t <tt class="descname">origin_len</tt><a class="headerlink" href="#c.nghttp2_altsvc.origin_len" title="Permalink to this definition"></a></dt>
<dd><p>The length of <em>origin</em></p>
</dd></dl>
<dl class="member">
<dt id="c.nghttp2_altsvc.max_age">
uint32_t <tt class="descname">max_age</tt><a class="headerlink" href="#c.nghttp2_altsvc.max_age" title="Permalink to this definition"></a></dt>
<dd><p>Max-Age</p>
</dd></dl>
<dl class="member">
<dt id="c.nghttp2_altsvc.port">
uint16_t <tt class="descname">port</tt><a class="headerlink" href="#c.nghttp2_altsvc.port" title="Permalink to this definition"></a></dt>
<dd><p>Port</p>
</dd></dl> </dd></dl>
</dd></dl> </dd></dl>
<dl class="type"> <dl class="type">
<dt id="c.nghttp2_blocked"> <dt id="c.nghttp2_ext_altsvc">
<tt class="descname">nghttp2_blocked</tt><a class="headerlink" href="#c.nghttp2_blocked" title="Permalink to this definition"></a></dt> <tt class="descname">nghttp2_ext_altsvc</tt><a class="headerlink" href="#c.nghttp2_ext_altsvc" title="Permalink to this definition"></a></dt>
<dd><p>The BLOCKED frame. It has following members:</p> <dd><p>The ALTSVC extension frame payload. It has following members:</p>
<dl class="member"> <dl class="member">
<dt id="c.nghttp2_blocked.hd"> <dt id="c.nghttp2_ext_altsvc.protocol_id">
<a class="reference internal" href="#c.nghttp2_frame_hd" title="nghttp2_frame_hd">nghttp2_frame_hd</a> <tt class="descname">hd</tt><a class="headerlink" href="#c.nghttp2_blocked.hd" title="Permalink to this definition"></a></dt> uint8_t *<tt class="descname">protocol_id</tt><a class="headerlink" href="#c.nghttp2_ext_altsvc.protocol_id" title="Permalink to this definition"></a></dt>
<dd><p>The frame header.</p> <dd><p>Protocol ID</p>
</dd></dl>
<dl class="member">
<dt id="c.nghttp2_ext_altsvc.host">
uint8_t *<tt class="descname">host</tt><a class="headerlink" href="#c.nghttp2_ext_altsvc.host" title="Permalink to this definition"></a></dt>
<dd><p>Host</p>
</dd></dl>
<dl class="member">
<dt id="c.nghttp2_ext_altsvc.origin">
uint8_t *<tt class="descname">origin</tt><a class="headerlink" href="#c.nghttp2_ext_altsvc.origin" title="Permalink to this definition"></a></dt>
<dd><p>Origin</p>
</dd></dl>
<dl class="member">
<dt id="c.nghttp2_ext_altsvc.protocol_id_len">
size_t <tt class="descname">protocol_id_len</tt><a class="headerlink" href="#c.nghttp2_ext_altsvc.protocol_id_len" title="Permalink to this definition"></a></dt>
<dd><p>The length of <em>protocol_id</em></p>
</dd></dl>
<dl class="member">
<dt id="c.nghttp2_ext_altsvc.host_len">
size_t <tt class="descname">host_len</tt><a class="headerlink" href="#c.nghttp2_ext_altsvc.host_len" title="Permalink to this definition"></a></dt>
<dd><p>The length of <em>host</em></p>
</dd></dl>
<dl class="member">
<dt id="c.nghttp2_ext_altsvc.origin_len">
size_t <tt class="descname">origin_len</tt><a class="headerlink" href="#c.nghttp2_ext_altsvc.origin_len" title="Permalink to this definition"></a></dt>
<dd><p>The length of <em>origin</em></p>
</dd></dl>
<dl class="member">
<dt id="c.nghttp2_ext_altsvc.max_age">
uint32_t <tt class="descname">max_age</tt><a class="headerlink" href="#c.nghttp2_ext_altsvc.max_age" title="Permalink to this definition"></a></dt>
<dd><p>Max-Age</p>
</dd></dl>
<dl class="member">
<dt id="c.nghttp2_ext_altsvc.port">
uint16_t <tt class="descname">port</tt><a class="headerlink" href="#c.nghttp2_ext_altsvc.port" title="Permalink to this definition"></a></dt>
<dd><p>Port</p>
</dd></dl> </dd></dl>
</dd></dl> </dd></dl>
@ -1545,15 +1519,9 @@ from here because the library deals with it internally.</p>
</dd></dl> </dd></dl>
<dl class="member"> <dl class="member">
<dt id="c.nghttp2_frame.altsvc"> <dt id="c.nghttp2_frame.ext">
<a class="reference internal" href="#c.nghttp2_altsvc" title="nghttp2_altsvc">nghttp2_altsvc</a> <tt class="descname">altsvc</tt><a class="headerlink" href="#c.nghttp2_frame.altsvc" title="Permalink to this definition"></a></dt> <a class="reference internal" href="#c.nghttp2_extension" title="nghttp2_extension">nghttp2_extension</a> <tt class="descname">ext</tt><a class="headerlink" href="#c.nghttp2_frame.ext" title="Permalink to this definition"></a></dt>
<dd><p>The ALTSVC frame.</p> <dd><p>The extension frame.</p>
</dd></dl>
<dl class="member">
<dt id="c.nghttp2_frame.blocked">
<a class="reference internal" href="#c.nghttp2_blocked" title="nghttp2_blocked">nghttp2_blocked</a> <tt class="descname">blocked</tt><a class="headerlink" href="#c.nghttp2_frame.blocked" title="Permalink to this definition"></a></dt>
<dd><p>The BLOCKED frame.</p>
</dd></dl> </dd></dl>
</dd></dl> </dd></dl>
@ -2213,9 +2181,6 @@ is invoked.</li>
invalid, invalid,
<a class="reference internal" href="#c.nghttp2_session_callbacks.on_invalid_frame_recv_callback" title="nghttp2_session_callbacks.on_invalid_frame_recv_callback"><tt class="xref c c-member docutils literal"><span class="pre">nghttp2_session_callbacks.on_invalid_frame_recv_callback</span></tt></a> <a class="reference internal" href="#c.nghttp2_session_callbacks.on_invalid_frame_recv_callback" title="nghttp2_session_callbacks.on_invalid_frame_recv_callback"><tt class="xref c c-member docutils literal"><span class="pre">nghttp2_session_callbacks.on_invalid_frame_recv_callback</span></tt></a>
is invoked.</li> is invoked.</li>
<li>If the received frame type is unknown,
<a class="reference internal" href="#c.nghttp2_session_callbacks.on_unknown_frame_recv_callback" title="nghttp2_session_callbacks.on_unknown_frame_recv_callback"><tt class="xref c c-member docutils literal"><span class="pre">nghttp2_session_callbacks.on_unknown_frame_recv_callback</span></tt></a>
is invoked.</li>
</ol> </ol>
</li> </li>
</ol> </ol>
@ -2395,13 +2360,11 @@ local endpoint can send without WINDOW_UPDATE.</p>
<dt id="c.nghttp2_session_terminate_session"> <dt id="c.nghttp2_session_terminate_session">
int <tt class="descname">nghttp2_session_terminate_session</tt><big>(</big><a class="reference internal" href="#c.nghttp2_session" title="nghttp2_session">nghttp2_session</a><em>&nbsp;*session</em>, <a class="reference internal" href="#c.nghttp2_error_code" title="nghttp2_error_code">nghttp2_error_code</a><em>&nbsp;error_code</em><big>)</big><a class="headerlink" href="#c.nghttp2_session_terminate_session" title="Permalink to this definition"></a></dt> int <tt class="descname">nghttp2_session_terminate_session</tt><big>(</big><a class="reference internal" href="#c.nghttp2_session" title="nghttp2_session">nghttp2_session</a><em>&nbsp;*session</em>, <a class="reference internal" href="#c.nghttp2_error_code" title="nghttp2_error_code">nghttp2_error_code</a><em>&nbsp;error_code</em><big>)</big><a class="headerlink" href="#c.nghttp2_session_terminate_session" title="Permalink to this definition"></a></dt>
<dd><p>Signals the session so that the connection should be terminated.</p> <dd><p>Signals the session so that the connection should be terminated.</p>
<p>GOAWAY frame with the given <em>error_code</em> will be submitted if it <p>The last stream ID is the ID of a stream for which
has not been transmitted. After the transmission, both <a class="reference internal" href="#c.nghttp2_on_frame_recv_callback" title="nghttp2_on_frame_recv_callback"><tt class="xref c c-type docutils literal"><span class="pre">nghttp2_on_frame_recv_callback</span></tt></a> was called most recently.</p>
<a class="reference internal" href="#c.nghttp2_session_want_read" title="nghttp2_session_want_read"><tt class="xref c c-func docutils literal"><span class="pre">nghttp2_session_want_read()</span></tt></a> and <a class="reference internal" href="#c.nghttp2_session_want_write" title="nghttp2_session_want_write"><tt class="xref c c-func docutils literal"><span class="pre">nghttp2_session_want_write()</span></tt></a> <p>The <em>error_code</em> is the error code of this GOAWAY frame.</p>
return 0. If GOAWAY frame has already transmitted at the time when <p>After the transmission, both <a class="reference internal" href="#c.nghttp2_session_want_read" title="nghttp2_session_want_read"><tt class="xref c c-func docutils literal"><span class="pre">nghttp2_session_want_read()</span></tt></a> and
this function is invoked, <a class="reference internal" href="#c.nghttp2_session_want_read" title="nghttp2_session_want_read"><tt class="xref c c-func docutils literal"><span class="pre">nghttp2_session_want_read()</span></tt></a> and <a class="reference internal" href="#c.nghttp2_session_want_write" title="nghttp2_session_want_write"><tt class="xref c c-func docutils literal"><span class="pre">nghttp2_session_want_write()</span></tt></a> return 0.</p>
<a class="reference internal" href="#c.nghttp2_session_want_write" title="nghttp2_session_want_write"><tt class="xref c c-func docutils literal"><span class="pre">nghttp2_session_want_write()</span></tt></a> returns 0 immediately after this
function succeeds.</p>
<p>This function should be called when the connection should be <p>This function should be called when the connection should be
terminated after sending GOAWAY. If the remaining streams should terminated after sending GOAWAY. If the remaining streams should
be processed after GOAWAY, use <a class="reference internal" href="#c.nghttp2_submit_goaway" title="nghttp2_submit_goaway"><tt class="xref c c-func docutils literal"><span class="pre">nghttp2_submit_goaway()</span></tt></a> instead.</p> be processed after GOAWAY, use <a class="reference internal" href="#c.nghttp2_submit_goaway" title="nghttp2_submit_goaway"><tt class="xref c c-func docutils literal"><span class="pre">nghttp2_submit_goaway()</span></tt></a> instead.</p>
@ -2413,10 +2376,27 @@ negative error codes:</p>
</dl> </dl>
</dd></dl> </dd></dl>
<dl class="function">
<dt id="c.nghttp2_session_terminate_session2">
int <tt class="descname">nghttp2_session_terminate_session2</tt><big>(</big><a class="reference internal" href="#c.nghttp2_session" title="nghttp2_session">nghttp2_session</a><em>&nbsp;*session</em>, int32_t<em>&nbsp;last_stream_id</em>, <a class="reference internal" href="#c.nghttp2_error_code" title="nghttp2_error_code">nghttp2_error_code</a><em>&nbsp;error_code</em><big>)</big><a class="headerlink" href="#c.nghttp2_session_terminate_session2" title="Permalink to this definition"></a></dt>
<dd><p>Signals the session so that the connection should be terminated.</p>
<p>This function behaves like <a class="reference internal" href="#c.nghttp2_session_terminate_session" title="nghttp2_session_terminate_session"><tt class="xref c c-func docutils literal"><span class="pre">nghttp2_session_terminate_session()</span></tt></a>,
but the last stream ID can be specified by the application for fine
grained control of stream.</p>
<p>This function returns 0 if it succeeds, or one of the following
negative error codes:</p>
<dl class="docutils">
<dt><a class="reference internal" href="#c.NGHTTP2_ERR_NOMEM" title="NGHTTP2_ERR_NOMEM"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_NOMEM</span></tt></a></dt>
<dd>Out of memory.</dd>
</dl>
</dd></dl>
<dl class="function"> <dl class="function">
<dt id="c.nghttp2_session_get_remote_settings"> <dt id="c.nghttp2_session_get_remote_settings">
uint32_t <tt class="descname">nghttp2_session_get_remote_settings</tt><big>(</big><a class="reference internal" href="#c.nghttp2_session" title="nghttp2_session">nghttp2_session</a><em>&nbsp;*session</em>, <a class="reference internal" href="#c.nghttp2_settings_id" title="nghttp2_settings_id">nghttp2_settings_id</a><em>&nbsp;id</em><big>)</big><a class="headerlink" href="#c.nghttp2_session_get_remote_settings" title="Permalink to this definition"></a></dt> uint32_t <tt class="descname">nghttp2_session_get_remote_settings</tt><big>(</big><a class="reference internal" href="#c.nghttp2_session" title="nghttp2_session">nghttp2_session</a><em>&nbsp;*session</em>, <a class="reference internal" href="#c.nghttp2_settings_id" title="nghttp2_settings_id">nghttp2_settings_id</a><em>&nbsp;id</em><big>)</big><a class="headerlink" href="#c.nghttp2_session_get_remote_settings" title="Permalink to this definition"></a></dt>
<dd><p>Returns the value of SETTINGS <em>id</em> notified by a remote endpoint.</p> <dd><p>Returns the value of SETTINGS <em>id</em> notified by a remote endpoint.
The <em>id</em> must be one of values defined in
<a class="reference internal" href="#c.nghttp2_settings_id" title="nghttp2_settings_id"><tt class="xref c c-macro docutils literal"><span class="pre">nghttp2_settings_id</span></tt></a>.</p>
</dd></dl> </dd></dl>
<dl class="function"> <dl class="function">
@ -2590,6 +2570,8 @@ negative error codes:</p>
<dl class="docutils"> <dl class="docutils">
<dt><a class="reference internal" href="#c.NGHTTP2_ERR_NOMEM" title="NGHTTP2_ERR_NOMEM"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_NOMEM</span></tt></a></dt> <dt><a class="reference internal" href="#c.NGHTTP2_ERR_NOMEM" title="NGHTTP2_ERR_NOMEM"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_NOMEM</span></tt></a></dt>
<dd>Out of memory.</dd> <dd>Out of memory.</dd>
<dt><a class="reference internal" href="#c.NGHTTP2_ERR_INVALID_ARGUMENT" title="NGHTTP2_ERR_INVALID_ARGUMENT"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_INVALID_ARGUMENT</span></tt></a></dt>
<dd>The <em>stream_id</em> is 0.</dd>
</dl> </dl>
</dd></dl> </dd></dl>
@ -2644,6 +2626,8 @@ succeeds, or one of the following negative error codes:</p>
<dt><a class="reference internal" href="#c.NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE" title="NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE</span></tt></a></dt> <dt><a class="reference internal" href="#c.NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE" title="NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE</span></tt></a></dt>
<dd>No stream ID is available because maximum stream ID was <dd>No stream ID is available because maximum stream ID was
reached.</dd> reached.</dd>
<dt><a class="reference internal" href="#c.NGHTTP2_ERR_INVALID_ARGUMENT" title="NGHTTP2_ERR_INVALID_ARGUMENT"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_INVALID_ARGUMENT</span></tt></a></dt>
<dd>The <em>stream_id</em> is 0.</dd>
</dl> </dl>
<div class="admonition warning"> <div class="admonition warning">
<p class="first admonition-title">Warning</p> <p class="first admonition-title">Warning</p>
@ -2672,6 +2656,8 @@ negative error codes:</p>
<dd>Out of memory.</dd> <dd>Out of memory.</dd>
<dt><a class="reference internal" href="#c.NGHTTP2_ERR_DATA_EXIST" title="NGHTTP2_ERR_DATA_EXIST"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_DATA_EXIST</span></tt></a></dt> <dt><a class="reference internal" href="#c.NGHTTP2_ERR_DATA_EXIST" title="NGHTTP2_ERR_DATA_EXIST"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_DATA_EXIST</span></tt></a></dt>
<dd>DATA has been already submitted and not fully processed yet.</dd> <dd>DATA has been already submitted and not fully processed yet.</dd>
<dt><a class="reference internal" href="#c.NGHTTP2_ERR_INVALID_ARGUMENT" title="NGHTTP2_ERR_INVALID_ARGUMENT"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_INVALID_ARGUMENT</span></tt></a></dt>
<dd>The <em>stream_id</em> is 0.</dd>
</dl> </dl>
</dd></dl> </dd></dl>
@ -2697,7 +2683,8 @@ negative error codes:</p>
<dt><a class="reference internal" href="#c.NGHTTP2_ERR_NOMEM" title="NGHTTP2_ERR_NOMEM"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_NOMEM</span></tt></a></dt> <dt><a class="reference internal" href="#c.NGHTTP2_ERR_NOMEM" title="NGHTTP2_ERR_NOMEM"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_NOMEM</span></tt></a></dt>
<dd>Out of memory.</dd> <dd>Out of memory.</dd>
<dt><a class="reference internal" href="#c.NGHTTP2_ERR_INVALID_ARGUMENT" title="NGHTTP2_ERR_INVALID_ARGUMENT"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_INVALID_ARGUMENT</span></tt></a></dt> <dt><a class="reference internal" href="#c.NGHTTP2_ERR_INVALID_ARGUMENT" title="NGHTTP2_ERR_INVALID_ARGUMENT"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_INVALID_ARGUMENT</span></tt></a></dt>
<dd>The <em>pri_spec</em> is NULL; or trying to depend on itself.</dd> <dd>The <em>stream_id</em> is 0; or the <em>pri_spec</em> is NULL; or trying to
depend on itself.</dd>
</dl> </dl>
</dd></dl> </dd></dl>
@ -2713,6 +2700,8 @@ negative error codes:</p>
<dl class="docutils"> <dl class="docutils">
<dt><a class="reference internal" href="#c.NGHTTP2_ERR_NOMEM" title="NGHTTP2_ERR_NOMEM"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_NOMEM</span></tt></a></dt> <dt><a class="reference internal" href="#c.NGHTTP2_ERR_NOMEM" title="NGHTTP2_ERR_NOMEM"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_NOMEM</span></tt></a></dt>
<dd>Out of memory.</dd> <dd>Out of memory.</dd>
<dt><a class="reference internal" href="#c.NGHTTP2_ERR_INVALID_ARGUMENT" title="NGHTTP2_ERR_INVALID_ARGUMENT"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_INVALID_ARGUMENT</span></tt></a></dt>
<dd>The <em>stream_id</em> is 0.</dd>
</dl> </dl>
</dd></dl> </dd></dl>
@ -2780,6 +2769,8 @@ client.</dd>
<dt><a class="reference internal" href="#c.NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE" title="NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE</span></tt></a></dt> <dt><a class="reference internal" href="#c.NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE" title="NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE</span></tt></a></dt>
<dd>No stream ID is available because maximum stream ID was <dd>No stream ID is available because maximum stream ID was
reached.</dd> reached.</dd>
<dt><a class="reference internal" href="#c.NGHTTP2_ERR_INVALID_ARGUMENT" title="NGHTTP2_ERR_INVALID_ARGUMENT"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_INVALID_ARGUMENT</span></tt></a></dt>
<dd>The <em>stream_id</em> is 0.</dd>
</dl> </dl>
<div class="admonition warning"> <div class="admonition warning">
<p class="first admonition-title">Warning</p> <p class="first admonition-title">Warning</p>
@ -2813,8 +2804,9 @@ negative error codes:</p>
<dl class="function"> <dl class="function">
<dt id="c.nghttp2_submit_goaway"> <dt id="c.nghttp2_submit_goaway">
int <tt class="descname">nghttp2_submit_goaway</tt><big>(</big><a class="reference internal" href="#c.nghttp2_session" title="nghttp2_session">nghttp2_session</a><em>&nbsp;*session</em>, uint8_t<em>&nbsp;flags</em>, <a class="reference internal" href="#c.nghttp2_error_code" title="nghttp2_error_code">nghttp2_error_code</a><em>&nbsp;error_code</em>, const uint8_t<em>&nbsp;*opaque_data</em>, size_t<em>&nbsp;opaque_data_len</em><big>)</big><a class="headerlink" href="#c.nghttp2_submit_goaway" title="Permalink to this definition"></a></dt> int <tt class="descname">nghttp2_submit_goaway</tt><big>(</big><a class="reference internal" href="#c.nghttp2_session" title="nghttp2_session">nghttp2_session</a><em>&nbsp;*session</em>, uint8_t<em>&nbsp;flags</em>, int32_t<em>&nbsp;last_stream_id</em>, <a class="reference internal" href="#c.nghttp2_error_code" title="nghttp2_error_code">nghttp2_error_code</a><em>&nbsp;error_code</em>, const uint8_t<em>&nbsp;*opaque_data</em>, size_t<em>&nbsp;opaque_data_len</em><big>)</big><a class="headerlink" href="#c.nghttp2_submit_goaway" title="Permalink to this definition"></a></dt>
<dd><p>Submits GOAWAY frame with the error code <em>error_code</em>.</p> <dd><p>Submits GOAWAY frame with the last stream ID <em>last_stream_id</em> and
the error code <em>error_code</em>.</p>
<p>The <em>flags</em> is currently ignored and should be <p>The <em>flags</em> is currently ignored and should be
<a class="reference internal" href="#c.NGHTTP2_FLAG_NONE" title="NGHTTP2_FLAG_NONE"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_FLAG_NONE</span></tt></a>.</p> <a class="reference internal" href="#c.NGHTTP2_FLAG_NONE" title="NGHTTP2_FLAG_NONE"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_FLAG_NONE</span></tt></a>.</p>
<p>If the <em>opaque_data</em> is not <tt class="docutils literal"><span class="pre">NULL</span></tt> and <em>opaque_data_len</em> is not <p>If the <em>opaque_data</em> is not <tt class="docutils literal"><span class="pre">NULL</span></tt> and <em>opaque_data_len</em> is not
@ -2823,12 +2815,17 @@ library makes a copy of the memory region pointed by <em>opaque_data</em>
with the length <em>opaque_data_len</em>, so the caller does not need to with the length <em>opaque_data_len</em>, so the caller does not need to
keep this memory after the return of this function. If the keep this memory after the return of this function. If the
<em>opaque_data_len</em> is 0, the <em>opaque_data</em> could be <tt class="docutils literal"><span class="pre">NULL</span></tt>.</p> <em>opaque_data_len</em> is 0, the <em>opaque_data</em> could be <tt class="docutils literal"><span class="pre">NULL</span></tt>.</p>
<p>To shutdown gracefully, first send GOAWAY with <tt class="docutils literal"><span class="pre">last_stream_id</span> <span class="pre">=</span>
<span class="pre">(1u</span> <span class="pre">&lt;&lt;</span> <span class="pre">31)</span> <span class="pre">-</span> <span class="pre">1</span></tt>. After 1 RTT, call either
<a class="reference internal" href="#c.nghttp2_submit_goaway" title="nghttp2_submit_goaway"><tt class="xref c c-func docutils literal"><span class="pre">nghttp2_submit_goaway()</span></tt></a>, <a class="reference internal" href="#c.nghttp2_session_terminate_session" title="nghttp2_session_terminate_session"><tt class="xref c c-func docutils literal"><span class="pre">nghttp2_session_terminate_session()</span></tt></a> or
<a class="reference internal" href="#c.nghttp2_session_terminate_session2" title="nghttp2_session_terminate_session2"><tt class="xref c c-func docutils literal"><span class="pre">nghttp2_session_terminate_session2()</span></tt></a>. The latter 2 will close
HTTP/2 session immediately after transmission of the frame.</p>
<p>This function returns 0 if it succeeds, or one of the following <p>This function returns 0 if it succeeds, or one of the following
negative error codes:</p> negative error codes:</p>
<dl class="docutils"> <dl class="docutils">
<dt><a class="reference internal" href="#c.NGHTTP2_ERR_NOMEM" title="NGHTTP2_ERR_NOMEM"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_NOMEM</span></tt></a></dt> <dt><a class="reference internal" href="#c.NGHTTP2_ERR_NOMEM" title="NGHTTP2_ERR_NOMEM"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_NOMEM</span></tt></a></dt>
<dd>Out of memory.</dd> <dd>Out of memory.</dd>
<dt>NGHTTP2_ERR_INVALID_ARGUMENT</dt> <dt><a class="reference internal" href="#c.NGHTTP2_ERR_INVALID_ARGUMENT" title="NGHTTP2_ERR_INVALID_ARGUMENT"><tt class="xref c c-macro docutils literal"><span class="pre">NGHTTP2_ERR_INVALID_ARGUMENT</span></tt></a></dt>
<dd>The <em>opaque_data_len</em> is too large.</dd> <dd>The <em>opaque_data_len</em> is too large.</dd>
</dl> </dl>
</dd></dl> </dd></dl>
@ -3229,7 +3226,7 @@ always succeeds.</p>
<script type="text/javascript"> <script type="text/javascript">
var DOCUMENTATION_OPTIONS = { var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./', URL_ROOT:'./',
VERSION:'0.4.1', VERSION:'0.4.2-DEV',
COLLAPSE_INDEX:false, COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html', FILE_SUFFIX:'.html',
HAS_SOURCE: false HAS_SOURCE: false

View File

@ -8,7 +8,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Index &mdash; nghttp2 0.4.1 documentation</title> <title>Index &mdash; nghttp2 0.4.2-DEV documentation</title>
@ -29,7 +29,7 @@
<link rel="top" title="nghttp2 0.4.1 documentation" href="index.html"/> <link rel="top" title="nghttp2 0.4.2-DEV documentation" href="index.html"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
@ -275,66 +275,10 @@
</dt> </dt>
<dt><a href="apiref.html#c.NGHTTP2_ALTSVC">NGHTTP2_ALTSVC (C macro)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_altsvc">nghttp2_altsvc (C type)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_altsvc.hd">nghttp2_altsvc.hd (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_altsvc.host">nghttp2_altsvc.host (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_altsvc.host_len">nghttp2_altsvc.host_len (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_altsvc.max_age">nghttp2_altsvc.max_age (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_altsvc.origin">nghttp2_altsvc.origin (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_altsvc.origin_len">nghttp2_altsvc.origin_len (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_altsvc.port">nghttp2_altsvc.port (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_altsvc.protocol_id">nghttp2_altsvc.protocol_id (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_altsvc.protocol_id_len">nghttp2_altsvc.protocol_id_len (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_before_frame_send_callback">nghttp2_before_frame_send_callback (C type)</a> <dt><a href="apiref.html#c.nghttp2_before_frame_send_callback">nghttp2_before_frame_send_callback (C type)</a>
</dt> </dt>
<dt><a href="apiref.html#c.NGHTTP2_BLOCKED">NGHTTP2_BLOCKED (C macro)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_blocked">nghttp2_blocked (C type)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_blocked.hd">nghttp2_blocked.hd (C member)</a>
</dt>
<dt><a href="apiref.html#c.NGHTTP2_CANCEL">NGHTTP2_CANCEL (C macro)</a> <dt><a href="apiref.html#c.NGHTTP2_CANCEL">NGHTTP2_CANCEL (C macro)</a>
</dt> </dt>
@ -399,10 +343,6 @@
</dt> </dt>
<dt><a href="apiref.html#c.NGHTTP2_DATA_FLAG_COMPRESSED">NGHTTP2_DATA_FLAG_COMPRESSED (C macro)</a>
</dt>
<dt><a href="apiref.html#c.NGHTTP2_DATA_FLAG_EOF">NGHTTP2_DATA_FLAG_EOF (C macro)</a> <dt><a href="apiref.html#c.NGHTTP2_DATA_FLAG_EOF">NGHTTP2_DATA_FLAG_EOF (C macro)</a>
</dt> </dt>
@ -583,6 +523,66 @@
</dt> </dt>
<dt><a href="apiref.html#c.NGHTTP2_EXT_ALTSVC">NGHTTP2_EXT_ALTSVC (C macro)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_ext_altsvc">nghttp2_ext_altsvc (C type)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_ext_altsvc.host">nghttp2_ext_altsvc.host (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_ext_altsvc.host_len">nghttp2_ext_altsvc.host_len (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_ext_altsvc.max_age">nghttp2_ext_altsvc.max_age (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_ext_altsvc.origin">nghttp2_ext_altsvc.origin (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_ext_altsvc.origin_len">nghttp2_ext_altsvc.origin_len (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_ext_altsvc.port">nghttp2_ext_altsvc.port (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_ext_altsvc.protocol_id">nghttp2_ext_altsvc.protocol_id (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_ext_altsvc.protocol_id_len">nghttp2_ext_altsvc.protocol_id_len (C member)</a>
</dt>
<dt><a href="apiref.html#c.NGHTTP2_EXT_BLOCKED">NGHTTP2_EXT_BLOCKED (C macro)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_ext_frame_type">nghttp2_ext_frame_type (C type)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_extension">nghttp2_extension (C type)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_extension.hd">nghttp2_extension.hd (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_extension.payload">nghttp2_extension.payload (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_flag">nghttp2_flag (C type)</a> <dt><a href="apiref.html#c.nghttp2_flag">nghttp2_flag (C type)</a>
</dt> </dt>
@ -591,10 +591,6 @@
</dt> </dt>
<dt><a href="apiref.html#c.NGHTTP2_FLAG_COMPRESSED">NGHTTP2_FLAG_COMPRESSED (C macro)</a>
</dt>
<dt><a href="apiref.html#c.NGHTTP2_FLAG_END_HEADERS">NGHTTP2_FLAG_END_HEADERS (C macro)</a> <dt><a href="apiref.html#c.NGHTTP2_FLAG_END_HEADERS">NGHTTP2_FLAG_END_HEADERS (C macro)</a>
</dt> </dt>
@ -611,11 +607,7 @@
</dt> </dt>
<dt><a href="apiref.html#c.NGHTTP2_FLAG_PAD_HIGH">NGHTTP2_FLAG_PAD_HIGH (C macro)</a> <dt><a href="apiref.html#c.NGHTTP2_FLAG_PADDED">NGHTTP2_FLAG_PADDED (C macro)</a>
</dt>
<dt><a href="apiref.html#c.NGHTTP2_FLAG_PAD_LOW">NGHTTP2_FLAG_PAD_LOW (C macro)</a>
</dt> </dt>
@ -631,18 +623,14 @@
</dt> </dt>
<dt><a href="apiref.html#c.nghttp2_frame.altsvc">nghttp2_frame.altsvc (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_frame.blocked">nghttp2_frame.blocked (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_frame.data">nghttp2_frame.data (C member)</a> <dt><a href="apiref.html#c.nghttp2_frame.data">nghttp2_frame.data (C member)</a>
</dt> </dt>
<dt><a href="apiref.html#c.nghttp2_frame.ext">nghttp2_frame.ext (C member)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_frame.goaway">nghttp2_frame.goaway (C member)</a> <dt><a href="apiref.html#c.nghttp2_frame.goaway">nghttp2_frame.goaway (C member)</a>
</dt> </dt>
@ -862,12 +850,12 @@
<dt><a href="apiref.html#c.nghttp2_info">nghttp2_info (C type)</a> <dt><a href="apiref.html#c.nghttp2_info">nghttp2_info (C type)</a>
</dt> </dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="apiref.html#c.nghttp2_info.age">nghttp2_info.age (C member)</a> <dt><a href="apiref.html#c.nghttp2_info.age">nghttp2_info.age (C member)</a>
</dt> </dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="apiref.html#c.nghttp2_info.proto_str">nghttp2_info.proto_str (C member)</a> <dt><a href="apiref.html#c.nghttp2_info.proto_str">nghttp2_info.proto_str (C member)</a>
</dt> </dt>
@ -1293,6 +1281,10 @@
</dt> </dt>
<dt><a href="apiref.html#c.nghttp2_session_terminate_session2">nghttp2_session_terminate_session2 (C function)</a>
</dt>
<dt><a href="apiref.html#c.nghttp2_session_upgrade">nghttp2_session_upgrade (C function)</a> <dt><a href="apiref.html#c.nghttp2_session_upgrade">nghttp2_session_upgrade (C function)</a>
</dt> </dt>
@ -1325,10 +1317,6 @@
</dt> </dt>
<dt><a href="apiref.html#c.NGHTTP2_SETTINGS_COMPRESS_DATA">NGHTTP2_SETTINGS_COMPRESS_DATA (C macro)</a>
</dt>
<dt><a href="apiref.html#c.NGHTTP2_SETTINGS_ENABLE_PUSH">NGHTTP2_SETTINGS_ENABLE_PUSH (C macro)</a> <dt><a href="apiref.html#c.NGHTTP2_SETTINGS_ENABLE_PUSH">NGHTTP2_SETTINGS_ENABLE_PUSH (C macro)</a>
</dt> </dt>
@ -1357,10 +1345,6 @@
</dt> </dt>
<dt><a href="apiref.html#c.NGHTTP2_SETTINGS_MAX">NGHTTP2_SETTINGS_MAX (C macro)</a>
</dt>
<dt><a href="apiref.html#c.NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS">NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS (C macro)</a> <dt><a href="apiref.html#c.NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS">NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS (C macro)</a>
</dt> </dt>
@ -1561,7 +1545,7 @@
<script type="text/javascript"> <script type="text/javascript">
var DOCUMENTATION_OPTIONS = { var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./', URL_ROOT:'./',
VERSION:'0.4.1', VERSION:'0.4.2-DEV',
COLLAPSE_INDEX:false, COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html', FILE_SUFFIX:'.html',
HAS_SOURCE: false HAS_SOURCE: false

View File

@ -7,7 +7,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>nghttp2 - HTTP/2 C Library &mdash; nghttp2 0.4.1 documentation</title> <title>nghttp2 - HTTP/2 C Library &mdash; nghttp2 0.4.2-DEV documentation</title>
@ -28,7 +28,7 @@
<link rel="top" title="nghttp2 0.4.1 documentation" href="#"/> <link rel="top" title="nghttp2 0.4.2-DEV documentation" href="#"/>
<link rel="next" title="nghttp2 - HTTP/2 C Library" href="package_README.html"/> <link rel="next" title="nghttp2 - HTTP/2 C Library" href="package_README.html"/>
@ -210,8 +210,8 @@ version 2.</p>
<div class="section" id="resources"> <div class="section" id="resources">
<h2>Resources<a class="headerlink" href="#resources" title="Permalink to this headline"></a></h2> <h2>Resources<a class="headerlink" href="#resources" title="Permalink to this headline"></a></h2>
<ul class="simple"> <ul class="simple">
<li><a class="reference external" href="http://tools.ietf.org/html/draft-ietf-httpbis-http2-12">http://tools.ietf.org/html/draft-ietf-httpbis-http2-12</a></li> <li><a class="reference external" href="http://tools.ietf.org/html/draft-ietf-httpbis-http2-13">http://tools.ietf.org/html/draft-ietf-httpbis-http2-13</a></li>
<li><a class="reference external" href="http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-07">http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-07</a></li> <li><a class="reference external" href="http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-08">http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-08</a></li>
</ul> </ul>
</div> </div>
</div> </div>
@ -252,7 +252,7 @@ version 2.</p>
<script type="text/javascript"> <script type="text/javascript">
var DOCUMENTATION_OPTIONS = { var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./', URL_ROOT:'./',
VERSION:'0.4.1', VERSION:'0.4.2-DEV',
COLLAPSE_INDEX:false, COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html', FILE_SUFFIX:'.html',
HAS_SOURCE: false HAS_SOURCE: false

View File

@ -7,7 +7,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>nghttp2.h &mdash; nghttp2 0.4.1 documentation</title> <title>nghttp2.h &mdash; nghttp2 0.4.2-DEV documentation</title>
@ -28,7 +28,7 @@
<link rel="top" title="nghttp2 0.4.1 documentation" href="index.html"/> <link rel="top" title="nghttp2 0.4.2-DEV documentation" href="index.html"/>
<link rel="next" title="nghttp2ver.h" href="nghttp2ver.h.html"/> <link rel="next" title="nghttp2ver.h" href="nghttp2ver.h.html"/>
<link rel="prev" title="Python API Reference" href="python-apiref.html"/> <link rel="prev" title="Python API Reference" href="python-apiref.html"/>
@ -184,7 +184,7 @@
<span class="cm"> * The protocol version identification string of this library</span> <span class="cm"> * The protocol version identification string of this library</span>
<span class="cm"> * supports. This identifier is used if HTTP/2 is used over TLS.</span> <span class="cm"> * supports. This identifier is used if HTTP/2 is used over TLS.</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="cp">#define NGHTTP2_PROTO_VERSION_ID &quot;h2-12&quot;</span> <span class="cp">#define NGHTTP2_PROTO_VERSION_ID &quot;h2-13&quot;</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * @macro</span> <span class="cm"> * @macro</span>
<span class="cm"> *</span> <span class="cm"> *</span>
@ -199,7 +199,7 @@
<span class="cm"> * supports. This identifier is used if HTTP/2 is used over cleartext</span> <span class="cm"> * supports. This identifier is used if HTTP/2 is used over cleartext</span>
<span class="cm"> * TCP.</span> <span class="cm"> * TCP.</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="cp">#define NGHTTP2_CLEARTEXT_PROTO_VERSION_ID &quot;h2c-12&quot;</span> <span class="cp">#define NGHTTP2_CLEARTEXT_PROTO_VERSION_ID &quot;h2c-13&quot;</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * @macro</span> <span class="cm"> * @macro</span>
@ -539,7 +539,8 @@
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * @enum</span> <span class="cm"> * @enum</span>
<span class="cm"> * The control frame types in HTTP/2.</span> <span class="cm"> *</span>
<span class="cm"> * The frame types in HTTP/2 specification.</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="k">typedef</span> <span class="k">enum</span> <span class="p">{</span> <span class="k">typedef</span> <span class="k">enum</span> <span class="p">{</span>
<span class="cm">/**</span> <span class="cm">/**</span>
@ -581,17 +582,28 @@
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * The CONTINUATION frame.</span> <span class="cm"> * The CONTINUATION frame.</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_CONTINUATION</span> <span class="o">=</span> <span class="mh">0x09</span><span class="p">,</span> <span class="n">NGHTTP2_CONTINUATION</span> <span class="o">=</span> <span class="mh">0x09</span>
<span class="cm">/**</span>
<span class="cm"> * The ALTSVC frame.</span>
<span class="cm"> */</span>
<span class="n">NGHTTP2_ALTSVC</span> <span class="o">=</span> <span class="mh">0x0a</span><span class="p">,</span>
<span class="cm">/**</span>
<span class="cm"> * The BLOCKED frame.</span>
<span class="cm"> */</span>
<span class="n">NGHTTP2_BLOCKED</span> <span class="o">=</span> <span class="mh">0x0b</span>
<span class="p">}</span> <span class="n">nghttp2_frame_type</span><span class="p">;</span> <span class="p">}</span> <span class="n">nghttp2_frame_type</span><span class="p">;</span>
<span class="cm">/**</span>
<span class="cm"> * @enum</span>
<span class="cm"> *</span>
<span class="cm"> * The extension frame types.</span>
<span class="cm"> *</span>
<span class="cm"> * TODO: The assigned frame types were carried from draft-12, and now</span>
<span class="cm"> * actually TBD.</span>
<span class="cm"> */</span>
<span class="k">typedef</span> <span class="k">enum</span> <span class="p">{</span>
<span class="cm">/**</span>
<span class="cm"> * The ALTSVC extension frame.</span>
<span class="cm"> */</span>
<span class="n">NGHTTP2_EXT_ALTSVC</span> <span class="o">=</span> <span class="mh">0x0a</span><span class="p">,</span>
<span class="cm">/**</span>
<span class="cm"> * The BLOCKED extension frame.</span>
<span class="cm"> */</span>
<span class="n">NGHTTP2_EXT_BLOCKED</span> <span class="o">=</span> <span class="mh">0x0b</span>
<span class="p">}</span> <span class="n">nghttp2_ext_frame_type</span><span class="p">;</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * @enum</span> <span class="cm"> * @enum</span>
<span class="cm"> *</span> <span class="cm"> *</span>
@ -620,21 +632,13 @@
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_FLAG_END_SEGMENT</span> <span class="o">=</span> <span class="mh">0x02</span><span class="p">,</span> <span class="n">NGHTTP2_FLAG_END_SEGMENT</span> <span class="o">=</span> <span class="mh">0x02</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * The PAD_LOW flag.</span> <span class="cm"> * The PADDED flag.</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_FLAG_PAD_LOW</span> <span class="o">=</span> <span class="mh">0x08</span><span class="p">,</span> <span class="n">NGHTTP2_FLAG_PADDED</span> <span class="o">=</span> <span class="mh">0x08</span><span class="p">,</span>
<span class="cm">/**</span>
<span class="cm"> * The PAD_HIGH flag.</span>
<span class="cm"> */</span>
<span class="n">NGHTTP2_FLAG_PAD_HIGH</span> <span class="o">=</span> <span class="mh">0x10</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * The PRIORITY flag.</span> <span class="cm"> * The PRIORITY flag.</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_FLAG_PRIORITY</span> <span class="o">=</span> <span class="mh">0x20</span><span class="p">,</span> <span class="n">NGHTTP2_FLAG_PRIORITY</span> <span class="o">=</span> <span class="mh">0x20</span>
<span class="cm">/**</span>
<span class="cm"> * THE COMPRESSED flag.</span>
<span class="cm"> */</span>
<span class="n">NGHTTP2_FLAG_COMPRESSED</span> <span class="o">=</span> <span class="mh">0x20</span>
<span class="p">}</span> <span class="n">nghttp2_flag</span><span class="p">;</span> <span class="p">}</span> <span class="n">nghttp2_flag</span><span class="p">;</span>
<span class="cm">/**</span> <span class="cm">/**</span>
@ -645,27 +649,19 @@
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * SETTINGS_HEADER_TABLE_SIZE</span> <span class="cm"> * SETTINGS_HEADER_TABLE_SIZE</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_SETTINGS_HEADER_TABLE_SIZE</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">NGHTTP2_SETTINGS_HEADER_TABLE_SIZE</span> <span class="o">=</span> <span class="mh">0x01</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * SETTINGS_ENABLE_PUSH</span> <span class="cm"> * SETTINGS_ENABLE_PUSH</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_SETTINGS_ENABLE_PUSH</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span> <span class="n">NGHTTP2_SETTINGS_ENABLE_PUSH</span> <span class="o">=</span> <span class="mh">0x02</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * SETTINGS_MAX_CONCURRENT_STREAMS</span> <span class="cm"> * SETTINGS_MAX_CONCURRENT_STREAMS</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> <span class="n">NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS</span> <span class="o">=</span> <span class="mh">0x03</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * SETTINGS_INITIAL_WINDOW_SIZE</span> <span class="cm"> * SETTINGS_INITIAL_WINDOW_SIZE</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE</span> <span class="o">=</span> <span class="mi">4</span><span class="p">,</span> <span class="n">NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE</span> <span class="o">=</span> <span class="mh">0x04</span>
<span class="cm">/**</span>
<span class="cm"> * SETTINGS_COMPRESS_DATA</span>
<span class="cm"> */</span>
<span class="n">NGHTTP2_SETTINGS_COMPRESS_DATA</span> <span class="o">=</span> <span class="mi">5</span><span class="p">,</span>
<span class="cm">/**</span>
<span class="cm"> * Maximum ID of :type:`nghttp2_settings_id`.</span>
<span class="cm"> */</span>
<span class="n">NGHTTP2_SETTINGS_MAX</span> <span class="o">=</span> <span class="mi">5</span>
<span class="p">}</span> <span class="n">nghttp2_settings_id</span><span class="p">;</span> <span class="p">}</span> <span class="n">nghttp2_settings_id</span><span class="p">;</span>
<span class="cm">/**</span> <span class="cm">/**</span>
@ -682,55 +678,55 @@
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * No errors.</span> <span class="cm"> * No errors.</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_NO_ERROR</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">NGHTTP2_NO_ERROR</span> <span class="o">=</span> <span class="mh">0x00</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * PROTOCOL_ERROR</span> <span class="cm"> * PROTOCOL_ERROR</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_PROTOCOL_ERROR</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">NGHTTP2_PROTOCOL_ERROR</span> <span class="o">=</span> <span class="mh">0x01</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * INTERNAL_ERROR</span> <span class="cm"> * INTERNAL_ERROR</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_INTERNAL_ERROR</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span> <span class="n">NGHTTP2_INTERNAL_ERROR</span> <span class="o">=</span> <span class="mh">0x02</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * FLOW_CONTROL_ERROR</span> <span class="cm"> * FLOW_CONTROL_ERROR</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_FLOW_CONTROL_ERROR</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> <span class="n">NGHTTP2_FLOW_CONTROL_ERROR</span> <span class="o">=</span> <span class="mh">0x03</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * SETTINGS_TIMEOUT</span> <span class="cm"> * SETTINGS_TIMEOUT</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_SETTINGS_TIMEOUT</span> <span class="o">=</span> <span class="mi">4</span><span class="p">,</span> <span class="n">NGHTTP2_SETTINGS_TIMEOUT</span> <span class="o">=</span> <span class="mh">0x04</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * STREAM_CLOSED</span> <span class="cm"> * STREAM_CLOSED</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_STREAM_CLOSED</span> <span class="o">=</span> <span class="mi">5</span><span class="p">,</span> <span class="n">NGHTTP2_STREAM_CLOSED</span> <span class="o">=</span> <span class="mh">0x05</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * FRAME_SIZE_ERROR</span> <span class="cm"> * FRAME_SIZE_ERROR</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_FRAME_SIZE_ERROR</span> <span class="o">=</span> <span class="mi">6</span><span class="p">,</span> <span class="n">NGHTTP2_FRAME_SIZE_ERROR</span> <span class="o">=</span> <span class="mh">0x06</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * REFUSED_STREAM</span> <span class="cm"> * REFUSED_STREAM</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_REFUSED_STREAM</span> <span class="o">=</span> <span class="mi">7</span><span class="p">,</span> <span class="n">NGHTTP2_REFUSED_STREAM</span> <span class="o">=</span> <span class="mh">0x07</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * CANCEL</span> <span class="cm"> * CANCEL</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_CANCEL</span> <span class="o">=</span> <span class="mi">8</span><span class="p">,</span> <span class="n">NGHTTP2_CANCEL</span> <span class="o">=</span> <span class="mh">0x08</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * COMPRESSION_ERROR</span> <span class="cm"> * COMPRESSION_ERROR</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_COMPRESSION_ERROR</span> <span class="o">=</span> <span class="mi">9</span><span class="p">,</span> <span class="n">NGHTTP2_COMPRESSION_ERROR</span> <span class="o">=</span> <span class="mh">0x09</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * CONNECT_ERROR</span> <span class="cm"> * CONNECT_ERROR</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_CONNECT_ERROR</span> <span class="o">=</span> <span class="mi">10</span><span class="p">,</span> <span class="n">NGHTTP2_CONNECT_ERROR</span> <span class="o">=</span> <span class="mh">0x0a</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * ENHANCE_YOUR_CALM</span> <span class="cm"> * ENHANCE_YOUR_CALM</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_ENHANCE_YOUR_CALM</span> <span class="o">=</span> <span class="mi">11</span><span class="p">,</span> <span class="n">NGHTTP2_ENHANCE_YOUR_CALM</span> <span class="o">=</span> <span class="mh">0x0b</span><span class="p">,</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * INADEQUATE_SECURITY</span> <span class="cm"> * INADEQUATE_SECURITY</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_INADEQUATE_SECURITY</span> <span class="o">=</span> <span class="mi">12</span> <span class="n">NGHTTP2_INADEQUATE_SECURITY</span> <span class="o">=</span> <span class="mh">0x0c</span>
<span class="p">}</span> <span class="n">nghttp2_error_code</span><span class="p">;</span> <span class="p">}</span> <span class="n">nghttp2_error_code</span><span class="p">;</span>
<span class="cm">/**</span> <span class="cm">/**</span>
@ -788,11 +784,7 @@
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * Indicates EOF was sensed.</span> <span class="cm"> * Indicates EOF was sensed.</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">NGHTTP2_DATA_FLAG_EOF</span> <span class="o">=</span> <span class="mh">0x01</span><span class="p">,</span> <span class="n">NGHTTP2_DATA_FLAG_EOF</span> <span class="o">=</span> <span class="mh">0x01</span>
<span class="cm">/**</span>
<span class="cm"> * Indicates data was compressed by application.</span>
<span class="cm"> */</span>
<span class="n">NGHTTP2_DATA_FLAG_COMPRESSED</span> <span class="o">=</span> <span class="mh">0x02</span>
<span class="p">}</span> <span class="n">nghttp2_data_flag</span><span class="p">;</span> <span class="p">}</span> <span class="n">nghttp2_data_flag</span><span class="p">;</span>
<span class="cm">/**</span> <span class="cm">/**</span>
@ -805,11 +797,6 @@
<span class="cm"> * them in |buf| and return number of data stored in |buf|. If EOF is</span> <span class="cm"> * them in |buf| and return number of data stored in |buf|. If EOF is</span>
<span class="cm"> * reached, set :enum:`NGHTTP2_DATA_FLAG_EOF` flag in |*data_flags|.</span> <span class="cm"> * reached, set :enum:`NGHTTP2_DATA_FLAG_EOF` flag in |*data_flags|.</span>
<span class="cm"> *</span> <span class="cm"> *</span>
<span class="cm"> * To send compressed data payload without affecting content-length,</span>
<span class="cm"> * set :enum:`NGHTTP2_DATA_FLAG_COMPRESSED` flag in |*data_flags|.</span>
<span class="cm"> * Compression must be done by application prior to fill data in</span>
<span class="cm"> * |buf|.</span>
<span class="cm"> *</span>
<span class="cm"> * If the application wants to postpone DATA frames (e.g.,</span> <span class="cm"> * If the application wants to postpone DATA frames (e.g.,</span>
<span class="cm"> * asynchronous I/O, or reading data blocks for long time), it is</span> <span class="cm"> * asynchronous I/O, or reading data blocks for long time), it is</span>
<span class="cm"> * achieved by returning :enum:`NGHTTP2_ERR_DEFERRED` without reading</span> <span class="cm"> * achieved by returning :enum:`NGHTTP2_ERR_DEFERRED` without reading</span>
@ -1105,7 +1092,7 @@
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * @struct</span> <span class="cm"> * @struct</span>
<span class="cm"> *</span> <span class="cm"> *</span>
<span class="cm"> * The ALTSVC frame. It has following members:</span> <span class="cm"> * The extension frame. It has following members:</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="k">typedef</span> <span class="k">struct</span> <span class="p">{</span> <span class="k">typedef</span> <span class="k">struct</span> <span class="p">{</span>
<span class="cm">/**</span> <span class="cm">/**</span>
@ -1113,6 +1100,25 @@
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">nghttp2_frame_hd</span> <span class="n">hd</span><span class="p">;</span> <span class="n">nghttp2_frame_hd</span> <span class="n">hd</span><span class="p">;</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * The pointer to extension payload. The exact pointer type is</span>
<span class="cm"> * determined by hd.type.</span>
<span class="cm"> *</span>
<span class="cm"> * If hd.type == :enum:`NGHTTP2_EXT_ALTSVC`, it is a pointer to</span>
<span class="cm"> * :type:`nghttp2_ext_altsvc`.</span>
<span class="cm"> *</span>
<span class="cm"> * If hd.type == :enum:`NGHTTP2_EXT_BLOCKED`, it points to ``NULL``,</span>
<span class="cm"> * since BLOCKED extension frame has no payload.</span>
<span class="cm"> */</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">payload</span><span class="p">;</span>
<span class="p">}</span> <span class="n">nghttp2_extension</span><span class="p">;</span>
<span class="cm">/**</span>
<span class="cm"> * @struct</span>
<span class="cm"> *</span>
<span class="cm"> * The ALTSVC extension frame payload. It has following members:</span>
<span class="cm"> */</span>
<span class="k">typedef</span> <span class="k">struct</span> <span class="p">{</span>
<span class="cm">/**</span>
<span class="cm"> * Protocol ID</span> <span class="cm"> * Protocol ID</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="kt">uint8_t</span> <span class="o">*</span><span class="n">protocol_id</span><span class="p">;</span> <span class="kt">uint8_t</span> <span class="o">*</span><span class="n">protocol_id</span><span class="p">;</span>
@ -1144,19 +1150,7 @@
<span class="cm"> * Port</span> <span class="cm"> * Port</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="kt">uint16_t</span> <span class="n">port</span><span class="p">;</span> <span class="kt">uint16_t</span> <span class="n">port</span><span class="p">;</span>
<span class="p">}</span> <span class="n">nghttp2_altsvc</span><span class="p">;</span> <span class="p">}</span> <span class="n">nghttp2_ext_altsvc</span><span class="p">;</span>
<span class="cm">/**</span>
<span class="cm"> * @struct</span>
<span class="cm"> *</span>
<span class="cm"> * The BLOCKED frame. It has following members:</span>
<span class="cm"> */</span>
<span class="k">typedef</span> <span class="k">struct</span> <span class="p">{</span>
<span class="cm">/**</span>
<span class="cm"> * The frame header.</span>
<span class="cm"> */</span>
<span class="n">nghttp2_frame_hd</span> <span class="n">hd</span><span class="p">;</span>
<span class="p">}</span> <span class="n">nghttp2_blocked</span><span class="p">;</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * @union</span> <span class="cm"> * @union</span>
@ -1207,13 +1201,9 @@
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">nghttp2_window_update</span> <span class="n">window_update</span><span class="p">;</span> <span class="n">nghttp2_window_update</span> <span class="n">window_update</span><span class="p">;</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * The ALTSVC frame.</span> <span class="cm"> * The extension frame.</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="n">nghttp2_altsvc</span> <span class="n">altsvc</span><span class="p">;</span> <span class="n">nghttp2_extension</span> <span class="n">ext</span><span class="p">;</span>
<span class="cm">/**</span>
<span class="cm"> * The BLOCKED frame.</span>
<span class="cm"> */</span>
<span class="n">nghttp2_blocked</span> <span class="n">blocked</span><span class="p">;</span>
<span class="p">}</span> <span class="n">nghttp2_frame</span><span class="p">;</span> <span class="p">}</span> <span class="n">nghttp2_frame</span><span class="p">;</span>
<span class="cm">/**</span> <span class="cm">/**</span>
@ -1947,9 +1937,6 @@
<span class="cm"> * invalid,</span> <span class="cm"> * invalid,</span>
<span class="cm"> * :member:`nghttp2_session_callbacks.on_invalid_frame_recv_callback`</span> <span class="cm"> * :member:`nghttp2_session_callbacks.on_invalid_frame_recv_callback`</span>
<span class="cm"> * is invoked.</span> <span class="cm"> * is invoked.</span>
<span class="cm"> * 4. If the received frame type is unknown,</span>
<span class="cm"> * :member:`nghttp2_session_callbacks.on_unknown_frame_recv_callback`</span>
<span class="cm"> * is invoked.</span>
<span class="cm"> *</span> <span class="cm"> *</span>
<span class="cm"> * This function returns 0 if it succeeds, or one of the following</span> <span class="cm"> * This function returns 0 if it succeeds, or one of the following</span>
<span class="cm"> * negative error codes:</span> <span class="cm"> * negative error codes:</span>
@ -2159,13 +2146,13 @@
<span class="cm"> *</span> <span class="cm"> *</span>
<span class="cm"> * Signals the session so that the connection should be terminated.</span> <span class="cm"> * Signals the session so that the connection should be terminated.</span>
<span class="cm"> *</span> <span class="cm"> *</span>
<span class="cm"> * GOAWAY frame with the given |error_code| will be submitted if it</span> <span class="cm"> * The last stream ID is the ID of a stream for which</span>
<span class="cm"> * has not been transmitted. After the transmission, both</span> <span class="cm"> * :type:`nghttp2_on_frame_recv_callback` was called most recently.</span>
<span class="cm"> * `nghttp2_session_want_read()` and `nghttp2_session_want_write()`</span> <span class="cm"> *</span>
<span class="cm"> * return 0. If GOAWAY frame has already transmitted at the time when</span> <span class="cm"> * The |error_code| is the error code of this GOAWAY frame.</span>
<span class="cm"> * this function is invoked, `nghttp2_session_want_read()` and</span> <span class="cm"> *</span>
<span class="cm"> * `nghttp2_session_want_write()` returns 0 immediately after this</span> <span class="cm"> * After the transmission, both `nghttp2_session_want_read()` and</span>
<span class="cm"> * function succeeds.</span> <span class="cm"> * `nghttp2_session_want_write()` return 0.</span>
<span class="cm"> *</span> <span class="cm"> *</span>
<span class="cm"> * This function should be called when the connection should be</span> <span class="cm"> * This function should be called when the connection should be</span>
<span class="cm"> * terminated after sending GOAWAY. If the remaining streams should</span> <span class="cm"> * terminated after sending GOAWAY. If the remaining streams should</span>
@ -2180,10 +2167,31 @@
<span class="kt">int</span> <span class="nf">nghttp2_session_terminate_session</span><span class="p">(</span><span class="n">nghttp2_session</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span> <span class="kt">int</span> <span class="nf">nghttp2_session_terminate_session</span><span class="p">(</span><span class="n">nghttp2_session</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span>
<span class="n">nghttp2_error_code</span> <span class="n">error_code</span><span class="p">);</span> <span class="n">nghttp2_error_code</span> <span class="n">error_code</span><span class="p">);</span>
<span class="cm">/**</span>
<span class="cm"> * @function</span>
<span class="cm"> *</span>
<span class="cm"> * Signals the session so that the connection should be terminated.</span>
<span class="cm"> *</span>
<span class="cm"> * This function behaves like `nghttp2_session_terminate_session()`,</span>
<span class="cm"> * but the last stream ID can be specified by the application for fine</span>
<span class="cm"> * grained control of stream.</span>
<span class="cm"> *</span>
<span class="cm"> * This function returns 0 if it succeeds, or one of the following</span>
<span class="cm"> * negative error codes:</span>
<span class="cm"> *</span>
<span class="cm"> * :enum:`NGHTTP2_ERR_NOMEM`</span>
<span class="cm"> * Out of memory.</span>
<span class="cm"> */</span>
<span class="kt">int</span> <span class="nf">nghttp2_session_terminate_session2</span><span class="p">(</span><span class="n">nghttp2_session</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span>
<span class="kt">int32_t</span> <span class="n">last_stream_id</span><span class="p">,</span>
<span class="n">nghttp2_error_code</span> <span class="n">error_code</span><span class="p">);</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * @function</span> <span class="cm"> * @function</span>
<span class="cm"> *</span> <span class="cm"> *</span>
<span class="cm"> * Returns the value of SETTINGS |id| notified by a remote endpoint.</span> <span class="cm"> * Returns the value of SETTINGS |id| notified by a remote endpoint.</span>
<span class="cm"> * The |id| must be one of values defined in</span>
<span class="cm"> * :enum:`nghttp2_settings_id`.</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="kt">uint32_t</span> <span class="nf">nghttp2_session_get_remote_settings</span><span class="p">(</span><span class="n">nghttp2_session</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="nf">nghttp2_session_get_remote_settings</span><span class="p">(</span><span class="n">nghttp2_session</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span>
<span class="n">nghttp2_settings_id</span> <span class="n">id</span><span class="p">);</span> <span class="n">nghttp2_settings_id</span> <span class="n">id</span><span class="p">);</span>
@ -2395,6 +2403,8 @@
<span class="cm"> *</span> <span class="cm"> *</span>
<span class="cm"> * :enum:`NGHTTP2_ERR_NOMEM`</span> <span class="cm"> * :enum:`NGHTTP2_ERR_NOMEM`</span>
<span class="cm"> * Out of memory.</span> <span class="cm"> * Out of memory.</span>
<span class="cm"> * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`</span>
<span class="cm"> * The |stream_id| is 0.</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="kt">int</span> <span class="nf">nghttp2_submit_response</span><span class="p">(</span><span class="n">nghttp2_session</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span> <span class="kt">int</span> <span class="nf">nghttp2_submit_response</span><span class="p">(</span><span class="n">nghttp2_session</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span>
<span class="kt">int32_t</span> <span class="n">stream_id</span><span class="p">,</span> <span class="kt">int32_t</span> <span class="n">stream_id</span><span class="p">,</span>
@ -2461,6 +2471,8 @@
<span class="cm"> * :enum:`NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE`</span> <span class="cm"> * :enum:`NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE`</span>
<span class="cm"> * No stream ID is available because maximum stream ID was</span> <span class="cm"> * No stream ID is available because maximum stream ID was</span>
<span class="cm"> * reached.</span> <span class="cm"> * reached.</span>
<span class="cm"> * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`</span>
<span class="cm"> * The |stream_id| is 0.</span>
<span class="cm"> *</span> <span class="cm"> *</span>
<span class="cm"> * .. warning::</span> <span class="cm"> * .. warning::</span>
<span class="cm"> *</span> <span class="cm"> *</span>
@ -2496,6 +2508,8 @@
<span class="cm"> * Out of memory.</span> <span class="cm"> * Out of memory.</span>
<span class="cm"> * :enum:`NGHTTP2_ERR_DATA_EXIST`</span> <span class="cm"> * :enum:`NGHTTP2_ERR_DATA_EXIST`</span>
<span class="cm"> * DATA has been already submitted and not fully processed yet.</span> <span class="cm"> * DATA has been already submitted and not fully processed yet.</span>
<span class="cm"> * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`</span>
<span class="cm"> * The |stream_id| is 0.</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="kt">int</span> <span class="nf">nghttp2_submit_data</span><span class="p">(</span><span class="n">nghttp2_session</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">flags</span><span class="p">,</span> <span class="kt">int</span> <span class="nf">nghttp2_submit_data</span><span class="p">(</span><span class="n">nghttp2_session</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">flags</span><span class="p">,</span>
<span class="kt">int32_t</span> <span class="n">stream_id</span><span class="p">,</span> <span class="kt">int32_t</span> <span class="n">stream_id</span><span class="p">,</span>
@ -2527,7 +2541,8 @@
<span class="cm"> * :enum:`NGHTTP2_ERR_NOMEM`</span> <span class="cm"> * :enum:`NGHTTP2_ERR_NOMEM`</span>
<span class="cm"> * Out of memory.</span> <span class="cm"> * Out of memory.</span>
<span class="cm"> * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`</span> <span class="cm"> * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`</span>
<span class="cm"> * The |pri_spec| is NULL; or trying to depend on itself.</span> <span class="cm"> * The |stream_id| is 0; or the |pri_spec| is NULL; or trying to</span>
<span class="cm"> * depend on itself.</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="kt">int</span> <span class="nf">nghttp2_submit_priority</span><span class="p">(</span><span class="n">nghttp2_session</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">flags</span><span class="p">,</span> <span class="kt">int</span> <span class="nf">nghttp2_submit_priority</span><span class="p">(</span><span class="n">nghttp2_session</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">flags</span><span class="p">,</span>
<span class="kt">int32_t</span> <span class="n">stream_id</span><span class="p">,</span> <span class="kt">int32_t</span> <span class="n">stream_id</span><span class="p">,</span>
@ -2547,6 +2562,8 @@
<span class="cm"> *</span> <span class="cm"> *</span>
<span class="cm"> * :enum:`NGHTTP2_ERR_NOMEM`</span> <span class="cm"> * :enum:`NGHTTP2_ERR_NOMEM`</span>
<span class="cm"> * Out of memory.</span> <span class="cm"> * Out of memory.</span>
<span class="cm"> * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`</span>
<span class="cm"> * The |stream_id| is 0.</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="kt">int</span> <span class="nf">nghttp2_submit_rst_stream</span><span class="p">(</span><span class="n">nghttp2_session</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">flags</span><span class="p">,</span> <span class="kt">int</span> <span class="nf">nghttp2_submit_rst_stream</span><span class="p">(</span><span class="n">nghttp2_session</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">flags</span><span class="p">,</span>
<span class="kt">int32_t</span> <span class="n">stream_id</span><span class="p">,</span> <span class="kt">int32_t</span> <span class="n">stream_id</span><span class="p">,</span>
@ -2630,6 +2647,8 @@
<span class="cm"> * :enum:`NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE`</span> <span class="cm"> * :enum:`NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE`</span>
<span class="cm"> * No stream ID is available because maximum stream ID was</span> <span class="cm"> * No stream ID is available because maximum stream ID was</span>
<span class="cm"> * reached.</span> <span class="cm"> * reached.</span>
<span class="cm"> * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`</span>
<span class="cm"> * The |stream_id| is 0.</span>
<span class="cm"> *</span> <span class="cm"> *</span>
<span class="cm"> * .. warning::</span> <span class="cm"> * .. warning::</span>
<span class="cm"> *</span> <span class="cm"> *</span>
@ -2672,7 +2691,8 @@
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * @function</span> <span class="cm"> * @function</span>
<span class="cm"> *</span> <span class="cm"> *</span>
<span class="cm"> * Submits GOAWAY frame with the error code |error_code|.</span> <span class="cm"> * Submits GOAWAY frame with the last stream ID |last_stream_id| and</span>
<span class="cm"> * the error code |error_code|.</span>
<span class="cm"> *</span> <span class="cm"> *</span>
<span class="cm"> * The |flags| is currently ignored and should be</span> <span class="cm"> * The |flags| is currently ignored and should be</span>
<span class="cm"> * :enum:`NGHTTP2_FLAG_NONE`.</span> <span class="cm"> * :enum:`NGHTTP2_FLAG_NONE`.</span>
@ -2684,15 +2704,22 @@
<span class="cm"> * keep this memory after the return of this function. If the</span> <span class="cm"> * keep this memory after the return of this function. If the</span>
<span class="cm"> * |opaque_data_len| is 0, the |opaque_data| could be ``NULL``.</span> <span class="cm"> * |opaque_data_len| is 0, the |opaque_data| could be ``NULL``.</span>
<span class="cm"> *</span> <span class="cm"> *</span>
<span class="cm"> * To shutdown gracefully, first send GOAWAY with ``last_stream_id =</span>
<span class="cm"> * (1u &lt;&lt; 31) - 1``. After 1 RTT, call either</span>
<span class="cm"> * `nghttp2_submit_goaway()`, `nghttp2_session_terminate_session()` or</span>
<span class="cm"> * `nghttp2_session_terminate_session2()`. The latter 2 will close</span>
<span class="cm"> * HTTP/2 session immediately after transmission of the frame.</span>
<span class="cm"> *</span>
<span class="cm"> * This function returns 0 if it succeeds, or one of the following</span> <span class="cm"> * This function returns 0 if it succeeds, or one of the following</span>
<span class="cm"> * negative error codes:</span> <span class="cm"> * negative error codes:</span>
<span class="cm"> *</span> <span class="cm"> *</span>
<span class="cm"> * :enum:`NGHTTP2_ERR_NOMEM`</span> <span class="cm"> * :enum:`NGHTTP2_ERR_NOMEM`</span>
<span class="cm"> * Out of memory.</span> <span class="cm"> * Out of memory.</span>
<span class="cm"> * NGHTTP2_ERR_INVALID_ARGUMENT</span> <span class="cm"> * :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`</span>
<span class="cm"> * The |opaque_data_len| is too large.</span> <span class="cm"> * The |opaque_data_len| is too large.</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="kt">int</span> <span class="nf">nghttp2_submit_goaway</span><span class="p">(</span><span class="n">nghttp2_session</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">flags</span><span class="p">,</span> <span class="kt">int</span> <span class="nf">nghttp2_submit_goaway</span><span class="p">(</span><span class="n">nghttp2_session</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">flags</span><span class="p">,</span>
<span class="kt">int32_t</span> <span class="n">last_stream_id</span><span class="p">,</span>
<span class="n">nghttp2_error_code</span> <span class="n">error_code</span><span class="p">,</span> <span class="n">nghttp2_error_code</span> <span class="n">error_code</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">uint8_t</span> <span class="o">*</span><span class="n">opaque_data</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">opaque_data_len</span><span class="p">);</span> <span class="k">const</span> <span class="kt">uint8_t</span> <span class="o">*</span><span class="n">opaque_data</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">opaque_data_len</span><span class="p">);</span>
@ -3202,7 +3229,7 @@
<script type="text/javascript"> <script type="text/javascript">
var DOCUMENTATION_OPTIONS = { var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./', URL_ROOT:'./',
VERSION:'0.4.1', VERSION:'0.4.2-DEV',
COLLAPSE_INDEX:false, COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html', FILE_SUFFIX:'.html',
HAS_SOURCE: false HAS_SOURCE: false

View File

@ -7,7 +7,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>nghttp2ver.h &mdash; nghttp2 0.4.1 documentation</title> <title>nghttp2ver.h &mdash; nghttp2 0.4.2-DEV documentation</title>
@ -28,7 +28,7 @@
<link rel="top" title="nghttp2 0.4.1 documentation" href="index.html"/> <link rel="top" title="nghttp2 0.4.2-DEV documentation" href="index.html"/>
<link rel="prev" title="nghttp2.h" href="nghttp2.h.html"/> <link rel="prev" title="nghttp2.h" href="nghttp2.h.html"/>
@ -171,7 +171,7 @@
<span class="cm"> * @macro</span> <span class="cm"> * @macro</span>
<span class="cm"> * Version number of the nghttp2 library release</span> <span class="cm"> * Version number of the nghttp2 library release</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="cp">#define NGHTTP2_VERSION &quot;0.4.1&quot;</span> <span class="cp">#define NGHTTP2_VERSION &quot;0.4.2-DEV&quot;</span>
<span class="cm">/**</span> <span class="cm">/**</span>
<span class="cm"> * @macro</span> <span class="cm"> * @macro</span>
@ -179,7 +179,7 @@
<span class="cm"> * release. This is a 24 bit number with 8 bits for major number, 8 bits</span> <span class="cm"> * release. This is a 24 bit number with 8 bits for major number, 8 bits</span>
<span class="cm"> * for minor and 8 bits for patch. Version 1.2.3 becomes 0x010203.</span> <span class="cm"> * for minor and 8 bits for patch. Version 1.2.3 becomes 0x010203.</span>
<span class="cm"> */</span> <span class="cm"> */</span>
<span class="cp">#define NGHTTP2_VERSION_NUM 0x000401</span> <span class="cp">#define NGHTTP2_VERSION_NUM 0x000402</span>
<span class="cp">#endif </span><span class="cm">/* NGHTTP2VER_H */</span><span class="cp"></span> <span class="cp">#endif </span><span class="cm">/* NGHTTP2VER_H */</span><span class="cp"></span>
</pre></div> </pre></div>
@ -222,7 +222,7 @@
<script type="text/javascript"> <script type="text/javascript">
var DOCUMENTATION_OPTIONS = { var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./', URL_ROOT:'./',
VERSION:'0.4.1', VERSION:'0.4.2-DEV',
COLLAPSE_INDEX:false, COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html', FILE_SUFFIX:'.html',
HAS_SOURCE: false HAS_SOURCE: false

View File

@ -7,7 +7,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>nghttpx - HOW-TO &mdash; nghttp2 0.4.1 documentation</title> <title>nghttpx - HOW-TO &mdash; nghttp2 0.4.2-DEV documentation</title>
@ -28,7 +28,7 @@
<link rel="top" title="nghttp2 0.4.1 documentation" href="index.html"/> <link rel="top" title="nghttp2 0.4.2-DEV documentation" href="index.html"/>
<link rel="next" title="API Reference" href="apiref.html"/> <link rel="next" title="API Reference" href="apiref.html"/>
<link rel="prev" title="Tutorial: HTTP/2 server" href="tutorial-server.html"/> <link rel="prev" title="Tutorial: HTTP/2 server" href="tutorial-server.html"/>
@ -378,7 +378,7 @@ do with HTTP/2 flow control.</p>
<script type="text/javascript"> <script type="text/javascript">
var DOCUMENTATION_OPTIONS = { var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./', URL_ROOT:'./',
VERSION:'0.4.1', VERSION:'0.4.2-DEV',
COLLAPSE_INDEX:false, COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html', FILE_SUFFIX:'.html',
HAS_SOURCE: false HAS_SOURCE: false

Binary file not shown.

View File

@ -7,7 +7,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>nghttp2 - HTTP/2 C Library &mdash; nghttp2 0.4.1 documentation</title> <title>nghttp2 - HTTP/2 C Library &mdash; nghttp2 0.4.2-DEV documentation</title>
@ -28,7 +28,7 @@
<link rel="top" title="nghttp2 0.4.1 documentation" href="index.html"/> <link rel="top" title="nghttp2 0.4.2-DEV documentation" href="index.html"/>
<link rel="next" title="Tutorial: HTTP/2 client" href="tutorial-client.html"/> <link rel="next" title="Tutorial: HTTP/2 client" href="tutorial-client.html"/>
<link rel="prev" title="nghttp2 - HTTP/2 C Library" href="index.html"/> <link rel="prev" title="nghttp2 - HTTP/2 C Library" href="index.html"/>
@ -141,37 +141,53 @@
<div class="section" id="nghttp2-http-2-c-library"> <div class="section" id="nghttp2-http-2-c-library">
<h1>nghttp2 - HTTP/2 C Library<a class="headerlink" href="#nghttp2-http-2-c-library" title="Permalink to this headline"></a></h1> <h1>nghttp2 - HTTP/2 C Library<a class="headerlink" href="#nghttp2-http-2-c-library" title="Permalink to this headline"></a></h1>
<p>This is an experimental implementation of Hypertext Transfer Protocol <p>This is an implementation of Hypertext Transfer Protocol version 2
version 2.</p> in C.</p>
<p>The framing layer of HTTP/2 is implemented as form of reusable C
library. On top of that, we have implemented HTTP/2 client, server
and proxy. Also we have developed load test/benchmarking tool for
HTTP/2 and SPDY.</p>
<p>HPACK encoding and decoding are available as public API.</p>
<p>We didn&#8217;t cover everything, but we have Python binding of this libary.</p>
<div class="section" id="development-status"> <div class="section" id="development-status">
<h2>Development Status<a class="headerlink" href="#development-status" title="Permalink to this headline"></a></h2> <h2>Development Status<a class="headerlink" href="#development-status" title="Permalink to this headline"></a></h2>
<p>We started to implement h2-12 <p>We started to implement h2-13
(<a class="reference external" href="http://tools.ietf.org/html/draft-ietf-httpbis-http2-12">http://tools.ietf.org/html/draft-ietf-httpbis-http2-12</a>) and the (<a class="reference external" href="http://tools.ietf.org/html/draft-ietf-httpbis-http2-13">http://tools.ietf.org/html/draft-ietf-httpbis-http2-13</a>) and the
header compression header compression
(<a class="reference external" href="http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-07">http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-07</a>).</p> (<a class="reference external" href="http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-08">http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-08</a>).</p>
<p>The nghttp2 code base was forked from spdylay project.</p> <p>The nghttp2 code base was forked from spdylay project.</p>
<table border="1" class="docutils"> <table border="1" class="docutils">
<colgroup> <colgroup>
<col width="84%" /> <col width="79%" />
<col width="16%" /> <col width="21%" />
</colgroup> </colgroup>
<thead valign="bottom"> <thead valign="bottom">
<tr class="row-odd"><th class="head">Features</th> <tr class="row-odd"><th class="head">HTTP/2 Features</th>
<th class="head">h2-12</th> <th class="head">Support</th>
</tr> </tr>
</thead> </thead>
<tbody valign="top"> <tbody valign="top">
<tr class="row-even"><td>Dependency based priority</td> <tr class="row-even"><td>Core frames handling</td>
<td>Done</td> <td>Yes</td>
</tr> </tr>
<tr class="row-odd"><td>BLOCKED frame</td> <tr class="row-odd"><td>Dependency Tree</td>
<td>Done</td> <td>Yes</td>
</tr> </tr>
<tr class="row-even"><td>COMPRESSED DATA</td> <tr class="row-even"><td>Large header (CONTINUATION)</td>
<td>Done</td> <td>Yes</td>
</tr>
<tr class="row-odd"><td>BLOCKED extension</td>
<td>Yes *1</td>
</tr>
<tr class="row-even"><td>ALTSVC extension</td>
<td>Yes *2</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<ul class="simple">
<li>*1 As described in draft-12.</li>
<li>*2 As described in draft-12, but reserved byte was removed.</li>
</ul>
</div> </div>
<div class="section" id="public-test-server"> <div class="section" id="public-test-server">
<h2>Public Test Server<a class="headerlink" href="#public-test-server" title="Permalink to this headline"></a></h2> <h2>Public Test Server<a class="headerlink" href="#public-test-server" title="Permalink to this headline"></a></h2>
@ -179,11 +195,13 @@ header compression
implementation.</p> implementation.</p>
<ul> <ul>
<li><p class="first"><a class="reference external" href="https://nghttp2.org/">https://nghttp2.org/</a> (TLS + NPN)</p> <li><p class="first"><a class="reference external" href="https://nghttp2.org/">https://nghttp2.org/</a> (TLS + NPN)</p>
<p>NPN offer <tt class="docutils literal"><span class="pre">h2-12</span></tt>, <tt class="docutils literal"><span class="pre">spdy/3.1</span></tt> and <tt class="docutils literal"><span class="pre">http/1.1</span></tt>. <p>NPN offer <tt class="docutils literal"><span class="pre">h2-13</span></tt>, <tt class="docutils literal"><span class="pre">spdy/3.1</span></tt> and <tt class="docutils literal"><span class="pre">http/1.1</span></tt>.
ALPN is currently disabled.</p> ALPN is currently disabled.</p>
<p>This endpoint requires TLSv1.2 and DHE or EDCHE with GCM cipher
suite for HTTP/2 connection.</p>
</li> </li>
<li><p class="first"><a class="reference external" href="http://nghttp2.org/">http://nghttp2.org/</a> (Upgrade / Direct)</p> <li><p class="first"><a class="reference external" href="http://nghttp2.org/">http://nghttp2.org/</a> (Upgrade / Direct)</p>
<p><tt class="docutils literal"><span class="pre">h2c-12</span></tt> and <tt class="docutils literal"><span class="pre">http/1.1</span></tt>. We configured this server to send <p><tt class="docutils literal"><span class="pre">h2c-13</span></tt> and <tt class="docutils literal"><span class="pre">http/1.1</span></tt>. We configured this server to send
ALTSVC frame or Alt-Svc header field to announce that alternative ALTSVC frame or Alt-Svc header field to announce that alternative
service is available at port 443.</p> service is available at port 443.</p>
</li> </li>
@ -303,10 +321,10 @@ with prior knowledge, HTTP Upgrade and NPN/ALPN TLS extension.</p>
output from <tt class="docutils literal"><span class="pre">nghttp</span></tt> client:</p> output from <tt class="docutils literal"><span class="pre">nghttp</span></tt> client:</p>
<div class="highlight-c"><div class="highlight"><pre>$ src/nghttp -nv https://nghttp2.org <div class="highlight-c"><div class="highlight"><pre>$ src/nghttp -nv https://nghttp2.org
[ 0.033][NPN] server offers: [ 0.033][NPN] server offers:
* h2-12 * h2-13
* spdy/3.1 * spdy/3.1
* http/1.1 * http/1.1
The negotiated protocol: h2-12 The negotiated protocol: h2-13
[ 0.068] send SETTINGS frame &lt;length=15, flags=0x00, stream_id=0&gt; [ 0.068] send SETTINGS frame &lt;length=15, flags=0x00, stream_id=0&gt;
(niv=3) (niv=3)
[SETTINGS_MAX_CONCURRENT_STREAMS(3):100] [SETTINGS_MAX_CONCURRENT_STREAMS(3):100]
@ -375,7 +393,7 @@ The negotiated protocol: h2-12
GET / HTTP/1.1 GET / HTTP/1.1
Host: nghttp2.org Host: nghttp2.org
Connection: Upgrade, HTTP2-Settings Connection: Upgrade, HTTP2-Settings
Upgrade: h2c-12 Upgrade: h2c-13
HTTP2-Settings: AwAAAGQEAAD__wUAAAAB HTTP2-Settings: AwAAAGQEAAD__wUAAAAB
Accept: */* Accept: */*
User-Agent: nghttp2/0.4.0-DEV User-Agent: nghttp2/0.4.0-DEV
@ -384,7 +402,7 @@ User-Agent: nghttp2/0.4.0-DEV
[ 0.024] HTTP Upgrade response [ 0.024] HTTP Upgrade response
HTTP/1.1 101 Switching Protocols HTTP/1.1 101 Switching Protocols
Connection: Upgrade Connection: Upgrade
Upgrade: h2c-12 Upgrade: h2c-13
[ 0.024] HTTP Upgrade success [ 0.024] HTTP Upgrade success
@ -398,7 +416,7 @@ Upgrade: h2c-12
[SETTINGS_MAX_CONCURRENT_STREAMS(3):100] [SETTINGS_MAX_CONCURRENT_STREAMS(3):100]
[SETTINGS_INITIAL_WINDOW_SIZE(4):65535] [SETTINGS_INITIAL_WINDOW_SIZE(4):65535]
[ 0.024] recv ALTSVC frame &lt;length=43, flags=0x00, stream_id=0&gt; [ 0.024] recv ALTSVC frame &lt;length=43, flags=0x00, stream_id=0&gt;
(max-age=86400, port=443, protocol_id=h2-12, host=nghttp2.org, origin=http://nghttp2.org) (max-age=86400, port=443, protocol_id=h2-13, host=nghttp2.org, origin=http://nghttp2.org)
[ 0.024] send SETTINGS frame &lt;length=0, flags=0x01, stream_id=0&gt; [ 0.024] send SETTINGS frame &lt;length=0, flags=0x01, stream_id=0&gt;
; ACK ; ACK
(niv=0) (niv=0)
@ -503,8 +521,8 @@ IPv6: listen on port 8080
</div> </div>
<div class="section" id="nghttpx-proxy"> <div class="section" id="nghttpx-proxy">
<h3>nghttpx - proxy<a class="headerlink" href="#nghttpx-proxy" title="Permalink to this headline"></a></h3> <h3>nghttpx - proxy<a class="headerlink" href="#nghttpx-proxy" title="Permalink to this headline"></a></h3>
<p><tt class="docutils literal"><span class="pre">nghttpx</span></tt> is a multi-threaded reverse proxy for <p><tt class="docutils literal"><span class="pre">nghttpx</span></tt> is a multi-threaded reverse proxy for <tt class="docutils literal"><span class="pre">h2-13</span></tt>, SPDY and
<tt class="docutils literal"><span class="pre">h2-12</span></tt>, SPDY and HTTP/1.1. It has several operation modes:</p> HTTP/1.1 and powers nghttp2.org site. It has several operation modes:</p>
<table border="1" class="docutils"> <table border="1" class="docutils">
<colgroup> <colgroup>
<col width="25%" /> <col width="25%" />
@ -548,7 +566,7 @@ IPv6: listen on port 8080
</tbody> </tbody>
</table> </table>
<p>The interesting mode at the moment is the default mode. It works like <p>The interesting mode at the moment is the default mode. It works like
a reverse proxy and listens for <tt class="docutils literal"><span class="pre">h2-12</span></tt>, SPDY and HTTP/1.1 and can a reverse proxy and listens for <tt class="docutils literal"><span class="pre">h2-13</span></tt>, SPDY and HTTP/1.1 and can
be deployed SSL/TLS terminator for existing web server.</p> be deployed SSL/TLS terminator for existing web server.</p>
<p>The default mode, <tt class="docutils literal"><span class="pre">--http2-proxy</span></tt> and <tt class="docutils literal"><span class="pre">--http2-bridge</span></tt> modes use <p>The default mode, <tt class="docutils literal"><span class="pre">--http2-proxy</span></tt> and <tt class="docutils literal"><span class="pre">--http2-bridge</span></tt> modes use
SSL/TLS in the frontend connection by default. To disable SSL/TLS, SSL/TLS in the frontend connection by default. To disable SSL/TLS,
@ -1203,7 +1221,7 @@ BaseRequestHandler usage:</p>
<script type="text/javascript"> <script type="text/javascript">
var DOCUMENTATION_OPTIONS = { var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./', URL_ROOT:'./',
VERSION:'0.4.1', VERSION:'0.4.2-DEV',
COLLAPSE_INDEX:false, COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html', FILE_SUFFIX:'.html',
HAS_SOURCE: false HAS_SOURCE: false

View File

@ -7,7 +7,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Python Module Index &mdash; nghttp2 0.4.1 documentation</title> <title>Python Module Index &mdash; nghttp2 0.4.2-DEV documentation</title>
@ -28,7 +28,7 @@
<link rel="top" title="nghttp2 0.4.1 documentation" href="index.html"/> <link rel="top" title="nghttp2 0.4.2-DEV documentation" href="index.html"/>
<script type="text/javascript"> <script type="text/javascript">
@ -191,7 +191,7 @@
<script type="text/javascript"> <script type="text/javascript">
var DOCUMENTATION_OPTIONS = { var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./', URL_ROOT:'./',
VERSION:'0.4.1', VERSION:'0.4.2-DEV',
COLLAPSE_INDEX:false, COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html', FILE_SUFFIX:'.html',
HAS_SOURCE: false HAS_SOURCE: false

View File

@ -7,7 +7,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Python API Reference &mdash; nghttp2 0.4.1 documentation</title> <title>Python API Reference &mdash; nghttp2 0.4.2-DEV documentation</title>
@ -28,7 +28,7 @@
<link rel="top" title="nghttp2 0.4.1 documentation" href="index.html"/> <link rel="top" title="nghttp2 0.4.2-DEV documentation" href="index.html"/>
<link rel="next" title="nghttp2.h" href="nghttp2.h.html"/> <link rel="next" title="nghttp2.h" href="nghttp2.h.html"/>
<link rel="prev" title="API Reference" href="apiref.html"/> <link rel="prev" title="API Reference" href="apiref.html"/>
@ -518,7 +518,7 @@ encoded using UTF-8.</p>
<script type="text/javascript"> <script type="text/javascript">
var DOCUMENTATION_OPTIONS = { var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./', URL_ROOT:'./',
VERSION:'0.4.1', VERSION:'0.4.2-DEV',
COLLAPSE_INDEX:false, COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html', FILE_SUFFIX:'.html',
HAS_SOURCE: false HAS_SOURCE: false

View File

@ -7,7 +7,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Search &mdash; nghttp2 0.4.1 documentation</title> <title>Search &mdash; nghttp2 0.4.2-DEV documentation</title>
@ -28,7 +28,7 @@
<link rel="top" title="nghttp2 0.4.1 documentation" href="index.html"/> <link rel="top" title="nghttp2 0.4.2-DEV documentation" href="index.html"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
@ -179,7 +179,7 @@
<script type="text/javascript"> <script type="text/javascript">
var DOCUMENTATION_OPTIONS = { var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./', URL_ROOT:'./',
VERSION:'0.4.1', VERSION:'0.4.2-DEV',
COLLAPSE_INDEX:false, COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html', FILE_SUFFIX:'.html',
HAS_SOURCE: false HAS_SOURCE: false

File diff suppressed because one or more lines are too long

View File

@ -7,7 +7,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tutorial: HTTP/2 client &mdash; nghttp2 0.4.1 documentation</title> <title>Tutorial: HTTP/2 client &mdash; nghttp2 0.4.2-DEV documentation</title>
@ -28,7 +28,7 @@
<link rel="top" title="nghttp2 0.4.1 documentation" href="index.html"/> <link rel="top" title="nghttp2 0.4.2-DEV documentation" href="index.html"/>
<link rel="next" title="Tutorial: HTTP/2 server" href="tutorial-server.html"/> <link rel="next" title="Tutorial: HTTP/2 server" href="tutorial-server.html"/>
<link rel="prev" title="nghttp2 - HTTP/2 C Library" href="package_README.html"/> <link rel="prev" title="nghttp2 - HTTP/2 C Library" href="package_README.html"/>
@ -380,17 +380,22 @@ data is available to read in the bufferevent input buffer:</p>
<div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">readcb</span><span class="p">(</span><span class="k">struct</span> <span class="n">bufferevent</span> <span class="o">*</span><span class="n">bev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">ptr</span><span class="p">)</span> <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">readcb</span><span class="p">(</span><span class="k">struct</span> <span class="n">bufferevent</span> <span class="o">*</span><span class="n">bev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">ptr</span><span class="p">)</span>
<span class="p">{</span> <span class="p">{</span>
<span class="n">http2_session_data</span> <span class="o">*</span><span class="n">session_data</span> <span class="o">=</span> <span class="p">(</span><span class="n">http2_session_data</span><span class="o">*</span><span class="p">)</span><span class="n">ptr</span><span class="p">;</span> <span class="n">http2_session_data</span> <span class="o">*</span><span class="n">session_data</span> <span class="o">=</span> <span class="p">(</span><span class="n">http2_session_data</span><span class="o">*</span><span class="p">)</span><span class="n">ptr</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">rv</span><span class="p">;</span> <span class="kt">ssize_t</span> <span class="n">readlen</span><span class="p">;</span>
<span class="k">struct</span> <span class="n">evbuffer</span> <span class="o">*</span><span class="n">input</span> <span class="o">=</span> <span class="n">bufferevent_get_input</span><span class="p">(</span><span class="n">bev</span><span class="p">);</span> <span class="k">struct</span> <span class="n">evbuffer</span> <span class="o">*</span><span class="n">input</span> <span class="o">=</span> <span class="n">bufferevent_get_input</span><span class="p">(</span><span class="n">bev</span><span class="p">);</span>
<span class="kt">size_t</span> <span class="n">datalen</span> <span class="o">=</span> <span class="n">evbuffer_get_length</span><span class="p">(</span><span class="n">input</span><span class="p">);</span> <span class="kt">size_t</span> <span class="n">datalen</span> <span class="o">=</span> <span class="n">evbuffer_get_length</span><span class="p">(</span><span class="n">input</span><span class="p">);</span>
<span class="kt">unsigned</span> <span class="kt">char</span> <span class="o">*</span><span class="n">data</span> <span class="o">=</span> <span class="n">evbuffer_pullup</span><span class="p">(</span><span class="n">input</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">);</span> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="o">*</span><span class="n">data</span> <span class="o">=</span> <span class="n">evbuffer_pullup</span><span class="p">(</span><span class="n">input</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">);</span>
<span class="n">rv</span> <span class="o">=</span> <span class="n">nghttp2_session_mem_recv</span><span class="p">(</span><span class="n">session_data</span><span class="o">-&gt;</span><span class="n">session</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">datalen</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">rv</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="n">readlen</span> <span class="o">=</span> <span class="n">nghttp2_session_mem_recv</span><span class="p">(</span><span class="n">session_data</span><span class="o">-&gt;</span><span class="n">session</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">datalen</span><span class="p">);</span>
<span class="n">warnx</span><span class="p">(</span><span class="s">&quot;Fatal error: %s&quot;</span><span class="p">,</span> <span class="n">nghttp2_strerror</span><span class="p">(</span><span class="n">rv</span><span class="p">));</span> <span class="k">if</span><span class="p">(</span><span class="n">readlen</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">warnx</span><span class="p">(</span><span class="s">&quot;Fatal error: %s&quot;</span><span class="p">,</span> <span class="n">nghttp2_strerror</span><span class="p">((</span><span class="kt">int</span><span class="p">)</span><span class="n">readlen</span><span class="p">));</span>
<span class="n">delete_http2_session_data</span><span class="p">(</span><span class="n">session_data</span><span class="p">);</span>
<span class="k">return</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">if</span><span class="p">(</span><span class="n">evbuffer_drain</span><span class="p">(</span><span class="n">input</span><span class="p">,</span> <span class="n">readlen</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">warnx</span><span class="p">(</span><span class="s">&quot;Fatal error: evbuffer_drain failed&quot;</span><span class="p">);</span>
<span class="n">delete_http2_session_data</span><span class="p">(</span><span class="n">session_data</span><span class="p">);</span> <span class="n">delete_http2_session_data</span><span class="p">(</span><span class="n">session_data</span><span class="p">);</span>
<span class="k">return</span><span class="p">;</span> <span class="k">return</span><span class="p">;</span>
<span class="p">}</span> <span class="p">}</span>
<span class="n">evbuffer_drain</span><span class="p">(</span><span class="n">input</span><span class="p">,</span> <span class="n">rv</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">session_send</span><span class="p">(</span><span class="n">session_data</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span><span class="p">(</span><span class="n">session_send</span><span class="p">(</span><span class="n">session_data</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">delete_http2_session_data</span><span class="p">(</span><span class="n">session_data</span><span class="p">);</span> <span class="n">delete_http2_session_data</span><span class="p">(</span><span class="n">session_data</span><span class="p">);</span>
<span class="k">return</span><span class="p">;</span> <span class="k">return</span><span class="p">;</span>
@ -988,17 +993,22 @@ here.</p>
<span class="k">static</span> <span class="kt">void</span> <span class="nf">readcb</span><span class="p">(</span><span class="k">struct</span> <span class="n">bufferevent</span> <span class="o">*</span><span class="n">bev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">ptr</span><span class="p">)</span> <span class="k">static</span> <span class="kt">void</span> <span class="nf">readcb</span><span class="p">(</span><span class="k">struct</span> <span class="n">bufferevent</span> <span class="o">*</span><span class="n">bev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">ptr</span><span class="p">)</span>
<span class="p">{</span> <span class="p">{</span>
<span class="n">http2_session_data</span> <span class="o">*</span><span class="n">session_data</span> <span class="o">=</span> <span class="p">(</span><span class="n">http2_session_data</span><span class="o">*</span><span class="p">)</span><span class="n">ptr</span><span class="p">;</span> <span class="n">http2_session_data</span> <span class="o">*</span><span class="n">session_data</span> <span class="o">=</span> <span class="p">(</span><span class="n">http2_session_data</span><span class="o">*</span><span class="p">)</span><span class="n">ptr</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">rv</span><span class="p">;</span> <span class="kt">ssize_t</span> <span class="n">readlen</span><span class="p">;</span>
<span class="k">struct</span> <span class="n">evbuffer</span> <span class="o">*</span><span class="n">input</span> <span class="o">=</span> <span class="n">bufferevent_get_input</span><span class="p">(</span><span class="n">bev</span><span class="p">);</span> <span class="k">struct</span> <span class="n">evbuffer</span> <span class="o">*</span><span class="n">input</span> <span class="o">=</span> <span class="n">bufferevent_get_input</span><span class="p">(</span><span class="n">bev</span><span class="p">);</span>
<span class="kt">size_t</span> <span class="n">datalen</span> <span class="o">=</span> <span class="n">evbuffer_get_length</span><span class="p">(</span><span class="n">input</span><span class="p">);</span> <span class="kt">size_t</span> <span class="n">datalen</span> <span class="o">=</span> <span class="n">evbuffer_get_length</span><span class="p">(</span><span class="n">input</span><span class="p">);</span>
<span class="kt">unsigned</span> <span class="kt">char</span> <span class="o">*</span><span class="n">data</span> <span class="o">=</span> <span class="n">evbuffer_pullup</span><span class="p">(</span><span class="n">input</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">);</span> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="o">*</span><span class="n">data</span> <span class="o">=</span> <span class="n">evbuffer_pullup</span><span class="p">(</span><span class="n">input</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">);</span>
<span class="n">rv</span> <span class="o">=</span> <span class="n">nghttp2_session_mem_recv</span><span class="p">(</span><span class="n">session_data</span><span class="o">-&gt;</span><span class="n">session</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">datalen</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">rv</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="n">readlen</span> <span class="o">=</span> <span class="n">nghttp2_session_mem_recv</span><span class="p">(</span><span class="n">session_data</span><span class="o">-&gt;</span><span class="n">session</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">datalen</span><span class="p">);</span>
<span class="n">warnx</span><span class="p">(</span><span class="s">&quot;Fatal error: %s&quot;</span><span class="p">,</span> <span class="n">nghttp2_strerror</span><span class="p">(</span><span class="n">rv</span><span class="p">));</span> <span class="k">if</span><span class="p">(</span><span class="n">readlen</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">warnx</span><span class="p">(</span><span class="s">&quot;Fatal error: %s&quot;</span><span class="p">,</span> <span class="n">nghttp2_strerror</span><span class="p">((</span><span class="kt">int</span><span class="p">)</span><span class="n">readlen</span><span class="p">));</span>
<span class="n">delete_http2_session_data</span><span class="p">(</span><span class="n">session_data</span><span class="p">);</span>
<span class="k">return</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">if</span><span class="p">(</span><span class="n">evbuffer_drain</span><span class="p">(</span><span class="n">input</span><span class="p">,</span> <span class="n">readlen</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">warnx</span><span class="p">(</span><span class="s">&quot;Fatal error: evbuffer_drain failed&quot;</span><span class="p">);</span>
<span class="n">delete_http2_session_data</span><span class="p">(</span><span class="n">session_data</span><span class="p">);</span> <span class="n">delete_http2_session_data</span><span class="p">(</span><span class="n">session_data</span><span class="p">);</span>
<span class="k">return</span><span class="p">;</span> <span class="k">return</span><span class="p">;</span>
<span class="p">}</span> <span class="p">}</span>
<span class="n">evbuffer_drain</span><span class="p">(</span><span class="n">input</span><span class="p">,</span> <span class="n">rv</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">session_send</span><span class="p">(</span><span class="n">session_data</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span><span class="p">(</span><span class="n">session_send</span><span class="p">(</span><span class="n">session_data</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">delete_http2_session_data</span><span class="p">(</span><span class="n">session_data</span><span class="p">);</span> <span class="n">delete_http2_session_data</span><span class="p">(</span><span class="n">session_data</span><span class="p">);</span>
<span class="k">return</span><span class="p">;</span> <span class="k">return</span><span class="p">;</span>
@ -1178,7 +1188,7 @@ here.</p>
<script type="text/javascript"> <script type="text/javascript">
var DOCUMENTATION_OPTIONS = { var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./', URL_ROOT:'./',
VERSION:'0.4.1', VERSION:'0.4.2-DEV',
COLLAPSE_INDEX:false, COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html', FILE_SUFFIX:'.html',
HAS_SOURCE: false HAS_SOURCE: false

View File

@ -7,7 +7,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tutorial: HTTP/2 server &mdash; nghttp2 0.4.1 documentation</title> <title>Tutorial: HTTP/2 server &mdash; nghttp2 0.4.2-DEV documentation</title>
@ -28,7 +28,7 @@
<link rel="top" title="nghttp2 0.4.1 documentation" href="index.html"/> <link rel="top" title="nghttp2 0.4.2-DEV documentation" href="index.html"/>
<link rel="next" title="nghttpx - HOW-TO" href="nghttpx-howto.html"/> <link rel="next" title="nghttpx - HOW-TO" href="nghttpx-howto.html"/>
<link rel="prev" title="Tutorial: HTTP/2 client" href="tutorial-client.html"/> <link rel="prev" title="Tutorial: HTTP/2 client" href="tutorial-client.html"/>
@ -171,11 +171,10 @@ life time:</p>
<span class="kt">void</span> <span class="o">*</span><span class="n">arg</span><span class="p">)</span> <span class="kt">void</span> <span class="o">*</span><span class="n">arg</span><span class="p">)</span>
<span class="p">{</span> <span class="p">{</span>
<span class="o">*</span><span class="n">data</span> <span class="o">=</span> <span class="n">next_proto_list</span><span class="p">;</span> <span class="o">*</span><span class="n">data</span> <span class="o">=</span> <span class="n">next_proto_list</span><span class="p">;</span>
<span class="o">*</span><span class="n">len</span> <span class="o">=</span> <span class="n">next_proto_list_len</span><span class="p">;</span> <span class="o">*</span><span class="n">len</span> <span class="o">=</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span><span class="p">)</span><span class="n">next_proto_list_len</span><span class="p">;</span>
<span class="k">return</span> <span class="n">SSL_TLSEXT_ERR_OK</span><span class="p">;</span> <span class="k">return</span> <span class="n">SSL_TLSEXT_ERR_OK</span><span class="p">;</span>
<span class="p">}</span> <span class="p">}</span>
<span class="k">static</span> <span class="n">SSL_CTX</span><span class="o">*</span> <span class="nf">create_ssl_ctx</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">key_file</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">cert_file</span><span class="p">)</span> <span class="k">static</span> <span class="n">SSL_CTX</span><span class="o">*</span> <span class="nf">create_ssl_ctx</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">key_file</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">cert_file</span><span class="p">)</span>
<span class="p">{</span> <span class="p">{</span>
<span class="n">SSL_CTX</span> <span class="o">*</span><span class="n">ssl_ctx</span><span class="p">;</span> <span class="n">SSL_CTX</span> <span class="o">*</span><span class="n">ssl_ctx</span><span class="p">;</span>
@ -417,16 +416,20 @@ functions for these pending data. To process received data, we call
<tt class="docutils literal"><span class="pre">session_recv()</span></tt> function:</p> <tt class="docutils literal"><span class="pre">session_recv()</span></tt> function:</p>
<div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">int</span> <span class="nf">session_recv</span><span class="p">(</span><span class="n">http2_session_data</span> <span class="o">*</span><span class="n">session_data</span><span class="p">)</span> <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">int</span> <span class="nf">session_recv</span><span class="p">(</span><span class="n">http2_session_data</span> <span class="o">*</span><span class="n">session_data</span><span class="p">)</span>
<span class="p">{</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">rv</span><span class="p">;</span> <span class="kt">ssize_t</span> <span class="n">readlen</span><span class="p">;</span>
<span class="k">struct</span> <span class="n">evbuffer</span> <span class="o">*</span><span class="n">input</span> <span class="o">=</span> <span class="n">bufferevent_get_input</span><span class="p">(</span><span class="n">session_data</span><span class="o">-&gt;</span><span class="n">bev</span><span class="p">);</span> <span class="k">struct</span> <span class="n">evbuffer</span> <span class="o">*</span><span class="n">input</span> <span class="o">=</span> <span class="n">bufferevent_get_input</span><span class="p">(</span><span class="n">session_data</span><span class="o">-&gt;</span><span class="n">bev</span><span class="p">);</span>
<span class="kt">size_t</span> <span class="n">datalen</span> <span class="o">=</span> <span class="n">evbuffer_get_length</span><span class="p">(</span><span class="n">input</span><span class="p">);</span> <span class="kt">size_t</span> <span class="n">datalen</span> <span class="o">=</span> <span class="n">evbuffer_get_length</span><span class="p">(</span><span class="n">input</span><span class="p">);</span>
<span class="kt">unsigned</span> <span class="kt">char</span> <span class="o">*</span><span class="n">data</span> <span class="o">=</span> <span class="n">evbuffer_pullup</span><span class="p">(</span><span class="n">input</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">);</span> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="o">*</span><span class="n">data</span> <span class="o">=</span> <span class="n">evbuffer_pullup</span><span class="p">(</span><span class="n">input</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">);</span>
<span class="n">rv</span> <span class="o">=</span> <span class="n">nghttp2_session_mem_recv</span><span class="p">(</span><span class="n">session_data</span><span class="o">-&gt;</span><span class="n">session</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">datalen</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">rv</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="n">readlen</span> <span class="o">=</span> <span class="n">nghttp2_session_mem_recv</span><span class="p">(</span><span class="n">session_data</span><span class="o">-&gt;</span><span class="n">session</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">datalen</span><span class="p">);</span>
<span class="n">warnx</span><span class="p">(</span><span class="s">&quot;Fatal error: %s&quot;</span><span class="p">,</span> <span class="n">nghttp2_strerror</span><span class="p">(</span><span class="n">rv</span><span class="p">));</span> <span class="k">if</span><span class="p">(</span><span class="n">readlen</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">warnx</span><span class="p">(</span><span class="s">&quot;Fatal error: %s&quot;</span><span class="p">,</span> <span class="n">nghttp2_strerror</span><span class="p">((</span><span class="kt">int</span><span class="p">)</span><span class="n">readlen</span><span class="p">));</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">if</span><span class="p">(</span><span class="n">evbuffer_drain</span><span class="p">(</span><span class="n">input</span><span class="p">,</span> <span class="n">readlen</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">warnx</span><span class="p">(</span><span class="s">&quot;Fatal error: evbuffer_drain failed&quot;</span><span class="p">);</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="p">}</span> <span class="p">}</span>
<span class="n">evbuffer_drain</span><span class="p">(</span><span class="n">input</span><span class="p">,</span> <span class="n">rv</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">session_send</span><span class="p">(</span><span class="n">session_data</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span><span class="p">(</span><span class="n">session_send</span><span class="p">(</span><span class="n">session_data</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="p">}</span> <span class="p">}</span>
@ -799,7 +802,7 @@ stream is about to close and we no longer use that object.</p>
<span class="kt">void</span> <span class="o">*</span><span class="n">arg</span><span class="p">)</span> <span class="kt">void</span> <span class="o">*</span><span class="n">arg</span><span class="p">)</span>
<span class="p">{</span> <span class="p">{</span>
<span class="o">*</span><span class="n">data</span> <span class="o">=</span> <span class="n">next_proto_list</span><span class="p">;</span> <span class="o">*</span><span class="n">data</span> <span class="o">=</span> <span class="n">next_proto_list</span><span class="p">;</span>
<span class="o">*</span><span class="n">len</span> <span class="o">=</span> <span class="n">next_proto_list_len</span><span class="p">;</span> <span class="o">*</span><span class="n">len</span> <span class="o">=</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span><span class="p">)</span><span class="n">next_proto_list_len</span><span class="p">;</span>
<span class="k">return</span> <span class="n">SSL_TLSEXT_ERR_OK</span><span class="p">;</span> <span class="k">return</span> <span class="n">SSL_TLSEXT_ERR_OK</span><span class="p">;</span>
<span class="p">}</span> <span class="p">}</span>
@ -956,16 +959,20 @@ stream is about to close and we no longer use that object.</p>
<span class="cm"> function. */</span> <span class="cm"> function. */</span>
<span class="k">static</span> <span class="kt">int</span> <span class="nf">session_recv</span><span class="p">(</span><span class="n">http2_session_data</span> <span class="o">*</span><span class="n">session_data</span><span class="p">)</span> <span class="k">static</span> <span class="kt">int</span> <span class="nf">session_recv</span><span class="p">(</span><span class="n">http2_session_data</span> <span class="o">*</span><span class="n">session_data</span><span class="p">)</span>
<span class="p">{</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">rv</span><span class="p">;</span> <span class="kt">ssize_t</span> <span class="n">readlen</span><span class="p">;</span>
<span class="k">struct</span> <span class="n">evbuffer</span> <span class="o">*</span><span class="n">input</span> <span class="o">=</span> <span class="n">bufferevent_get_input</span><span class="p">(</span><span class="n">session_data</span><span class="o">-&gt;</span><span class="n">bev</span><span class="p">);</span> <span class="k">struct</span> <span class="n">evbuffer</span> <span class="o">*</span><span class="n">input</span> <span class="o">=</span> <span class="n">bufferevent_get_input</span><span class="p">(</span><span class="n">session_data</span><span class="o">-&gt;</span><span class="n">bev</span><span class="p">);</span>
<span class="kt">size_t</span> <span class="n">datalen</span> <span class="o">=</span> <span class="n">evbuffer_get_length</span><span class="p">(</span><span class="n">input</span><span class="p">);</span> <span class="kt">size_t</span> <span class="n">datalen</span> <span class="o">=</span> <span class="n">evbuffer_get_length</span><span class="p">(</span><span class="n">input</span><span class="p">);</span>
<span class="kt">unsigned</span> <span class="kt">char</span> <span class="o">*</span><span class="n">data</span> <span class="o">=</span> <span class="n">evbuffer_pullup</span><span class="p">(</span><span class="n">input</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">);</span> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="o">*</span><span class="n">data</span> <span class="o">=</span> <span class="n">evbuffer_pullup</span><span class="p">(</span><span class="n">input</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">);</span>
<span class="n">rv</span> <span class="o">=</span> <span class="n">nghttp2_session_mem_recv</span><span class="p">(</span><span class="n">session_data</span><span class="o">-&gt;</span><span class="n">session</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">datalen</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">rv</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="n">readlen</span> <span class="o">=</span> <span class="n">nghttp2_session_mem_recv</span><span class="p">(</span><span class="n">session_data</span><span class="o">-&gt;</span><span class="n">session</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">datalen</span><span class="p">);</span>
<span class="n">warnx</span><span class="p">(</span><span class="s">&quot;Fatal error: %s&quot;</span><span class="p">,</span> <span class="n">nghttp2_strerror</span><span class="p">(</span><span class="n">rv</span><span class="p">));</span> <span class="k">if</span><span class="p">(</span><span class="n">readlen</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">warnx</span><span class="p">(</span><span class="s">&quot;Fatal error: %s&quot;</span><span class="p">,</span> <span class="n">nghttp2_strerror</span><span class="p">((</span><span class="kt">int</span><span class="p">)</span><span class="n">readlen</span><span class="p">));</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">if</span><span class="p">(</span><span class="n">evbuffer_drain</span><span class="p">(</span><span class="n">input</span><span class="p">,</span> <span class="n">readlen</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">warnx</span><span class="p">(</span><span class="s">&quot;Fatal error: evbuffer_drain failed&quot;</span><span class="p">);</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="p">}</span> <span class="p">}</span>
<span class="n">evbuffer_drain</span><span class="p">(</span><span class="n">input</span><span class="p">,</span> <span class="n">rv</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">session_send</span><span class="p">(</span><span class="n">session_data</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span><span class="p">(</span><span class="n">session_send</span><span class="p">(</span><span class="n">session_data</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="p">}</span> <span class="p">}</span>
@ -1082,6 +1089,7 @@ stream is about to close and we no longer use that object.</p>
<span class="n">http2_stream_data</span> <span class="o">*</span><span class="n">stream_data</span><span class="p">)</span> <span class="n">http2_stream_data</span> <span class="o">*</span><span class="n">stream_data</span><span class="p">)</span>
<span class="p">{</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">rv</span><span class="p">;</span> <span class="kt">int</span> <span class="n">rv</span><span class="p">;</span>
<span class="kt">ssize_t</span> <span class="n">writelen</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">pipefd</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span> <span class="kt">int</span> <span class="n">pipefd</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
<span class="n">nghttp2_nv</span> <span class="n">hdrs</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span> <span class="n">nghttp2_nv</span> <span class="n">hdrs</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">MAKE_NV</span><span class="p">(</span><span class="s">&quot;:status&quot;</span><span class="p">,</span> <span class="s">&quot;404&quot;</span><span class="p">)</span> <span class="n">MAKE_NV</span><span class="p">(</span><span class="s">&quot;:status&quot;</span><span class="p">,</span> <span class="s">&quot;404&quot;</span><span class="p">)</span>
@ -1100,10 +1108,10 @@ stream is about to close and we no longer use that object.</p>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span> <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span> <span class="p">}</span>
<span class="n">rv</span> <span class="o">=</span> <span class="n">write</span><span class="p">(</span><span class="n">pipefd</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">ERROR_HTML</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">ERROR_HTML</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">);</span> <span class="n">writelen</span> <span class="o">=</span> <span class="n">write</span><span class="p">(</span><span class="n">pipefd</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">ERROR_HTML</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">ERROR_HTML</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">);</span>
<span class="n">close</span><span class="p">(</span><span class="n">pipefd</span><span class="p">[</span><span class="mi">1</span><span class="p">]);</span> <span class="n">close</span><span class="p">(</span><span class="n">pipefd</span><span class="p">[</span><span class="mi">1</span><span class="p">]);</span>
<span class="k">if</span><span class="p">(</span><span class="n">rv</span> <span class="o">!=</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">ERROR_HTML</span><span class="p">))</span> <span class="p">{</span> <span class="k">if</span><span class="p">(</span><span class="n">writelen</span> <span class="o">!=</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">ERROR_HTML</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
<span class="n">close</span><span class="p">(</span><span class="n">pipefd</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span> <span class="n">close</span><span class="p">(</span><span class="n">pipefd</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="p">}</span> <span class="p">}</span>
@ -1513,7 +1521,7 @@ stream is about to close and we no longer use that object.</p>
<script type="text/javascript"> <script type="text/javascript">
var DOCUMENTATION_OPTIONS = { var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./', URL_ROOT:'./',
VERSION:'0.4.1', VERSION:'0.4.2-DEV',
COLLAPSE_INDEX:false, COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html', FILE_SUFFIX:'.html',
HAS_SOURCE: false HAS_SOURCE: false