diff --git a/_sources/apiref.txt b/_sources/apiref.txt index 81fd24aa..327ca2bd 100644 --- a/_sources/apiref.txt +++ b/_sources/apiref.txt @@ -1126,6 +1126,64 @@ Functions :macro:`NGHTTP2_ERR_NOMEM` Out of memory. +.. function:: int nghttp2_session_upgrade(nghttp2_session *session, const uint8_t *settings_payload, size_t settings_payloadlen, void *stream_user_data) + + + Performs post-process of HTTP Upgrade request. This function can be + called from both client and server, but the behavior is very + different in each other. + + If called from client side, the *settings_payload* must be the + value sent in HTTP2-Settings header field and must be decoded by + base64url decoder. The *settings_payloadlen* is the length of + *settings_payload*. The *settings_payload* is unpacked and its + setting values will be submitted using + nghttp2_submit_settings(). This means that the client application + code does not need to submit SETTINGS by itself. The stream with + stream ID=1 is opened and the *stream_user_data* is used for its + stream_user_data. The opened stream becomes half-closed (local) + state. + + If called from server side, the *settings_payload* must be the + value received in HTTP2-Settings header field and must be decoded + by base64url decoder. The *settings_payloadlen* is the length of + *settings_payload*. It is treated as if the SETTINGS frame with + that payload is received. Thus, callback functions for the + reception of SETTINGS frame will be invoked. The stream with stream + ID=1 is opened. The *stream_user_data* is ignored. The opened + stream becomes half-closed (remote). + + This function returns 0 if it succeeds, or one of the following + negative error codes: + + :macro:`NGHTTP2_ERR_NOMEM` + Out of memory. + :macro:`NGHTTP2_ERR_INVALID_ARGUMENT` + The *settings_payload* is badly formed. + :macro:`NGHTTP2_ERR_PROTO` + The stream ID 1 is already used or closed; or is not available; + or the *settings_payload* does not include both + NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS and + NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE. + +.. function:: ssize_t nghttp2_pack_settings_payload(uint8_t *buf, nghttp2_settings_entry *iv, size_t niv) + + + Serializes the SETTINGS values *iv* in the *buf*. The number of + entry pointed by *iv* array is given by the *niv*. This function + may reorder the pointers in *iv*. The *buf* must have enough region + to hold serialized data. The required space for the *niv* entries + are 8**niv* bytes. This function is used mainly for creating + SETTINGS payload to be sent with HTTP2-Settings header field in + HTTP Upgrade request. The data written in *buf* is not still + base64url encoded and the application is responsible to do that. + + This function returns the number of bytes written in *buf*, or one + of the following negative error codes: + + :macro:`NGHTTP2_ERR_INVALID_ARGUMENT` + The *iv* contains duplicate settings ID or invalid value. + .. function:: const char* nghttp2_strerror(int lib_error_code) diff --git a/apiref.html b/apiref.html index 8267b613..92537c49 100644 --- a/apiref.html +++ b/apiref.html @@ -1566,6 +1566,64 @@ negative error codes:

+
+
+int nghttp2_session_upgrade(nghttp2_session *session, const uint8_t *settings_payload, size_t settings_payloadlen, void *stream_user_data)
+

Performs post-process of HTTP Upgrade request. This function can be +called from both client and server, but the behavior is very +different in each other.

+

If called from client side, the settings_payload must be the +value sent in HTTP2-Settings header field and must be decoded by +base64url decoder. The settings_payloadlen is the length of +settings_payload. The settings_payload is unpacked and its +setting values will be submitted using +nghttp2_submit_settings(). This means that the client application +code does not need to submit SETTINGS by itself. The stream with +stream ID=1 is opened and the stream_user_data is used for its +stream_user_data. The opened stream becomes half-closed (local) +state.

+

If called from server side, the settings_payload must be the +value received in HTTP2-Settings header field and must be decoded +by base64url decoder. The settings_payloadlen is the length of +settings_payload. It is treated as if the SETTINGS frame with +that payload is received. Thus, callback functions for the +reception of SETTINGS frame will be invoked. The stream with stream +ID=1 is opened. The stream_user_data is ignored. The opened +stream becomes half-closed (remote).

+

This function returns 0 if it succeeds, or one of the following +negative error codes:

+
+
NGHTTP2_ERR_NOMEM
+
Out of memory.
+
NGHTTP2_ERR_INVALID_ARGUMENT
+
The settings_payload is badly formed.
+
NGHTTP2_ERR_PROTO
+
The stream ID 1 is already used or closed; or is not available; +or the settings_payload does not include both +NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS and +NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE.
+
+
+ +
+
+ssize_t nghttp2_pack_settings_payload(uint8_t *buf, nghttp2_settings_entry *iv, size_t niv)
+

Serializes the SETTINGS values iv in the buf. The number of +entry pointed by iv array is given by the niv. This function +may reorder the pointers in iv. The buf must have enough region +to hold serialized data. The required space for the niv entries +are 8**niv* bytes. This function is used mainly for creating +SETTINGS payload to be sent with HTTP2-Settings header field in +HTTP Upgrade request. The data written in buf is not still +base64url encoded and the application is responsible to do that.

+

This function returns the number of bytes written in buf, or one +of the following negative error codes:

+
+
NGHTTP2_ERR_INVALID_ARGUMENT
+
The iv contains duplicate settings ID or invalid value.
+
+
+
const char* nghttp2_strerror(int lib_error_code)
diff --git a/genindex.html b/genindex.html index dddbb1a2..a9b40560 100644 --- a/genindex.html +++ b/genindex.html @@ -456,12 +456,12 @@
nghttp2_nv.value (C member)
-
-
nghttp2_nv.valuelen (C member)
+
+
nghttp2_on_data_chunk_recv_callback (C type)
@@ -515,6 +515,10 @@ +
nghttp2_pack_settings_payload (C function) +
+ +
NGHTTP2_PING (C macro)
@@ -727,6 +731,10 @@ +
nghttp2_session_upgrade (C function) +
+ +
nghttp2_session_want_read (C function)
diff --git a/objects.inv b/objects.inv index 95fd3c78..d02317fe 100644 Binary files a/objects.inv and b/objects.inv differ diff --git a/package_README.html b/package_README.html index b3ebac50..2719b39f 100644 --- a/package_README.html +++ b/package_README.html @@ -60,12 +60,12 @@ version 2.0.

Development Status

