From 35a2e8fff7af6122ac63f62f234a3d59fb4bb5e3 Mon Sep 17 00:00:00 2001
From: Tatsuhiro Tsujikawa
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:
+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:
+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:
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/
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=)
+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:
-
-
-
-
+
+
+
+
Mode option
@@ -259,61 +312,67 @@ HTTP-draft-04/2.0, SPDY/HTTPS. It has several operation modes:
-default
-HTTP/2.0, SPDY, HTTPS
+default mode
+HTTP/2.0, SPDY, HTTP/1.1 (TLS)
HTTP/1.1
Reverse proxy
--spdy
-HTTP/2.0, SPDY, HTTPS
+HTTP/2.0, SPDY, HTTP/1.1 (TLS)
HTTP/1.1
SPDY proxy
--spdy-bridge
-HTTP/2.0, SPDY, HTTPS
-HTTP/2.0
-SPDY proxy
+HTTP/2.0, SPDY, HTTP/1.1 (TLS)
+HTTP/2.0 (TLS)
+
--client
-HTTP/1.1
-HTTP/2.0
-1.1 <-> 2.0 conversion
+HTTP/2.0, HTTP/1.1
+HTTP/2.0 (TLS)
+
--client-proxy
-HTTP/1.1
-HTTP/2.0
+HTTP/2.0, HTTP/1.1
+HTTP/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