We started to implement HTTP-defat-04/2.0 (http://tools.ietf.org/html/draft-ietf-httpbis-http2-04) based on -spdylay code base.

-

The following features are not implemented:

+spdylay code base. The header compression is based on +http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-01

+

Currently, the library lacks the following features:

@@ -137,6 +137,8 @@ $ make

The documents will be generated under doc/manual/html/.

The generated documents will not be installed with make install.

+

The online documentation is available at +http://tatsuhiro-t.github.io/nghttp2/

Client, Server and Proxy programs

@@ -144,8 +146,8 @@ $ make

nghttp - client

nghttp is HTTP-default04/2.0 client. It can connect to the -HTTP/2.0 server with prior knowledge (without HTTP Upgrade) and NPN in -TLS extension.

+HTTP/2.0 server with prior knowledge, HTTP Upgrade and NPN TLS +extension.

By default, it uses SSL/TLS connection. Use --no-tls option to disable it.

It has verbose output mode for framing information. Here is sample @@ -195,6 +197,55 @@ output from nghttp cl [ 0.006] send GOAWAY frame <length=8, flags=0, stream_id=0> (last_stream_id=0, error_code=NO_ERROR(0), opaque_data=)

+

The HTTP Upgrade is performed like this:

+
$ src/nghttp --no-tls -nvu http://localhost:3000/
+[  0.000] HTTP Upgrade request
+GET / HTTP/1.1
+Host: localhost:3000
+Connection: Upgrade, HTTP2-Settings
+Upgrade: HTTP-draft-04/2.0
+HTTP2-Settings: AAAABAAAAGQAAAAHAAD__w
+Accept: */*
+User-Agent: nghttp2/0.1.0-DEV
+
+
+[  0.183] HTTP Upgrade response
+HTTP/1.1 101 Switching Protocols
+Connection: Upgrade
+Upgrade: HTTP/2.0
+
+
+[  0.183] HTTP Upgrade success
+[  0.183] send SETTINGS frame <length=16, flags=0x00, stream_id=0>
+          (niv=2)
+          [4:100]
+          [7:65535]
+[  0.202] recv SETTINGS frame <length=16, flags=0x00, stream_id=0>
+          (niv=2)
+          [4:100]
+          [7:65536]
+[  0.202] recv WINDOW_UPDATE frame <length=4, flags=0x01, stream_id=0>
+          ; END_FLOW_CONTROL
+          (window_size_increment=0)
+[  0.275] recv HEADERS frame <length=198, flags=0x04, stream_id=1>
+          ; END_HEADERS
+          ; First response header
+          :status: 200 OK
+          accept-ranges: bytes
+          content-length: 45
+          content-type: text/html
+          date: Sat, 03 Aug 2013 10:21:20 GMT
+          etag: "cf405c-2d-45adabdf282c0"
+          last-modified: Tue, 04 Nov 2008 10:44:03 GMT
+          server: Apache/2.2.22 (Debian)
+          vary: Accept-Encoding
+          via: 1.1 nghttpx
+          x-pad: avoid browser bug
+[  0.275] recv DATA frame (length=45, flags=0, stream_id=1)
+[  0.275] recv DATA frame (length=0, flags=1, stream_id=1)
+[  0.275] send GOAWAY frame <length=8, flags=0x00, stream_id=0>
+          (last_stream_id=0, error_code=NO_ERROR(0), opaque_data=)
+

nghttpd - server

@@ -202,6 +253,8 @@ output from nghttp cl multiplexes connections using non-blocking socket.

By default, it uses SSL/TLS connection. Use --no-tls option to disable it.

+

nghttpd only accept the HTTP/2.0 connection via NPN or direct +HTTP/2.0 connection. No HTTP Upgrade is supported.

Just like nghttp, it has verbose output mode for framing information. Here is sample output from nghttpd server:

$ src/nghttpd 3000 --no-tls -v
@@ -243,13 +296,13 @@ IPv6: listen on port 3000
 

nghttpx - proxy

The nghttpx is a multi-threaded reverse proxy for -HTTP-draft-04/2.0, SPDY/HTTPS. It has several operation modes:

+HTTP-draft-04/2.0, SPDY and HTTP/1.1. It has several operation modes:

----++++ @@ -259,61 +312,67 @@ HTTP-draft-04/2.0, SPDY/HTTPS. It has several operation modes:

- - + + - + - - - + + + - - - + + + - - + +
Mode option
defaultHTTP/2.0, SPDY, HTTPS
default modeHTTP/2.0, SPDY, HTTP/1.1 (TLS) HTTP/1.1 Reverse proxy
--spdyHTTP/2.0, SPDY, HTTPSHTTP/2.0, SPDY, HTTP/1.1 (TLS) HTTP/1.1 SPDY proxy
--spdy-bridgeHTTP/2.0, SPDY, HTTPSHTTP/2.0SPDY proxyHTTP/2.0, SPDY, HTTP/1.1 (TLS)HTTP/2.0 (TLS) 
--clientHTTP/1.1HTTP/2.01.1 <-> 2.0 conversionHTTP/2.0, HTTP/1.1HTTP/2.0 (TLS) 
--client-proxyHTTP/1.1HTTP/2.0HTTP/2.0, HTTP/1.1HTTP/2.0 (TLS) Forward proxy

The interesting mode at the moment is the default mode. It works like -a reverse proxy and listens HTTP-draft-04/2.0 as well as SPDY and -HTTPS and can be deployed SSL/TLS terminator for existing web server.

-

By default, it uses SSL/TLS connection for HTTP/2.0 and SPDY. Use ---frontend-spdy--no-tls to disable it in frontend -connection. Likewise, use --backend-spdy-no-tls option to disable -it in backend connection.

+a reverse proxy and listens HTTP-draft-04/2.0, SPDY and HTTP/1.1 and +can be deployed SSL/TLS terminator for existing web server.

+

The default mode, --spdy and --spdy-bridge modes use SSL/TLS +in the frontend connection by default. To disable SSL/TLS, use +--frontend-no-tls option. If that option is used, SPDY is disabled +in the frontend and incoming HTTP/1.1 connection can be upgraded to +HTTP/2.0 through HTTP Upgrade.

+

The --spdy-bridge, --client and --client-proxy modes use +SSL/TLS in the backend connection by deafult. To disable SSL/TLS, use +--backend-no-tls option.

The nghttpx supports configuration file. See --conf option and sample configuration file nghttpx.conf.sample.

The nghttpx is ported from shrpx in spdylay project, and it still has SPDY color in option names. They will be fixed as the development goes.

-

Without any of -s, --spdy-bridge, -p and --client -options, nghttpx works as reverse proxy to the backend server:

-
Client <-- (HTTP/2.0, SPDY, HTTPS) --> nghttpx <-- (HTTP) --> Web Server
-                                   [reverse proxy]
+

In the default mode, (without any of --spdy, --spdy-bridge, +--client-proxy and --client options), nghttpx works as +reverse proxy to the backend server:

+
Client <-- (HTTP/2.0, SPDY, HTTP/1.1) --> nghttpx <-- (HTTP/1.1) --> Web Server
+                                      [reverse proxy]
 
-

With -s option, it works as so called secure SPDY proxy:

-
Client <-- (HTTP/2.0, SPDY, HTTPS) --> nghttpx <-- (HTTP) --> Proxy
-                                   [SPDY proxy]            (e.g., Squid)
+

With --spdy option, it works as so called secure proxy (aka SPDY +proxy):

+
Client <-- (HTTP/2.0, SPDY, HTTP/1.1) --> nghttpx <-- (HTTP/1.1) --> Proxy
+                                       [secure proxy]            (e.g., Squid)
 
-

The Client in the above is needs to be configured to use nghttpx as -secure SPDY proxy.

+

The Client in the above is needs to be configured to use +nghttpx as secure proxy.

At the time of this writing, Chrome is the only browser which supports -secure SPDY proxy. The one way to configure Chrome to use secure SPDY -proxy is create proxy.pac script like this:

+secure proxy. The one way to configure Chrome to use secure proxy is +create proxy.pac script like this:

function FindProxyForURL(url, host) {
     return "HTTPS SERVERADDR:PORT";
 }
@@ -321,39 +380,41 @@ proxy is create proxy.pac script like this:

SERVERADDR and PORT is the hostname/address and port of the machine nghttpx is running. Please note that Chrome requires valid -certificate for secure SPDY proxy.

+certificate for secure proxy.

Then run chrome with the following arguments:

$ google-chrome --proxy-pac-url=file:///path/to/proxy.pac --use-npn
-

With --spdy-bridge, it accepts HTTP/2.0, SPDY and HTTPS +

With --spdy-bridge, it accepts HTTP/2.0, SPDY and HTTP/1.1 connections and communicates with backend in HTTP/2.0:

-
Client <-- (HTTP/2.0, SPDY, HTTPS) --> nghttpx <-- (HTTP/2.0) --> Web or HTTP/2.0 Proxy etc
-                                    [SPDY bridge]              (e.g., nghttpx -s)
+
Client <-- (HTTP/2.0, SPDY, HTTP/1.1) --> nghttpx <-- (HTTP/2.0) --> Web or HTTP/2.0 Proxy etc
+                                                                     (e.g., nghttpx -s)
 
-

With -p option, it works as forward proxy and expects that the -backend is HTTP/2.0 proxy:

-
Client <-- (HTTP) --> nghttpx <-- (HTTP/2.0) --> HTTP/2.0 Proxy
-                 [forward proxy]                 (e.g., nghttpx -s)
+

With --client-proxy option, it works as forward proxy and expects +that the backend is HTTP/2.0 proxy:

+
Client <-- (HTTP/2.0, HTTP/1.1) --> nghttpx <-- (HTTP/2.0) --> HTTP/2.0 Proxy
+                                 [forward proxy]               (e.g., nghttpx -s)
 
-

The Client is needs to be configured to use nghttpx as forward proxy.

-

With the above configuration, one can use HTTP/1.1 client to access -and test their HTTP/2.0 servers.

+

The Client is needs to be configured to use nghttpx as forward +proxy. The frontend HTTP/1.1 connection can be upgraded to HTTP/2.0 +through HTTP Upgrade. With the above configuration, one can use +HTTP/1.1 client to access and test their HTTP/2.0 servers.

With --client option, it works as reverse proxy and expects that the backend is HTTP/2.0 Web server:

-
Client <-- (HTTP) --> nghttpx <-- (HTTP/2.0) --> Web Server
-                 [reverse proxy]
+
Client <-- (HTTP/2.0, HTTP/1.1) --> nghttpx <-- (HTTP/2.0) --> Web Server
+                                [reverse proxy]
 
-

For the operation modes which talk to the backend in HTTP/2.0, the -backend connections can be tunneled though HTTP proxy. The proxy is -specified using --backend-http-proxy-uri option. The following -figure illustrates the example of --spdy-bridge and ---backend-http-proxy-uri option to talk to the outside HTTP/2.0 proxy -through HTTP proxy:

-
Client <-- (HTTP/2.0, SPDY, HTTPS) --> nghttpx <-- (HTTP/2.0) --
-                                   [SPDY bridge]
+

The frontend HTTP/1.1 connection can be upgraded to HTTP/2.0 +through HTTP Upgrade.

+

For the operation modes which talk to the backend in HTTP/2.0 over +SSL/TLS, the backend connections can be tunneled though HTTP +proxy. The proxy is specified using --backend-http-proxy-uri +option. The following figure illustrates the example of +--spdy-bridge and --backend-http-proxy-uri option to talk to +the outside HTTP/2.0 proxy through HTTP proxy:

+
Client <-- (HTTP/2.0, SPDY, HTTP/1.1) --> nghttpx <-- (HTTP/2.0) --
 
         --===================---> HTTP/2.0 Proxy
           (HTTP proxy tunnel)     (e.g., nghttpx -s)
diff --git a/searchindex.js b/searchindex.js
index 0936dd5d..251068f1 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({objects:{"":{NGHTTP2_ERR_INVALID_STATE:[0,0,1,""],NGHTTP2_ERR_FRAME_TOO_LARGE:[0,0,1,""],NGHTTP2_ERR_HEADER_COMP:[0,0,1,""],nghttp2_settings_entry:[0,2,1,""],NGHTTP2_INTERNAL_ERROR:[0,0,1,""],NGHTTP2_PRI_LOWEST:[0,0,1,""],nghttp2_on_frame_recv_callback:[0,2,1,""],NGHTTP2_FLAG_PONG:[0,0,1,""],NGHTTP2_CLIENT_CONNECTION_HEADER_LEN:[0,0,1,""],nghttp2_goaway:[0,2,1,""],NGHTTP2_OPT_NO_AUTO_WINDOW_UPDATE:[0,0,1,""],nghttp2_submit_rst_stream:[0,3,1,""],NGHTTP2_ERR_INVALID_FRAME:[0,0,1,""],nghttp2_frame_type:[0,2,1,""],nghttp2_on_data_recv_callback:[0,2,1,""],nghttp2_select_next_protocol:[0,3,1,""],NGHTTP2_ERR_INVALID_HEADER_BLOCK:[0,0,1,""],nghttp2_session_callbacks:[0,2,1,""],NGHTTP2_ERR_PROTO:[0,0,1,""],NGHTTP2_FRAME_TOO_LARGE:[0,0,1,""],nghttp2_submit_window_update:[0,3,1,""],NGHTTP2_ERR_UNSUPPORTED_VERSION:[0,0,1,""],nghttp2_window_update:[0,2,1,""],NGHTTP2_DATA:[0,0,1,""],nghttp2_frame_hd:[0,2,1,""],NGHTTP2_ERR_INVALID_STREAM_STATE:[0,0,1,""],NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE:[0,0,1,""],NGHTTP2_STREAM_CLOSED:[0,0,1,""],NGHTTP2_SETTINGS_MAX:[0,0,1,""],nghttp2_headers_category:[0,2,1,""],nghttp2_error_code:[0,2,1,""],NGHTTP2_REFUSED_STREAM:[0,0,1,""],nghttp2_on_data_chunk_recv_callback:[0,2,1,""],NGHTTP2_ERR_START_STREAM_NOT_ALLOWED:[0,0,1,""],nghttp2_strerror:[0,3,1,""],nghttp2_gzip_inflate_del:[0,3,1,""],NGHTTP2_ERR_FATAL:[0,0,1,""],nghttp2_submit_goaway:[0,3,1,""],nghttp2_error:[0,2,1,""],NGHTTP2_INITIAL_CONNECTION_WINDOW_SIZE:[0,0,1,""],NGHTTP2_ERR_NOMEM:[0,0,1,""],NGHTTP2_NO_ERROR:[0,0,1,""],NGHTTP2_ERR_DEFERRED:[0,0,1,""],nghttp2_push_promise:[0,2,1,""],NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE:[0,0,1,""],nghttp2_session_get_outbound_queue_size:[0,3,1,""],nghttp2_rst_stream:[0,2,1,""],NGHTTP2_PROTO_VERSION_ID_LEN:[0,0,1,""],NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS:[0,0,1,""],nghttp2_data_source_read_callback:[0,2,1,""],NGHTTP2_ERR_WOULDBLOCK:[0,0,1,""],nghttp2_session_resume_data:[0,3,1,""],NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE:[0,0,1,""],NGHTTP2_PRI_DEFAULT:[0,0,1,""],nghttp2_session_server_new:[0,3,1,""],NGHTTP2_FLAG_END_PUSH_PROMISE:[0,0,1,""],NGHTTP2_ERR_INVALID_ARGUMENT:[0,0,1,""],nghttp2_submit_push_promise:[0,3,1,""],NGHTTP2_ERR_GOAWAY_ALREADY_SENT:[0,0,1,""],nghttp2_session_mem_recv:[0,3,1,""],nghttp2_flag:[0,2,1,""],NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS:[0,0,1,""],NGHTTP2_HCAT_REQUEST:[0,0,1,""],nghttp2_ping:[0,2,1,""],nghttp2_gzip:[0,2,1,""],NGHTTP2_FLAG_END_STREAM:[0,0,1,""],NGHTTP2_ERR_EOF:[0,0,1,""],NGHTTP2_HCAT_HEADERS:[0,0,1,""],NGHTTP2_SETTINGS:[0,0,1,""],nghttp2_frame:[0,2,1,""],NGHTTP2_ERR_DEFERRED_DATA_EXIST:[0,0,1,""],NGHTTP2_CANCEL:[0,0,1,""],nghttp2_send_callback:[0,2,1,""],NGHTTP2_ERR_INVALID_STREAM_ID:[0,0,1,""],nghttp2_on_frame_send_callback:[0,2,1,""],nghttp2_session_client_new:[0,3,1,""],NGHTTP2_VERSION:[0,0,1,""],nghttp2_session:[0,2,1,""],NGHTTP2_COMPRESSION_ERROR:[0,0,1,""],NGHTTP2_HCAT_PUSH_RESPONSE:[0,0,1,""],nghttp2_submit_headers:[0,3,1,""],nghttp2_recv_callback:[0,2,1,""],nghttp2_session_get_stream_user_data:[0,3,1,""],NGHTTP2_FLAG_PRIORITY:[0,0,1,""],nghttp2_on_data_send_callback:[0,2,1,""],nghttp2_nv:[0,2,1,""],NGHTTP2_FLAG_END_FLOW_CONTROL:[0,0,1,""],nghttp2_on_unknown_frame_recv_callback:[0,2,1,""],NGHTTP2_ERR_STREAM_CLOSED:[0,0,1,""],nghttp2_opt:[0,2,1,""],NGHTTP2_ERR_CALLBACK_FAILURE:[0,0,1,""],nghttp2_on_invalid_frame_recv_callback:[0,2,1,""],NGHTTP2_FLOW_CONTROL_ERROR:[0,0,1,""],nghttp2_session_set_option:[0,3,1,""],NGHTTP2_ERR_STREAM_CLOSING:[0,0,1,""],nghttp2_session_fail_session:[0,3,1,""],NGHTTP2_PROTO_VERSION_ID:[0,0,1,""],nghttp2_settings_id:[0,2,1,""],NGHTTP2_HEADERS:[0,0,1,""],nghttp2_session_send:[0,3,1,""],NGHTTP2_PROTOCOL_ERROR:[0,0,1,""],nghttp2_gzip_inflate:[0,3,1,""],nghttp2_session_del:[0,3,1,""],nghttp2_settings:[0,2,1,""],nghttp2_on_frame_not_send_callback:[0,2,1,""],nghttp2_submit_data:[0,3,1,""],nghttp2_submit_response:[0,3,1,""],NGHTTP2_CLIENT_CONNECTION_HEADER:[0,0,1,""],NGHTTP2_FLAG_NONE:[0,0,1,""],NGHTTP2_FLAG_END_HEADERS:[0,0,1,""],nghttp2_on_frame_recv_parse_error_callback:[0,2,1,""],nghttp2_submit_settings:[0,3,1,""],NGHTTP2_HCAT_RESPONSE:[0,0,1,""],nghttp2_mem_chunk:[0,2,1,""],nghttp2_priority:[0,2,1,""],nghttp2_session_want_read:[0,3,1,""],NGHTTP2_RST_STREAM:[0,0,1,""],nghttp2_on_stream_close_callback:[0,2,1,""],NGHTTP2_PUSH_PROMISE:[0,0,1,""],nghttp2_data_provider:[0,2,1,""],nghttp2_on_request_recv_callback:[0,2,1,""],nghttp2_session_recv:[0,3,1,""],NGHTTP2_INITIAL_WINDOW_SIZE:[0,0,1,""],NGHTTP2_WINDOW_UPDATE:[0,0,1,""],NGHTTP2_SETTINGS_FLOW_CONTROL_OPTIONS:[0,0,1,""],nghttp2_session_want_write:[0,3,1,""],nghttp2_submit_priority:[0,3,1,""],nghttp2_headers:[0,2,1,""],nghttp2_before_frame_send_callback:[0,2,1,""],NGHTTP2_PING:[0,0,1,""],NGHTTP2_GOAWAY:[0,0,1,""],NGHTTP2_ERR_GZIP:[0,0,1,""],nghttp2_submit_ping:[0,3,1,""],nghttp2_data_source:[0,2,1,""],NGHTTP2_ERR_STREAM_SHUT_WR:[0,0,1,""],NGHTTP2_PRIORITY:[0,0,1,""],nghttp2_submit_request:[0,3,1,""],nghttp2_gzip_inflate_new:[0,3,1,""]},nghttp2_session_callbacks:{on_invalid_frame_recv_callback:[0,1,1,""],before_frame_send_callback:[0,1,1,""],on_stream_close_callback:[0,1,1,""],on_data_chunk_recv_callback:[0,1,1,""],on_unknown_frame_recv_callback:[0,1,1,""],send_callback:[0,1,1,""],nghttp2_on_frame_recv_parse_error_callback:[0,1,1,""],on_frame_send_callback:[0,1,1,""],on_frame_recv_callback:[0,1,1,""],on_data_send_callback:[0,1,1,""],on_frame_not_send_callback:[0,1,1,""],on_request_recv_callback:[0,1,1,""],on_data_recv_callback:[0,1,1,""],recv_callback:[0,1,1,""]},nghttp2_frame:{push_promise:[0,1,1,""],settings:[0,1,1,""],ping:[0,1,1,""],rst_stream:[0,1,1,""],priority:[0,1,1,""],headers:[0,1,1,""],goaway:[0,1,1,""],window_update:[0,1,1,""],hd:[0,1,1,""]},nghttp2_mem_chunk:{length:[0,1,1,""],data:[0,1,1,""]},nghttp2_data_provider:{source:[0,1,1,""],read_callback:[0,1,1,""]},nghttp2_priority:{pri:[0,1,1,""],hd:[0,1,1,""]},nghttp2_settings_entry:{settings_id:[0,1,1,""],value:[0,1,1,""]},nghttp2_window_update:{hd:[0,1,1,""],window_size_increment:[0,1,1,""]},nghttp2_frame_hd:{stream_id:[0,1,1,""],length:[0,1,1,""],type:[0,1,1,""],flags:[0,1,1,""]},nghttp2_ping:{hd:[0,1,1,""]},nghttp2_rst_stream:{error_code:[0,1,1,""],hd:[0,1,1,""]},nghttp2_nv:{valuelen:[0,1,1,""],namelen:[0,1,1,""],name:[0,1,1,""],value:[0,1,1,""]},nghttp2_headers:{nvlen:[0,1,1,""],pri:[0,1,1,""],hd:[0,1,1,""],nva:[0,1,1,""]},nghttp2_goaway:{opaque_data:[0,1,1,""],error_code:[0,1,1,""],opaque_data_len:[0,1,1,""],hd:[0,1,1,""],last_stream_id:[0,1,1,""]},nghttp2_data_source:{fd:[0,1,1,""],ptr:[0,1,1,""]},nghttp2_push_promise:{promised_stream_id:[0,1,1,""],nvlen:[0,1,1,""],nva:[0,1,1,""],hd:[0,1,1,""]},nghttp2_settings:{niv:[0,1,1,""],hd:[0,1,1,""],iv:[0,1,1,""]}},terms:{all:0,code:[0,1],on_unknown_frame_recv_callback:0,illustr:1,nghttp2_err_start_stream_not_allow:0,my_obj:0,nghttp2_frame_hd:0,nghttp2_cancel:0,prefix:0,overlap:0,follow:[0,1],ptr:0,categori:0,"const":0,uint8_t:0,unpack:0,send:[0,1],program:[2,1],under:[0,1],sens:0,fatal:0,spec:0,sent:0,sourc:0,string:0,nul:0,"void":0,nghttp2_flag_end_push_promis:0,nghttp2_submit_p:0,failur:0,retriev:0,tri:0,nghttp2_on_frame_recv_callback:0,foo:0,level:0,did:0,list:0,nghttp2_headers_categori:0,settings_id:0,concurr:0,optlen:0,refer:[0,2],prepar:0,pleas:1,prevent:0,on_stream_close_callback:0,"0x1":0,"0x4":0,zero:0,pass:0,download:1,further:0,port:1,settings_flow_control_opt:0,neg:0,invok:0,current:0,version:[0,1,2],"new":[0,1],net:1,on_invalid_ctrl_recv_callback:0,"public":0,nghttp2_session_resume_data:0,on_ctrl_recv_callback:0,gener:[0,1],onli:[0,1],here:[0,1],closur:0,met:0,nghttp2_rst_stream:0,ubuntu:1,nghttp2_opt_no_auto_window_upd:0,depend:0,becom:0,modifi:1,sinc:0,valu:0,nextprotoneg:0,remark:[0,2],convers:1,anymor:0,step:0,autoreconf:1,queue:0,prior:1,behav:0,nghttp2_submit_prior:0,aka:0,nghttp2_err_gzip:0,nghttp2_frame:0,nghttp2_err_goaway_already_s:0,appli:0,transit:0,prefer:0,put:0,api:[0,2],org:[0,1,2],instal:1,should:0,"byte":[0,1],select:[0,1],from:[0,1,2],describ:0,would:0,memori:0,upgrad:1,next:[0,1],call:[0,1],asset:1,nghttp2_nv:0,nghttp2_on_invalid_frame_recv_callback:0,nghttp2_version:0,type:[0,1,2],until:0,reorder:0,more:0,goawai:[0,1],nghttp2_set:0,nghttp2_pri_default:0,rst_stream:0,inflater_ptr:0,user_data:0,flag:[0,1],accept:1,nghttp2_submit_window_upd:0,known:0,hold:0,nghttp2_err_wouldblock:0,must:0,endpoint:0,word:0,tunnel:1,nghttp2_settings_id:0,work:1,stream_user_data:0,dev:1,nghttp2_session_fail_sess:0,remain:0,can:[0,1],http2:[2,1],could:0,control:0,defer:0,stream:[0,1],give:0,process:0,indic:0,abort:0,want:0,incom:0,nghttp2_header:0,pong:0,nghttp2_err_invalid_stream_st:0,unsign:0,occur:0,nghttp2_settings_flow_control_opt:0,alwai:0,multipl:0,secur:1,anoth:0,charset:1,ping:0,nghttp2_flag_non:0,write:1,nghttp2_err_fat:0,pair:0,sever:[0,1],serveraddr:1,reject:0,sec9:0,instead:[0,1],simpl:0,updat:0,nghttp2_on_request_recv_callback:0,npn:[0,1],resourc:[0,2],default04:1,after:0,spdylai:1,nghttp2_session_get_pri_lowest:0,befor:0,mai:0,nghttp2_compression_error:0,alloc:0,autotool:1,nghttp2_err_frame_too_larg:0,opaqu:0,nvlen:0,element:0,issu:0,nghttp2_flag_prior:0,ssize_t:0,nghttp2_session_want_read:0,order:0,talk:1,includ:[0,2],frontend:1,nghttp2_err_stream_shut_wr:0,hypertext:[2,1],move:0,becaus:0,libcunit1:1,through:1,untouch:0,size_t:0,nghttp2_err_unsupported_vers:0,still:[0,1],mainli:0,paramet:0,typedef:[0,2],fix:1,precondit:0,max_outlen:0,nghttp2_hcat_push_respons:0,window:0,pend:0,nghttp2_err_eof:0,hidden:0,therefor:0,nghttp2_session_send:0,inlen:0,valuelen:0,recept:0,them:0,"return":[0,1],thei:[0,1],nghttp2_push_promis:0,nghttp2_goawai:0,initi:0,"break":0,nghttp2_initial_max_concurrent_stream:0,nghttp2_submit_head:0,promis:0,nov:1,choic:0,document:[2,1],name:[0,1],nghttp2_err_callback_failur:0,nghttp2_send_callback:0,nghttp2_frame_typ:0,no_error:1,drop:0,achiev:0,nghttp2_flow_control_error:0,mode:1,each:0,debug:0,fulli:0,side:0,trailer:0,mean:0,protocol_error:0,chunk:0,continu:1,nghttp2_err_temporal_callback_failur:0,"static":[0,1],connect:[0,1],http:[0,1,2],beyond:0,todo:0,out:0,goe:1,req:0,payload:0,end_flow_control:[0,1],etag:1,suitabl:0,on_ctrl_not_send_callback:0,nghttp2_client_connection_header_len:0,got:0,on_frame_not_send_callback:0,recv_callback:0,end_stream:[0,1],proxi:[2,1],state:0,nghttp2_internal_error:0,free:0,reason:0,base:1,inflat:0,usual:0,releas:0,nghttp2_session_mem_recv:0,nghttp2_flag:0,recv:1,spdy:[0,1],thread:1,syn_repli:0,omit:0,openssl:1,keep:0,length:[0,1],place:0,outsid:[0,1],assign:0,optval:0,first:[0,1],oper:[0,1],rang:[0,1],directli:0,arrai:0,number:0,yourself:1,nghttp2_protocol_error:0,alreadi:0,least:[0,1],nghttp2_on_frame_send_callback:0,opaque_data:[0,1],on_frame_recv_callback:0,open:[0,1],primari:0,size:0,prioriti:0,given:0,"long":0,script:1,unknown:0,data_prd:0,nghttp2_session_get_stream_user_data:0,messag:0,on_unknown_ctrl_recv_callback:0,necessarili:0,draft:[0,1,2],too:0,similarli:0,nghttp2_frame_too_larg:0,internal_error:0,conveni:0,"final":0,store:0,low:0,ssl_ctx:0,option:[0,1],tool:[2,1],copi:0,nghttp2_proto_version_id_len:0,specifi:[0,1],nghttp2_client_connection_head:0,pars:0,termin:[0,1],kind:0,scheme:[0,1],provid:0,remov:0,see:[0,1],structur:0,charact:0,project:1,defat:1,entri:0,nghttp2_session_del:0,read_callback:0,danc:1,nghttp2_error:0,"function":[0,1,2],window_size_incr:[0,1],respons:[0,1],pri:0,argument:[0,1],packag:1,increment:0,reserv:0,need:[0,1],exclud:0,nghttp2_on_frame_recv_parse_error_callback:0,sat:1,bitwis:0,outbound:0,callback:0,payloadlen:0,note:[0,1],nghttp2_refused_stream:0,exampl:[0,1],take:0,which:[0,1],noth:0,singl:[0,1],opaque_data_len:0,sure:1,unless:0,allow:0,"enum":[0,2],though:1,object:0,reach:0,settings_max_concurrent_stream:0,nghttp2_hcat_request:0,most:0,nghttp2_flag_pong:0,thi:[0,1,2],nghttp2_before_frame_send_callback:0,nghttp2_error_cod:0,nghttp2_err_stream_id_not_avail:0,don:0,http2_select:0,url:1,doc:1,later:0,request:0,uri:[0,1],doe:0,nghttp2_gzip_inflate_new:0,fact:0,on_invalid_frame_recv_callback:0,text:1,hostnam:1,verbos:1,session:0,pkg:1,protocol:[0,1,2],data:[0,1],absolut:0,nghttp2_submit_push_promis:0,nghttp2_submit_rst_stream:0,refused_stream:0,configur:[0,1],apach:1,figur:1,before_ctrl_send_callback:0,nghttp2_err_invalid_stream_id:0,experiment:[2,1],queu:0,local:0,nghttp2_err_proto:0,syn_stream:0,variou:0,get:[0,1],likewis:1,window_upd:[0,1],outlen:0,end_head:[0,1],ssl:[0,1],settings_initial_window_s:0,cannot:0,nghttp2_data:0,optnam:0,increas:0,nghttpd:1,requir:[0,1,2],before_frame_send_callback:0,nghttp2_no_error:0,nghttp2_submit_respons:0,bar:0,enabl:1,ietf:[2,1],possibl:0,push_promis:0,method:[0,1],nghttp2_err_header_comp:0,stuff:0,nghttp2_strerror:0,contain:[0,1],nghttp2_window_upd:0,nghttp2_gzip_inflate_del:0,user:[0,1],certif:1,set:[0,1],frame:[0,1],knowledg:1,nghttp2_submit_goawai:0,temporarili:0,result:0,arg:0,fail:0,close:[0,1],analog:0,statu:[0,1,2],correctli:0,vari:[0,1],someth:0,written:0,bridg:1,nghttp2_flag_end_flow_control:0,assoc_stream_id:0,nghttp2_on_data_chunk_recv_callback:0,nghttp2_initial_connection_window_s:0,accord:0,kei:0,flow:0,extens:1,entir:0,len:0,last_stream_id:[0,1],nghttp2_ping:0,tue:1,addit:0,bodi:0,cf405c:1,last:[0,1],nghttp2_proto_version_id:0,region:0,nghttp2_session_want_writ:0,against:0,tempor:0,etc:[0,1],agent:1,compression_error:0,on_request_recv_callback:0,browser:1,whole:0,nghttp2_data_provid:0,point:0,color:1,int32_t:0,address:1,rfc2616:0,header:[0,1],nghttp2_prioriti:0,non:[0,1],shutdown:0,path:[0,1],cancel:0,nghttp2_on_frame_not_send_callback:0,nghttp2_session:0,assum:0,backend:1,nghttp2_recv_callback:0,union:[0,2],due:0,been:0,nghttp2_on_data_send_callback:0,trigger:0,interpret:0,interest:1,nghttp2_hcat_head:0,date:1,nghttp2_on_unknown_frame_recv_callback:0,nghttp2_err_nomem:0,nghttp2_session_server_new:0,both:0,nghttp2_opt:0,lib_error_cod:0,ani:[0,1],repres:0,those:0,"case":0,multi:1,subsequ:0,nghttp2_settings_initial_window_s:0,zlib:1,sourceforg:1,defin:0,"while":0,abov:[0,1],error:0,nghttp2_flag_end_stream:0,invoc:0,listen:1,on_data_chunk_recv_callback:0,nghttp2_session_callback:0,helper:0,libxml2:1,squid:1,select_next_proto_cb:0,promised_stream_id:0,inform:1,conf:1,crash:0,flow_control_error:0,ascii:0,pointer:0,frame_too_larg:0,"null":0,develop:[2,1],perform:0,make:[0,1],belong:0,same:0,member:0,pac:1,headlen:0,nghttp2_on_stream_close_callback:0,start:[0,1],complet:0,nghttp2_session_recv:0,context:0,mytyp:0,effect:0,on_ctrl_recv_parse_error_callback:0,nghttp2_err_deferred_data_exist:0,remot:[0,1],moment:1,zlib1g:1,ownership:0,mani:0,build:[2,1],postpon:0,nghttp2_submit_syn_stream:0,niv:[0,1],implement:[0,1,2],"45adabdf282c0":1,lower:0,com:0,nghttp:1,well:1,without:[0,1],client:[0,1,2],uint32_t:0,resouc:1,error_cod:[0,1],nghttp2_data_sourc:0,left:0,end_push_promis:0,nghttp2_err_def:0,nghttp2_submit_set:0,identifi:0,just:[0,1],nghttp2_on_data_recv_callback:0,send_callback:0,nghttp2_gzip_infl:0,via:1,multiplex:1,config:1,on_frame_send_callback:0,previous:0,web:1,"0x8":0,struct:[0,2],easi:1,also:0,priorit:0,except:0,identif:0,haz:0,other:0,input:0,on_data_send_callback:0,nghttp2_select_next_protocol:0,gmt:1,applic:[0,1],format:0,read:0,caller:0,period:0,outlen_ptr:0,nghttp2_session_set_opt:0,know:0,nva:0,bit:0,associ:0,delta_window_s:0,like:[0,1],specif:0,arbitrari:0,uint16_t:0,signal:0,manual:1,html:[0,1,2],nghttp2_pri_lowest:0,server:[0,1,2],nghttp2_flag_end_head:0,tlen:0,have:0,output:1,stream_clos:0,www:0,revers:1,deal:0,hostport:0,nghttp2_session_client_new:0,some:0,back:0,sampl:1,integ:0,librari:[0,1,2],transmiss:0,nonzero:0,lead:0,nghttp2_data_source_read_callback:0,octet:0,per:0,outgo:0,larg:0,unit:1,condit:0,duplic:0,localhost:1,either:0,machin:1,run:1,post:0,inspect:0,chart:0,host:[0,1],found:1,peer:0,major:0,nghttp2_session_get_outbound_queue_s:0,src:1,about:0,actual:0,socket:1,commun:1,inlen_ptr:0,nghttp2_gzip:0,chrome:1,idl:0,nghttp2_submit_data:0,nghttp2_settings_max_concurrent_stream:0,ssl_tlsext_err_ok:0,disabl:1,block:[0,1],on_data_recv_callback:0,nghttp2_settings_entri:0,nghttp2_err_invalid_fram:0,deploi:1,encod:[0,1],automat:0,ssl_ctx_set_next_proto_select_cb:0,automak:1,stream_id:[0,1],empti:0,chang:0,inclus:0,git:[0,1,2],nghttp2_hcat_respons:0,wai:[0,1],transfer:[0,1,2],support:[0,1],submit:0,avail:0,intention:0,nghttp2:[0,1,2],nghttp2_err_stream_clos:0,on_ctrl_send_callback:0,ipv6:1,forward:1,findproxyforurl:1,strictli:0,ipv4:1,lowest:0,head:0,session_ptr:0,gzip:[0,1],unexpect:0,offer:1,jul:1,nghttp2_err_invalid_st:0,content:[2,1],taken:0,link:1,highest:0,buf:0,suppli:0,succe:0,utf:1,nghttp2_stream_clos:0,"default":[0,1],nghttp2_settings_max:0,access:1,googlecod:0,maximum:0,tell:0,asynchron:0,below:0,nghttpx:1,autoconf:1,libev:1,expect:1,nghttp2_initial_window_s:0,featur:1,shrpx:1,creat:[0,1],"int":0,httpbi:[2,1],descriptor:0,"char":0,incomplet:1,exist:[0,1],file:[0,1],nghttp2_err_invalid_header_block:0,macro:[0,2],nghttp2_mem_chunk:0,googl:1,when:0,detail:0,invalid:0,field:0,valid:[0,1],role:0,nghttp2_err_invalid_argu:0,test:1,you:[0,1],libssl:1,sequenc:0,indirectli:0,technot:0,libtool:1,alpn:[0,1],debian:1,receiv:0,cunit:1,eof:0,algorithm:0,directori:1,reliabl:0,mask:0,nghttp2_settings_flag:0,nghttp2_submit_request:0,namelen:0,portion:0,ignor:0,time:[0,1],push:0,deflat:[0,1]},objtypes:{"0":"c:macro","1":"c:member","2":"c:type","3":"c:function"},titles:["API Reference","nghttp2 - HTTP/2.0 C Library","nghttp2 - HTTP/2.0 C Library"],objnames:{"0":["c","macro","C macro"],"1":["c","member","C member"],"2":["c","type","C type"],"3":["c","function","C function"]},filenames:["apiref","package_README","index"]})
\ No newline at end of file
+Search.setIndex({objects:{"":{NGHTTP2_ERR_INVALID_STATE:[0,0,1,""],NGHTTP2_ERR_FRAME_TOO_LARGE:[0,0,1,""],NGHTTP2_ERR_HEADER_COMP:[0,0,1,""],nghttp2_settings_entry:[0,2,1,""],NGHTTP2_INTERNAL_ERROR:[0,0,1,""],NGHTTP2_PRI_LOWEST:[0,0,1,""],nghttp2_on_frame_recv_callback:[0,2,1,""],NGHTTP2_FLAG_PONG:[0,0,1,""],NGHTTP2_CLIENT_CONNECTION_HEADER_LEN:[0,0,1,""],nghttp2_goaway:[0,2,1,""],NGHTTP2_OPT_NO_AUTO_WINDOW_UPDATE:[0,0,1,""],nghttp2_submit_rst_stream:[0,3,1,""],NGHTTP2_ERR_INVALID_FRAME:[0,0,1,""],nghttp2_frame_type:[0,2,1,""],nghttp2_on_data_recv_callback:[0,2,1,""],nghttp2_select_next_protocol:[0,3,1,""],NGHTTP2_ERR_INVALID_HEADER_BLOCK:[0,0,1,""],nghttp2_session_callbacks:[0,2,1,""],NGHTTP2_ERR_PROTO:[0,0,1,""],NGHTTP2_FRAME_TOO_LARGE:[0,0,1,""],nghttp2_submit_window_update:[0,3,1,""],NGHTTP2_ERR_UNSUPPORTED_VERSION:[0,0,1,""],nghttp2_window_update:[0,2,1,""],NGHTTP2_DATA:[0,0,1,""],nghttp2_frame_hd:[0,2,1,""],NGHTTP2_ERR_INVALID_STREAM_STATE:[0,0,1,""],NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE:[0,0,1,""],NGHTTP2_STREAM_CLOSED:[0,0,1,""],NGHTTP2_SETTINGS_MAX:[0,0,1,""],nghttp2_headers_category:[0,2,1,""],nghttp2_error_code:[0,2,1,""],NGHTTP2_REFUSED_STREAM:[0,0,1,""],nghttp2_on_data_chunk_recv_callback:[0,2,1,""],NGHTTP2_ERR_START_STREAM_NOT_ALLOWED:[0,0,1,""],nghttp2_strerror:[0,3,1,""],nghttp2_gzip_inflate_del:[0,3,1,""],NGHTTP2_ERR_FATAL:[0,0,1,""],nghttp2_submit_goaway:[0,3,1,""],nghttp2_error:[0,2,1,""],NGHTTP2_INITIAL_CONNECTION_WINDOW_SIZE:[0,0,1,""],NGHTTP2_ERR_NOMEM:[0,0,1,""],NGHTTP2_NO_ERROR:[0,0,1,""],NGHTTP2_ERR_DEFERRED:[0,0,1,""],nghttp2_push_promise:[0,2,1,""],NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE:[0,0,1,""],nghttp2_session_get_outbound_queue_size:[0,3,1,""],nghttp2_rst_stream:[0,2,1,""],NGHTTP2_PROTO_VERSION_ID_LEN:[0,0,1,""],NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS:[0,0,1,""],nghttp2_data_source_read_callback:[0,2,1,""],NGHTTP2_ERR_WOULDBLOCK:[0,0,1,""],nghttp2_session_resume_data:[0,3,1,""],NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE:[0,0,1,""],NGHTTP2_PRI_DEFAULT:[0,0,1,""],nghttp2_session_server_new:[0,3,1,""],NGHTTP2_FLAG_END_PUSH_PROMISE:[0,0,1,""],NGHTTP2_ERR_INVALID_ARGUMENT:[0,0,1,""],nghttp2_submit_push_promise:[0,3,1,""],NGHTTP2_ERR_GOAWAY_ALREADY_SENT:[0,0,1,""],nghttp2_session_mem_recv:[0,3,1,""],nghttp2_flag:[0,2,1,""],NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS:[0,0,1,""],NGHTTP2_HCAT_REQUEST:[0,0,1,""],nghttp2_ping:[0,2,1,""],nghttp2_gzip:[0,2,1,""],NGHTTP2_FLAG_END_STREAM:[0,0,1,""],NGHTTP2_ERR_EOF:[0,0,1,""],NGHTTP2_HCAT_HEADERS:[0,0,1,""],NGHTTP2_SETTINGS:[0,0,1,""],nghttp2_frame:[0,2,1,""],NGHTTP2_ERR_DEFERRED_DATA_EXIST:[0,0,1,""],NGHTTP2_CANCEL:[0,0,1,""],nghttp2_send_callback:[0,2,1,""],NGHTTP2_ERR_INVALID_STREAM_ID:[0,0,1,""],nghttp2_on_frame_send_callback:[0,2,1,""],nghttp2_session_client_new:[0,3,1,""],NGHTTP2_VERSION:[0,0,1,""],nghttp2_session:[0,2,1,""],NGHTTP2_COMPRESSION_ERROR:[0,0,1,""],NGHTTP2_HCAT_PUSH_RESPONSE:[0,0,1,""],nghttp2_submit_headers:[0,3,1,""],nghttp2_recv_callback:[0,2,1,""],nghttp2_session_get_stream_user_data:[0,3,1,""],NGHTTP2_FLAG_PRIORITY:[0,0,1,""],nghttp2_on_data_send_callback:[0,2,1,""],nghttp2_nv:[0,2,1,""],NGHTTP2_FLAG_END_FLOW_CONTROL:[0,0,1,""],nghttp2_on_unknown_frame_recv_callback:[0,2,1,""],NGHTTP2_ERR_STREAM_CLOSED:[0,0,1,""],nghttp2_opt:[0,2,1,""],NGHTTP2_ERR_CALLBACK_FAILURE:[0,0,1,""],nghttp2_on_invalid_frame_recv_callback:[0,2,1,""],NGHTTP2_FLOW_CONTROL_ERROR:[0,0,1,""],nghttp2_session_set_option:[0,3,1,""],NGHTTP2_ERR_STREAM_CLOSING:[0,0,1,""],nghttp2_session_fail_session:[0,3,1,""],NGHTTP2_PROTO_VERSION_ID:[0,0,1,""],nghttp2_settings_id:[0,2,1,""],NGHTTP2_HEADERS:[0,0,1,""],nghttp2_session_send:[0,3,1,""],NGHTTP2_PROTOCOL_ERROR:[0,0,1,""],nghttp2_gzip_inflate:[0,3,1,""],nghttp2_session_upgrade:[0,3,1,""],nghttp2_session_del:[0,3,1,""],nghttp2_settings:[0,2,1,""],nghttp2_on_frame_not_send_callback:[0,2,1,""],nghttp2_submit_data:[0,3,1,""],nghttp2_submit_response:[0,3,1,""],NGHTTP2_CLIENT_CONNECTION_HEADER:[0,0,1,""],NGHTTP2_FLAG_NONE:[0,0,1,""],NGHTTP2_FLAG_END_HEADERS:[0,0,1,""],nghttp2_on_frame_recv_parse_error_callback:[0,2,1,""],nghttp2_submit_settings:[0,3,1,""],NGHTTP2_HCAT_RESPONSE:[0,0,1,""],nghttp2_mem_chunk:[0,2,1,""],nghttp2_priority:[0,2,1,""],nghttp2_session_want_read:[0,3,1,""],NGHTTP2_RST_STREAM:[0,0,1,""],nghttp2_on_stream_close_callback:[0,2,1,""],NGHTTP2_PUSH_PROMISE:[0,0,1,""],nghttp2_data_provider:[0,2,1,""],nghttp2_on_request_recv_callback:[0,2,1,""],nghttp2_session_recv:[0,3,1,""],NGHTTP2_INITIAL_WINDOW_SIZE:[0,0,1,""],NGHTTP2_WINDOW_UPDATE:[0,0,1,""],NGHTTP2_SETTINGS_FLOW_CONTROL_OPTIONS:[0,0,1,""],nghttp2_session_want_write:[0,3,1,""],nghttp2_submit_priority:[0,3,1,""],nghttp2_headers:[0,2,1,""],nghttp2_before_frame_send_callback:[0,2,1,""],NGHTTP2_PING:[0,0,1,""],NGHTTP2_GOAWAY:[0,0,1,""],NGHTTP2_ERR_GZIP:[0,0,1,""],nghttp2_submit_ping:[0,3,1,""],nghttp2_data_source:[0,2,1,""],NGHTTP2_ERR_STREAM_SHUT_WR:[0,0,1,""],NGHTTP2_PRIORITY:[0,0,1,""],nghttp2_submit_request:[0,3,1,""],nghttp2_pack_settings_payload:[0,3,1,""],nghttp2_gzip_inflate_new:[0,3,1,""]},nghttp2_session_callbacks:{on_invalid_frame_recv_callback:[0,1,1,""],before_frame_send_callback:[0,1,1,""],on_stream_close_callback:[0,1,1,""],on_data_chunk_recv_callback:[0,1,1,""],on_unknown_frame_recv_callback:[0,1,1,""],send_callback:[0,1,1,""],nghttp2_on_frame_recv_parse_error_callback:[0,1,1,""],on_frame_send_callback:[0,1,1,""],on_frame_recv_callback:[0,1,1,""],on_data_send_callback:[0,1,1,""],on_frame_not_send_callback:[0,1,1,""],on_request_recv_callback:[0,1,1,""],on_data_recv_callback:[0,1,1,""],recv_callback:[0,1,1,""]},nghttp2_frame:{push_promise:[0,1,1,""],settings:[0,1,1,""],ping:[0,1,1,""],rst_stream:[0,1,1,""],priority:[0,1,1,""],headers:[0,1,1,""],goaway:[0,1,1,""],window_update:[0,1,1,""],hd:[0,1,1,""]},nghttp2_mem_chunk:{length:[0,1,1,""],data:[0,1,1,""]},nghttp2_data_provider:{source:[0,1,1,""],read_callback:[0,1,1,""]},nghttp2_priority:{pri:[0,1,1,""],hd:[0,1,1,""]},nghttp2_settings_entry:{settings_id:[0,1,1,""],value:[0,1,1,""]},nghttp2_window_update:{hd:[0,1,1,""],window_size_increment:[0,1,1,""]},nghttp2_frame_hd:{stream_id:[0,1,1,""],length:[0,1,1,""],type:[0,1,1,""],flags:[0,1,1,""]},nghttp2_ping:{hd:[0,1,1,""]},nghttp2_rst_stream:{error_code:[0,1,1,""],hd:[0,1,1,""]},nghttp2_nv:{valuelen:[0,1,1,""],namelen:[0,1,1,""],name:[0,1,1,""],value:[0,1,1,""]},nghttp2_headers:{nvlen:[0,1,1,""],pri:[0,1,1,""],hd:[0,1,1,""],nva:[0,1,1,""]},nghttp2_goaway:{opaque_data:[0,1,1,""],error_code:[0,1,1,""],opaque_data_len:[0,1,1,""],hd:[0,1,1,""],last_stream_id:[0,1,1,""]},nghttp2_data_source:{fd:[0,1,1,""],ptr:[0,1,1,""]},nghttp2_push_promise:{promised_stream_id:[0,1,1,""],nvlen:[0,1,1,""],nva:[0,1,1,""],hd:[0,1,1,""]},nghttp2_settings:{niv:[0,1,1,""],hd:[0,1,1,""],iv:[0,1,1,""]}},terms:{all:0,code:[0,1],on_unknown_frame_recv_callback:0,illustr:1,nghttp2_err_start_stream_not_allow:0,my_obj:0,lack:1,nghttp2_frame_hd:0,nghttp2_cancel:0,prefix:0,overlap:0,follow:[0,1],ptr:0,categori:0,"const":0,uint8_t:0,unpack:0,indirectli:0,specif:0,send:[0,1],program:[2,1],under:[0,1],sens:0,fatal:0,spec:0,sent:0,sourc:0,string:0,nul:0,"void":0,nghttp2_flag_end_push_promis:0,nghttp2_submit_p:0,failur:0,veri:0,retriev:0,tri:0,nghttp2_on_frame_recv_callback:0,foo:0,level:0,did:0,list:0,nghttp2_headers_categori:0,settings_id:0,concurr:0,optlen:0,refer:[0,2],prepar:0,pleas:1,prevent:0,on_stream_close_callback:0,"0x1":0,direct:1,"0x4":0,zero:0,pass:0,download:1,further:0,port:1,settings_flow_control_opt:0,neg:0,invok:0,current:[0,1],version:[0,1,2],base64url:0,"new":[0,1],net:1,on_invalid_ctrl_recv_callback:0,"public":0,nghttp2_session_resume_data:0,on_ctrl_recv_callback:0,abov:[0,1],gener:[0,1],onli:[0,1],here:[0,1],closur:0,met:0,nghttp2_rst_stream:0,ubuntu:1,nghttp2_opt_no_auto_window_upd:0,depend:0,becom:0,modifi:1,sinc:0,valu:0,nextprotoneg:0,incom:[0,1],remark:[0,2],aug:1,anymor:0,host:[0,1],autoreconf:1,queue:0,prior:1,behav:0,nghttp2_submit_prior:0,aka:[0,1],nghttp2_err_gzip:0,nghttp2_frame:0,nghttp2_err_goaway_already_s:0,appli:0,transit:0,prefer:0,put:0,api:[0,2],org:[0,1,2],instal:1,should:0,"byte":[0,1],select:[0,1],from:[0,1,2],describ:0,would:0,memori:0,upgrad:[0,1],next:[0,1],call:[0,1],asset:1,nghttp2_nv:0,nghttp2_on_invalid_frame_recv_callback:0,nghttp2_version:0,type:[0,1,2],until:0,reorder:0,more:0,goawai:[0,1],nghttp2_set:0,nghttp2_pri_default:0,rst_stream:0,inflater_ptr:0,user_data:0,flag:[0,1],accept:1,nghttp2_submit_window_upd:0,known:0,hold:0,nghttp2_err_wouldblock:0,must:0,endpoint:0,word:0,tunnel:1,nghttp2_settings_id:0,work:1,stream_user_data:0,dev:1,nghttp2_session_fail_sess:0,remain:0,can:[0,1],http2:[0,1,2],could:0,control:0,defer:0,stream:[0,1],give:0,process:0,pad:1,indic:0,abort:0,want:0,onlin:1,nghttp2_header:0,pong:0,nghttp2_err_invalid_stream_st:0,unsign:0,occur:0,nghttp2_settings_flow_control_opt:0,alwai:0,multipl:0,secur:1,nghttp2_session_want_read:0,charset:1,ping:0,nghttp2_flag_non:0,write:1,nghttp2_err_fat:0,pair:0,sever:[0,1],serveraddr:1,reject:0,sec9:0,instead:[0,1],simpl:0,updat:0,nghttp2_on_request_recv_callback:0,npn:[0,1],resourc:[0,2],default04:1,after:0,spdylai:1,nghttp2_session_get_pri_lowest:0,badli:0,mai:0,nghttp2_compression_error:0,alloc:0,autotool:1,nghttp2_err_frame_too_larg:0,opaqu:0,nvlen:0,element:0,issu:0,nghttp2_flag_prior:0,"switch":1,ssize_t:0,anoth:0,order:0,talk:1,includ:[0,2],frontend:1,nghttp2_err_stream_shut_wr:0,hypertext:[2,1],move:0,becaus:0,libcunit1:1,through:1,untouch:0,size_t:0,nghttp2_err_unsupported_vers:0,still:[0,1],mainli:0,paramet:0,typedef:[0,2],fix:1,precondit:0,max_outlen:0,nghttp2_hcat_push_respons:0,window:0,pend:0,nghttp2_err_eof:0,hidden:0,therefor:0,nghttp2_session_send:0,inlen:0,valuelen:0,recept:0,them:0,"return":[0,1],thei:[0,1],nghttp2_push_promis:0,nghttp2_goawai:0,initi:0,"break":0,nghttp2_initial_max_concurrent_stream:0,nghttp2_submit_head:0,promis:0,half:0,nov:1,choic:0,document:[2,1],name:[0,1],nghttp2_err_callback_failur:0,nghttp2_send_callback:0,nghttp2_frame_typ:0,no_error:1,drop:0,achiev:0,nghttp2_flow_control_error:0,mode:1,each:0,debug:0,fulli:0,side:0,trailer:0,mean:0,protocol_error:0,chunk:0,continu:1,nghttp2_err_temporal_callback_failur:0,"static":[0,1],connect:[0,1],http:[0,1,2],beyond:0,todo:0,out:0,space:0,goe:1,req:0,payload:0,end_flow_control:[0,1],etag:1,suitabl:0,on_ctrl_not_send_callback:0,nghttp2_client_connection_header_len:0,got:0,on_frame_not_send_callback:0,recv_callback:0,end_stream:[0,1],proxi:[2,1],state:0,differ:0,free:0,reason:0,base:1,inflat:0,usual:0,releas:0,nghttp2_session_mem_recv:0,nghttp2_flag:0,recv:1,spdy:[0,1],thread:1,befor:0,syn_repli:0,omit:0,openssl:1,keep:0,length:[0,1],place:0,outsid:[0,1],enough:0,assign:0,optval:0,first:[0,1],oper:[0,1],rang:[0,1],directli:0,arrai:0,number:0,yourself:1,nghttp2_protocol_error:0,alreadi:0,messag:0,nghttp2_on_frame_send_callback:0,opaque_data:[0,1],on_frame_recv_callback:0,open:[0,1],primari:0,size:0,prioriti:0,given:0,"long":0,script:1,unknown:0,data_prd:0,nghttp2_session_get_stream_user_data:0,least:[0,1],on_unknown_ctrl_recv_callback:0,necessarili:0,draft:[0,1,2],too:0,similarli:0,nghttp2_frame_too_larg:0,internal_error:0,conveni:0,"final":0,store:0,on_ctrl_send_callback:0,ssl_ctx:0,option:[0,1],tool:[2,1],copi:0,nghttp2_proto_version_id_len:0,specifi:[0,1],nghttp2_client_connection_head:0,github:1,pars:0,termin:[0,1],kind:0,scheme:[0,1],provid:0,remov:0,see:[0,1],structur:0,charact:0,project:1,defat:1,entri:0,nghttp2_session_del:0,read_callback:0,nghttp2_error:0,"function":[0,1,2],window_size_incr:[0,1],respons:[0,1],pri:0,argument:[0,1],packag:1,increment:0,reserv:0,need:[0,1],exclud:0,nghttp2_on_frame_recv_parse_error_callback:0,sat:1,bitwis:0,outbound:0,unexpect:0,callback:0,"0x04":1,"0x00":1,payloadlen:0,note:[0,1],nghttp2_refused_stream:0,exampl:[0,1],take:0,which:[0,1],noth:0,singl:[0,1],opaque_data_len:0,sure:1,unless:0,allow:0,"enum":[0,2],though:1,aaaabaaaagqaaaahaad__w:1,compress:1,settings_max_concurrent_stream:0,nghttp2_hcat_request:0,most:0,nghttp2_flag_pong:0,thi:[0,1,2],nghttp2_before_frame_send_callback:0,nghttp2_error_cod:0,nghttp2_err_stream_id_not_avail:0,don:0,http2_select:0,url:1,doc:1,later:0,request:[0,1],uri:[0,1],doe:0,nghttp2_pack_settings_payload:0,nghttp2_gzip_inflate_new:0,fact:0,on_invalid_frame_recv_callback:0,text:1,hostnam:1,verbos:1,session:0,pkg:1,protocol:[0,1,2],data:[0,1],absolut:0,nghttp2_submit_push_promis:0,nghttp2_submit_rst_stream:0,refused_stream:0,configur:[0,1],apach:1,figur:1,before_ctrl_send_callback:0,nghttp2_err_invalid_stream_id:0,experiment:[2,1],queu:0,local:0,over:1,nghttp2_err_proto:0,syn_stream:0,variou:0,get:[0,1],window_upd:[0,1],outlen:0,end_head:[0,1],ssl:[0,1],settings_initial_window_s:0,cannot:0,nghttp2_data:0,optnam:0,increas:0,utf:1,tatsuhiro:1,requir:[0,1,2],before_frame_send_callback:0,nghttp2_no_error:0,nghttp2_submit_respons:0,bar:0,enabl:1,ietf:[2,1],possibl:0,push_promis:0,method:[0,1],nghttp2_err_header_comp:0,stuff:0,nghttp2_strerror:0,contain:[0,1],nghttp2_window_upd:0,nghttp2_gzip_inflate_del:0,user:[0,1],certif:1,set:[0,1],frame:[0,1],knowledg:1,nghttp2_submit_goawai:0,temporarili:0,result:0,arg:0,fail:0,close:[0,1],analog:0,statu:[0,1,2],correctli:0,vari:[0,1],someth:0,below:0,written:0,bridg:1,nghttp2_flag_end_flow_control:0,assoc_stream_id:0,nghttp2_on_data_chunk_recv_callback:0,nghttp2_initial_connection_window_s:0,accord:0,kei:0,flow:0,extens:1,entir:0,len:0,last_stream_id:[0,1],nghttp2_ping:0,tue:1,addit:0,bodi:0,cf405c:1,last:[0,1],nghttp2_proto_version_id:0,region:0,nghttp2_session_want_writ:0,against:0,tempor:0,etc:[0,1],agent:1,compression_error:0,on_request_recv_callback:0,browser:1,whole:0,nghttp2_data_provid:0,point:0,color:1,int32_t:0,address:1,rfc2616:0,header:[0,1],nghttp2_prioriti:0,non:[0,1],shutdown:0,path:[0,1],cancel:0,nghttp2_on_frame_not_send_callback:0,nghttp2_session:0,assum:0,backend:1,nghttp2_recv_callback:0,union:[0,2],due:0,been:0,nghttp2_on_data_send_callback:0,trigger:0,interpret:0,interest:1,nghttp2_hcat_head:0,date:1,nghttp2_on_unknown_frame_recv_callback:0,nghttp2_err_nomem:0,nghttp2_session_server_new:0,both:0,nghttp2_opt:0,lib_error_cod:0,ani:[0,1],repres:0,those:0,"case":0,multi:1,subsequ:0,nghttp2_settings_initial_window_s:0,zlib:1,sourceforg:1,defin:0,"while":0,behavior:0,error:0,nghttp2_flag_end_stream:0,invoc:0,listen:1,on_data_chunk_recv_callback:0,nghttp2_session_callback:0,helper:0,libxml2:1,squid:1,select_next_proto_cb:0,promised_stream_id:0,itself:0,conf:1,crash:0,flow_control_error:0,ascii:0,pointer:0,frame_too_larg:0,"null":0,develop:[2,1],perform:[0,1],make:[0,1],belong:0,same:0,member:0,pac:1,headlen:0,nghttp2_on_stream_close_callback:0,start:[0,1],complet:0,nghttp2_session_recv:0,context:0,mytyp:0,effect:0,on_ctrl_recv_parse_error_callback:0,nghttp2_err_deferred_data_exist:0,remot:[0,1],moment:1,zlib1g:1,ownership:0,mani:0,build:[2,1],postpon:0,nghttp2_submit_syn_stream:0,niv:[0,1],implement:[0,1,2],"45adabdf282c0":1,lower:0,com:0,thu:0,nghttp:1,without:[0,1],client:[0,1,2],uint32_t:0,resouc:1,error_cod:[0,1],nghttp2_data_sourc:0,left:0,end_push_promis:0,nghttp2_err_def:0,nghttp2_submit_set:0,identifi:0,just:[0,1],nghttp2_on_data_recv_callback:0,send_callback:0,"0x01":1,nghttp2_gzip_infl:0,via:1,multiplex:1,config:1,on_frame_send_callback:0,previous:0,web:1,"0x8":0,struct:[0,2],easi:1,also:0,priorit:0,except:0,identif:0,haz:0,other:0,input:0,on_data_send_callback:0,nghttp2_select_next_protocol:0,gmt:1,applic:[0,1],nvu:1,format:0,read:0,caller:0,period:0,outlen_ptr:0,nghttp2_session_set_opt:0,know:0,nva:0,step:0,bit:0,associ:0,delta_window_s:0,like:[0,1],success:1,arbitrari:0,uint16_t:0,signal:0,manual:1,html:[0,1,2],nghttp2_pri_lowest:0,server:[0,1,2],nghttp2_flag_end_head:0,tlen:0,have:0,output:1,stream_clos:0,www:0,revers:1,settings_payload:0,deal:0,hostport:0,nghttp2_session_client_new:0,some:0,back:0,sampl:1,integ:0,librari:[0,1,2],transmiss:0,nonzero:0,lead:0,nghttp2_data_source_read_callback:0,octet:0,per:0,outgo:0,larg:0,unit:1,condit:0,nghttp2_session_upgrad:0,duplic:0,localhost:1,either:0,machin:1,object:0,run:1,post:0,reach:0,inspect:0,chart:0,settings_payloadlen:0,found:1,peer:0,major:0,nghttp2_session_get_outbound_queue_s:0,src:1,about:0,actual:0,socket:1,commun:1,inlen_ptr:0,nghttp2_gzip:0,chrome:1,idl:0,nghttp2_submit_data:0,nghttp2_settings_max_concurrent_stream:0,ssl_tlsext_err_ok:0,disabl:1,block:[0,1],on_data_recv_callback:0,nghttp2_settings_entri:0,nghttp2_err_invalid_fram:0,deploi:1,encod:[0,1],automat:0,ssl_ctx_set_next_proto_select_cb:0,automak:1,stream_id:[0,1],empti:0,chang:0,inclus:0,git:[0,1,2],nghttp2_hcat_respons:0,wai:[0,1],transfer:[0,1,2],support:[0,1],submit:0,avail:[0,1],intention:0,nghttp2:[0,1,2],nghttp2_err_stream_clos:0,low:0,ipv6:1,forward:1,findproxyforurl:1,strictli:0,ipv4:1,treat:0,lowest:0,head:0,session_ptr:0,gzip:[0,1],form:0,offer:1,jul:1,nghttp2_err_invalid_st:0,content:[2,1],taken:0,link:1,highest:0,buf:0,bug:1,suppli:0,succe:0,nghttp2_internal_error:0,nghttp2_stream_clos:0,"default":[0,1],nghttp2_settings_max:0,access:1,googlecod:0,maximum:0,tell:0,asynchron:0,deafult:1,nghttpx:1,nghttpd:1,inform:1,autoconf:1,libev:1,expect:1,nghttp2_initial_window_s:0,featur:1,shrpx:1,creat:[0,1],"int":0,httpbi:[2,1],descriptor:0,"char":0,incomplet:1,exist:[0,1],file:[0,1],nghttp2_err_invalid_header_block:0,macro:[0,2],nghttp2_mem_chunk:0,googl:1,when:0,detail:0,invalid:0,field:0,valid:[0,1],role:0,nghttp2_err_invalid_argu:0,test:1,you:[0,1],libssl:1,sequenc:0,decod:0,technot:0,libtool:1,alpn:[0,1],debian:1,serial:0,receiv:0,cunit:1,eof:0,algorithm:0,directori:1,reliabl:0,mask:0,nghttp2_settings_flag:0,nghttp2_submit_request:0,namelen:0,portion:0,ignor:0,time:[0,1],push:0,deflat:[0,1],avoid:1},objtypes:{"0":"c:macro","1":"c:member","2":"c:type","3":"c:function"},titles:["API Reference","nghttp2 - HTTP/2.0 C Library","nghttp2 - HTTP/2.0 C Library"],objnames:{"0":["c","macro","C macro"],"1":["c","member","C member"],"2":["c","type","C type"],"3":["c","function","C function"]},filenames:["apiref","package_README","index"]})
\ No newline at end of file