From df2907812918b3594a8a20eef5e4c56b417f2453 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sat, 23 Aug 2014 22:09:19 +0900 Subject: [PATCH] Update doc --- apiref.html | 440 ++++++++++++++++++++----------------- genindex.html | 46 ++-- nghttp2.h.html | 503 +++++++++++++++++++++++++++---------------- objects.inv | Bin 3852 -> 3847 bytes package_README.html | 2 +- searchindex.js | 2 +- tutorial-client.html | 87 +++++--- tutorial-server.html | 90 +++++--- 8 files changed, 700 insertions(+), 470 deletions(-) diff --git a/apiref.html b/apiref.html index 106da994..7ae589c9 100644 --- a/apiref.html +++ b/apiref.html @@ -1274,7 +1274,7 @@ size_t nvlen
-nghttp2_error_code error_code
+uint32_t error_code

The error code. See nghttp2_error_code.

@@ -1395,7 +1395,7 @@ int32_t last_stream_id
-nghttp2_error_code error_code
+uint32_t error_code

The error code. See nghttp2_error_code.

@@ -1596,6 +1596,8 @@ it must return nghttp2_session_send() to send data to the remote endpoint. If the application uses solely nghttp2_session_mem_send() instead, this callback function is unnecessary.

+

To set this callback to nghttp2_session_callbacks, use +nghttp2_session_callbacks_set_send_callback().

@@ -1617,6 +1619,8 @@ Returning 0 is treated as nghttp2_session_recv() to receive data from the remote endpoint. If the application uses solely nghttp2_session_mem_recv() instead, this callback function is unnecessary.

+

To set this callback to nghttp2_session_callbacks, use +nghttp2_session_callbacks_set_recv_callback().

@@ -1642,18 +1646,21 @@ If frame->hd.flags nghttp2_session_recv() and nghttp2_session_mem_recv() functions immediately return NGHTTP2_ERR_CALLBACK_FAILURE.

+

To set this callback to nghttp2_session_callbacks, use +nghttp2_session_callbacks_set_on_frame_recv_callback().

-typedef int (*nghttp2_on_invalid_frame_recv_callback)(nghttp2_session *session, const nghttp2_frame *frame, nghttp2_error_code error_code, void *user_data)
+typedef int (*nghttp2_on_invalid_frame_recv_callback)(nghttp2_session *session, const nghttp2_frame *frame, uint32_t error_code, void *user_data)

Callback function invoked by nghttp2_session_recv() when an -invalid non-DATA frame is received. The error_code is one of the -nghttp2_error_code and indicates the error. When this -callback function is invoked, the library automatically submits -either RST_STREAM or GOAWAY frame. The user_data pointer is the -third argument passed in to the call to -nghttp2_session_client_new() or nghttp2_session_server_new().

+invalid non-DATA frame is received. The error_code indicates the +error. It is usually one of the nghttp2_error_code but +that is not guaranteed. When this callback function is invoked, +the library automatically submits either RST_STREAM or GOAWAY +frame. The user_data pointer is the third argument passed in to +the call to nghttp2_session_client_new() or +nghttp2_session_server_new().

If frame is HEADERS or PUSH_PROMISE, the nva and nvlen member of their data structure are always NULL and 0 respectively.

@@ -1661,6 +1668,8 @@ respectively.

If nonzero is returned, it is treated as fatal error and nghttp2_session_recv() and nghttp2_session_send() functions immediately return NGHTTP2_ERR_CALLBACK_FAILURE.

+

To set this callback to nghttp2_session_callbacks, use +nghttp2_session_callbacks_set_on_invalid_frame_recv_callback().

@@ -1687,6 +1696,8 @@ region included in the input bytes.

If nonzero is returned, it is treated as fatal error and nghttp2_session_recv() and nghttp2_session_mem_recv() functions immediately return NGHTTP2_ERR_CALLBACK_FAILURE.

+

To set this callback to nghttp2_session_callbacks, use +nghttp2_session_callbacks_set_on_data_chunk_recv_callback().

@@ -1700,6 +1711,8 @@ the call to nghttp2_session_recv() and nghttp2_session_send() functions immediately return NGHTTP2_ERR_CALLBACK_FAILURE.

+

To set this callback to nghttp2_session_callbacks, use +nghttp2_session_callbacks_set_before_frame_send_callback().

@@ -1712,6 +1725,8 @@ typedef int (*nghttp2_on_frame_send_callback)(nghttp2_session_recv() and nghttp2_session_send() functions immediately return NGHTTP2_ERR_CALLBACK_FAILURE.

+

To set this callback to nghttp2_session_callbacks, use +nghttp2_session_callbacks_set_on_frame_send_callback().

@@ -1727,41 +1742,28 @@ argument passed in to the call to nghttp2_session_recv() and nghttp2_session_send() functions immediately return NGHTTP2_ERR_CALLBACK_FAILURE.

+

To set this callback to nghttp2_session_callbacks, use +nghttp2_session_callbacks_set_on_frame_not_send_callback().

-typedef int (*nghttp2_on_stream_close_callback)(nghttp2_session *session, int32_t stream_id, nghttp2_error_code error_code, void *user_data)
+typedef int (*nghttp2_on_stream_close_callback)(nghttp2_session *session, int32_t stream_id, uint32_t error_code, void *user_data)

Callback function invoked when the stream stream_id is closed. The reason of closure is indicated by the error_code. The -stream_user_data, which was specified in nghttp2_submit_request() -or nghttp2_submit_headers(), is still available in this function. -The user_data pointer is the third argument passed in to the call -to nghttp2_session_client_new() or +error_code is usually one of nghttp2_error_code, but that +is not guaranteed. The stream_user_data, which was specified in +nghttp2_submit_request() or nghttp2_submit_headers(), is still +available in this function. The user_data pointer is the third +argument passed in to the call to nghttp2_session_client_new() or nghttp2_session_server_new().

This function is also called for a stream in reserved state.

The implementation of this function must return 0 if it succeeds. If nonzero is returned, it is treated as fatal error and nghttp2_session_recv() and nghttp2_session_send() functions immediately return NGHTTP2_ERR_CALLBACK_FAILURE.

-
- -
-
-typedef int (*nghttp2_on_unknown_frame_recv_callback)(nghttp2_session *session, const uint8_t *head, size_t headlen, const uint8_t *payload, size_t payloadlen, void *user_data)
-

Callback function invoked when the received frame type is unknown. -The head is the pointer to the header of the received frame. The -headlen is the length of the head. According to the spec, the -headlen is always 8. In other words, the head is the first 8 -bytes of the received frame. The payload is the pointer to the -data portion of the received frame. The payloadlen is the length -of the payload. This is the data after the length field. The -user_data pointer is the third argument passed in to the call to -nghttp2_session_client_new() or nghttp2_session_server_new().

-

The implementation of this function must return 0 if it succeeds. -If nonzero is returned, it is treated as fatal error and -nghttp2_session_recv() and nghttp2_session_send() functions -immediately return NGHTTP2_ERR_CALLBACK_FAILURE.

+

To set this callback to nghttp2_session_callbacks, use +nghttp2_session_callbacks_set_on_stream_close_callback().

@@ -1782,6 +1784,8 @@ if NGHTTP2_ERR_CALLBACK_FAILURE is returned, nghttp2_session_mem_recv() function will immediately return NGHTTP2_ERR_CALLBACK_FAILURE.

+

To set this callback to nghttp2_session_callbacks, use +nghttp2_session_callbacks_set_on_begin_headers_callback().

@@ -1834,6 +1838,8 @@ the other nonzero value is returned, it is treated as NGHTTP2_ERR_CALLBACK_FAILURE is returned, nghttp2_session_recv() and nghttp2_session_mem_recv() functions immediately return NGHTTP2_ERR_CALLBACK_FAILURE.

+

To set this callback to nghttp2_session_callbacks, use +nghttp2_session_callbacks_set_on_header_callback().

@@ -1849,105 +1855,34 @@ inclusive. Choosing number not in this range will be treated as NGHTTP2_ERR_CALLBACK_FAILURE will make nghttp2_session_send() function immediately return NGHTTP2_ERR_CALLBACK_FAILURE.

+

To set this callback to nghttp2_session_callbacks, use +nghttp2_session_callbacks_set_select_padding_callback().

+
+ +
+
+typedef int (*nghttp2_on_begin_frame_callback)(nghttp2_session *session, const nghttp2_frame_hd *hd, void *user_data)
+

Callback function invoked when a frame header is received. The +hd points to received frame header.

+

This callback won’t be called for CONTINUATION frame because +library treats HEADERS/PUSH_PROMISE + CONTINUATION as single frame.

+

If both nghttp2_on_begin_frame_callback and +nghttp2_on_begin_headers_callback are set and HEADERS or +PUSH_PROMISE is received, nghttp2_on_begin_frame_callback +will be called first.

+

The implementation of this function must return 0 if it succeeds. +If nonzero value is returned, it is treated as fatal error and +nghttp2_session_recv() and nghttp2_session_mem_recv() functions +immediately return NGHTTP2_ERR_CALLBACK_FAILURE.

+

To set this callback to nghttp2_session_callbacks, use +nghttp2_session_callbacks_set_on_begin_frame_callback().

nghttp2_session_callbacks
-

Callback functions.

-
-
-nghttp2_send_callback send_callback
-

Callback function invoked when the session wants to send data -to the remote peer. This callback is not necessary if the -application uses solely nghttp2_session_mem_send() to serialize -data to transmit.

-
- -
-
-nghttp2_recv_callback recv_callback
-

Callback function invoked when the session wants to receive -data from the remote peer. This callback is not necessary if the -application uses solely nghttp2_session_mem_recv() to process -received data.

-
- -
-
-nghttp2_on_frame_recv_callback on_frame_recv_callback
-

Callback function invoked by nghttp2_session_recv() when a -frame is received.

-
- -
-
-nghttp2_on_invalid_frame_recv_callback on_invalid_frame_recv_callback
-

Callback function invoked by nghttp2_session_recv() when an -invalid non-DATA frame is received.

-
- -
-
-nghttp2_on_data_chunk_recv_callback on_data_chunk_recv_callback
-

Callback function invoked when a chunk of data in DATA frame is -received.

-
- -
-
-nghttp2_before_frame_send_callback before_frame_send_callback
-

Callback function invoked before a non-DATA frame is sent.

-
- -
-
-nghttp2_on_frame_send_callback on_frame_send_callback
-

Callback function invoked after a frame is sent.

-
- -
-
-nghttp2_on_frame_not_send_callback on_frame_not_send_callback
-

The callback function invoked when a non-DATA frame is not sent -because of an error.

-
- -
-
-nghttp2_on_stream_close_callback on_stream_close_callback
-

Callback function invoked when the stream is closed.

-
- -
-
-nghttp2_on_unknown_frame_recv_callback on_unknown_frame_recv_callback
-

Callback function invoked when the received frame type is -unknown.

-
- -
-
-nghttp2_on_begin_headers_callback on_begin_headers_callback
-

Callback function invoked when the reception of header block in -HEADERS or PUSH_PROMISE is started.

-
- -
-
-nghttp2_on_header_callback on_header_callback
-

Callback function invoked when a header name/value pair is -received.

-
- -
-
-nghttp2_select_padding_callback select_padding_callback
-

Callback function invoked when the library asks application how -many padding bytes are required for the transmission of the given -frame.

-
- +

Callback functions for nghttp2_session. The details of +this structure are intentionally hidden from the public API.

@@ -1972,6 +1907,121 @@ this structure are intentionally hidden from the public API.

Functions

+
+
+int nghttp2_session_callbacks_new(nghttp2_session_callbacks **callbacks_ptr)
+

Initializes *callbacks_ptr with NULL values.

+

The initialized object can be used when initializing multiple +nghttp2_session objects.

+

When the application finished using this object, it can use +nghttp2_session_callbacks_del() to free its memory.

+

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

+
+
NGHTTP2_ERR_NOMEM
+
Out of memory.
+
+
+ +
+
+void nghttp2_session_callbacks_del(nghttp2_session_callbacks *callbacks)
+

Frees any resources allocated for callbacks. If callbacks is +NULL, this function does nothing.

+
+ +
+
+void nghttp2_session_callbacks_set_send_callback(nghttp2_session_callbacks *cbs, nghttp2_send_callback send_callback)
+

Sets callback function invoked when a session wants to send data to +the remote peer. This callback is not necessary if the application +uses solely nghttp2_session_mem_send() to serialize data to +transmit.

+
+ +
+
+void nghttp2_session_callbacks_set_recv_callback(nghttp2_session_callbacks *cbs, nghttp2_recv_callback recv_callback)
+

Sets callback function invoked when the a session wants to receive +data from the remote peer. This callback is not necessary if the +application uses solely nghttp2_session_mem_recv() to process +received data.

+
+ +
+
+void nghttp2_session_callbacks_set_on_frame_recv_callback(nghttp2_session_callbacks *cbs, nghttp2_on_frame_recv_callback on_frame_recv_callback)
+

Sets callback function invoked by nghttp2_session_recv() when a +frame is received.

+
+ +
+
+void nghttp2_session_callbacks_set_on_invalid_frame_recv_callback(nghttp2_session_callbacks *cbs, nghttp2_on_invalid_frame_recv_callback on_invalid_frame_recv_callback)
+

Sets callback function invoked by nghttp2_session_recv() when an +invalid non-DATA frame is received.

+
+ +
+
+void nghttp2_session_callbacks_set_on_data_chunk_recv_callback(nghttp2_session_callbacks *cbs, nghttp2_on_data_chunk_recv_callback on_data_chunk_recv_callback)
+

Sets callback function invoked when a chunk of data in DATA frame +is received.

+
+ +
+
+void nghttp2_session_callbacks_set_before_frame_send_callback(nghttp2_session_callbacks *cbs, nghttp2_before_frame_send_callback before_frame_send_callback)
+

Sets callback function invoked before a non-DATA frame is sent.

+
+ +
+
+void nghttp2_session_callbacks_set_on_frame_send_callback(nghttp2_session_callbacks *cbs, nghttp2_on_frame_send_callback on_frame_send_callback)
+

Sets callback function invoked after a frame is sent.

+
+ +
+
+void nghttp2_session_callbacks_set_on_frame_not_send_callback(nghttp2_session_callbacks *cbs, nghttp2_on_frame_not_send_callback on_frame_not_send_callback)
+

Sets callback function invoked when a non-DATA frame is not sent +because of an error.

+
+ +
+
+void nghttp2_session_callbacks_set_on_stream_close_callback(nghttp2_session_callbacks *cbs, nghttp2_on_stream_close_callback on_stream_close_callback)
+

Sets callback function invoked when the stream is closed.

+
+ +
+
+void nghttp2_session_callbacks_set_on_begin_headers_callback(nghttp2_session_callbacks *cbs, nghttp2_on_begin_headers_callback on_begin_headers_callback)
+

Sets callback function invoked when the reception of header block +in HEADERS or PUSH_PROMISE is started.

+
+ +
+
+void nghttp2_session_callbacks_set_on_header_callback(nghttp2_session_callbacks *cbs, nghttp2_on_header_callback on_header_callback)
+

Sets callback function invoked when a header name/value pair is +received.

+
+ +
+
+void nghttp2_session_callbacks_set_select_padding_callback(nghttp2_session_callbacks *cbs, nghttp2_select_padding_callback select_padding_callback)
+

Sets callback function invoked when the library asks application +how many padding bytes are required for the transmission of the +given frame.

+
+ +
+
+void nghttp2_session_callbacks_set_on_begin_frame_callback(nghttp2_session_callbacks *cbs, nghttp2_on_begin_frame_callback on_begin_frame_callback)
+

Sets callback function invoked when a frame header is received.

+
+
int nghttp2_option_new(nghttp2_option **option_ptr)
@@ -2027,10 +2077,10 @@ int nghttp2_session_client_new(nghttp2_session_callbacks.send_callback must be -specified. If the application code uses nghttp2_session_recv(), -the nghttp2_session_callbacks.recv_callback must be -specified. The other members of callbacks can be NULL.

+

The nghttp2_send_callback must be specified. If the +application code uses nghttp2_session_recv(), the +nghttp2_recv_callback must be specified. The other members +of callbacks can be NULL.

If this function fails, *session_ptr is left untouched.

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

@@ -2047,10 +2097,10 @@ int nghttp2_session_server_new(nghttp2_session_callbacks.send_callback must be -specified. If the application code uses nghttp2_session_recv(), -the nghttp2_session_callbacks.recv_callback must be -specified. The other members of callbacks can be NULL.

+

The nghttp2_send_callback must be specified. If the +application code uses nghttp2_session_recv(), the +nghttp2_recv_callback must be specified. The other members +of callbacks can be NULL.

If this function fails, *session_ptr is left untouched.

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

@@ -2112,7 +2162,7 @@ int nghttp2_session_send(nghttp2_session_callbacks.send_callback returns +nghttp2_send_callback returns NGHTTP2_ERR_WOULDBLOCK or the outbound queue becomes empty. This function calls several callback functions which are passed when initializing the session. Here is the simple time chart @@ -2122,22 +2172,18 @@ which tells when each callback is invoked:

  • Prepare transmission of the frame.
  • If the control frame cannot be sent because some preconditions are not met (e.g., request HEADERS cannot be sent after GOAWAY), -nghttp2_session_callbacks.on_frame_not_send_callback -is invoked. Abort the following steps.
  • +nghttp2_on_frame_not_send_callback is invoked. Abort +the following steps.
  • If the frame is HEADERS, PUSH_PROMISE or DATA, -nghttp2_session_callbacks.select_padding_callback is -invoked.
  • +nghttp2_select_padding_callback is invoked.
  • If the frame is request HEADERS, the stream is opened here.
  • -
  • nghttp2_session_callbacks.before_frame_send_callback is -invoked.
  • -
  • nghttp2_session_callbacks.send_callback is invoked one -or more times to send the frame.
  • -
  • nghttp2_session_callbacks.on_frame_send_callback is -invoked.
  • +
  • nghttp2_before_frame_send_callback is invoked.
  • +
  • nghttp2_send_callback is invoked one or more times to +send the frame.
  • +
  • nghttp2_on_frame_send_callback is invoked.
  • If the transmission of the frame triggers closure of the stream, the stream is closed and -nghttp2_session_callbacks.on_stream_close_callback is -invoked.
  • +nghttp2_on_stream_close_callback is invoked.

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

    @@ -2154,11 +2200,10 @@ negative error codes:

    ssize_t nghttp2_session_mem_send(nghttp2_session *session, const uint8_t **data_ptr)

    Returns the serialized data to send.

    This function behaves like nghttp2_session_send() except that it -does not use nghttp2_session_callbacks.send_callback to -transmit data. Instead, it assigns the pointer to the serialized -data to the *data_ptr and returns its length. The other -callbacks are called in the same way as they are in -nghttp2_session_send().

    +does not use nghttp2_send_callback to transmit data. +Instead, it assigns the pointer to the serialized data to the +*data_ptr and returns its length. The other callbacks are called +in the same way as they are in nghttp2_session_send().

    If no data is available to send, this function returns 0.

    This function may not return all serialized data in one invocation. To get all data, call this function repeatedly until it returns 0 @@ -2181,49 +2226,42 @@ codes:

    int nghttp2_session_recv(nghttp2_session *session)

    Receives frames from the remote peer.

    This function receives as many frames as possible until the user -callback nghttp2_session_callbacks.recv_callback returns +callback nghttp2_recv_callback returns NGHTTP2_ERR_WOULDBLOCK. This function calls several callback functions which are passed when initializing the session. Here is the simple time chart which tells when each callback is invoked:

      -
    1. nghttp2_session_callbacks.recv_callback is invoked one -or more times to receive frame header.
    2. +
    3. nghttp2_recv_callback is invoked one or more times to +receive frame header.
    4. +
    5. When frame header is received, +nghttp2_on_begin_frame_callback is invoked.
    6. If the frame is DATA frame:
        -
      1. nghttp2_session_callbacks.recv_callback is invoked -to receive DATA payload. For each chunk of data, -nghttp2_session_callbacks.on_data_chunk_recv_callback -is invoked.
      2. +
      3. nghttp2_recv_callback is invoked to receive DATA +payload. For each chunk of data, +nghttp2_on_data_chunk_recv_callback is invoked.
      4. If one DATA frame is completely received, -nghttp2_session_callbacks.on_frame_recv_callback is -invoked. If the reception of the frame triggers the -closure of the stream, -nghttp2_session_callbacks.on_stream_close_callback -is invoked.
      5. +nghttp2_on_frame_recv_callback is invoked. If the +reception of the frame triggers the closure of the stream, +nghttp2_on_stream_close_callback is invoked.
    7. If the frame is the control frame:
        -
      1. nghttp2_session_callbacks.recv_callback is invoked -one or more times to receive whole frame.
      2. +
      3. nghttp2_recv_callback is invoked one or more times to +receive whole frame.
      4. If the received frame is valid, then following actions are taken. If the frame is either HEADERS or PUSH_PROMISE, -nghttp2_session_callbacks.on_begin_headers_callback -is invoked. Then -nghttp2_session_callbacks.on_header_callback is -invoked for each header name/value pair. After all name/value -pairs are emitted successfully, -nghttp2_session_callbacks.on_frame_recv_callback is +nghttp2_on_begin_headers_callback is invoked. Then +nghttp2_on_header_callback is invoked for each header +name/value pair. After all name/value pairs are emitted +successfully, nghttp2_on_frame_recv_callback is invoked. For other frames, -nghttp2_session_callbacks.on_frame_recv_callback is -invoked. -If the reception of the frame triggers the closure of the -stream, -nghttp2_session_callbacks.on_stream_close_callback -is invoked.
      5. +nghttp2_on_frame_recv_callback is invoked. If the +reception of the frame triggers the closure of the stream, +nghttp2_on_stream_close_callback is invoked.
      6. If the received frame is unpacked but is interpreted as -invalid, -nghttp2_session_callbacks.on_invalid_frame_recv_callback -is invoked.
      7. +invalid, nghttp2_on_invalid_frame_recv_callback is +invoked.
    @@ -2245,17 +2283,16 @@ ssize_t nghttp2_session_mem_recv( except that it -does not use nghttp2_session_callbacks.recv_callback to -receive data; the in is the only data for the invocation of this -function. If all bytes are processed, this function returns. The -other callbacks are called in the same way as they are in -nghttp2_session_recv().

    +does not use nghttp2_recv_callback to receive data; the +in is the only data for the invocation of this function. If all +bytes are processed, this function returns. The other callbacks +are called in the same way as they are in nghttp2_session_recv().

    In the current implementation, this function always tries to processes all input data unless either an error occurs or NGHTTP2_ERR_PAUSE is returned from -nghttp2_session_callbacks.on_header_callback or -nghttp2_session_callbacks.on_data_chunk_recv_callback. -If NGHTTP2_ERR_PAUSE is used, the return value includes the +nghttp2_on_header_callback or +nghttp2_on_data_chunk_recv_callback. If +NGHTTP2_ERR_PAUSE is used, the return value includes the number of bytes which was used to produce the data or frame for the callback.

    This function returns the number of processed bytes, or one of the @@ -2415,11 +2452,12 @@ Returns 0 if it did not. Returns -1 if no such stream exists.

    -int nghttp2_session_terminate_session(nghttp2_session *session, nghttp2_error_code error_code)
    +int nghttp2_session_terminate_session(nghttp2_session *session, uint32_t error_code)

    Signals the session so that the connection should be terminated.

    The last stream ID is the ID of a stream for which nghttp2_on_frame_recv_callback was called most recently.

    -

    The error_code is the error code of this GOAWAY frame.

    +

    The error_code is the error code of this GOAWAY frame. The +pre-defined error code is one of nghttp2_error_code.

    After the transmission, both nghttp2_session_want_read() and nghttp2_session_want_write() return 0.

    This function should be called when the connection should be @@ -2435,7 +2473,7 @@ negative error codes:

    -int nghttp2_session_terminate_session2(nghttp2_session *session, int32_t last_stream_id, nghttp2_error_code error_code)
    +int nghttp2_session_terminate_session2(nghttp2_session *session, int32_t last_stream_id, uint32_t error_code)

    Signals the session so that the connection should be terminated.

    This function behaves like nghttp2_session_terminate_session(), but the last stream ID can be specified by the application for fine @@ -2612,8 +2650,8 @@ reached.

    This function returns assigned stream ID if it succeeds. But that stream is not opened yet. The application must not submit frame to that stream ID before -nghttp2_session_callbacks.before_frame_send_callback is -called for this frame.

    +nghttp2_before_frame_send_callback is called for this +frame.

    @@ -2714,8 +2752,8 @@ reached.

    This function returns assigned stream ID if it succeeds and stream_id is -1. But that stream is not opened yet. The application must not submit frame to that stream ID before -nghttp2_session_callbacks.before_frame_send_callback is -called for this frame.

    +nghttp2_before_frame_send_callback is called for this +frame.

    @@ -2769,9 +2807,10 @@ depend on itself.
    -int nghttp2_submit_rst_stream(nghttp2_session *session, uint8_t flags, int32_t stream_id, nghttp2_error_code error_code)
    +int nghttp2_submit_rst_stream(nghttp2_session *session, uint8_t flags, int32_t stream_id, uint32_t error_code)

    Submits RST_STREAM frame to cancel/reject the stream stream_id with the error code error_code.

    +

    The pre-defined error code is one of nghttp2_error_code.

    The flags is currently ignored and should be NGHTTP2_FLAG_NONE.

    This function returns 0 if it succeeds, or one of the following @@ -2856,8 +2895,8 @@ reached.

    This function returns assigned promised stream ID if it succeeds. But that stream is not opened yet. The application must not submit frame to that stream ID before -nghttp2_session_callbacks.before_frame_send_callback is -called for this frame.

    +nghttp2_before_frame_send_callback is called for this +frame.

    @@ -2883,9 +2922,10 @@ negative error codes:

    -int nghttp2_submit_goaway(nghttp2_session *session, uint8_t flags, int32_t last_stream_id, nghttp2_error_code error_code, const uint8_t *opaque_data, size_t opaque_data_len)
    +int nghttp2_submit_goaway(nghttp2_session *session, uint8_t flags, int32_t last_stream_id, uint32_t error_code, const uint8_t *opaque_data, size_t opaque_data_len)

    Submits GOAWAY frame with the last stream ID last_stream_id and the error code error_code.

    +

    The pre-defined error code is one of nghttp2_error_code.

    The flags is currently ignored and should be NGHTTP2_FLAG_NONE.

    If the opaque_data is not NULL and opaque_data_len is not diff --git a/genindex.html b/genindex.html index 8e93666c..607fa64b 100644 --- a/genindex.html +++ b/genindex.html @@ -2255,12 +2255,12 @@

    NGHTTP2_INITIAL_CONNECTION_WINDOW_SIZE (C macro)
    -
    -
    NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS (C macro)
    +
    +
    NGHTTP2_INITIAL_WINDOW_SIZE (C macro)
    @@ -2330,6 +2330,10 @@ +
    nghttp2_on_begin_frame_callback (C type) +
    + +
    nghttp2_on_begin_headers_callback (C type)
    @@ -2362,10 +2366,6 @@ -
    nghttp2_on_unknown_frame_recv_callback (C type) -
    - -
    nghttp2_option (C type)
    @@ -2530,55 +2530,63 @@ -
    nghttp2_session_callbacks.before_frame_send_callback (C member) +
    nghttp2_session_callbacks_del (C function)
    -
    nghttp2_session_callbacks.on_begin_headers_callback (C member) +
    nghttp2_session_callbacks_new (C function)
    -
    nghttp2_session_callbacks.on_data_chunk_recv_callback (C member) +
    nghttp2_session_callbacks_set_before_frame_send_callback (C function)
    -
    nghttp2_session_callbacks.on_frame_not_send_callback (C member) +
    nghttp2_session_callbacks_set_on_begin_frame_callback (C function)
    -
    nghttp2_session_callbacks.on_frame_recv_callback (C member) +
    nghttp2_session_callbacks_set_on_begin_headers_callback (C function)
    -
    nghttp2_session_callbacks.on_frame_send_callback (C member) +
    nghttp2_session_callbacks_set_on_data_chunk_recv_callback (C function)
    -
    nghttp2_session_callbacks.on_header_callback (C member) +
    nghttp2_session_callbacks_set_on_frame_not_send_callback (C function)
    -
    nghttp2_session_callbacks.on_invalid_frame_recv_callback (C member) +
    nghttp2_session_callbacks_set_on_frame_recv_callback (C function)
    -
    nghttp2_session_callbacks.on_stream_close_callback (C member) +
    nghttp2_session_callbacks_set_on_frame_send_callback (C function)
    -
    nghttp2_session_callbacks.on_unknown_frame_recv_callback (C member) +
    nghttp2_session_callbacks_set_on_header_callback (C function)
    -
    nghttp2_session_callbacks.recv_callback (C member) +
    nghttp2_session_callbacks_set_on_invalid_frame_recv_callback (C function)
    -
    nghttp2_session_callbacks.select_padding_callback (C member) +
    nghttp2_session_callbacks_set_on_stream_close_callback (C function)
    -
    nghttp2_session_callbacks.send_callback (C member) +
    nghttp2_session_callbacks_set_recv_callback (C function) +
    + + +
    nghttp2_session_callbacks_set_select_padding_callback (C function) +
    + + +
    nghttp2_session_callbacks_set_send_callback (C function)
    diff --git a/nghttp2.h.html b/nghttp2.h.html index 53aaaa26..a3c38daf 100644 --- a/nghttp2.h.html +++ b/nghttp2.h.html @@ -1015,7 +1015,7 @@ /** * The error code. See :type:`nghttp2_error_code`. */ - nghttp2_error_code error_code; + uint32_t error_code; } nghttp2_rst_stream; /** @@ -1116,7 +1116,7 @@ /** * The error code. See :type:`nghttp2_error_code`. */ - nghttp2_error_code error_code; + uint32_t error_code; /** * The additional debug data */ @@ -1274,6 +1274,9 @@ * `nghttp2_session_send()` to send data to the remote endpoint. If * the application uses solely `nghttp2_session_mem_send()` instead, * this callback function is unnecessary. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_send_callback()`. */ typedef ssize_t (*nghttp2_send_callback) (nghttp2_session *session, @@ -1299,6 +1302,9 @@ * `nghttp2_session_recv()` to receive data from the remote endpoint. * If the application uses solely `nghttp2_session_mem_recv()` * instead, this callback function is unnecessary. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_recv_callback()`. */ typedef ssize_t (*nghttp2_recv_callback) (nghttp2_session *session, @@ -1331,6 +1337,9 @@ * If nonzero value is returned, it is treated as fatal error and * `nghttp2_session_recv()` and `nghttp2_session_mem_recv()` functions * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_frame_recv_callback()`. */ typedef int (*nghttp2_on_frame_recv_callback) (nghttp2_session *session, const nghttp2_frame *frame, void *user_data); @@ -1339,12 +1348,13 @@ * @functypedef * * Callback function invoked by `nghttp2_session_recv()` when an - * invalid non-DATA frame is received. The |error_code| is one of the - * :enum:`nghttp2_error_code` and indicates the error. When this - * callback function is invoked, the library automatically submits - * either RST_STREAM or GOAWAY frame. The |user_data| pointer is the - * third argument passed in to the call to - * `nghttp2_session_client_new()` or `nghttp2_session_server_new()`. + * invalid non-DATA frame is received. The |error_code| indicates the + * error. It is usually one of the :enum:`nghttp2_error_code` but + * that is not guaranteed. When this callback function is invoked, + * the library automatically submits either RST_STREAM or GOAWAY + * frame. The |user_data| pointer is the third argument passed in to + * the call to `nghttp2_session_client_new()` or + * `nghttp2_session_server_new()`. * * If frame is HEADERS or PUSH_PROMISE, the ``nva`` and ``nvlen`` * member of their data structure are always ``NULL`` and 0 @@ -1354,10 +1364,13 @@ * If nonzero is returned, it is treated as fatal error and * `nghttp2_session_recv()` and `nghttp2_session_send()` functions * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_invalid_frame_recv_callback()`. */ typedef int (*nghttp2_on_invalid_frame_recv_callback) (nghttp2_session *session, const nghttp2_frame *frame, - nghttp2_error_code error_code, void *user_data); + uint32_t error_code, void *user_data); /** * @functypedef @@ -1385,6 +1398,9 @@ * If nonzero is returned, it is treated as fatal error and * `nghttp2_session_recv()` and `nghttp2_session_mem_recv()` functions * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_data_chunk_recv_callback()`. */ typedef int (*nghttp2_on_data_chunk_recv_callback) (nghttp2_session *session, uint8_t flags, int32_t stream_id, @@ -1402,6 +1418,9 @@ * If nonzero is returned, it is treated as fatal error and * `nghttp2_session_recv()` and `nghttp2_session_send()` functions * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_before_frame_send_callback()`. */ typedef int (*nghttp2_before_frame_send_callback) (nghttp2_session *session, const nghttp2_frame *frame, void *user_data); @@ -1417,6 +1436,9 @@ * If nonzero is returned, it is treated as fatal error and * `nghttp2_session_recv()` and `nghttp2_session_send()` functions * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_frame_send_callback()`. */ typedef int (*nghttp2_on_frame_send_callback) (nghttp2_session *session, const nghttp2_frame *frame, void *user_data); @@ -1435,6 +1457,9 @@ * If nonzero is returned, it is treated as fatal error and * `nghttp2_session_recv()` and `nghttp2_session_send()` functions * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_frame_not_send_callback()`. */ typedef int (*nghttp2_on_frame_not_send_callback) (nghttp2_session *session, const nghttp2_frame *frame, int lib_error_code, @@ -1445,10 +1470,11 @@ * * Callback function invoked when the stream |stream_id| is closed. * The reason of closure is indicated by the |error_code|. The - * stream_user_data, which was specified in `nghttp2_submit_request()` - * or `nghttp2_submit_headers()`, is still available in this function. - * The |user_data| pointer is the third argument passed in to the call - * to `nghttp2_session_client_new()` or + * |error_code| is usually one of :enum:`nghttp2_error_code`, but that + * is not guaranteed. The stream_user_data, which was specified in + * `nghttp2_submit_request()` or `nghttp2_submit_headers()`, is still + * available in this function. The |user_data| pointer is the third + * argument passed in to the call to `nghttp2_session_client_new()` or * `nghttp2_session_server_new()`. * * This function is also called for a stream in reserved state. @@ -1457,33 +1483,12 @@ * If nonzero is returned, it is treated as fatal error and * `nghttp2_session_recv()` and `nghttp2_session_send()` functions * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_stream_close_callback()`. */ typedef int (*nghttp2_on_stream_close_callback) -(nghttp2_session *session, int32_t stream_id, nghttp2_error_code error_code, - void *user_data); - -/** - * @functypedef - * - * Callback function invoked when the received frame type is unknown. - * The |head| is the pointer to the header of the received frame. The - * |headlen| is the length of the |head|. According to the spec, the - * |headlen| is always 8. In other words, the |head| is the first 8 - * bytes of the received frame. The |payload| is the pointer to the - * data portion of the received frame. The |payloadlen| is the length - * of the |payload|. This is the data after the length field. The - * |user_data| pointer is the third argument passed in to the call to - * `nghttp2_session_client_new()` or `nghttp2_session_server_new()`. - * - * The implementation of this function must return 0 if it succeeds. - * If nonzero is returned, it is treated as fatal error and - * `nghttp2_session_recv()` and `nghttp2_session_send()` functions - * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. - */ -typedef int (*nghttp2_on_unknown_frame_recv_callback) -(nghttp2_session *session, - const uint8_t *head, size_t headlen, - const uint8_t *payload, size_t payloadlen, +(nghttp2_session *session, int32_t stream_id, uint32_t error_code, void *user_data); /** @@ -1506,6 +1511,9 @@ * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE` is returned, * `nghttp2_session_mem_recv()` function will immediately return * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_begin_headers_callback()`. */ typedef int (*nghttp2_on_begin_headers_callback) (nghttp2_session *session, const nghttp2_frame *frame, void *user_data); @@ -1567,6 +1575,9 @@ * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE` is returned, * `nghttp2_session_recv()` and `nghttp2_session_mem_recv()` functions * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_header_callback()`. */ typedef int (*nghttp2_on_header_callback) (nghttp2_session *session, @@ -1589,6 +1600,9 @@ * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE` will make * `nghttp2_session_send()` function immediately return * :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_select_padding_callback()`. */ typedef ssize_t (*nghttp2_select_padding_callback) (nghttp2_session *session, @@ -1596,80 +1610,197 @@ size_t max_payloadlen, void *user_data); +/** + * @functypedef + * + * Callback function invoked when a frame header is received. The + * |hd| points to received frame header. + * + * This callback won't be called for CONTINUATION frame because + * library treats HEADERS/PUSH_PROMISE + CONTINUATION as single frame. + * + * If both :type:`nghttp2_on_begin_frame_callback` and + * :type:`nghttp2_on_begin_headers_callback` are set and HEADERS or + * PUSH_PROMISE is received, :type:`nghttp2_on_begin_frame_callback` + * will be called first. + * + * The implementation of this function must return 0 if it succeeds. + * If nonzero value is returned, it is treated as fatal error and + * `nghttp2_session_recv()` and `nghttp2_session_mem_recv()` functions + * immediately return :enum:`NGHTTP2_ERR_CALLBACK_FAILURE`. + * + * To set this callback to :type:`nghttp2_session_callbacks`, use + * `nghttp2_session_callbacks_set_on_begin_frame_callback()`. + */ +typedef int (*nghttp2_on_begin_frame_callback) +(nghttp2_session *session, const nghttp2_frame_hd *hd, void *user_data); + +struct nghttp2_session_callbacks; + /** * @struct * - * Callback functions. + * Callback functions for :type:`nghttp2_session`. The details of + * this structure are intentionally hidden from the public API. */ -typedef struct { - /** - * Callback function invoked when the |session| wants to send data - * to the remote peer. This callback is not necessary if the - * application uses solely `nghttp2_session_mem_send()` to serialize - * data to transmit. - */ - nghttp2_send_callback send_callback; - /** - * Callback function invoked when the |session| wants to receive - * data from the remote peer. This callback is not necessary if the - * application uses solely `nghttp2_session_mem_recv()` to process - * received data. - */ - nghttp2_recv_callback recv_callback; - /** - * Callback function invoked by `nghttp2_session_recv()` when a - * frame is received. - */ - nghttp2_on_frame_recv_callback on_frame_recv_callback; - /** - * Callback function invoked by `nghttp2_session_recv()` when an - * invalid non-DATA frame is received. - */ - nghttp2_on_invalid_frame_recv_callback on_invalid_frame_recv_callback; - /** - * Callback function invoked when a chunk of data in DATA frame is - * received. - */ - nghttp2_on_data_chunk_recv_callback on_data_chunk_recv_callback; - /** - * Callback function invoked before a non-DATA frame is sent. - */ - nghttp2_before_frame_send_callback before_frame_send_callback; - /** - * Callback function invoked after a frame is sent. - */ - nghttp2_on_frame_send_callback on_frame_send_callback; - /** - * The callback function invoked when a non-DATA frame is not sent - * because of an error. - */ - nghttp2_on_frame_not_send_callback on_frame_not_send_callback; - /** - * Callback function invoked when the stream is closed. - */ - nghttp2_on_stream_close_callback on_stream_close_callback; - /** - * Callback function invoked when the received frame type is - * unknown. - */ - nghttp2_on_unknown_frame_recv_callback on_unknown_frame_recv_callback; - /** - * Callback function invoked when the reception of header block in - * HEADERS or PUSH_PROMISE is started. - */ - nghttp2_on_begin_headers_callback on_begin_headers_callback; - /** - * Callback function invoked when a header name/value pair is - * received. - */ - nghttp2_on_header_callback on_header_callback; - /** - * Callback function invoked when the library asks application how - * many padding bytes are required for the transmission of the given - * frame. - */ - nghttp2_select_padding_callback select_padding_callback; -} nghttp2_session_callbacks; +typedef struct nghttp2_session_callbacks nghttp2_session_callbacks; + +/** + * @function + * + * Initializes |*callbacks_ptr| with NULL values. + * + * The initialized object can be used when initializing multiple + * :type:`nghttp2_session` objects. + * + * When the application finished using this object, it can use + * `nghttp2_session_callbacks_del()` to free its memory. + * + * This function returns 0 if it succeeds, or one of the following + * negative error codes: + * + * :enum:`NGHTTP2_ERR_NOMEM` + * Out of memory. + */ +int nghttp2_session_callbacks_new(nghttp2_session_callbacks **callbacks_ptr); + +/** + * @function + * + * Frees any resources allocated for |callbacks|. If |callbacks| is + * ``NULL``, this function does nothing. + */ +void nghttp2_session_callbacks_del(nghttp2_session_callbacks *callbacks); + + +/** + * @function + * + * Sets callback function invoked when a session wants to send data to + * the remote peer. This callback is not necessary if the application + * uses solely `nghttp2_session_mem_send()` to serialize data to + * transmit. + */ +void nghttp2_session_callbacks_set_send_callback +(nghttp2_session_callbacks *cbs, nghttp2_send_callback send_callback); + +/** + * @function + * + * Sets callback function invoked when the a session wants to receive + * data from the remote peer. This callback is not necessary if the + * application uses solely `nghttp2_session_mem_recv()` to process + * received data. + */ +void nghttp2_session_callbacks_set_recv_callback +(nghttp2_session_callbacks *cbs, nghttp2_recv_callback recv_callback); + +/** + * @function + * + * Sets callback function invoked by `nghttp2_session_recv()` when a + * frame is received. + */ +void nghttp2_session_callbacks_set_on_frame_recv_callback +(nghttp2_session_callbacks *cbs, + nghttp2_on_frame_recv_callback on_frame_recv_callback); + +/** + * @function + * + * Sets callback function invoked by `nghttp2_session_recv()` when an + * invalid non-DATA frame is received. + */ +void nghttp2_session_callbacks_set_on_invalid_frame_recv_callback +(nghttp2_session_callbacks *cbs, + nghttp2_on_invalid_frame_recv_callback on_invalid_frame_recv_callback); + +/** + * @function + * + * Sets callback function invoked when a chunk of data in DATA frame + * is received. + */ +void nghttp2_session_callbacks_set_on_data_chunk_recv_callback +(nghttp2_session_callbacks *cbs, + nghttp2_on_data_chunk_recv_callback on_data_chunk_recv_callback); + +/** + * @function + * + * Sets callback function invoked before a non-DATA frame is sent. + */ +void nghttp2_session_callbacks_set_before_frame_send_callback +(nghttp2_session_callbacks *cbs, + nghttp2_before_frame_send_callback before_frame_send_callback); + +/** + * @function + * + * Sets callback function invoked after a frame is sent. + */ +void nghttp2_session_callbacks_set_on_frame_send_callback +(nghttp2_session_callbacks *cbs, + nghttp2_on_frame_send_callback on_frame_send_callback); + +/** + * @function + * + * Sets callback function invoked when a non-DATA frame is not sent + * because of an error. + */ +void nghttp2_session_callbacks_set_on_frame_not_send_callback +(nghttp2_session_callbacks *cbs, + nghttp2_on_frame_not_send_callback on_frame_not_send_callback); + +/** + * @function + * + * Sets callback function invoked when the stream is closed. + */ +void nghttp2_session_callbacks_set_on_stream_close_callback +(nghttp2_session_callbacks *cbs, + nghttp2_on_stream_close_callback on_stream_close_callback); + +/** + * @function + * + * Sets callback function invoked when the reception of header block + * in HEADERS or PUSH_PROMISE is started. + */ +void nghttp2_session_callbacks_set_on_begin_headers_callback +(nghttp2_session_callbacks *cbs, + nghttp2_on_begin_headers_callback on_begin_headers_callback); + +/** + * @function + * + * Sets callback function invoked when a header name/value pair is + * received. + */ +void nghttp2_session_callbacks_set_on_header_callback +(nghttp2_session_callbacks *cbs, + nghttp2_on_header_callback on_header_callback); + +/** + * @function + * + * Sets callback function invoked when the library asks application + * how many padding bytes are required for the transmission of the + * given frame. + */ +void nghttp2_session_callbacks_set_select_padding_callback +(nghttp2_session_callbacks *cbs, + nghttp2_select_padding_callback select_padding_callback); + +/** + * @function + * + * Sets callback function invoked when a frame header is received. + */ +void nghttp2_session_callbacks_set_on_begin_frame_callback +(nghttp2_session_callbacks *cbs, + nghttp2_on_begin_frame_callback on_begin_frame_callback); struct nghttp2_option; @@ -1743,10 +1874,10 @@ * does not store |callbacks|. The |user_data| is an arbitrary user * supplied data, which will be passed to the callback functions. * - * The :member:`nghttp2_session_callbacks.send_callback` must be - * specified. If the application code uses `nghttp2_session_recv()`, - * the :member:`nghttp2_session_callbacks.recv_callback` must be - * specified. The other members of |callbacks| can be ``NULL``. + * The :type:`nghttp2_send_callback` must be specified. If the + * application code uses `nghttp2_session_recv()`, the + * :type:`nghttp2_recv_callback` must be specified. The other members + * of |callbacks| can be ``NULL``. * * If this function fails, |*session_ptr| is left untouched. * @@ -1768,10 +1899,10 @@ * does not store |callbacks|. The |user_data| is an arbitrary user * supplied data, which will be passed to the callback functions. * - * The :member:`nghttp2_session_callbacks.send_callback` must be - * specified. If the application code uses `nghttp2_session_recv()`, - * the :member:`nghttp2_session_callbacks.recv_callback` must be - * specified. The other members of |callbacks| can be ``NULL``. + * The :type:`nghttp2_send_callback` must be specified. If the + * application code uses `nghttp2_session_recv()`, the + * :type:`nghttp2_recv_callback` must be specified. The other members + * of |callbacks| can be ``NULL``. * * If this function fails, |*session_ptr| is left untouched. * @@ -1853,32 +1984,36 @@ * This function retrieves the highest prioritized frame from the * outbound queue and sends it to the remote peer. It does this as * many as possible until the user callback - * :member:`nghttp2_session_callbacks.send_callback` returns + * :type:`nghttp2_send_callback` returns * :enum:`NGHTTP2_ERR_WOULDBLOCK` or the outbound queue becomes empty. * This function calls several callback functions which are passed * when initializing the |session|. Here is the simple time chart * which tells when each callback is invoked: * * 1. Get the next frame to send from outbound queue. + * * 2. Prepare transmission of the frame. + * * 3. If the control frame cannot be sent because some preconditions * are not met (e.g., request HEADERS cannot be sent after GOAWAY), - * :member:`nghttp2_session_callbacks.on_frame_not_send_callback` - * is invoked. Abort the following steps. + * :type:`nghttp2_on_frame_not_send_callback` is invoked. Abort + * the following steps. + * * 4. If the frame is HEADERS, PUSH_PROMISE or DATA, - * :member:`nghttp2_session_callbacks.select_padding_callback` is - * invoked. + * :type:`nghttp2_select_padding_callback` is invoked. + * * 5. If the frame is request HEADERS, the stream is opened here. - * 6. :member:`nghttp2_session_callbacks.before_frame_send_callback` is - * invoked. - * 7. :member:`nghttp2_session_callbacks.send_callback` is invoked one - * or more times to send the frame. - * 8. :member:`nghttp2_session_callbacks.on_frame_send_callback` is - * invoked. + * + * 6. :type:`nghttp2_before_frame_send_callback` is invoked. + * + * 7. :type:`nghttp2_send_callback` is invoked one or more times to + * send the frame. + * + * 8. :type:`nghttp2_on_frame_send_callback` is invoked. + * * 9. If the transmission of the frame triggers closure of the stream, * the stream is closed and - * :member:`nghttp2_session_callbacks.on_stream_close_callback` is - * invoked. + * :type:`nghttp2_on_stream_close_callback` is invoked. * * This function returns 0 if it succeeds, or one of the following * negative error codes: @@ -1896,11 +2031,10 @@ * Returns the serialized data to send. * * This function behaves like `nghttp2_session_send()` except that it - * does not use :member:`nghttp2_session_callbacks.send_callback` to - * transmit data. Instead, it assigns the pointer to the serialized - * data to the |*data_ptr| and returns its length. The other - * callbacks are called in the same way as they are in - * `nghttp2_session_send()`. + * does not use :type:`nghttp2_send_callback` to transmit data. + * Instead, it assigns the pointer to the serialized data to the + * |*data_ptr| and returns its length. The other callbacks are called + * in the same way as they are in `nghttp2_session_send()`. * * If no data is available to send, this function returns 0. * @@ -1930,51 +2064,48 @@ * Receives frames from the remote peer. * * This function receives as many frames as possible until the user - * callback :member:`nghttp2_session_callbacks.recv_callback` returns + * callback :type:`nghttp2_recv_callback` returns * :enum:`NGHTTP2_ERR_WOULDBLOCK`. This function calls several * callback functions which are passed when initializing the * |session|. Here is the simple time chart which tells when each * callback is invoked: * - * 1. :member:`nghttp2_session_callbacks.recv_callback` is invoked one - * or more times to receive frame header. - * 2. If the frame is DATA frame: + * 1. :type:`nghttp2_recv_callback` is invoked one or more times to + * receive frame header. + * + * 2. When frame header is received, + * :type:`nghttp2_on_begin_frame_callback` is invoked. + * + * 3. If the frame is DATA frame: + * + * 1. :type:`nghttp2_recv_callback` is invoked to receive DATA + * payload. For each chunk of data, + * :type:`nghttp2_on_data_chunk_recv_callback` is invoked. * - * 1. :member:`nghttp2_session_callbacks.recv_callback` is invoked - * to receive DATA payload. For each chunk of data, - * :member:`nghttp2_session_callbacks.on_data_chunk_recv_callback` - * is invoked. * 2. If one DATA frame is completely received, - * :member:`nghttp2_session_callbacks.on_frame_recv_callback` is - * invoked. If the reception of the frame triggers the - * closure of the stream, - * :member:`nghttp2_session_callbacks.on_stream_close_callback` - * is invoked. + * :type:`nghttp2_on_frame_recv_callback` is invoked. If the + * reception of the frame triggers the closure of the stream, + * :type:`nghttp2_on_stream_close_callback` is invoked. * - * 3. If the frame is the control frame: + * 4. If the frame is the control frame: * - * 1. :member:`nghttp2_session_callbacks.recv_callback` is invoked - * one or more times to receive whole frame. + * 1. :type:`nghttp2_recv_callback` is invoked one or more times to + * receive whole frame. * * 2. If the received frame is valid, then following actions are * taken. If the frame is either HEADERS or PUSH_PROMISE, - * :member:`nghttp2_session_callbacks.on_begin_headers_callback` - * is invoked. Then - * :member:`nghttp2_session_callbacks.on_header_callback` is - * invoked for each header name/value pair. After all name/value - * pairs are emitted successfully, - * :member:`nghttp2_session_callbacks.on_frame_recv_callback` is + * :type:`nghttp2_on_begin_headers_callback` is invoked. Then + * :type:`nghttp2_on_header_callback` is invoked for each header + * name/value pair. After all name/value pairs are emitted + * successfully, :type:`nghttp2_on_frame_recv_callback` is * invoked. For other frames, - * :member:`nghttp2_session_callbacks.on_frame_recv_callback` is - * invoked. - * If the reception of the frame triggers the closure of the - * stream, - * :member:`nghttp2_session_callbacks.on_stream_close_callback` - * is invoked. + * :type:`nghttp2_on_frame_recv_callback` is invoked. If the + * reception of the frame triggers the closure of the stream, + * :type:`nghttp2_on_stream_close_callback` is invoked. + * * 3. If the received frame is unpacked but is interpreted as - * invalid, - * :member:`nghttp2_session_callbacks.on_invalid_frame_recv_callback` - * is invoked. + * invalid, :type:`nghttp2_on_invalid_frame_recv_callback` is + * invoked. * * This function returns 0 if it succeeds, or one of the following * negative error codes: @@ -1995,18 +2126,17 @@ * |inlen| indicates the number of bytes in the |in|. * * This function behaves like `nghttp2_session_recv()` except that it - * does not use :member:`nghttp2_session_callbacks.recv_callback` to - * receive data; the |in| is the only data for the invocation of this - * function. If all bytes are processed, this function returns. The - * other callbacks are called in the same way as they are in - * `nghttp2_session_recv()`. + * does not use :type:`nghttp2_recv_callback` to receive data; the + * |in| is the only data for the invocation of this function. If all + * bytes are processed, this function returns. The other callbacks + * are called in the same way as they are in `nghttp2_session_recv()`. * * In the current implementation, this function always tries to * processes all input data unless either an error occurs or * :enum:`NGHTTP2_ERR_PAUSE` is returned from - * :member:`nghttp2_session_callbacks.on_header_callback` or - * :member:`nghttp2_session_callbacks.on_data_chunk_recv_callback`. - * If :enum:`NGHTTP2_ERR_PAUSE` is used, the return value includes the + * :type:`nghttp2_on_header_callback` or + * :type:`nghttp2_on_data_chunk_recv_callback`. If + * :enum:`NGHTTP2_ERR_PAUSE` is used, the return value includes the * number of bytes which was used to produce the data or frame for the * callback. * @@ -2206,7 +2336,8 @@ * The last stream ID is the ID of a stream for which * :type:`nghttp2_on_frame_recv_callback` was called most recently. * - * The |error_code| is the error code of this GOAWAY frame. + * The |error_code| is the error code of this GOAWAY frame. The + * pre-defined error code is one of :enum:`nghttp2_error_code`. * * After the transmission, both `nghttp2_session_want_read()` and * `nghttp2_session_want_write()` return 0. @@ -2222,7 +2353,7 @@ * Out of memory. */ int nghttp2_session_terminate_session(nghttp2_session *session, - nghttp2_error_code error_code); + uint32_t error_code); /** * @function @@ -2241,7 +2372,7 @@ */ int nghttp2_session_terminate_session2(nghttp2_session *session, int32_t last_stream_id, - nghttp2_error_code error_code); + uint32_t error_code); /** * @function @@ -2436,8 +2567,8 @@ * This function returns assigned stream ID if it succeeds. But * that stream is not opened yet. The application must not submit * frame to that stream ID before - * :member:`nghttp2_session_callbacks.before_frame_send_callback` is - * called for this frame. + * :type:`nghttp2_before_frame_send_callback` is called for this + * frame. * */ int32_t nghttp2_submit_request(nghttp2_session *session, @@ -2562,8 +2693,8 @@ * This function returns assigned stream ID if it succeeds and * |stream_id| is -1. But that stream is not opened yet. The * application must not submit frame to that stream ID before - * :member:`nghttp2_session_callbacks.before_frame_send_callback` is - * called for this frame. + * :type:`nghttp2_before_frame_send_callback` is called for this + * frame. * */ int32_t nghttp2_submit_headers(nghttp2_session *session, uint8_t flags, @@ -2636,6 +2767,8 @@ * Submits RST_STREAM frame to cancel/reject the stream |stream_id| * with the error code |error_code|. * + * The pre-defined error code is one of :enum:`nghttp2_error_code`. + * * The |flags| is currently ignored and should be * :enum:`NGHTTP2_FLAG_NONE`. * @@ -2649,7 +2782,7 @@ */ int nghttp2_submit_rst_stream(nghttp2_session *session, uint8_t flags, int32_t stream_id, - nghttp2_error_code error_code); + uint32_t error_code); /** * @function @@ -2737,8 +2870,8 @@ * This function returns assigned promised stream ID if it succeeds. * But that stream is not opened yet. The application must not * submit frame to that stream ID before - * :member:`nghttp2_session_callbacks.before_frame_send_callback` is - * called for this frame. + * :type:`nghttp2_before_frame_send_callback` is called for this + * frame. * */ int32_t nghttp2_submit_push_promise(nghttp2_session *session, uint8_t flags, @@ -2776,6 +2909,8 @@ * Submits GOAWAY frame with the last stream ID |last_stream_id| and * the error code |error_code|. * + * The pre-defined error code is one of :enum:`nghttp2_error_code`. + * * The |flags| is currently ignored and should be * :enum:`NGHTTP2_FLAG_NONE`. * @@ -2802,7 +2937,7 @@ */ int nghttp2_submit_goaway(nghttp2_session *session, uint8_t flags, int32_t last_stream_id, - nghttp2_error_code error_code, + uint32_t error_code, const uint8_t *opaque_data, size_t opaque_data_len); /** diff --git a/objects.inv b/objects.inv index afe00a07721dbb1cdb9d66e5381523080ff73964..b06e3e7c0ed4e5a24b5ebcd5ec3ae1a51e829398 100644 GIT binary patch delta 3757 zcmV;e4pQ-q9)})~et)%GOLO8#628x`aK!Fa#I|E&4|7w4+*S+-4+y(^FA5at~6i%XLc`DpJ=Y4y+=n~iWgJ^qgGrw!IYH7ZMbNU&5&x1(UaVE$M z1?!YyrX^{d$66Rka9OcqbN_G3iKG9NtZ`3YRZqKXMP^FA`Lii!o*FC z5p>?r?X>>mvYgagcm zvGk4UmV@M@&dXa$S7^+Nj-?fTq(LsU)XiC`4ba0KQrRsO(zBEkHxtG_bFxxihh*Cz zIsAJ_aD5jd(cCaN2rUoxA}(^iiDaCM0LIJY^YmaGN0IQ<$DR2b@tz6izE=;838>wc zPXT0X?0<~HQ6hl<(bs`KHvF;*5`1ug*a8N5WaH-mf(s;h*4m`Vb{zXH1HZO$y&w$o zBWvrxXJ0uLe-$EQ*u7R{ybug}&V#6MbB+V}3=tO$TdZvgK;uy8`Pf$;U|&`y&;e04 zinT-F4mpBCk^@fAK>MM0i8!vd%l+8P?p6O_Gk@$U&tzHxIA{nq{Zil$G_2-rd|nBY zL}`TrH<0;m?$Y-yl5GkZmA+88X?Sc9Da#sFD%Wy%9SSWA{^q=dapN1%qc>F*Yi|A8 zZD9y}*M&p+mPSd$=Hg)6U~?S6*?w_VyrXc6HY7%p+T%LdgrR|F4!{kQ|C=}6-WqH) zjDJ0aOTe*JhGL;H0q4Lo?KjWFLX>URhg)u!Mhg=0;`lufnwJ*)b;zrn55p1E-Mq)+ zau1){CQd)x)EB<|X#fw>1cnwc;Hzkz2L4vuODla9S_iS-W05(vxELGP>ErGzwdmun z6m|PfbP&2b;ZM*w_(-MQ4xk($A2kra{UYQRksc2591eGXT90>wuSW^0n>HZ zk%c^E2zh-k5|N%YaN&eq@v2lIO+ME`5p8q2Jm2U}dxOory|A~_+M^RXaghw@4RA}M zuGrDf3GHL3&LelvKvDZ5%!4F6GSW+s?05~>8GW-7kqr*dXT1$}i|t*|#pTfrs(&oP z${_{%>Q=|#Kb%Y6ka7<<5a!vzyH~WmwO1GJK((#Qnr<4DbgxXM53L zX3}>dPcH4)Vp5nbbHBZr}drtL%bOvMe_6eru+L4^*u?s(+K)1-gfUN zakK1$-47x65%)155MO+%b)mZ!;eUhn?IAg8^)Je$53|@W;6$eU=(nwit}LoQtyYwe zX2MOq-T8y%XVqiN@_`q3D}J+nJlpomqhl-Q*+`hZ9v8k-tT+YOJlf_n*^!Y zR2Le_E0p(tbYut1f#k3cGBJt{0ORB`v0sD9+*%hMoK5I%;o)Hy3YmZ&VP-z!cqL2qxd(Z=ANed59dXnOpFQ6O4A^QbaQmFM0idR z1$p02XEGTnnIMEdo|=YbgEd)}F}BUQRh!Awuuuo>wDmG+I$juO0&VD5uRp4K?I<_h z#_orEyrtI0nSR=iKDC#xW1L202}W>!AEFq+t?NMcw9scb&x{VEgMS+q0w)(R;vg!G zSlI?$4VcT99;P0{Xy7b>FARO=m=kPNT8nK^yEMg{GZ6|ecOvnbJE}(T;t(qj6~Ftk zz_r^|PW62{AOA7HtujD7bYE&GJWN3DJOk#|)@vE-tT|kMV*EtqC@Cs?K6hri^$V6g zO-=Ykley5Zcv;NtIe$*P#d;s)PE~Uu1qm9+AqZp+6fo(Lk_MxLiwno{7AtGHdXb~W z#>9Cw7E1`qIG-rt970D8Brq%m23}UnXOxhiCrUe#gnTj~RS(M$0f;3G{EoDYR7v@6 z5Up|!Y{Z@DwvIY{D{MyMgA>rJz{Uiq)xUn7P6K3KS3aos1b>^x9?Bz*r}HHeo|GV? z$+d`J(nRdaCr~lFKHyCM>AXQWnZMzI>uH}{Y-60io_qMH`EQ@p>-CDubiCLXgUW?%85luc(X)X1+a0jViY$*eL@B}wo*tJ1hbBXY#^Eaebx15~~^yML* zU`q+9?Zq4$B7aLm>xJ#j0??|oHKGPe2#Z6Db;&~vdruHqahE37VO7#@q7Ldzre)eD z6qT(C2OCM+*Rtj_V}=JJ`f7=bQWAyYK=ZjO(=4x20#2b|*YQZfUAYVy%|2^{G^&9z zI{!#1$RrC@mbtV^IAJU5t2t$hrmP{c3J2hcClI;=TYs+}WGz61)0LA)!GRWxGm#!d zDn0R$1^Rasr5R7~50<59?Lx_TA8wR8vMEK0EVeNNR4iQ?V)}Q$HV|vf>1tt6tP6uS zR2fl2Z>UJoT!<*DMBqm1H|0EWIY~n#^mP0Hg>7^noKw4^snZmeK%1ZhY z*M(Ws{zR=EE(0$mP<>xLK@25iq0(6@nqAE!Ab+LP0;~kOQ6f{*TIn{HSvUh5B;HG3 z{8-H(grSj>qCb_Q2=Y_lrZR3PD)wCJ`(0_fe-ZylJV)bxw8Os_%{?%7g+j%o2 z2Sy>YPPGz=I`QI2dL?yPF4BDvNy|HBR?-VvFi(ERiWC(}3=H^`T+QIQ?>734)BG-Z zf`8TYYoZwg6*QJQ)@^5D{JAogIA2u!kzq|pHeMOx7gR{U?RVp)ri zz^p1&%CUE6?|wR`v3I8)dncp_WBx?ETH+pMGah$8rEZGmTE-3_PO?wvwr!1*t<{Xw zkH+(id@hZ}Dc4P9Ds|SZt0qH90Yehl@_)3vUIe8P*i!W_hQyApU$4^vctdGdmsoC~ z$s7{hv&7j%BjR|{F*&PX!? z=&*54SiwDhWyvso050VU@A4oOMhRW zOc;zpx7m)&u5VRrQruSU$c!V)G~{lPR*lgtYiw?q( z-)jq32=Z=!IMrVaSO}UE6E5AfY zY){F4P(4>Nq*_ClmfS99RhVF#u746V6LL?hHc@#8UBq{WOnmuz>gF3W)26n_WRgSH zoF@UD8e@d|UiPiv8pHlki6a-H}!IJplF#4pXY?%){FU9uUP7Ril7N$jo`Y&M+YV{v;{Z0Sn=u_~|$uICU0-b4E%hl79 zWP~Yf#%V5%QTGzOxgH_FcHXI2^=5wreKiU7P8d%iB4r0nnT-w=4M&V_fmau&sglYEl6DRxS8PIAx2FjAF+v^7z8+aI+Gx)Z^CQ>mXtGihU*!0xx|K=whg% zZ>HjGln~!rX$`Gm99dySGIgr|FosRiUVcM|)&e?v-&$3`I;LTy@YwtAUhXXWdBw7bt74=dW$UC&ddKsz;SlI_H~^k$@+ zp}f~e%EE_~nJ%UR9nHD84w+5%sy07$94ngA(DrXv{wn@*;$?VVad1X6q3sTpk z{^N|uI}vGaRh!^vTL&D=+JLiwdfZ3(A8Dc!ke;SGAOOrsv6|BG5*c z-&rA?=XqjA_kVqlT;+vsmh~^{Zcf5Gl@*cHc6}c_C?g&T@K$s#msae+3%6olNH!w#=u(XakJN;)BT?3&wDgN8ZzM#6>z7d*^CmpG>ax&Q*A_xJc*`&-t4_vP X5qj_#{4~_ny`9(#q*MJ5x5bgP$W8Cmqiwm1{}t@Q z`W>Tw{oi-SZ-x=48zUBb5uYwiHrukyKF-(bH|oVf9Eqgltbbhj!J9}zBT0=iE;vt+ zzup@=|HBBy&X}WO-VqMjRC^HHTY}Qtt1JbrcKE1J-$(l+sXYb%)h1GjdU6X;KJd3o;Zr-6Sx)gDC1Lt*tfI0Y@B7Bsa7(vfk>_b{Z2pcihDZbI zt)6Fdm$r}L=Nsdb@vXsxg%OHXwHXrZu5Qw6X$*wraAB_EzA%F3Uv6dlbZD@?mUfG-J$P8AQ zh(LX)CkXY4Oa+KRno>vOEv1`Q%8JvqKfLErDU94NS-BD5#~0+nTQG)Zp{NL+G4`2} zmGZ(#*Ns6(+5W$Su!;(EWwaA%Rr0N);M@W5VIej0;=sn<5yTZh8mzThRctx-TgQB3?FUgDl?T?= zQOLe>F8-=S!LWOyDtOTs^jt2pJ--7`E8h6d>23`1gJ&JZK(P=gt99wt3K- z5Sih}(SFd=lGNBo{*ZGF%^Gd`87i5CltH)2A()LH_li=8RJd2w+0)H(?G!! z$bV2OwXi^$fOFu<`kQBB0n07}#VxpNqXmfsY5EokBgm`WD(2PBd&Zh6SyTa+SNJg2 zY5wl#p$O$~12~S>h>gt`41Ax` zsu6x3A6kNu;Rma)q6g{O02fTy1+7W}(tk=L7RjchOZSzoj~hJg?S;Kf*dCqGd5IOn z+8WlMTcccyB>j}nE`@SA@pts_wPPfeDBCidyG_w6+ww&cfuuyts&s4M^+hzbrhgl_ zUA+}&=QnW}3WYG7UR|HnBM|)lSd{Jm$GPMU&Ggj!aarsc$nP2qLG{Y(+{T+|Ip)Rz zjp-p>3-Ab^A!zMKgPF+ChZw|YFE8gd<*Kc=&eq+&>`}`JOTE{a72fQRBIpOSJ9kxF zMp=CL8nV47^IlbKU%A@t-(-GKynnNM8t>F&?^1vnq4-eiVt*y#JLB73b}*VZ>ZNzn zG_2r6wtVTgjYuvmYF^bV>W>xxEQ9Uo2kY1L#}@Smp8bvZ&H4G{y3hBXHJ^L7^I}fy zvA1vm4BrLccYctka3w#BaKa7)FlWBuuR=EPmRJb&Oqk}Tm6meWWg zgaC;&mu}R0oSRdemnQqs-j6GRlS{{-l~JIg*@+r3m#@7|eGH?4^Jr}kaF{3oc|_qA zmq*Cx;!|s^=ml|F2=eok3nb#B^i(Ypq%l_X%KJfI8>%3+WktiG_7dv6o(uhNy%!U$|QKxX5~fVvq)LsHJwH@2FpiI%%;{9pSsQE0*8tv*21CCQ>ElZsY5nS^j=b8cZ>2;2=6bNGZsa2W5-Ba7meUBbuvubn2;L+&>Q`}zcbX(5VaB%X zaP6rzTe?&Ujn*NW3Tb#=LP2m$5Tg^&i1g>z*>W<*7v)X&1$nr-hvroo$U}_uUlK1t zo(dr7%jp%8Q|F?nAcv~?VG3iRRgv|j#51Kg-hYC{5;r-UtAz^-5EGcBuEu{XA0dPj za%b&knt4}a4M@p%05gGgl*rh2mZpnk5KbTxiIXztKbKPoerUX>SWsmI1obhsj%D;9{hP~)>%Cf%>!OfW$X3Ofxu=Qrc+}dFDJ@HySSDm1D^KZ|b@a1M zA@!l_(#vJOM;c;i%0Fz)-)1w@d9Ws^k3yDPE-aE$b{U1VDpzR*82_(IRJ0+9wk=Pt z5iI9PUeNnBTh3+aNaJDA0SnVtIl`zZ0EUI~$9}AG5-nt71=O&3o;eE~bM`Q?%zwEn zJJ+A{iXX*(yB#`2bPY{&R#eiab7Yx2{0*{LYmgUjbf$(iowE`z ztK}rWlujzXE<8i5*YaCCd*R9NfyG{@Dx}S^%)*6*o4F6p{VfIAgY)U zer}Hn^zNuFdrNBNoYd$81`^og4S%qdX1O)Bv1P)sqeUo;Wy1;I(`w0Xel$8^G8)K5=gUcR5gii&sEZP(?LdhC zV<}azu%ON(2RSwRP9YJGOifPdZc{jY3OJUG35P@{byMr4-_LkRpj%gp$bUkuLwjLI zHIBxepjm|DlnxrfD|tPTeDsvT-IA&79NS_$_B3j)mKGJ7?~4u@hrXSJkna9-X1^f-=#5!)wG5}~^$%{T$0g?Djk8wU%n52&NhA%W)+ zaVn)MYinzKbUs4D}g|_1-htk2EFEL-e|eVSw;!v)S|!q^5<3vdEJf zz?nG~X*z!-BQmo7(NrIzb#ZyHN_+%yRe;$c3%oYbpl{UyhlEphD9j}F{HjdP%nmnz z@j^Xr^GysAO4p<{fsJ_X16pU38hwKrCsV@s)<`m2sQLr_TpHS1OXFDa~ib(8WKp^>2H8qtj& z;5s(Kdvn6gk>_4-s!I_Pb8yx+zsCw@YCDw7*qK^F>so89o>InPM9#QIV}pTTl3AX` z)6(@`=cJ}b^Z#&=cOuc=x;ns*t~O^o}%Jn>qYWl0v-{vo~4)4&h#`M zYp!c_{=E>wd4Hb9cJj5)k*k8(FN*#}*V~Km3}t&9c`BTh4pvJMY{gCtHx<<*W-C|5 z2dKD}QifirZ95OXllsT#!%m~2upfrtMg{RmfS{67xpV>uUbvdaAlbRhhYN+pM+%aA z5-sg(vmYQ1)vQpjcww4|;ZJK2AK^jZj;fOF)OcUxk}HIe(1}N1X!@E?U

    To enable SPDY protocol in the application program nghttpx and h2load, the following package is required:

      -
    • spdylay >= 1.2.3
    • +
    • spdylay >= 1.3.0

    To enable -a option (getting linked assets from the downloaded resource) in nghttp, the following package is required:

    diff --git a/searchindex.js b/searchindex.js index ea6a74e9..3ba24d92 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:42,terms:{my_obj:[7,11],create_serv:4,nghttp2_cancel:[7,11],prefix:[7,11,15,14],nghttp2_priority_spec_init:[7,11],nghttp2_session_get_stream_effective_local_window_s:[7,11],whose:[7,2,11],op_al:[8,4],"const":[0,7,11,10,14],"535d0eea":8,"0x20":[7,11,8],under:[7,11,8,15],bufferevent_getfd:10,spec:[7,11],merchant:[0,14,11,10,5],digit:10,downstream:6,"void":[0,7,11,10,14],bufferevent_ssl:[14,10],affect:3,initialize_nghttp2_setup:[14,10],verif:10,nghttp2_settings_initial_window_s:[7,11],x86_64:15,on_stream_close_callback:[7,11,10,14],direct:8,protoid:[6,13],second:2,aggreg:12,even:[0,12],rfc7230:[7,11],ssl_op_no_session_resumption_on_renegoti:[14,10],neg:[7,11],nghttp2_err_insuff_bufs:[7,11],"new":[7,11,8,12,14],tatsuhiro:[0,1,3,5,14,8,10,11],nghttp2_session_resume_data:[7,11],ipproto_tcp:[14,10],abov:[0,14,5,7,8,10,11,12],initialize_app_context:14,never:[7,11],here:[0,14,3,7,8,10,11,12,15],met:[7,11,12,10,14],"4xx":[8,3],path:[0,6,4,14,8,10,9,12,15],settings_timeout:[7,11],interpret:[7,11],nextprotoneg:[7,11],sslv23_server_method:14,errorlog:[6,12],credit:8,permit:[0,14,11,10,5],nghttp2_submit_prior:[7,11],aka:[7,11,8],nghttp2_frame:[7,11,10,14],settings_max_frame_s:[7,11],bufferevent_ssl_connect:10,substr:14,bev_event_error:[14,10],printf:0,bufferevent_socket_connect_hostnam:10,total:[7,11,8,3],unit:8,describ:[0,6,14,7,8,10,11,12,15],would:[7,11,14],nghttp2_inadequate_secur:[7,11],call:[0,14,4,7,8,10,11,12],asset:[2,8],recommend:[8,15],nghttp2_on_invalid_frame_recv_callback:[7,11],nghttp2_version:[7,11,5],until:[0,7,11,4],reusabl:8,relat:[14,10],nghttp2_cleartext_proto_version_id_len:[7,11],warn:[6,11,14],nghttp2_option_set_peer_max_concurrent_stream:[7,11],relai:6,ssl_shutdown:[14,10],hold:[7,11],unpack:[7,11,15],must:[0,6,2,4,14,7,8,9,11,12,15],word:[7,11],insignific:0,err:[14,10],exit_failur:[0,14,10],setup:[14,10],work:[6,4,14,8,9,12,15],lev_opt_close_on_fre:14,nghttp2_flag_ack:[7,11],root:[6,8,9,14],could:[7,11,14,4,10],defer:[7,11,10,14],give:[7,11,8,4],indic:[0,6,4,14,7,10,11],want:[6,4,14,7,10,11,12],select_padding_callback:[7,11],unsign:[7,11,10,14],end:[7,2,14,10,11],thing:[7,11,10,14],datalen:[14,10],how:[7,15],hot:1,hop:[7,11],verifi:[6,9],negoti:8,nghttp2_frame_typ:[7,11],updat:[7,11],after:[0,6,2,3,14,7,8,10,11,12,15],settings_header_table_s:[7,11],befor:[14,3,4,7,8,11,15],demonstr:10,request_path:14,third:[7,11,10,14],opaqu:[7,11],bootstrap:8,exclud:[7,11],receiv:[6,2,3,4,14,7,8,9,10,11],environ:[12,15],enter:12,exclus:[7,11],first:[0,6,3,4,14,7,8,10,11,12,13,15],order:[0,6,3,7,8,11,13],oper:[7,11,8,12],frontend:[6,8,12],crumbl:6,over:[6,14,7,8,10,11],becaus:[0,14,4,7,10,11,15],privileg:6,eagain:[14,10],fit:[0,14,11,10,5],nghttp2_session_get_stream_remote_window_s:[7,11],fwrite:[0,7,11,10],"9d33":8,deflate_s:8,"1xx":[7,11],easier:15,them:[14,7,8,10,11,12],nghttp2_hd_deflate_del:[0,7,11],thei:[6,3,4,14,7,8,10,11],fragment:8,safe:[6,11,14,7],"break":[0,7,11,10,14],promis:[7,11],choic:[7,11],openssl_config:[14,10],ai_addr:14,timeout:2,each:[0,6,2,4,14,7,8,10,11,12,13],debug:[6,2,7,9,10,11,13,15],went:15,side:[7,11,8,14],mean:[6,11,4,10,7],slen:14,protocol_error:[7,11],nghttp2_select_padding_callback:[7,11],http2_stream_data:[14,10],nghttp2_session_server_new2:[7,11],deflater_ptr:[0,7,11],network:[14,12,10],cross_compil:15,newli:[7,11,10],content:[1,2,4,6,8,12,14],rewrit:1,android_hom:15,hd_table_bufsize_max:4,end_stream:[7,11,8],written:[7,11,8,10],situat:[3,10],free:[0,14,5,7,10,11],standard:4,b127:12,nghttp2_err_deferred_data_exist:[7,11],spdy:[3,7,11,12,13,15],openssl:[6,8,15,10,14],nghttp2_version_num:[7,11,5],sigact:[14,10],rang:[7,2,8,11],warnx:[14,10],deflate_max_header_table_s:4,restrict:[0,14,11,10,5],nghttp2_protocol_error:[7,11],alreadi:[6,14,7,8,10,11],agre:8,primari:[7,11],top:[8,12,4],sometim:3,necessarili:[7,11],too:[7,2,11,14],similarli:7,draft:[1,11,8,7],listen:[6,8,12,9,14],tool:[7,15],lighttpd:8,travers:14,white:6,target:[7,11,8,4],provid:[0,14,4,5,7,8,10,11],tree:8,zero:[0,7,11],cppflag:15,project:[1,8],matter:[7,11],rfc2616:[7,11],nghttp2_continu:[7,11],nv_out:[0,7,11],manner:[6,3],increment:[7,11],seen:2,nghttp2_session_recv:[7,11],latter:[7,11,4],transmit:[7,11,10],sig_ign:[14,10],settings_max_header_list_s:[7,11],shall:[0,14,11,10,5],object:[0,14,4,7,8,10,11],writecb:[14,10],nghttp2_settings_timeout:[7,11],bytesio:[8,4],simplic:10,don:[6,2,14,7,8,11,15],hex_to_uint:14,doc:[8,9],flow:7,doe:[14,4,7,8,10,9,11,12],opaque_data:[7,11,8],section:[7,11,8],on_invalid_frame_recv_callback:[7,11],bev_event_eof:[14,10],pkg:8,protocol:7,bufferevent_setcb:[14,10],make:[6,4,14,7,8,9,11,12,15],involv:[7,11],absolut:[6,12],libari:8,explain:[12,10],configur:[6,4,7,8,9,11,12,15],dnsbase:10,busi:[14,10],nghttp2_cleartext_proto_version_id:[7,11],nghttp2_err_proto:[7,11],authoritylen:10,stop:[7,11,10,14],end_head:[7,11,8],evbuffer_drain:[14,10],bar:[6,8,4,9],ai_pass:14,ietf:[1,11,8,7],baz:[8,4],push_promis:[7,11,14],"public":[1,11,7],twice:2,nghttp2_strerror:[0,7,11,10,14],bufferevent_ssl_accept:14,serve_forev:[8,4],nul:[7,11],num:6,result:[0,14,3,7,10,11],respons:[0,6,3,4,14,7,8,9,10,11,12],fail:[0,14,3,7,8,10,11,12],key_fil:14,subject:[0,14,11,10,5],said:[7,11],figur:8,certpath:6,bev_opt_close_on_fre:[14,10],accord:[7,11],push_path:9,pointer:[0,7,11,14],extens:[6,4,7,8,10,11],advertis:[6,10,14],setsockopt:[14,10],protect:6,nghttp2_default_weight:[7,11],nghttp2_hd_deflate_hd:[0,7,11],against:[7,11,8],ssl_ctx_use_certificate_chain_fil:14,header_t:8,logic:14,enhance_your_calm:[7,11],com:[1,11,8,12,7],ninflat:0,int32_t:[7,11,10,14],"2nd":[0,13],usr2:12,usr1:[6,12],trust:6,assum:[6,4,7,8,11,12],option_ptr:[7,11],duplic:[7,11],reciev:10,liabil:[0,14,11,10,5],evbuffer_get_length:[14,10],chrome:[8,12],tlsv1:[6,8],max_deflate_s:8,been:[7,11,8,10,14],github:[1,8,3],trigger:[7,11],interest:[14,8,10],futur:[7,11,12],tini:10,life:14,regul:[14,10],worker:[6,12,9],argument:[14,4,7,8,10,11,12],ewouldblock:[14,10],load_cert_chain:[8,4],"0x000600":5,ssl_op_no_compress:[14,10],emploi:3,servic:[6,8,14],zlib:[8,15],employ:8,calcul:3,publicli:8,nghttp2_on_begin_headers_callback:[7,11,10],bev_event_timeout:[14,10],printabl:10,nghttp2_flag_pad:[7,11],nghttp2_set:[7,11],promised_stream_id:[7,11],conf:[6,8,10,14],sever:[6,14,7,8,11,12],on_data:[8,4],perform:[7,2,12,3,11],dhe:[6,8,9],transpar:[0,7,11],headlen:[7,11],split:0,version_str:[7,11],nghttp2_on_stream_close_callback:[7,11,10],complet:[0,14,7,9,10,11],start_listen:14,bufferevent_openssl_get_ssl:[14,10],hand:8,rais:4,ssl_ctx_new:[14,10],zlib1g:8,ownership:[7,11],niv:[7,11,8],nghttp2_flag_end_head:[7,11],pkg_config_libdir:15,kept:14,thu:[6,14,7,8,11,12],nghttp2_session_get_effective_local_window_s:[7,11],inherit:4,"0x04":[7,11,8],client:[1,2,3,7,9,11,13],thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],endif:[14,11,5],gzip:[0,8,9],everyth:8,left:[6,11,14,7],identifi:[6,4,14,7,11,13],nghttp2_nv_flag:[7,11],just:[0,6,14,7,8,9,10,11,12],"0x01":[7,11,8],initiate_connect:10,ifdef:[14,11],yet:[7,2,8,11],previous:[7,11],easi:8,settings_hd_table_bufsize_max:[7,11],els:[14,10],save:[6,2],applic:[0,14,3,4,7,8,10,11,15],preserv:[0,7,11],deflate_hd_table_bufsize_max:[0,7,11],background:[6,9],initialize_nghttp2_sess:[14,10],daemon:[6,12,9],herebi:[0,14,11,10,5],specif:[14,4,7,10,11,15],filenam:2,http2_session_data:[14,10],client_addr:14,arbitrari:[7,11],manual:[8,12],nghttp2_settings_max_header_list_s:[7,11],tcp_nodelai:[14,10],unnecessari:[7,11],underli:[14,10],www:[7,11,12],right:[0,14,5,8,10,11],deal:[0,14,5,7,10,11],intern:[7,11],freeaddrinfo:14,successfulli:[7,11,10,14],transmiss:[14,2,7,9,10,11],requesthandlerclass:[8,4],insensit:6,bottom:[7,11],nghttp2_data_source_read_callback:[7,11],subclass:[8,4],buffer:[0,14,7,8,10,11],condit:[0,14,5,7,10,11,12],foo:[6,8,4,9],localhost:[12,8,3],core:[6,8,9],plu:3,sensibl:[7,11],insecur:[6,12],repositori:[14,10],peer:[7,2,14,10,11],post:[7,2,8,11],cacert:[6,12],nghttp2_submit_data:[7,11],nghttp2_settings_max_concurrent_stream:[7,11,10,14],produc:[0,7,11],f127:12,evbuff:[14,10],encod:[1,4,6,7,8,11],bound:[0,7,11],libev:[1,8,15,6],down:[14,10],nghttp2_before_frame_send_callback:[7,11],errx:[14,10],git:[1,11,7],session_send:[14,10],wai:[0,7,11,8,15],support:[14,3,7,8,10,11,12,15],closur:[7,11,4,10],suppors:12,avail:[6,4,14,7,8,10,9,11,12,13],overhead:8,fork:[8,12],head:[7,11,14],event_bas:[14,10],offer:[8,4,15],forc:[2,9],bev_event_connect:[14,10],heap:8,"true":[8,4],reset:10,ssl_ctx_free:[14,10],maximum:[6,11,8,7],tell:[0,14,4,7,10,11,12],deafult:8,fundament:0,autoconf:8,emit:[7,11,10,14],nghttp2_initial_window_s:[7,11],featur:[8,12],httpbi:[1,8],netdb:14,decrypt:3,unreleas:8,exist:[7,11,8,12],protocol_id_len:[7,11],ai_flag:14,ends_with:14,sizeof:[0,14,10],delete_http2_session_data:[14,10],encrypt:12,when:[0,6,4,14,7,8,9,10,11,12,13],role:[7,11,14],nghttp2_check_header_valu:[7,11],send_client_connection_head:10,unlimit:[6,2,11,7],heder:[7,11],intend:[6,11,14,12,7],af_unspec:[14,10],nghttp2_option_new:[7,11],nghttp2_max_window_s:[7,11],technot:[7,11],ni_numerichost:14,notic:[0,14,11,10,5],max_siz:8,evconnlistener_new_bind:14,longer:[14,8],htdoc:9,pseudo:[7,11],nghttp2_check_header_nam:[7,11],print_head:10,time:[0,6,2,4,14,7,8,11,12],push:[7,11,8,4,9],skip:[7,11],consum:[7,11],nghttp2_on_frame_recv_callback:[7,11,10],nghttp2ver_h:5,decid:[7,11,4],create_ssl_ctx:[14,10],depend:[14,7,8,10,11,12,15],readabl:10,undon:0,sourc:[0,1,14,7,8,10,11,15],string:[0,6,4,14,7,8,10,11],nghttp2_settings_enable_push:[7,11],nghttp2_hd_inflate_new:[0,7,11],androideabi:15,host_len:[7,11],exact:[7,11],level:[6,2,3,4,14,7,11,13,15],did:[7,11,9,10],item:[8,12],settings_id:[7,11],conhead:14,cooki:6,round:3,dir:15,upper:[0,7,11,4],sign:12,port:[6,3,4,14,7,8,9,10,11,12,13],data_flag:[7,11,14],appear:[8,12],event_base_fre:[14,10],current:[0,6,2,4,14,7,8,9,11,12,15],nghttp2_err_data_exist:[7,11],gener:[0,7,11,8],pad_high:[7,11],nghttp2_hd_inflate_del:[0,7,11],url_remap:12,nghttp2_session_get_stream_local_clos:[7,11],address:[6,8,12,4],locat:1,nghttp2_session_get_stream_remote_clos:[7,11],box:12,connect_error:[7,11],queue:[7,11,10,14],behav:[7,11,12],ourselv:[14,10,15],nghttp2_err_goaway_already_s:[7,11],regardless:[6,11,7],extra:[8,10],modul:[8,4],prefer:[6,11,12,7],"1st":0,instal:[8,15],hdinflat:[8,4],memori:[0,14,4,7,10,11],stylesheet:[0,2],handler:[8,4],strdup:14,prev:14,emiss:[7,11],rst_stream:[7,11,10,14],ctype:14,enhanc:6,nghttp2_submit_window_upd:[7,11],behalf:6,prepar:[7,11,15],cap:4,stream_user_data:[7,11,10],cat:[7,11,10,14],descriptor:[7,11,14],can:[0,6,4,14,7,8,9,10,11,12,13,15],http2:[1,4,6,7,8,11,12],purpos:[0,6,5,14,7,10,11],uf_path:10,claim:[0,14,11,10,5],stream:[0,6,2,3,4,14,7,8,10,11,13],agent:[0,8],critic:[7,11],abort:[7,11],tabl:[0,2,4,7,8,9,11],nghttp2_header:[7,11,10,14],occur:[7,11,4],alwai:[7,11,8,14],differenti:0,multipl:7,ping:[7,11],write:1,actual:[7,11,10,14],nghttp2_hd_deflate_init:0,mar:8,sslcontext:[8,4],max:[6,2,3,7,8,10,11,13],sni:6,mac:8,mai:[0,14,3,4,7,8,10,11,12,15],acceptcb:14,data:[0,14,2,3,4,7,8,10,11],autotool:8,openssl_add_all_algorithm:[14,10],stdio:0,stdin:[2,8],explicit:0,inform:[14,2,7,8,9,10,11,13,15],nghttp2_session_get_stream_effective_recv_data_length:[7,11],preced:12,combin:[6,11,7],talk:[14,8],nghttp2_err_stream_shut_wr:[7,11],size_t:[0,7,11,10,14],nghttp2_err_unsupported_vers:[7,11],still:[7,11,8,14],mainli:[7,11],dynam:[0,7,11,8,4],entiti:14,group:[6,2],nghttp2_err_fat:[7,11],nghttp2_priority_spec:[7,11],tort:[0,14,11,10,5],window:[6,2,3,7,11,12,13],main:[0,14,10],non:[14,3,4,7,8,10,11,12],env:[8,4],"5xx":[8,3],nghttp2_submit_head:[7,11],nghttp2_on_header_callback:[7,11,10,14],now:[7,11],name:7,version_num:[7,11],config:[8,12,15],no_error:8,drop:[6,11,14,10,7],hd_inflat:[7,11],millisec:[8,3],compression_error:[7,11],compil:[8,15],replac:[6,11,12,7],individu:[7,11,12],continu:[0,14,2,7,8,10,11],event_base_loop:[14,10],turoti:10,happen:[0,14,12,4,10],ai_addrlen:14,nghttp2_hd_inflate_init:0,shown:0,libjemalloc:8,space:[0,6,11,8,7],output_length:8,correct:15,earlier:[14,10],nghttp2_option_set_no_auto_window_upd:[7,11],event_base_new:[14,10],argv:[0,14,10],org:[0,1,11,8,7],"byte":[0,6,2,3,4,14,7,8,9,10,11],argc:[0,14,10],care:[7,11],nghttp2_hd_deflate_change_table_s:[7,11],nghttp2ver:[1,11,7],"88448504252dd5918485":8,badli:[7,11],turn:12,nghttp2_flag_non:[7,11,10,14],place:[7,11],evdns_base_new:10,origin:[6,2,7,8,11,12],directli:[7,11,10,14],carri:[7,11],onc:[0,7,11],arrai:[0,7,11,8,10],yourself:8,reopen:6,nghttp2_is_fat:[7,11],nghttp2_flow_control_error:[7,11],submit:[7,11,8,10],on_frame_recv_callback:[7,11,10,14],open:[1,11,7],size:[0,6,2,3,4,14,7,8,9,11,13],given:[0,6,2,3,4,7,8,11,13],capac:[0,11],paramt:0,sigpip:[14,10],averag:6,internal_error:[7,11],conveni:[7,11,4],knowledg:8,copi:[0,14,4,5,7,10,11],specifi:[1,2,3,7,9,11,13,15],on_head:[8,4],mostli:8,holder:[0,14,11,10,5],than:[0,14,3,4,7,8,9,11,13],png:9,serv:[14,12],wide:[6,14],nghttp2_session_get_outbound_queue_s:[7,11],were:[7,11,10,14],posit:[7,11],read_callback:[7,11,14],nghttp2_min_weight:[7,11],browser:[8,12],sai:[7,11],pri:11,ani:[0,6,4,5,14,7,8,10,11,12],deliv:[7,11],saw:12,sat:8,bitwis:[7,11],form:[6,11,8,4,7],nghttp2_flag_prior:[7,11],destroi:[14,10],payloadlen:[7,11],note:[0,6,3,14,7,8,10,11,12],take:[7,11,8,10,14],properti:[14,10],noth:[7,11,8,12,4],ndeflat:0,begin:10,sure:[14,8,10],trace:8,normal:[7,11],multipli:2,compress:[0,1,4,7,8,11],nghttp2_hcat_request:[7,11,14],pathlen:10,sublicens:[0,14,11,10,5],pair:[14,2,4,7,8,10,9,11],renam:12,http2_select:[7,11],later:[0,14,3,4,7,10,11,12],gracefulli:[7,11,12,10],show:[12,4],unprocess:[14,10],concurr:[6,2,3,14,7,8,11,13],permiss:[0,14,11,10,5],nghttp2_session_set_stream_user_data:[7,11,14],threshold:14,help:[6,2,9,13],print_hd_tabl:4,onli:[6,2,14,7,8,10,11,12],explicitli:[6,4],ratio:0,behind:6,overwritten:[7,11],hddeflat:[8,4],variou:[7,11],get:[14,2,4,7,8,10,11,12],clang:8,outlen:[0,7,11,10],ssl:[1,3,7,9,11,13],cannot:[0,14,4,7,11,12],nghttpd:[1,2,13],ssl_ctx_set_opt:[14,10],requir:[1,6,7,9,11,12,15],nghttp2_set_stream_user_data:14,where:[6,15],burst:[6,12],op_no_sslv2:[8,4],detect:[7,11,8,4],weighttp:8,nghttp2_hd_inflate_fin:[0,7,11],enough:[0,7,2,11],between:12,"import":[0,8,4,15],fcntl:14,awaaagqeaad__wuaaaab:8,pipefd:14,evdns_bas:10,come:[6,15,3,14],submit_request:10,region:[7,11],contract:[0,14,11,10,5],fontend:12,tutori:1,bufferevent_fre:[14,10],mani:[7,11],nghttp2_ext_frame_typ:[7,11],nghttp2_data_provid:[7,11,14],among:14,color:[2,9],inspir:8,nghttp2_err_too_many_inflight_set:[7,11],dispatch:12,cancel:[7,11],damag:[0,14,11,10,5],http2server:[8,4],header_table_s:8,"abstract":[14,10],nghttp2_on_unknown_frame_recv_callback:[7,11],nghttp2_err_buffer_error:[7,11],hidden:[7,11],those:[0,14,3,7,8,10,11,13],"case":[6,4,14,7,8,10,11,12],hdr:[14,8,4,10],progoram:10,invok:[14,4,7,8,10,11,12],invoc:[7,11,4,14],margin:4,edch:8,nghttp2_nv_flag_no_index:[0,7,11],on_data_chunk_recv_callback:[7,11,10],stdout:[0,8,10],ascii:[7,11],develop:1,author:[0,14,4,5,8,10,11,12],bev_opt_defer_callback:[14,10],alphabet:[7,11],same:[0,14,2,4,7,8,11,12],ssl_library_init:[14,10],nghttp2_err_flow_control:[7,11],html:[1,2,14,7,8,11],pad:[6,2,11,9,7],document:[1,11,12,9,5],finish:[14,3,7,8,10,11],decompress:[7,11,8,3,4],handshake_leftlen:14,extern:11,postpon:[7,11],ai_next:14,without:[0,6,4,5,14,7,8,9,10,11,12,13,15],evict:[7,11],nghttp2_push_promis:[7,11],on_request_don:[8,4],event2:[14,10],nghttp2_err_def:[7,11],nghttp2_submit_set:[7,11,10,14],execut:[8,12,4],rest:3,multiplex:14,hint:14,except:[7,11,4],param:[6,9],identif:[7,11],nghttp2_select_next_protocol:[7,11,10],nghttp2_ext_altsvc:[7,11],real:[8,12],unistd:[14,10],read:[1,2,11,7],nghttp2_version_ag:[7,11],sheme:3,test:[1,2,12],traffic:[12,8,3],nghttp2_hd_inflate_change_table_s:[7,11],next_proto_cb:14,integ:[7,11],server:[1,2,6,7,9,11,12,13],either:[7,11,4,14],output:[0,6,2,4,14,7,8,9,10,11,13],manag:[7,11,14],stream_clos:[7,11],protocol_sslv23:[8,4],set_no_refset:4,ssl_ctx_set_next_protos_advertised_cb:14,handshak:[6,14,9,10],nonzero:[0,7,11,14],easili:10,"2xx":[8,3],exit:[0,6,2,14,9,10,12,13,15],data_ptr:[7,11],power:8,base64url:[7,11],nghttp2_session_server_new:[7,11,14],fulli:[7,11,14],getnameinfo:14,refers:4,src:[8,15],inflater_ptr:[0,7,11],ack:[7,11,8],settings_payload:[7,11],act:[14,12,10],routin:[14,10],consid:8,"0x0fu":0,ssl_ctx_set_next_proto_select_cb:[7,11,10],error_repli:14,strip:15,your:[14,8],b2a_hex:[8,4],nghttp2_hcat_respons:[7,11,10],hex:[14,8],start:[14,3,7,8,9,10,11,12],nghttp2_err_stream_clos:[7,11],interfac:4,low:[7,11],lot:[7,11],ipv6:[6,8],strictli:[7,11,3,4,13],next_proto_list:14,nghttp2_proto_version_id_len:[7,11,14],tupl:[8,4],nghttp2_err_invalid_st:[7,11],satur:8,categor:[6,11,7],possibl:[7,11,8,10],"default":[1,2,3,7,9,11,13],applayerprotoneg:[7,11],hpack:[1,11,7],expect:[8,4],creat:[14,7,8,10,11,12,15],decreas:[7,11],file:[1,2,5,7,9,11,15],nghttp2_err_invalid_header_block:[7,11],fill:[7,11,14],denot:[6,11,10,7],functypedef:11,googl:[8,12],todo:[7,11],kbyte:[8,3],field:[1,2,11,7],valid:[7,2,8,12,11],nghttp2_prioriti:[7,11],ignor:[6,2,3,14,7,11,13],you:[0,6,4,14,7,8,10,11,12,15],intention:[7,11],architectur:15,sequenc:[0,14,4,7,8,10,11],promised_stream_user_data:[7,11],briefli:[0,15],track:[14,8,10],reduc:[7,11],cunit:8,directori:[6,2,14,8,9,10,15],represent:[7,5],all:[0,6,4,5,14,7,10,11,12,13,15],on_unknown_frame_recv_callback:[7,11],illustr:[8,4],nghttp2_err_start_stream_not_allow:[7,11],follow:[0,6,3,4,5,14,7,8,10,11,12,15],alt:[1,8,6],ptr:[7,11,10,14],app_cont:14,uint8_t:[0,7,11,10,14],articl:[12,15],readcb:[14,10],program:[1,12,6],bufferevent_writ:[14,10],introduc:15,uf_queri:10,evbuffer_remov:14,fals:8,pad_low:[7,11],nghttp2_option:[7,11],util:12,nghttp2_client_connection_header_len:[7,11],failur:[7,11],veri:[0,7,11,10],bottleneck:3,unalt:6,"__cplusplu":11,list:[6,11,14,4,7],nghttp2_headers_categori:[7,11],adjust:[0,7,11,8,3],stderr:[0,6,14,7,8,10,11],small:[7,11],inflate_header_block:[0,7,11],session_recv:14,syslog:6,rate:1,pass:[0,6,4,7,10,11],further:[0,7,11,10,14],what:[7,11,8,12,4],sub:14,sun:8,sum:[0,8,3],delet:[0,7,11,10],version:[7,15,13],method:[14,2,4,7,8,10,11],full:8,libjansson:8,varnish:8,padlen:[7,11,8],percentage_of_original_s:8,excess:14,modifi:[0,14,5,8,10,11],valu:[0,6,2,4,14,7,8,9,10,11,12],search:14,ai_addrconfig:14,nghttp2_err_push_dis:[7,11],on_clos:[8,4],prior:8,amount:[7,11,14,4,10],action:[0,14,5,7,10,11],via:[6,14,7,8,10,11,12],primit:10,ask:[7,11],famili:[14,10],establish:[14,10],select:7,regist:14,two:14,taken:[7,11],minor:[7,5],more:[0,14,7,8,10,11],tsujikawa:[0,14,11,10,5],desir:[6,11,12,7],nghttp2_settings_header_table_s:[7,11],default_header_table_s:4,select_next_proto_cb:[7,11,10],flag:[0,14,7,8,10,11,15],particular:[0,14,5,7,10,11],known:0,nghttp2_err_wouldblock:[7,11,10,14],cach:[8,12],none:[6,8,4],endpoint:[7,2,8,11],dev:[6,8,5],remain:[7,11,10,14],learn:14,def:[8,4],share:[0,8,4,15],accept:[0,6,14,7,8,11,12],minimum:[7,11,12,14],ssl_op_al:[14,10],nghttp2_submit_altsvc:[7,11],create_ssl:[14,10],strlen:[14,10],huge:[14,10],netinet:[14,10],secur:[0,6,8,12],rather:9,anoth:[7,11,12],serveraddr:[8,12],reject:[7,11],sec9:[7,11],simpl:[7,11,10,14],css:[0,8,4,9],resourc:7,referenc:8,variant:[7,11],spdylai:[12,8,3,15],nghttp2_client_connection_preface_len:[7,11,10,14],associ:[0,14,4,5,7,8,10,11],keypath:6,"short":[14,10],proto:[6,13],caus:[7,11],callback:[14,4,7,8,10,11],nghttp2_nv_flag_non:[0,7,11,10,14],alpn:[6,4,7,8,11,12,13],authroiti:10,rotat:12,max_ag:[7,11],hypertext:[1,8],libcunit1:8,through:[6,8,12,14],paramet:[0,6,7,9,10,11],style:[0,8,4],nghttp2_hcat_push_respons:[7,11],pend:[7,11,10,14],nghttp2_err_eof:[7,11],alter:[6,8],valuelen:[0,7,11,10,14],"0x010203":[7,5],"return":[0,14,3,4,7,8,9,10,11,12],check_path:14,nghttp2_initial_max_concurrent_stream:[7,11],readlen:[14,10],nghttp2_err_callback_failur:[7,11,10,14],authent:6,tear:[14,10],achiev:[7,11,14],found:[7,11,14],unicod:4,trailer:[7,11],nghttp2_on_frame_send_callback:[7,11],weight:[7,2,11],realli:[12,10],nghttp2_hd_inflate_flag:[7,11],connect:[2,3,5,7,11,12,13],field_set:10,event:[0,14,4,5,8,10,11],ftw:[8,4],publish:[0,14,11,10,5],payload:[6,2,3,7,9,11],etag:8,print:[6,2,4,8,10,9],on_frame_not_send_callback:[7,11],proxi:1,advanc:12,nghttp2_internal_error:[7,11,14],effect:[7,11],reason:[0,7,11,4,14],base:[6,8,14],put:[7,11,8],nghttp2_session_mem_recv:[7,11,10,14],nghttp2_flag:[7,11],recv:8,prefac:[7,11,12,10,14],omit:[7,11,4,10],nghttp2_err_invalid_stream_st:[7,11],assign:[0,14,7,8,10,11],feed:[7,11,10,14],major:[7,5],notifi:[7,11,14],prevent:[7,11,8],number:[0,6,3,4,5,14,7,9,11,13],pkgconfig:15,done:[6,3,14,8,10,12],construct:[7,11,8,4],stdlib:11,differ:[7,11,12],script:[2,8,12,4,15],interact:6,data_prd:[7,11,14],nghttp2_session_get_stream_user_data:[7,11,14],least:[7,11,8],scheme:[0,2,4,8,10,12,13],store:[0,7,11,10,14],input_length:8,option:[7,3],memcmp:14,nghttp2_client_connection_head:[7,11],part:[6,3],pars:10,consult:12,dpkg:15,window_upd:[7,11,8],doubli:14,remot:[7,2,14,10,11],remov:[7,11,15],bridg:1,str:4,consumpt:10,nghttp2_error:[7,11],libspdylai:15,window_size_incr:[7,11,8],lib_error_cod:[7,11],arrlen:[14,10],packag:8,"null":[0,14,2,7,10,11],syn_stream:[7,11],sell:[0,14,11,10,5],outbound:[7,11],built:[8,3,15],equival:[7,11],check:[7,11,10,14],self:[8,12,4],also:[7,3,15],append:[6,4],nghttp2_err_frame_size_error:[7,11],make_nv:[0,14,10],distribut:[0,14,11,10,5],reacb:10,passwd:6,reach:[7,11,14],chart:[7,11],most:[6,2,11,9,7],private_kei:[6,9],charg:[0,14,11,10,5],addr:14,"01881f3468e5891afcbf83868a3d856659c62e3f":8,compar:[7,11],clear:7,cover:[8,12],ext:[7,11],h2c:[13,11,8],pri_spec:[7,11],nghttp2_settings_max_frame_s:[7,11],hdtabl:4,rtt:[7,11],microsec:[8,3],fine:[7,11],nghttp2_submit_push_promis:[7,11],copyright:[0,14,5,8,10,11],refused_stream:[7,11],queu:[7,11,10,14],remedi:3,express:[0,14,11,10,5],kind:[0,14,5,7,10,11],nativ:[13,8,3],"3xx":[8,3],liabl:[0,14,11,10,5],before_frame_send_callback:[7,11],subcert:6,retreiv:10,crt:[14,8,12,4],statist:2,h2load:15,certif:[1,2,9],set:[0,6,2,3,4,14,7,8,9,10,11,12,13,15],dump:6,creator:8,ousid:8,remove_stream:14,startup:6,nghttp2_submit_goawai:[7,11],sec:[6,8,3],arg:[7,11,10,14],close:[14,4,7,8,10,11],jemalloc:8,arm:15,analog:[7,11],strchr:14,someth:[7,11,12],won:[6,11,14,7],nghttp2_on_data_chunk_recv_callback:[7,11,10],altern:[6,8],numer:[7,11,5],sole:[7,11,13],writelen:14,succeed:[8,3],percent_decod:14,verbos:[13,2,8,9],both:[6,3,14,7,8,10,11,12],last:[7,11,8],delimit:[0,6,8],nghttp2_data_flag_non:[7,11],nghttp2_session_want_writ:[7,11,10,14],tempor:[7,11],context:[7,11,8,10,14],nghttp2_rst_stream:[7,11],whole:[0,7,11,8,4],load:[6,8],simpli:[14,10],send_server_connection_head:14,header:[1,2,3,7,9,11],platform:[8,15],shutdown:[7,11,12,10,14],nghttp2_session_client_new:[7,11,10],nghttp2_session:[7,11,10,14],backend:[6,8,12],due:[0,7,11],empti:[6,4,14,7,8,10,11,12],send_respons:[14,8,4],whom:[0,14,11,10,5],stdint:11,add_stream:14,flight:[7,11],nghttp2_err_nomem:[7,11],settings_enable_push:[7,11],nghttp2_session_terminate_sess:[7,11,10],imag:2,func:11,next_proto_list_len:14,look:[0,14,3,10],"while":[7,11,10,14],behavior:[7,11],error:[0,6,3,4,14,7,8,9,10,11],robin:3,loop:[14,8,4,10],earli:9,malloc:[0,14,10],nghttp2_session_callback:[7,11,10,14],readi:[7,11,14],user_data:[7,11,10,14],itself:[7,11,3,10,14],flow_control_error:[7,11],grant:[0,14,11,10,5],libcurl:8,belong:[7,11],create_http2_session_data:[14,10],decod:[1,2,4,7,8,9,11],mytyp:[7,11],inflat:[1,11,8,4,7],moment:8,user:[0,6,7,8,10,11,12,15],chang:[6,3,4,14,7,8,9,11],recent:[7,11],nghttp2_h:11,noninfring:[0,14,11,10,5],lib:15,entri:[7,11,8,4],nghttp:[1,13],person:[0,14,11,10,5],uint32_t:[7,11,14],qdeb_build_gnu_typ:15,on_frame_send_callback:[7,11],nghttp2_ping:[7,11],input:[0,14,7,8,10,11],subsequ:[0,7,11,4,13],bin:[8,4,15],on_begin_headers_callback:[7,11,10,14],obsolet:[7,11],format:[6,2,14,7,8,9,10,11,12],http_parser:10,nginx:8,bit:[6,2,5,7,11,13],strstr:14,success:[0,7,11,8],signal:[6,14,7,10,11,12],lib_error:[7,11],resolv:6,some:[0,14,4,7,10,11,12],back:[7,11,8,14],sampl:8,reverse_proxi:12,libssl:8,lev_opt_reus:14,per:[6,3,4,8,12,13],pem:[6,2,12,9],retri:12,larg:[7,2,8,11],make_nv2:10,settings_compress_data:8,machin:[8,12],run:[6,4,14,7,8,10,9,11,12,15],step:[7,11,12],prerequisit:15,handshake_readcb:14,nghttp2_hd_inflate_emit:[0,7,11],commun:[6,8,10,14],idl:[7,11],regular:[7,11],dialog:12,block:[6,3,4,14,7,8,10,11],nghttp2_err_paus:[7,11],nsm:11,within:8,nghttp2_send_callback:[7,11,10],announc:8,occupi:[8,4],inclus:[7,2,11],errno:14,"long":[7,11,8,14],nghttp2:[7,15],sslv3:6,suit:[6,8,9],forward:[6,11,8,12,7],change_table_s:4,properli:6,session_ptr:[7,11],repeatedli:[0,7,11,9],link:[6,2,8,12,14],translat:12,ni_maxhost:14,nghttp2_hd_inflate_end_head:[0,7,11],line:[6,12,8,3,15],mitig:8,info:6,concaten:0,utf:4,caller:[0,7,11,14],nghttpx:[1,2,15,9,13],frame_size_error:[7,11],parser:10,repres:[7,11],"char":[0,7,11,10,14],incomplet:8,sublen:14,curl:[8,12],titl:14,invalid:[7,11],librari:[7,3,15],llvm:15,nghttp2_default_header_table_s:[7,11],meaning:6,libtool:8,create_http2_stream_data:[14,10],algorithm:[7,11],svc:[1,8,6],nghttp2_submit_request:[7,11,10],namelen:[0,7,11,10,14],far:[0,14,8,10],avoid:[7,11,8,10,14],asyncio:[8,4],getaddrinfo:14,code:[0,14,3,4,7,8,10,11],examin:0,queri:10,nghttp2_frame_hd:[7,11],cython:8,privat:[6,2,14,8,9,12,15],send:[6,2,4,14,7,8,9,10,11,12],http_parser_url:10,lower:[7,11],outgo:[7,11,14],aris:[0,14,11,10,5],fatal:[6,11,14,10,7],nghttp2_data_flag:[7,11],sent:[0,6,14,7,10,11],nghttp2_submit_p:[7,11],untouch:[7,11],relev:10,tri:[7,11,12],magic:[14,10],button:12,http_parser_parse_url:10,"try":[7,11,8],session:[6,14,7,8,10,11,13],pleas:[14,3,7,8,10,11,12],impli:[0,14,11,10,5],smaller:8,snprintf:10,memset:[14,10],download:[1,2,8],c100:3,click:12,client_address:[8,4],index:[7,2,8,11],o_rdonli:14,access:[6,2,4,7,8,11,12,13],experiment:[1,2,9,6],nghttp2_hd_deflate_new:[0,7,11],whatev:[8,4],inspect:[7,11],uf_schema:10,nghttp2_enhance_your_calm:[7,11],len:[7,11,10,14],bodi:[14,3,4,7,8,10,11],app_ctx:14,ubuntu:8,becom:[7,11,3,5,14],sinc:[7,11,8,10,14],convert:6,larger:[7,11,4],ctx:[8,4],settings_payloadlen:[7,11],autoreconf:8,jansson:8,cert:[6,2,9],greac:[14,10],typic:8,set_npn_protocol:4,firefox:12,output_wouldblock_threshold:14,apr:8,appli:[7,11],gatewai:12,bufferev:[14,10],from:[1,2,5,6,7,11,12,15],nghttp2_err_invalid_stream_id:[7,11],doubl:0,binascii:[8,4],upgrad:[6,2,7,8,11,12],next:[7,11,10,14],implic:12,doubt:0,findproxyforurl:[8,12],usr:[8,4,15],nghttp2_nv:[0,7,11,10,14],nghttp2_option_del:[7,11],sort:6,goawai:[7,11,8,10,14],deflat:[1,11,8,4,7],in_fin:[0,7,11],account:[7,11,8,10],retriev:[7,11,14,4,10],tunnel:[6,8],nghttp2_settings_id:[7,11],pac:[8,12],about:[7,11,14,4,10],aliv:[6,11,14,7],sslv23_client_method:10,control:7,process:[0,14,4,7,8,10,11,12],nghttp2_session_get_remote_set:[7,11],high:4,fprintf:[0,7,11,10,14],tab:12,onlin:[7,8],serial:[7,11,10,14],evdns_base_fre:10,no_refset:4,gcc:8,filepath:6,nghttp2_session_want_read:[7,11,10,14],gcm:8,ssl_ctx_use_privatekey_fil:14,evbas:[14,10],instead:[6,3,4,7,11,13],nullifi:[7,11],npn:[6,14,7,8,10,11,12],max_payloadlen:[7,11],eventcb:[14,10],nghttp2_compression_error:[7,11],alloc:[0,7,11,14],bind:1,nvlen:[0,7,11,10,14],correspond:[14,8],element:[7,11,14],issu:[1,3,7,8,11,12,13],stream_id:[14,4,7,8,10,11],nghttp2_connect_error:[7,11],ssize_t:[0,7,11,10,14],fallback:12,furnish:[0,14,11,10,5],"02f":0,nva2:0,nva1:0,move:[7,11],comma:6,"02x":0,chosen:4,nghttp2_hd_inflate_hd:[0,7,11],suppli:[7,11,12],therefor:[0,4,7,10,9,11],least_vers:[7,11],inlen:[0,7,11,10],recept:[14,2,7,9,10,11],crash:[7,8],greater:[7,11],python:1,auto:[13,3],nghttp2_goawai:[7,11],automat:[7,11,12],warranti:[0,14,11,10,5],nghttp2_session_mem_send:[7,11],anyth:[6,10],edit:[12,15],uf_port:10,mode:1,ndk:15,ssl_filetype_pem:14,chunk:[7,11,8,4,10],ouf:[7,11],nghttp2_err_temporal_callback_failur:[7,11,14],"static":[0,14,7,8,10,11,15],our:10,patch:[7,8,5],out:[0,14,2,5,7,8,10,11,12],variabl:[8,12,4,15],accesslog:[6,12],req:[8,3],n1000:8,categori:[7,11,10],suitabl:[6,11,7],rel:[0,14,9],field_data:10,recv_callback:[7,11],insid:8,cleartext:[7,11],standalon:15,releas:7,nghttp2_hd_inflate_non:[7,11],remap_requir:12,log:[1,2,9],syn_repli:[7,11,3],keep:[6,14,7,8,10,11],length:[0,14,2,7,8,10,11],outsid:[6,8,7],retain:[7,11],softwar:[0,14,11,10,5],addrinfo:14,echo:15,date:8,facil:6,prioriti:[7,2,11],seq:8,nghttp2_hd_inflat:[0,7,11],strict:8,unknown:[7,11,14],licens:8,system:[6,15,12,10,14],messag:[7,11,10],attach:[14,10],attack:8,termin:[14,7,8,9,10,11],"final":[0,7,11],ipv4:[6,8],request_head:[8,4],proclen:0,sa_handl:[14,10],enqueu:10,exactli:[14,8],nghttp2_err_header_comp:[7,11],see:7,structur:[7,11,10,14],charact:[7,11,10,14],sens:[7,11],nghttp2_session_del:[7,11,10,14],"08zx":0,bev:[14,10],ssl_new:[14,10],unencrypt:12,bufferevent_get_input:[14,10],nghttp2_inbound_num_iv:11,corrupt:10,have:[0,14,7,8,10,11,15],reserv:[7,11],need:[0,7,8,10,11,12,15],ai_socktyp:14,"0x08":[7,11],"0x09":[7,11],origin_len:[7,11],"0x05":[7,11,8],"0x06":[7,11],"0x07":[7,11],"0x00":[0,7,11,8],"switch":[14,8,10],"0x02":[7,11],"0x03":[7,11],nghttp2_refused_stream:[7,11],evbuffer_pullup:[14,10],which:[0,14,3,4,7,8,10,11,12,15],singl:[0,6,4,14,7,8,10,11],opaque_data_len:[7,11],unless:[6,11,8,9,7],bufferevent_openssl_socket_new:[14,10],deploy:[12,15],who:8,settings_max_concurrent_stream:[14,2,7,8,10,11],cipher:[6,8,9],stream_data:[14,10],noind:8,deploi:1,"class":[8,4],nghttp2_error_cod:[7,11,10,14],nghttp2_err_stream_id_not_avail:[7,11],url:[14,8,12],request:[0,6,2,3,4,14,7,8,9,10,11,12,13],pipe:14,determin:[7,11,8,4],nghttp2_pack_settings_payload:[7,11],"0x0d":[7,11],"0x0a":[7,11],"0x0b":[7,11],"0x0c":[7,11],ssl_load_error_str:[14,10],bufferevent_get_output:[14,10],redirect:10,nghttp2_submit_rst_stream:[7,11,14],forev:4,should:[0,14,7,8,10,11,15],suppos:12,local:[7,11,12,15],meant:[6,10],contribut:1,familiar:8,memcpi:[14,10],nghttp2_session_client_new2:[7,11],nghttp2_session_terminate_session2:[7,11],settings_initial_window_s:[7,11,8],nghttp2_data:[7,11,14],increas:[7,11],tbd:[7,11],portion:[0,14,4,5,7,10,11],nghttp2_submit_respons:[7,11,14],enabl:[6,4,7,8,11,12,15],whether:[0,14,11,10,5],contain:[0,6,4,14,7,8,9,10,11,12],nghttp2_window_upd:[7,11],frame:[0,6,2,4,14,7,8,9,10,11],ssl_ctx:[7,11,10,14],nghttp2_hd_deflat:[0,7,11],temporarili:[7,11],statu:[1,11,3,7],wire:[14,8,10],correctli:[7,11],nghttp2_settings_entri:[7,11,10,14],state:[0,7,11,8,14],https_uri:10,progress:8,nghttp2_initial_connection_window_s:[7,11],kei:[6,2,4,14,7,8,9,11,12],entir:[7,11,14],n100000:3,last_stream_id:[7,11,8],disconnect:[14,10],addit:[1,11,15,7],revers:[6,8,12],nghttp2_proto_version_id:[7,11,10,14],equal:14,etc:[6,8,10,14],instanc:[7,11,8,4],grain:[7,11],freeli:15,uint16_t:[7,11,10],get_hd_tabl:4,nghttp2_data_flag_eof:[7,11,14],arriv:[8,4],precondit:[7,11],m10:[8,3],commenc:10,respect:[7,11,10],chromium:12,quit:12,nghttp2_recv_callback:[7,11],compos:8,insuffici:[7,11],compon:[12,10],json:8,treat:[6,11,14,7],immedi:[7,11],nghttp2_hcat_head:[7,11],altsvc:[6,11,8,7],http2jp:8,iobas:4,sock_stream:14,evconnlisten:14,present:[0,13],on_header_callback:[7,11,10,14],nghttp2_frame_size_error:[7,11],plain:[8,12,4],nghttp2_session_send:[7,11,10,14],defin:[0,14,5,7,10,11],eintr:14,nghttp2_flag_end_stream:[7,11,14],inadequate_secur:[7,11],layer:8,helper:[7,11],on_request_recv:14,libxml2:[8,15],squid:[8,12],site:8,archiv:[14,10],substanti:[0,14,11,10,5],incom:[6,4,14,7,8,11,12],let:[14,10,15],welcom:8,dereiv:2,satisfi:12,cross:15,member:[0,7,11,14],handl:[14,4,7,8,10,11],ifndef:[11,5],nightli:12,http:7,hostnam:[6,8,12,4],uf_host:10,initi:[0,6,2,3,4,14,7,10,11,13],dealloc:[7,11],inflate_flag:[0,7,11],off:[14,12,10],well:[14,11,10,15],app_context:14,exampl:[0,6,4,14,7,8,9,10,11,12,15],command:[12,8,3,15],choos:[6,11,15,7],error_cod:[14,4,7,8,10,11],nghttp2_data_sourc:[7,11,14],usual:[7,11],paus:[7,11],less:[0,7,11,3,13],send_callback:[7,11,10,14],half:[7,11],obtain:[0,14,11,10,5],tcp:[7,11,12,10,14],libnghttp2:[0,8],heavili:8,simultan:6,web:[14,8,12],wed:8,cert_fil:14,point:[14,7,10,11,12,15],priorit:[7,11],addrlen:14,add:[6,2,7,9,11,15],c10:8,match:[6,12,10,14],gmt:8,nvu:8,five:14,know:[0,7,11,12],nva:[0,7,11,10,14],password:6,python3:[8,4],insert:0,resid:[14,10],like:[0,6,3,4,14,7,8,10,11,12],foobarbuzz:8,protocol_id:[7,11,8],ldflag:15,nghttp2_priority_spec_check_default:[7,11],necessari:[7,11,4,14],page:[14,10],backlog:6,file_read_callback:14,linux:15,"export":[14,15],nghttp2_session_get_effective_recv_data_length:[7,11],error_html:14,transport:[8,10],lead:[7,11],baseeventloop:4,octet:[14,10],overlap:[7,11],isxdigit:14,estim:0,nghttp2_session_upgrad:[7,11],delete_http2_stream_data:[14,10],host:[1,3,4,6,7,8,10,11,12,13,14,15],nghttp2_nv_compare_nam:[7,11],nghttp2_extens:[7,11],err_get_error:[14,10],toolchain:15,socket:[14,10],constructor:4,discard:2,ssl_tlsext_err_ok:[7,11,10,14],disabl:[1,2,7,9,11,15],nghttp2_client_connection_prefac:[7,11,10,14],own:[7,11,8],nghttp2_err_invalid_fram:[7,11],ssl_op_no_sslv2:[14,10],nghttp2_session_consum:[7,11],automak:8,merg:[0,14,11,10,5],val:[7,11,10,14],nghttp2_priority_spec_default_init:[7,11],ai_famili:14,transfer:[1,11,8,12,7],bump:[7,11],much:14,buz:[8,4],unexpect:[7,11],nghttp2_hd_deflate_bound:[0,7,11],gain:0,overflow:[7,11],highest:[7,11],buf:[0,7,11,14],count:[7,11],succe:[7,11],made:8,nghttp2_stream_clos:[7,11],nghttp2_info:[7,11],googlecod:[7,11],displai:[13,2,9],asynchron:[7,11],limit:[1,11,5],otherwis:[0,14,3,5,7,8,10,11,13],problem:[7,11],sockaddr:14,nghttp2_on_frame_not_send_callback:[7,11],evalu:4,strndup:10,"int":[0,14,7,10,11,12],baserequesthandl:[8,4],pid:6,implement:[1,2,14,7,8,10,11],allow:[6,11,8,7],percent:[6,14],detail:[7,11],other:[0,14,5,7,10,11,12],nghttp2_err_invalid_argu:[7,11],rememb:14,nghttp2_submit_:[14,10],buflen:[0,7,11],stat:[14,2],nghttp2_max_weight:[7,11],err_error_str:[14,10],rel_path:14,proto_str:[7,11],debian:15,session_data:[14,10],sphinx:8,eof:[7,11,14],indirectli:7,rule:[7,11],nghttp2_no_error:[7,11,10]},objtypes:{"0":"std:option","1":"c:macro","2":"c:member","3":"c:function","4":"c:type","5":"py:module","6":"py:attribute","7":"py:method","8":"py:class","9":"py:data","10":"py:function"},objnames:{"0":["std","option","option"],"1":["c","macro","C macro"],"2":["c","member","C member"],"3":["c","function","C function"],"4":["c","type","C type"],"5":["py","module","Python module"],"6":["py","attribute","Python attribute"],"7":["py","method","Python method"],"8":["py","class","Python class"],"9":["py","data","Python data"],"10":["py","function","Python function"]},filenames:["tutorial-hpack","index","nghttp.1","h2load-howto","python-apiref","nghttp2ver.h","nghttpx.1","apiref","package_README","nghttpd.1","tutorial-client","nghttp2.h","nghttpx-howto","h2load.1","tutorial-server","building-android-binary"],titles:["Tutorial: HPACK API","nghttp2 - HTTP/2 C Library","nghttp(1)","h2load - HTTP/2 benchmarking tool - HOW-TO","Python API Reference","nghttp2ver.h","nghttpx(1)","API Reference","nghttp2 - HTTP/2 C Library","nghttpd(1)","Tutorial: HTTP/2 client","nghttp2.h","nghttpx - HTTP/2 proxy - HOW-TO","h2load(1)","Tutorial: HTTP/2 server","Building Android binary"],objects:{"":{"-D":[9,0,1,"cmdoption-nghttpd-D"],"--worker-read-rate":[6,0,1,"cmdoption-nghttpx--worker-read-rate"],"--frontend-no-tls":[6,0,1,"cmdoption-nghttpx--frontend-no-tls"],NGHTTP2_ERR_GOAWAY_ALREADY_SENT:[7,1,1,"c.NGHTTP2_ERR_GOAWAY_ALREADY_SENT"],nghttp2_nv_flag:[7,4,1,"c.nghttp2_nv_flag"],nghttp2_session_server_new2:[7,3,1,"c.nghttp2_session_server_new2"],"-M":[2,0,1,"cmdoption-nghttp-M"],"--frontend-http2-dump-response-header":[6,0,1,"cmdoption-nghttpx--frontend-http2-dump-response-header"],"-O":[2,0,1,"cmdoption-nghttp-O"],nghttp2_on_header_callback:[7,4,1,"c.nghttp2_on_header_callback"],nghttp2_settings_entry:[7,4,1,"c.nghttp2_settings_entry"],"-H":[2,0,1,"cmdoption-nghttp-H"],nghttp2_frame_hd:[7,4,1,"c.nghttp2_frame_hd"],"--verify-client-cacert":[6,0,1,"cmdoption-nghttpx--verify-client-cacert"],NGHTTP2_FLAG_ACK:[7,1,1,"c.NGHTTP2_FLAG_ACK"],"-W":[2,0,1,"cmdoption-nghttp-W"],"-V":[9,0,1,"cmdoption-nghttpd-V"],NGHTTP2_FLAG_PADDED:[7,1,1,"c.NGHTTP2_FLAG_PADDED"],nghttp2_priority_spec_init:[7,3,1,"c.nghttp2_priority_spec_init"],NGHTTP2_CLIENT_CONNECTION_HEADER_LEN:[7,1,1,"c.NGHTTP2_CLIENT_CONNECTION_HEADER_LEN"],NGHTTP2_SETTINGS_MAX_FRAME_SIZE:[7,1,1,"c.NGHTTP2_SETTINGS_MAX_FRAME_SIZE"],nghttp2_option_set_no_auto_window_update:[7,3,1,"c.nghttp2_option_set_no_auto_window_update"],NGHTTP2_STREAM_CLOSED:[7,1,1,"c.NGHTTP2_STREAM_CLOSED"],NGHTTP2_EXT_ALTSVC:[7,1,1,"c.NGHTTP2_EXT_ALTSVC"],"-e":[9,0,1,"cmdoption-nghttpd-e"],"-d":[2,0,1,"cmdoption-nghttp-d"],"-f":[6,0,1,"cmdoption-nghttpx-f"],"-a":[2,0,1,"cmdoption-nghttp-a"],"-c":[13,0,1,"cmdoption-h2load-c"],"-b":[6,0,1,"cmdoption-nghttpx-b"],"-m":[2,0,1,"cmdoption-nghttp-m"],"-o":[6,0,1,"cmdoption-nghttpx-o"],"-n":[13,0,1,"cmdoption-h2load-n"],"-h":[6,0,1,"cmdoption-nghttpx-h"],"-k":[6,0,1,"cmdoption-nghttpx-k"],nghttp2_priority_spec:[7,4,1,"c.nghttp2_priority_spec"],"-u":[2,0,1,"cmdoption-nghttp-u"],"-t":[13,0,1,"cmdoption-h2load-t"],"-w":[2,0,1,"cmdoption-nghttp-w"],"-v":[2,0,1,"cmdoption-nghttp-v"],nghttp2_data:[7,4,1,"c.nghttp2_data"],"-p":[2,0,1,"cmdoption-nghttp-p"],"-s":[6,0,1,"cmdoption-nghttpx-s"],"-L":[6,0,1,"cmdoption-nghttpx-L"],"--no-tls":[9,0,1,"cmdoption-nghttpd--no-tls"],nghttp2_data_flag:[7,4,1,"c.nghttp2_data_flag"],NGHTTP2_SETTINGS_HEADER_TABLE_SIZE:[7,1,1,"c.NGHTTP2_SETTINGS_HEADER_TABLE_SIZE"],"--worker-write-burst":[6,0,1,"cmdoption-nghttpx--worker-write-burst"],"--connection-window-bits":[2,0,1,"cmdoption-nghttp--connection-window-bits"],"--npn-list":[6,0,1,"cmdoption-nghttpx--npn-list"],NGHTTP2_ERR_TOO_MANY_INFLIGHT_SETTINGS:[7,1,1,"c.NGHTTP2_ERR_TOO_MANY_INFLIGHT_SETTINGS"],NGHTTP2_ERR_PROTO:[7,1,1,"c.NGHTTP2_ERR_PROTO"],nghttp2_hd_deflate_del:[7,3,1,"c.nghttp2_hd_deflate_del"],NGHTTP2_HD_INFLATE_NONE:[7,1,1,"c.NGHTTP2_HD_INFLATE_NONE"],nghttp2_headers_category:[7,4,1,"c.nghttp2_headers_category"],nghttp2_submit_window_update:[7,3,1,"c.nghttp2_submit_window_update"],NGHTTP2_ERR_UNSUPPORTED_VERSION:[7,1,1,"c.NGHTTP2_ERR_UNSUPPORTED_VERSION"],nghttp2_session_get_stream_user_data:[7,3,1,"c.nghttp2_session_get_stream_user_data"],URI:[2,0,1,"cmdoption-nghttp-arg-URI"],NGHTTP2_SETTINGS_ENABLE_PUSH:[7,1,1,"c.NGHTTP2_SETTINGS_ENABLE_PUSH"],NGHTTP2_HD_INFLATE_FINAL:[7,1,1,"c.NGHTTP2_HD_INFLATE_FINAL"],nghttp2_ping:[7,4,1,"c.nghttp2_ping"],nghttp2_check_header_name:[7,3,1,"c.nghttp2_check_header_name"],NGHTTP2_DATA:[7,1,1,"c.NGHTTP2_DATA"],nghttp2_hd_inflate_new:[7,3,1,"c.nghttp2_hd_inflate_new"],NGHTTP2_ERR_INVALID_STREAM_STATE:[7,1,1,"c.NGHTTP2_ERR_INVALID_STREAM_STATE"],"--clients":[13,0,1,"cmdoption-h2load--clients"],"--stream-read-timeout":[6,0,1,"cmdoption-nghttpx--stream-read-timeout"],nghttp2_goaway:[7,4,1,"c.nghttp2_goaway"],"--max-concurrent-streams":[13,0,1,"cmdoption-h2load--max-concurrent-streams"],NGHTTP2_MAX_WINDOW_SIZE:[7,1,1,"c.NGHTTP2_MAX_WINDOW_SIZE"],nghttp2_on_frame_recv_callback:[7,4,1,"c.nghttp2_on_frame_recv_callback"],nghttp2_session_mem_send:[7,3,1,"c.nghttp2_session_mem_send"],nghttp2_error_code:[7,4,1,"c.nghttp2_error_code"],NGHTTP2_REFUSED_STREAM:[7,1,1,"c.NGHTTP2_REFUSED_STREAM"],nghttp2_on_data_chunk_recv_callback:[7,4,1,"c.nghttp2_on_data_chunk_recv_callback"],nghttp2_session_terminate_session:[7,3,1,"c.nghttp2_session_terminate_session"],nghttp2_nv_compare_name:[7,3,1,"c.nghttp2_nv_compare_name"],NGHTTP2_ERR_START_STREAM_NOT_ALLOWED:[7,1,1,"c.NGHTTP2_ERR_START_STREAM_NOT_ALLOWED"],nghttp2_hd_inflate_change_table_size:[7,3,1,"c.nghttp2_hd_inflate_change_table_size"],nghttp2_info:[7,4,1,"c.nghttp2_info"],NGHTTP2_ERR_FLOW_CONTROL:[7,1,1,"c.NGHTTP2_ERR_FLOW_CONTROL"],nghttp2_strerror:[7,3,1,"c.nghttp2_strerror"],"--accesslog-syslog":[6,0,1,"cmdoption-nghttpx--accesslog-syslog"],"--stat":[2,0,1,"cmdoption-nghttp--stat"],"--frontend-http2-read-timeout":[6,0,1,"cmdoption-nghttpx--frontend-http2-read-timeout"],nghttp2_settings_id:[7,4,1,"c.nghttp2_settings_id"],NGHTTP2_ERR_FATAL:[7,1,1,"c.NGHTTP2_ERR_FATAL"],"--frontend-http2-connection-window-bits":[6,0,1,"cmdoption-nghttpx--frontend-http2-connection-window-bits"],nghttp2_submit_goaway:[7,3,1,"c.nghttp2_submit_goaway"],nghttp2_error:[7,4,1,"c.nghttp2_error"],NGHTTP2_INITIAL_CONNECTION_WINDOW_SIZE:[7,1,1,"c.NGHTTP2_INITIAL_CONNECTION_WINDOW_SIZE"],NGHTTP2_ERR_NOMEM:[7,1,1,"c.NGHTTP2_ERR_NOMEM"],NGHTTP2_ERR_PAUSE:[7,1,1,"c.NGHTTP2_ERR_PAUSE"],nghttp2_ext_frame_type:[7,4,1,"c.nghttp2_ext_frame_type"],NGHTTP2_ENHANCE_YOUR_CALM:[7,1,1,"c.NGHTTP2_ENHANCE_YOUR_CALM"],nghttp2_session_resume_data:[7,3,1,"c.nghttp2_session_resume_data"],"--ciphers":[6,0,1,"cmdoption-nghttpx--ciphers"],nghttp2_submit_response:[7,3,1,"c.nghttp2_submit_response"],NGHTTP2_NO_ERROR:[7,1,1,"c.NGHTTP2_NO_ERROR"],nghttp2_select_padding_callback:[7,4,1,"c.nghttp2_select_padding_callback"],nghttp2_submit_ping:[7,3,1,"c.nghttp2_submit_ping"],"--daemon":[9,0,1,"cmdoption-nghttpd--daemon"],NGHTTP2_CLIENT_CONNECTION_HEADER:[7,1,1,"c.NGHTTP2_CLIENT_CONNECTION_HEADER"],"--backlog":[6,0,1,"cmdoption-nghttpx--backlog"],PORT:[9,0,1,"cmdoption-nghttpd-arg-PORT"],nghttp2_push_promise:[7,4,1,"c.nghttp2_push_promise"],NGHTTP2_ERR_INVALID_STATE:[7,1,1,"c.NGHTTP2_ERR_INVALID_STATE"],nghttp2_session_get_outbound_queue_size:[7,3,1,"c.nghttp2_session_get_outbound_queue_size"],NGHTTP2_PROTO_VERSION_ID_LEN:[7,1,1,"c.NGHTTP2_PROTO_VERSION_ID_LEN"],nghttp2_session_get_stream_local_close:[7,3,1,"c.nghttp2_session_get_stream_local_close"],NGHTTP2_PROTOCOL_ERROR:[7,1,1,"c.NGHTTP2_PROTOCOL_ERROR"],NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS:[7,1,1,"c.NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS"],"--requests":[13,0,1,"cmdoption-h2load--requests"],NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE:[7,1,1,"c.NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE"],nghttp2_option_del:[7,3,1,"c.nghttp2_option_del"],nghttp2_priority_spec_check_default:[7,3,1,"c.nghttp2_priority_spec_check_default"],nghttp2_submit_request:[7,3,1,"c.nghttp2_submit_request"],NGHTTP2_ERR_PUSH_DISABLED:[7,1,1,"c.NGHTTP2_ERR_PUSH_DISABLED"],NGHTTP2_SETTINGS_TIMEOUT:[7,1,1,"c.NGHTTP2_SETTINGS_TIMEOUT"],NGHTTP2_HD_INFLATE_EMIT:[7,1,1,"c.NGHTTP2_HD_INFLATE_EMIT"],"--no-via":[6,0,1,"cmdoption-nghttpx--no-via"],nghttp2_hd_deflate_new:[7,3,1,"c.nghttp2_hd_deflate_new"],nghttp2_headers:[7,4,1,"c.nghttp2_headers"],NGHTTP2_ERR_WOULDBLOCK:[7,1,1,"c.NGHTTP2_ERR_WOULDBLOCK"],nghttp2_hd_deflate_change_table_size:[7,3,1,"c.nghttp2_hd_deflate_change_table_size"],"--backend-write-timeout":[6,0,1,"cmdoption-nghttpx--backend-write-timeout"],"--client":[6,0,1,"cmdoption-nghttpx--client"],"--timeout":[2,0,1,"cmdoption-nghttp--timeout"],nghttp2_session_server_new:[7,3,1,"c.nghttp2_session_server_new"],"--data":[2,0,1,"cmdoption-nghttp--data"],NGHTTP2_ERR_BUFFER_ERROR:[7,1,1,"c.NGHTTP2_ERR_BUFFER_ERROR"],"--no-content-length":[2,0,1,"cmdoption-nghttp--no-content-length"],nghttp2_hd_inflate_del:[7,3,1,"c.nghttp2_hd_inflate_del"],NGHTTP2_CONTINUATION:[7,1,1,"c.NGHTTP2_CONTINUATION"],nghttp2_rst_stream:[7,4,1,"c.nghttp2_rst_stream"],NGHTTP2_ERR_INVALID_ARGUMENT:[7,1,1,"c.NGHTTP2_ERR_INVALID_ARGUMENT"],"--http2-no-cookie-crumbling":[6,0,1,"cmdoption-nghttpx--http2-no-cookie-crumbling"],nghttp2_on_begin_headers_callback:[7,4,1,"c.nghttp2_on_begin_headers_callback"],NGHTTP2_CLIENT_CONNECTION_PREFACE_LEN:[7,1,1,"c.NGHTTP2_CLIENT_CONNECTION_PREFACE_LEN"],"--backend-http2-connection-window-bits":[6,0,1,"cmdoption-nghttpx--backend-http2-connection-window-bits"],nghttp2_flag:[7,4,1,"c.nghttp2_flag"],"--worker-read-burst":[6,0,1,"cmdoption-nghttpx--worker-read-burst"],NGHTTP2_DEFAULT_WEIGHT:[7,1,1,"c.NGHTTP2_DEFAULT_WEIGHT"],"--client-proxy":[6,0,1,"cmdoption-nghttpx--client-proxy"],nghttp2_session_get_remote_settings:[7,3,1,"c.nghttp2_session_get_remote_settings"],"--http2-bridge":[6,0,1,"cmdoption-nghttpx--http2-bridge"],nghttp2_session_client_new2:[7,3,1,"c.nghttp2_session_client_new2"],"--errorlog-syslog":[6,0,1,"cmdoption-nghttpx--errorlog-syslog"],nghttp2_hd_deflate_hd:[7,3,1,"c.nghttp2_hd_deflate_hd"],nghttp2_recv_callback:[7,4,1,"c.nghttp2_recv_callback"],NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS:[7,1,1,"c.NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS"],"--errorlog-file":[6,0,1,"cmdoption-nghttpx--errorlog-file"],"--help":[6,0,1,"cmdoption-nghttpx--help"],nghttp2_submit_push_promise:[7,3,1,"c.nghttp2_submit_push_promise"],"--multiply":[2,0,1,"cmdoption-nghttp--multiply"],"--http2-max-concurrent-streams":[6,0,1,"cmdoption-nghttpx--http2-max-concurrent-streams"],NGHTTP2_RST_STREAM:[7,1,1,"c.NGHTTP2_RST_STREAM"],"--frontend-write-timeout":[6,0,1,"cmdoption-nghttpx--frontend-write-timeout"],NGHTTP2_DEFAULT_HEADER_TABLE_SIZE:[7,1,1,"c.NGHTTP2_DEFAULT_HEADER_TABLE_SIZE"],NGHTTP2_NV_FLAG_NO_INDEX:[7,1,1,"c.NGHTTP2_NV_FLAG_NO_INDEX"],NGHTTP2_HCAT_HEADERS:[7,1,1,"c.NGHTTP2_HCAT_HEADERS"],"--backend-ipv4":[6,0,1,"cmdoption-nghttpx--backend-ipv4"],NGHTTP2_ERR_INVALID_FRAME:[7,1,1,"c.NGHTTP2_ERR_INVALID_FRAME"],"--backend-ipv6":[6,0,1,"cmdoption-nghttpx--backend-ipv6"],"--backend":[6,0,1,"cmdoption-nghttpx--backend"],nghttp2_frame:[7,4,1,"c.nghttp2_frame"],NGHTTP2_ERR_FRAME_SIZE_ERROR:[7,1,1,"c.NGHTTP2_ERR_FRAME_SIZE_ERROR"],"--insecure":[6,0,1,"cmdoption-nghttpx--insecure"],"--htdocs":[9,0,1,"cmdoption-nghttpd--htdocs"],nghttp2_session_mem_recv:[7,3,1,"c.nghttp2_session_mem_recv"],NGHTTP2_ERR_DEFERRED_DATA_EXIST:[7,1,1,"c.NGHTTP2_ERR_DEFERRED_DATA_EXIST"],NGHTTP2_CANCEL:[7,1,1,"c.NGHTTP2_CANCEL"],nghttp2_send_callback:[7,4,1,"c.nghttp2_send_callback"],"--log-level":[6,0,1,"cmdoption-nghttpx--log-level"],nghttp2_hd_inflate_hd:[7,3,1,"c.nghttp2_hd_inflate_hd"],nghttp2_on_frame_send_callback:[7,4,1,"c.nghttp2_on_frame_send_callback"],NGHTTP2_HEADERS:[7,1,1,"c.NGHTTP2_HEADERS"],NGHTTP2_VERSION:[7,1,1,"c.NGHTTP2_VERSION"],nghttp2_on_frame_not_send_callback:[7,4,1,"c.nghttp2_on_frame_not_send_callback"],nghttp2_session:[7,4,1,"c.nghttp2_session"],NGHTTP2_COMPRESSION_ERROR:[7,1,1,"c.NGHTTP2_COMPRESSION_ERROR"],NGHTTP2_HCAT_PUSH_RESPONSE:[7,1,1,"c.NGHTTP2_HCAT_PUSH_RESPONSE"],NGHTTP2_CLEARTEXT_PROTO_VERSION_ID:[7,1,1,"c.NGHTTP2_CLEARTEXT_PROTO_VERSION_ID"],nghttp2_submit_rst_stream:[7,3,1,"c.nghttp2_submit_rst_stream"],NGHTTP2_ERR_DEFERRED:[7,1,1,"c.NGHTTP2_ERR_DEFERRED"],nghttp2_frame_type:[7,4,1,"c.nghttp2_frame_type"],NGHTTP2_INADEQUATE_SECURITY:[7,1,1,"c.NGHTTP2_INADEQUATE_SECURITY"],"--push":[9,0,1,"cmdoption-nghttpd--push"],nghttp2_submit_headers:[7,3,1,"c.nghttp2_submit_headers"],NGHTTP2_ERR_HEADER_COMP:[7,1,1,"c.NGHTTP2_ERR_HEADER_COMP"],NGHTTP2_ERR_INVALID_STREAM_ID:[7,1,1,"c.NGHTTP2_ERR_INVALID_STREAM_ID"],"--tls-proto-list":[6,0,1,"cmdoption-nghttpx--tls-proto-list"],NGHTTP2_WINDOW_UPDATE:[7,1,1,"c.NGHTTP2_WINDOW_UPDATE"],"--conf":[6,0,1,"cmdoption-nghttpx--conf"],NGHTTP2_FLAG_PRIORITY:[7,1,1,"c.NGHTTP2_FLAG_PRIORITY"],nghttp2:[4,5,0,"-"],"--dh-param-file":[9,0,1,"cmdoption-nghttpd--dh-param-file"],nghttp2_nv:[7,4,1,"c.nghttp2_nv"],"--worker-frontend-connections":[6,0,1,"cmdoption-nghttpx--worker-frontend-connections"],nghttp2_version:[7,3,1,"c.nghttp2_version"],nghttp2_session_want_write:[7,3,1,"c.nghttp2_session_want_write"],NGHTTP2_MAX_WEIGHT:[7,1,1,"c.NGHTTP2_MAX_WEIGHT"],nghttp2_on_unknown_frame_recv_callback:[7,4,1,"c.nghttp2_on_unknown_frame_recv_callback"],nghttp2_session_consume:[7,3,1,"c.nghttp2_session_consume"],"--peer-max-concurrent-streams":[2,0,1,"cmdoption-nghttp--peer-max-concurrent-streams"],"--syslog-facility":[6,0,1,"cmdoption-nghttpx--syslog-facility"],NGHTTP2_ERR_STREAM_CLOSED:[7,1,1,"c.NGHTTP2_ERR_STREAM_CLOSED"],"--no-location-rewrite":[6,0,1,"cmdoption-nghttpx--no-location-rewrite"],NGHTTP2_FLAG_END_STREAM:[7,1,1,"c.NGHTTP2_FLAG_END_STREAM"],nghttp2_hd_deflate_bound:[7,3,1,"c.nghttp2_hd_deflate_bound"],NGHTTP2_ERR_CALLBACK_FAILURE:[7,1,1,"c.NGHTTP2_ERR_CALLBACK_FAILURE"],"--user":[6,0,1,"cmdoption-nghttpx--user"],nghttp2_hd_inflate_end_headers:[7,3,1,"c.nghttp2_hd_inflate_end_headers"],nghttp2_on_invalid_frame_recv_callback:[7,4,1,"c.nghttp2_on_invalid_frame_recv_callback"],NGHTTP2_FLOW_CONTROL_ERROR:[7,1,1,"c.NGHTTP2_FLOW_CONTROL_ERROR"],NGHTTP2_SETTINGS:[7,1,1,"c.NGHTTP2_SETTINGS"],NGHTTP2_CLEARTEXT_PROTO_VERSION_ID_LEN:[7,1,1,"c.NGHTTP2_CLEARTEXT_PROTO_VERSION_ID_LEN"],nghttp2_session_set_stream_user_data:[7,3,1,"c.nghttp2_session_set_stream_user_data"],"--workers":[9,0,1,"cmdoption-nghttpd--workers"],nghttp2_check_header_value:[7,3,1,"c.nghttp2_check_header_value"],"--early-response":[9,0,1,"cmdoption-nghttpd--early-response"],NGHTTP2_ERR_STREAM_CLOSING:[7,1,1,"c.NGHTTP2_ERR_STREAM_CLOSING"],"--remote-name":[2,0,1,"cmdoption-nghttp--remote-name"],nghttp2_session_client_new:[7,3,1,"c.nghttp2_session_client_new"],nghttp2_hd_inflater:[7,4,1,"c.nghttp2_hd_inflater"],nghttp2_select_next_protocol:[7,3,1,"c.nghttp2_select_next_protocol"],"--frontend-http2-window-bits":[6,0,1,"cmdoption-nghttpx--frontend-http2-window-bits"],nghttp2_data_source:[7,4,1,"c.nghttp2_data_source"],NGHTTP2_INTERNAL_ERROR:[7,1,1,"c.NGHTTP2_INTERNAL_ERROR"],NGHTTP2_PROTO_VERSION_ID:[7,1,1,"c.NGHTTP2_PROTO_VERSION_ID"],"--weight":[2,0,1,"cmdoption-nghttp--weight"],NGHTTP2_DATA_FLAG_EOF:[7,1,1,"c.NGHTTP2_DATA_FLAG_EOF"],PRIVATE_KEY:[9,0,1,"cmdoption-nghttpd-arg-PRIVATE_KEY"],nghttp2_hd_inflate_flag:[7,4,1,"c.nghttp2_hd_inflate_flag"],"--worker-write-rate":[6,0,1,"cmdoption-nghttpx--worker-write-rate"],NGHTTP2_ERR_INVALID_HEADER_BLOCK:[7,1,1,"c.NGHTTP2_ERR_INVALID_HEADER_BLOCK"],"--backend-tls-sni-field":[6,0,1,"cmdoption-nghttpx--backend-tls-sni-field"],"--key":[2,0,1,"cmdoption-nghttp--key"],"--subcert":[6,0,1,"cmdoption-nghttpx--subcert"],NGHTTP2_FRAME_SIZE_ERROR:[7,1,1,"c.NGHTTP2_FRAME_SIZE_ERROR"],nghttp2_hd_deflater:[7,4,1,"c.nghttp2_hd_deflater"],"--window-bits":[13,0,1,"cmdoption-h2load--window-bits"],nghttp2_session_del:[7,3,1,"c.nghttp2_session_del"],NGHTTP2_ERR_INSUFF_BUFSIZE:[7,1,1,"c.NGHTTP2_ERR_INSUFF_BUFSIZE"],nghttp2_ext_altsvc:[7,4,1,"c.nghttp2_ext_altsvc"],"--header":[2,0,1,"cmdoption-nghttp--header"],"--frontend-frame-debug":[6,0,1,"cmdoption-nghttpx--frontend-frame-debug"],nghttp2_settings:[7,4,1,"c.nghttp2_settings"],nghttp2_session_callbacks:[7,4,1,"c.nghttp2_session_callbacks"],"--pid-file":[6,0,1,"cmdoption-nghttpx--pid-file"],"--frontend-http2-dump-request-header":[6,0,1,"cmdoption-nghttpx--frontend-http2-dump-request-header"],"--private-key-passwd-file":[6,0,1,"cmdoption-nghttpx--private-key-passwd-file"],"--altsvc":[6,0,1,"cmdoption-nghttpx--altsvc"],nghttp2_submit_data:[7,3,1,"c.nghttp2_submit_data"],nghttp2_window_update:[7,4,1,"c.nghttp2_window_update"],"--verbose":[9,0,1,"cmdoption-nghttpd--verbose"],nghttp2_option:[7,4,1,"c.nghttp2_option"],nghttp2_session_get_stream_remote_window_size:[7,3,1,"c.nghttp2_session_get_stream_remote_window_size"],"--add-x-forwarded-for":[6,0,1,"cmdoption-nghttpx--add-x-forwarded-for"],nghttp2_priority_spec_default_init:[7,3,1,"c.nghttp2_priority_spec_default_init"],NGHTTP2_FLAG_NONE:[7,1,1,"c.NGHTTP2_FLAG_NONE"],"--get-assets":[2,0,1,"cmdoption-nghttp--get-assets"],NGHTTP2_HCAT_REQUEST:[7,1,1,"c.NGHTTP2_HCAT_REQUEST"],nghttp2_submit_altsvc:[7,3,1,"c.nghttp2_submit_altsvc"],"--no-tls-proto":[13,0,1,"cmdoption-h2load--no-tls-proto"],NGHTTP2_CLIENT_CONNECTION_PREFACE:[7,1,1,"c.NGHTTP2_CLIENT_CONNECTION_PREFACE"],"--frontend-read-timeout":[6,0,1,"cmdoption-nghttpx--frontend-read-timeout"],NGHTTP2_FLAG_END_HEADERS:[7,1,1,"c.NGHTTP2_FLAG_END_HEADERS"],"--backend-keep-alive-timeout":[6,0,1,"cmdoption-nghttpx--backend-keep-alive-timeout"],NGHTTP2_NV_FLAG_NONE:[7,1,1,"c.NGHTTP2_NV_FLAG_NONE"],nghttp2_submit_settings:[7,3,1,"c.nghttp2_submit_settings"],"--error-gzip":[9,0,1,"cmdoption-nghttpd--error-gzip"],nghttp2_is_fatal:[7,3,1,"c.nghttp2_is_fatal"],NGHTTP2_PING:[7,1,1,"c.NGHTTP2_PING"],nghttp2_extension:[7,4,1,"c.nghttp2_extension"],"--backend-http2-window-bits":[6,0,1,"cmdoption-nghttpx--backend-http2-window-bits"],"--header-table-size":[2,0,1,"cmdoption-nghttp--header-table-size"],nghttp2_priority:[7,4,1,"c.nghttp2_priority"],nghttp2_session_want_read:[7,3,1,"c.nghttp2_session_want_read"],NGHTTP2_VERSION_AGE:[7,1,1,"c.NGHTTP2_VERSION_AGE"],"--padding":[2,0,1,"cmdoption-nghttp--padding"],nghttp2_session_get_stream_effective_recv_data_length:[7,3,1,"c.nghttp2_session_get_stream_effective_recv_data_length"],"--backend-http-proxy-uri":[6,0,1,"cmdoption-nghttpx--backend-http-proxy-uri"],NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE:[7,1,1,"c.NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE"],NGHTTP2_CONNECT_ERROR:[7,1,1,"c.NGHTTP2_CONNECT_ERROR"],nghttp2_session_get_effective_recv_data_length:[7,3,1,"c.nghttp2_session_get_effective_recv_data_length"],"--stream-write-timeout":[6,0,1,"cmdoption-nghttpx--stream-write-timeout"],"--continuation":[2,0,1,"cmdoption-nghttp--continuation"],nghttp2_on_stream_close_callback:[7,4,1,"c.nghttp2_on_stream_close_callback"],"--cacert":[6,0,1,"cmdoption-nghttpx--cacert"],NGHTTP2_PUSH_PROMISE:[7,1,1,"c.NGHTTP2_PUSH_PROMISE"],"--threads":[13,0,1,"cmdoption-h2load--threads"],nghttp2_data_provider:[7,4,1,"c.nghttp2_data_provider"],NGHTTP2_ERR_DATA_EXIST:[7,1,1,"c.NGHTTP2_ERR_DATA_EXIST"],nghttp2_session_recv:[7,3,1,"c.nghttp2_session_recv"],nghttp2_option_set_peer_max_concurrent_streams:[7,3,1,"c.nghttp2_option_set_peer_max_concurrent_streams"],nghttp2_option_new:[7,3,1,"c.nghttp2_option_new"],nghttp2_session_get_effective_local_window_size:[7,3,1,"c.nghttp2_session_get_effective_local_window_size"],NGHTTP2_INITIAL_WINDOW_SIZE:[7,1,1,"c.NGHTTP2_INITIAL_WINDOW_SIZE"],NGHTTP2_ERR_EOF:[7,1,1,"c.NGHTTP2_ERR_EOF"],NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE:[7,1,1,"c.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE"],"--version":[6,0,1,"cmdoption-nghttpx--version"],"--add-response-header":[6,0,1,"cmdoption-nghttpx--add-response-header"],NGHTTP2_HCAT_RESPONSE:[7,1,1,"c.NGHTTP2_HCAT_RESPONSE"],nghttp2_submit_priority:[7,3,1,"c.nghttp2_submit_priority"],nghttp2_session_get_stream_effective_local_window_size:[7,3,1,"c.nghttp2_session_get_stream_effective_local_window_size"],"--backend-read-timeout":[6,0,1,"cmdoption-nghttpx--backend-read-timeout"],nghttp2_before_frame_send_callback:[7,4,1,"c.nghttp2_before_frame_send_callback"],NGHTTP2_GOAWAY:[7,1,1,"c.NGHTTP2_GOAWAY"],nghttp2_session_terminate_session2:[7,3,1,"c.nghttp2_session_terminate_session2"],"--color":[9,0,1,"cmdoption-nghttpd--color"],NGHTTP2_MIN_WEIGHT:[7,1,1,"c.NGHTTP2_MIN_WEIGHT"],"--cert":[2,0,1,"cmdoption-nghttp--cert"],NGHTTP2_DATA_FLAG_NONE:[7,1,1,"c.NGHTTP2_DATA_FLAG_NONE"],"--frontend":[6,0,1,"cmdoption-nghttpx--frontend"],"--accesslog-file":[6,0,1,"cmdoption-nghttpx--accesslog-file"],"--http2-proxy":[6,0,1,"cmdoption-nghttpx--http2-proxy"],"--upgrade":[2,0,1,"cmdoption-nghttp--upgrade"],NGHTTP2_ERR_STREAM_SHUT_WR:[7,1,1,"c.NGHTTP2_ERR_STREAM_SHUT_WR"],"--backend-no-tls":[6,0,1,"cmdoption-nghttpx--backend-no-tls"],"--client-private-key-file":[6,0,1,"cmdoption-nghttpx--client-private-key-file"],NGHTTP2_PRIORITY:[7,1,1,"c.NGHTTP2_PRIORITY"],"--client-cert-file":[6,0,1,"cmdoption-nghttpx--client-cert-file"],NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE:[7,1,1,"c.NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE"],nghttp2_session_send:[7,3,1,"c.nghttp2_session_send"],CERT:[9,0,1,"cmdoption-nghttpd-arg-CERT"],nghttp2_session_get_stream_remote_close:[7,3,1,"c.nghttp2_session_get_stream_remote_close"],"--null-out":[2,0,1,"cmdoption-nghttp--null-out"],NGHTTP2_VERSION_NUM:[7,1,1,"c.NGHTTP2_VERSION_NUM"],nghttp2_pack_settings_payload:[7,3,1,"c.nghttp2_pack_settings_payload"],"--verify-client":[9,0,1,"cmdoption-nghttpd--verify-client"],nghttp2_session_upgrade:[7,3,1,"c.nghttp2_session_upgrade"],"--backend-connections-per-frontend":[6,0,1,"cmdoption-nghttpx--backend-connections-per-frontend"],nghttp2_data_source_read_callback:[7,4,1,"c.nghttp2_data_source_read_callback"]},nghttp2_frame:{push_promise:[7,2,1,"c.nghttp2_frame.push_promise"],settings:[7,2,1,"c.nghttp2_frame.settings"],ping:[7,2,1,"c.nghttp2_frame.ping"],rst_stream:[7,2,1,"c.nghttp2_frame.rst_stream"],ext:[7,2,1,"c.nghttp2_frame.ext"],priority:[7,2,1,"c.nghttp2_frame.priority"],headers:[7,2,1,"c.nghttp2_frame.headers"],goaway:[7,2,1,"c.nghttp2_frame.goaway"],window_update:[7,2,1,"c.nghttp2_frame.window_update"],data:[7,2,1,"c.nghttp2_frame.data"],hd:[7,2,1,"c.nghttp2_frame.hd"]},nghttp2_settings_entry:{settings_id:[7,2,1,"c.nghttp2_settings_entry.settings_id"],value:[7,2,1,"c.nghttp2_settings_entry.value"]},nghttp2_window_update:{hd:[7,2,1,"c.nghttp2_window_update.hd"],window_size_increment:[7,2,1,"c.nghttp2_window_update.window_size_increment"]},nghttp2_frame_hd:{stream_id:[7,2,1,"c.nghttp2_frame_hd.stream_id"],length:[7,2,1,"c.nghttp2_frame_hd.length"],flags:[7,2,1,"c.nghttp2_frame_hd.flags"],type:[7,2,1,"c.nghttp2_frame_hd.type"]},nghttp2_push_promise:{padlen:[7,2,1,"c.nghttp2_push_promise.padlen"],nvlen:[7,2,1,"c.nghttp2_push_promise.nvlen"],promised_stream_id:[7,2,1,"c.nghttp2_push_promise.promised_stream_id"],hd:[7,2,1,"c.nghttp2_push_promise.hd"],nva:[7,2,1,"c.nghttp2_push_promise.nva"]},nghttp2_ping:{hd:[7,2,1,"c.nghttp2_ping.hd"]},nghttp2_priority:{pri_spec:[7,2,1,"c.nghttp2_priority.pri_spec"],hd:[7,2,1,"c.nghttp2_priority.hd"]},nghttp2_priority_spec:{stream_id:[7,2,1,"c.nghttp2_priority_spec.stream_id"],weight:[7,2,1,"c.nghttp2_priority_spec.weight"],exclusive:[7,2,1,"c.nghttp2_priority_spec.exclusive"]},nghttp2:{HTTP2Server:[4,8,1,""],HDDeflater:[4,8,1,""],DEFLATE_MAX_HEADER_TABLE_SIZE:[4,9,1,""],DEFAULT_HEADER_TABLE_SIZE:[4,9,1,""],HDInflater:[4,8,1,""],print_hd_table:[4,10,1,""],BaseRequestHandler:[4,8,1,""]},nghttp2_nv:{valuelen:[7,2,1,"c.nghttp2_nv.valuelen"],namelen:[7,2,1,"c.nghttp2_nv.namelen"],flags:[7,2,1,"c.nghttp2_nv.flags"],name:[7,2,1,"c.nghttp2_nv.name"],value:[7,2,1,"c.nghttp2_nv.value"]},nghttp2_ext_altsvc:{origin:[7,2,1,"c.nghttp2_ext_altsvc.origin"],max_age:[7,2,1,"c.nghttp2_ext_altsvc.max_age"],protocol_id:[7,2,1,"c.nghttp2_ext_altsvc.protocol_id"],origin_len:[7,2,1,"c.nghttp2_ext_altsvc.origin_len"],host:[7,2,1,"c.nghttp2_ext_altsvc.host"],protocol_id_len:[7,2,1,"c.nghttp2_ext_altsvc.protocol_id_len"],host_len:[7,2,1,"c.nghttp2_ext_altsvc.host_len"],port:[7,2,1,"c.nghttp2_ext_altsvc.port"]},nghttp2_session_callbacks:{on_invalid_frame_recv_callback:[7,2,1,"c.nghttp2_session_callbacks.on_invalid_frame_recv_callback"],before_frame_send_callback:[7,2,1,"c.nghttp2_session_callbacks.before_frame_send_callback"],on_stream_close_callback:[7,2,1,"c.nghttp2_session_callbacks.on_stream_close_callback"],on_data_chunk_recv_callback:[7,2,1,"c.nghttp2_session_callbacks.on_data_chunk_recv_callback"],on_begin_headers_callback:[7,2,1,"c.nghttp2_session_callbacks.on_begin_headers_callback"],send_callback:[7,2,1,"c.nghttp2_session_callbacks.send_callback"],on_unknown_frame_recv_callback:[7,2,1,"c.nghttp2_session_callbacks.on_unknown_frame_recv_callback"],on_header_callback:[7,2,1,"c.nghttp2_session_callbacks.on_header_callback"],on_frame_recv_callback:[7,2,1,"c.nghttp2_session_callbacks.on_frame_recv_callback"],select_padding_callback:[7,2,1,"c.nghttp2_session_callbacks.select_padding_callback"],on_frame_not_send_callback:[7,2,1,"c.nghttp2_session_callbacks.on_frame_not_send_callback"],on_frame_send_callback:[7,2,1,"c.nghttp2_session_callbacks.on_frame_send_callback"],recv_callback:[7,2,1,"c.nghttp2_session_callbacks.recv_callback"]},nghttp2_data_provider:{source:[7,2,1,"c.nghttp2_data_provider.source"],read_callback:[7,2,1,"c.nghttp2_data_provider.read_callback"]},nghttp2_rst_stream:{error_code:[7,2,1,"c.nghttp2_rst_stream.error_code"],hd:[7,2,1,"c.nghttp2_rst_stream.hd"]},nghttp2_headers:{pri_spec:[7,2,1,"c.nghttp2_headers.pri_spec"],nvlen:[7,2,1,"c.nghttp2_headers.nvlen"],cat:[7,2,1,"c.nghttp2_headers.cat"],padlen:[7,2,1,"c.nghttp2_headers.padlen"],nva:[7,2,1,"c.nghttp2_headers.nva"],hd:[7,2,1,"c.nghttp2_headers.hd"]},nghttp2_goaway:{opaque_data:[7,2,1,"c.nghttp2_goaway.opaque_data"],error_code:[7,2,1,"c.nghttp2_goaway.error_code"],opaque_data_len:[7,2,1,"c.nghttp2_goaway.opaque_data_len"],hd:[7,2,1,"c.nghttp2_goaway.hd"],last_stream_id:[7,2,1,"c.nghttp2_goaway.last_stream_id"]},"nghttp2.BaseRequestHandler":{on_data:[4,7,1,""],on_close:[4,7,1,""],method:[4,6,1,""],on_headers:[4,7,1,""],stream_id:[4,6,1,""],host:[4,6,1,""],on_request_done:[4,7,1,""],push:[4,7,1,""],path:[4,6,1,""],scheme:[4,6,1,""],send_response:[4,7,1,""],client_address:[4,6,1,""]},nghttp2_info:{age:[7,2,1,"c.nghttp2_info.age"],version_str:[7,2,1,"c.nghttp2_info.version_str"],version_num:[7,2,1,"c.nghttp2_info.version_num"],proto_str:[7,2,1,"c.nghttp2_info.proto_str"]},"nghttp2.HDDeflater":{change_table_size:[4,7,1,""],get_hd_table:[4,7,1,""],deflate:[4,7,1,""],set_no_refset:[4,7,1,""]},"nghttp2.HTTP2Server":{serve_forever:[4,7,1,""]},nghttp2_data:{padlen:[7,2,1,"c.nghttp2_data.padlen"]},"nghttp2.HDInflater":{change_table_size:[4,7,1,""],inflate:[4,7,1,""],get_hd_table:[4,7,1,""]},nghttp2_data_source:{fd:[7,2,1,"c.nghttp2_data_source.fd"],ptr:[7,2,1,"c.nghttp2_data_source.ptr"]},nghttp2_extension:{payload:[7,2,1,"c.nghttp2_extension.payload"],hd:[7,2,1,"c.nghttp2_extension.hd"]},nghttp2_settings:{niv:[7,2,1,"c.nghttp2_settings.niv"],hd:[7,2,1,"c.nghttp2_settings.hd"],iv:[7,2,1,"c.nghttp2_settings.iv"]}},titleterms:{protocol:3,text:3,typedef:7,locat:12,struct:7,field:12,program:8,synopsi:[6,2,9,13],contribut:8,python:[8,4],misc:6,ssl:[6,12],requir:8,name:[6,2,9,13],server:[14,8,4],mode:[6,12],timeout:6,h2load:[13,3],certif:12,see:[6,2,9,13],connect:6,resourc:1,librari:[1,8],statu:8,rewrit:12,version:1,"public":8,refer:[7,4],proxi:[8,12],"enum":7,usag:3,releas:1,decompressor:8,addit:12,spdy:6,remark:7,thread:3,tutori:[0,14,10],deflatehd:8,disabl:12,encod:0,header:[0,8,12],api:[0,7,4],open:12,select:3,git:8,from:8,log:[6,12],union:7,libev:[14,10],binari:15,nghttp2:[1,11,8],includ:7,basic:3,type:7,"function":7,option:[6,2,9,13],tool:[8,3],benchmark:[8,3],nghttp2ver:5,specifi:12,compressor:8,also:[6,2,9,13],multi:3,nghttpd:[8,9],"default":12,rate:12,bridg:12,limit:12,hpack:[0,8,4],macro:7,nghttpx:[6,8,12],control:3,descript:[6,2,9,13],file:12,multipl:3,perform:6,write:12,how:[12,3],hot:12,decod:0,build:[8,15],test:8,android:15,document:8,http:[1,3,4,6,8,10,12,14],inflat:0,deploi:12,develop:8,read:12,bind:8,clear:3,nghttp:[2,8],flow:3,uri:3,inflatehd:8,client:[8,12,10],deflat:0}}) \ No newline at end of file +Search.setIndex({envversion:42,terms:{my_obj:[7,11],create_serv:4,nghttp2_cancel:[7,11],prefix:[7,11,15,14],nghttp2_priority_spec_init:[7,11],nghttp2_session_get_stream_effective_local_window_s:[7,11],whose:[7,2,11],op_al:[8,4],"const":[0,7,11,10,14],"535d0eea":8,"0x20":[7,11,8],under:[7,11,8,15],bufferevent_getfd:10,spec:[7,11],merchant:[0,14,11,10,5],digit:10,downstream:6,"void":[0,7,11,10,14],bufferevent_ssl:[14,10],affect:3,initialize_nghttp2_setup:[14,10],verif:10,nghttp2_settings_initial_window_s:[7,11],x86_64:15,on_stream_close_callback:[7,11,10,14],direct:8,protoid:[6,13],second:2,aggreg:12,even:[0,12],nghttp2_rst_stream:[7,11],rfc7230:[7,11],ssl_op_no_session_resumption_on_renegoti:[14,10],neg:[7,11],nghttp2_err_insuff_bufs:[7,11],"new":[7,11,8,12,14],tatsuhiro:[0,1,3,5,14,8,10,11],nghttp2_session_resume_data:[7,11],ipproto_tcp:[14,10],abov:[0,14,5,7,8,10,11,12],initialize_app_context:14,never:[7,11],here:[0,14,3,7,8,10,11,12,15],met:[7,11,12,10,14],"4xx":[8,3],path:[0,6,4,14,8,10,9,12,15],settings_timeout:[7,11],interpret:[7,11],nextprotoneg:[7,11],sslv23_server_method:14,errorlog:[6,12],credit:8,permit:[0,14,11,10,5],nghttp2_submit_prior:[7,11],aka:[7,11,8],nghttp2_frame:[7,11,10,14],settings_max_frame_s:[7,11],bufferevent_ssl_connect:10,substr:14,bev_event_error:[14,10],printf:0,bufferevent_socket_connect_hostnam:10,total:[7,11,8,3],unit:8,describ:[0,6,14,7,8,10,11,12,15],would:[7,11,14],nghttp2_inadequate_secur:[7,11],call:[0,14,4,7,8,10,11,12],asset:[2,8],recommend:[8,15],nghttp2_on_invalid_frame_recv_callback:[7,11],nghttp2_version:[7,11,5],until:[0,7,11,4],reusabl:8,relat:[14,10],nghttp2_cleartext_proto_version_id_len:[7,11],warn:[6,11,14],nghttp2_option_set_peer_max_concurrent_stream:[7,11],relai:6,ssl_shutdown:[14,10],herebi:[0,14,11,10,5],unpack:[7,11,15],must:[0,6,2,4,14,7,8,9,11,12,15],word:[7,11],insignific:0,err:[14,10],exit_failur:[0,14,10],setup:[14,10],work:[6,4,14,8,9,12,15],lev_opt_close_on_fre:14,nghttp2_flag_ack:[7,11],root:[6,8,9,14],could:[7,11,14,4,10],defer:[7,11,10,14],give:[7,11,8,4],indic:[0,6,4,14,7,10,11],want:[6,4,14,7,10,11,12],select_padding_callback:[7,11],unsign:[7,11,10,14],end:[7,2,14,10,11],thing:[7,11,10,14],datalen:[14,10],how:15,hot:[],hop:[7,11],verifi:[6,9],negoti:8,nghttp2_frame_typ:[7,11],updat:[7,11],after:[0,6,2,3,14,7,8,10,11,12,15],settings_header_table_s:[7,11],befor:[14,3,4,7,8,11,15],demonstr:10,request_path:14,third:[7,11,10,14],opaqu:[7,11],bootstrap:8,exclud:[7,11],receiv:[6,2,3,4,14,7,8,9,10,11],environ:[12,15],enter:12,exclus:[7,11],first:[0,6,3,4,14,7,8,10,11,12,13,15],order:[0,6,3,7,8,11,13],oper:[7,11,8,12],frontend:[6,8,12],crumbl:6,over:[6,14,7,8,10,11],becaus:[0,14,4,7,10,11,15],privileg:6,eagain:[14,10],fit:[0,14,11,10,5],nghttp2_session_get_stream_remote_window_s:[7,11],fwrite:[0,7,11,10],"9d33":8,deflate_s:8,"1xx":[7,11],easier:15,them:[14,7,8,10,11,12],nghttp2_hd_deflate_del:[0,7,11],thei:[6,3,4,14,7,8,10,11],fragment:8,safe:[6,11,14,7],"break":[0,7,11,10,14],promis:[7,11],choic:[7,11],openssl_config:[14,10],nghttp2_session_callbacks_set_select_padding_callback:[7,11],ai_addr:14,timeout:2,each:[0,6,2,4,14,7,8,10,11,12,13],debug:[6,2,7,9,10,11,13,15],went:15,side:[7,11,8,14],mean:[6,11,4,10,7],slen:14,protocol_error:[7,11],nghttp2_select_padding_callback:[7,11],http2_stream_data:[14,10],nghttp2_session_server_new2:[7,11],deflater_ptr:[0,7,11],network:[14,12,10],cross_compil:15,newli:[7,11,10],content:[1,2,4,6,8,12,14],rewrit:[],android_hom:15,hd_table_bufsize_max:4,end_stream:[7,11,8],written:[7,11,8,10],situat:[3,10],free:[0,14,5,7,10,11],standard:4,b127:12,hand:8,spdy:[12,15,3,13],openssl:[6,8,15,10,14],nghttp2_version_num:[7,11,5],sigact:[14,10],rang:[7,2,8,11],warnx:[14,10],deflate_max_header_table_s:4,restrict:[0,14,11,10,5],nghttp2_protocol_error:[7,11],alreadi:[6,14,7,8,10,11],agre:8,primari:[7,11],top:[8,12,4],sometim:3,necessarili:[7,11],too:[7,2,11,14],similarli:7,draft:[1,11,8,7],listen:[6,8,12,9,14],tool:15,lighttpd:8,travers:14,white:6,target:[7,11,8,4],provid:[0,14,4,5,7,8,10,11],tree:8,zero:[0,7,11],cppflag:15,project:[1,8],matter:[7,11],rfc2616:[7,11],nghttp2_continu:[7,11],nv_out:[0,7,11],manner:[6,3],increment:[7,11],seen:2,nghttp2_session_recv:[7,11],latter:[7,11,4],nghttp2_session_callbacks_set_on_begin_frame_callback:[7,11],transmit:[7,11,10],sig_ign:[14,10],settings_max_header_list_s:[7,11],shall:[0,14,11,10,5],object:[0,14,4,7,8,10,11],writecb:[14,10],nghttp2_settings_timeout:[7,11],bytesio:[8,4],simplic:10,don:[6,2,14,7,8,11,15],hex_to_uint:14,doc:[8,9],flow:[],doe:[14,4,7,8,10,9,11,12],opaque_data:[7,11,8],section:[7,11,8],on_invalid_frame_recv_callback:[7,11],bev_event_eof:[14,10],pkg:8,protocol:[],bufferevent_setcb:[14,10],make:[6,4,14,7,8,9,11,12,15],involv:[7,11],absolut:[6,12],libari:8,explain:[12,10],configur:[6,4,7,8,9,11,12,15],nghttp2_err_invalid_stream_id:[7,11],busi:[14,10],nghttp2_cleartext_proto_version_id:[7,11],nghttp2_err_proto:[7,11],authoritylen:10,stop:[7,11,10,14],end_head:[7,11,8],evbuffer_drain:[14,10],bar:[6,8,4,9],ai_pass:14,ietf:[1,11,8,7],baz:[8,4],push_promis:[7,11,14],"public":[],twice:2,nghttp2_strerror:[0,7,11,10,14],bufferevent_ssl_accept:14,serve_forev:[8,4],nul:[7,11],num:6,result:[0,14,3,7,10,11],respons:[0,6,3,4,14,7,8,9,10,11,12],fail:[0,14,3,7,8,10,11,12],key_fil:14,subject:[0,14,11,10,5],said:[7,11],figur:8,certpath:6,bev_opt_close_on_fre:[14,10],accord:[7,11],nghttp2_session_callbacks_set_on_data_chunk_recv_callback:[7,11,10],push_path:9,extens:[6,4,7,8,10,11],advertis:[6,10,14],setsockopt:[14,10],protect:6,nghttp2_default_weight:[7,11],nghttp2_hd_deflate_hd:[0,7,11],against:[7,11,8],ssl_ctx_use_certificate_chain_fil:14,header_t:8,logic:14,enhance_your_calm:[7,11],com:[1,11,8,12,7],ninflat:0,int32_t:[7,11,10,14],"2nd":[0,13],usr2:12,usr1:[6,12],trust:6,assum:[6,4,7,8,11,12],option_ptr:[7,11],duplic:[7,11],reciev:10,liabil:[0,14,11,10,5],evbuffer_get_length:[14,10],chrome:[8,12],tlsv1:[6,8],max_deflate_s:8,been:[7,11,8,10,14],github:[1,8,3],trigger:[7,11],interest:[14,8,10],futur:[7,11,12],tini:10,life:14,regul:[14,10],worker:[6,12,9],argument:[14,4,7,8,10,11,12],ewouldblock:[14,10],load_cert_chain:[8,4],"0x000600":5,ssl_op_no_compress:[14,10],emploi:3,servic:[6,8,14],properti:[14,10],employ:8,calcul:3,publicli:8,nghttp2_on_begin_headers_callback:[7,11,10],bev_event_timeout:[14,10],printabl:10,nghttp2_flag_pad:[7,11],nghttp2_set:[7,11],promised_stream_id:[7,11],conf:[6,8,10,14],sever:[6,14,7,8,11,12],on_data:[8,4],nghttp2_session_callbacks_set_on_frame_send_callback:[7,11],perform:[12,2,3],dhe:[6,8,9],transpar:[0,7,11],headlen:[],split:0,version_str:[7,11],nghttp2_on_stream_close_callback:[7,11,10],complet:[0,14,7,9,10,11],start_listen:14,bufferevent_openssl_get_ssl:[14,10],nghttp2_err_deferred_data_exist:[7,11],rais:4,ssl_ctx_new:[14,10],zlib1g:8,ownership:[7,11],niv:[7,11,8],nghttp2_flag_end_head:[7,11],pkg_config_libdir:15,kept:14,thu:[6,14,7,8,11,12],nghttp2_session_get_effective_local_window_s:[7,11],inherit:4,"0x04":[7,11,8],client:[13,2,3,9],thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],endif:[14,11,5],gzip:[0,8,9],everyth:8,left:[6,11,14,7],identifi:[6,4,14,7,11,13],nghttp2_nv_flag:[7,11],just:[0,6,14,7,8,9,10,11,12],"0x01":[7,11,8],initiate_connect:10,ifdef:[14,11],nghttp2_session_callbacks_set_on_stream_close_callback:[7,11,10,14],yet:[7,2,8,11],previous:[7,11],easi:8,settings_hd_table_bufsize_max:[7,11],els:[14,10],save:[6,2],applic:[0,14,3,4,7,8,10,11,15],preserv:[0,7,11],background:[6,9],initialize_nghttp2_sess:[14,10],daemon:[6,12,9],specif:[14,4,7,10,11,15],filenam:2,http2_session_data:[14,10],client_addr:14,arbitrari:[7,11],manual:[8,12],nghttp2_settings_max_header_list_s:[7,11],tcp_nodelai:[14,10],unnecessari:[7,11],underli:[14,10],www:[7,11,12],right:[0,14,5,8,10,11],deal:[0,14,5,7,10,11],intern:[7,11],freeaddrinfo:14,successfulli:[7,11,10,14],transmiss:[14,2,7,9,10,11],requesthandlerclass:[8,4],insensit:6,bottom:[7,11],nghttp2_data_source_read_callback:[7,11],subclass:[8,4],buffer:[0,14,7,8,10,11],condit:[0,14,5,7,10,11,12],foo:[6,8,4,9],localhost:[12,8,3],core:[6,8,9],plu:3,sensibl:[7,11],insecur:[6,12],repositori:[14,10],peer:[7,2,14,10,11],post:[7,2,8,11],cacert:[6,12],nghttp2_submit_data:[7,11],nghttp2_settings_max_concurrent_stream:[7,11,10,14],produc:[0,7,11],f127:12,evbuff:[14,10],encod:[6,8,4],bound:[0,7,11],libev:[6,8,15],down:[14,10],nghttp2_before_frame_send_callback:[7,11],errx:[14,10],git:[],session_send:[14,10],wai:[0,7,11,8,15],support:[14,3,7,8,10,11,12,15],closur:[7,11,4,10],suppors:12,avail:[6,4,14,7,8,10,9,11,12,13],overhead:8,on_begin_frame_callback:[7,11],fork:[8,12],head:14,event_bas:[14,10],offer:[8,4,15],forc:[2,9],bev_event_connect:[14,10],heap:8,"true":[8,4],reset:10,ssl_ctx_free:[14,10],maximum:[6,11,8,7],tell:[0,14,4,7,10,11,12],deafult:8,fundament:0,autoconf:8,emit:[7,11,10,14],nghttp2_initial_window_s:[7,11],featur:[8,12],httpbi:[1,8],netdb:14,decrypt:3,unreleas:8,nghttp2_session_callbacks_new:[7,11,10,14],exist:[7,11,8,12],protocol_id_len:[7,11],ai_flag:14,ends_with:14,sizeof:[0,14,10],delete_http2_session_data:[14,10],encrypt:12,when:[0,6,4,14,7,8,9,10,11,12,13],role:[7,11,14],nghttp2_check_header_valu:[7,11],send_client_connection_head:10,unlimit:[6,2,11,7],heder:[7,11],intend:[6,11,14,12,7],af_unspec:[14,10],nghttp2_option_new:[7,11],nghttp2_max_window_s:[7,11],technot:[7,11],ni_numerichost:14,notic:[0,14,11,10,5],max_siz:8,evconnlistener_new_bind:14,longer:[14,8],htdoc:9,pseudo:[7,11],nghttp2_check_header_nam:[7,11],print_head:10,time:[0,6,2,4,14,7,8,11,12],push:[7,11,8,4,9],skip:[7,11],consum:[7,11],nghttp2_on_frame_recv_callback:[7,11,10],nghttp2ver_h:5,decid:[7,11,4],create_ssl_ctx:[14,10],depend:[14,7,8,10,11,12,15],readabl:10,nghttp2_session_callbacks_set_send_callback:[7,11,10,14],undon:0,sourc:[0,1,14,7,8,10,11,15],string:[0,6,4,14,7,8,10,11],nghttp2_settings_enable_push:[7,11],nghttp2_hd_inflate_new:[0,7,11],androideabi:15,host_len:[7,11],exact:[7,11],level:[6,2,3,4,14,7,11,13,15],did:[7,11,9,10],item:[8,12],settings_id:[7,11],conhead:14,cooki:6,round:3,dir:15,upper:[0,7,11,4],sign:12,port:[6,3,4,14,7,8,9,10,11,12,13],data_flag:[7,11,14],appear:[8,12],event_base_fre:[14,10],current:[0,6,2,4,14,7,8,9,11,12,15],nghttp2_err_data_exist:[7,11],gener:[0,7,11,8],pad_high:[7,11],nghttp2_hd_inflate_del:[0,7,11],url_remap:12,nghttp2_session_get_stream_local_clos:[7,11],address:[6,8,12,4],locat:[],nghttp2_session_get_stream_remote_clos:[7,11],box:12,nghttp2_session_callbacks_set_on_begin_headers_callback:[7,11,10,14],connect_error:[7,11],queue:[7,11,10,14],behav:[7,11,12],ourselv:[14,10,15],nghttp2_err_goaway_already_s:[7,11],regardless:[6,11,7],extra:[8,10],modul:[8,4],prefer:[6,11,12,7],"1st":0,instal:[8,15],hdinflat:[8,4],memori:[0,14,4,7,10,11],stylesheet:[0,2],handler:[8,4],strdup:14,prev:14,emiss:[7,11],rst_stream:[7,11,10,14],ctype:14,enhanc:6,nghttp2_submit_window_upd:[7,11],behalf:6,prepar:[7,11,15],cap:4,stream_user_data:[7,11,10],cat:[7,11,10,14],descriptor:[7,11,14],can:[0,6,4,14,7,8,9,10,11,12,13,15],http2:[1,4,6,7,8,11,12],purpos:[0,6,5,14,7,10,11],uf_path:10,claim:[0,14,11,10,5],stream:[0,6,2,3,4,14,7,8,10,11,13],agent:[0,8],critic:[7,11],abort:[7,11],tabl:[0,2,4,7,8,9,11],nghttp2_header:[7,11,10,14],occur:[7,11,4],alwai:[7,11,8,14],differenti:0,multipl:[],ping:[7,11],write:[],actual:[7,11,10,14],nghttp2_hd_deflate_init:0,mar:8,sslcontext:[8,4],max:[6,2,3,7,8,10,11,13],sni:6,mac:8,mai:[0,14,3,4,7,8,10,11,12,15],acceptcb:14,data:[0,14,2,3,4,7,8,10,11],autotool:8,openssl_add_all_algorithm:[14,10],stdio:0,stdin:[2,8],explicit:0,inform:[14,2,7,8,9,10,11,13,15],"switch":[14,8,10],preced:12,combin:[6,11,7],talk:[14,8],nghttp2_err_stream_shut_wr:[7,11],size_t:[0,7,11,10,14],nghttp2_err_unsupported_vers:[7,11],still:[7,11,8,14],pointer:[0,7,11,14],dynam:[0,7,11,8,4],entiti:14,group:[6,2],nghttp2_err_fat:[7,11],nghttp2_priority_spec:[7,11],platform:[8,15],window:[6,2,3,7,11,12,13],main:[0,14,10],non:[14,3,4,7,8,10,11,12],env:[8,4],"5xx":[8,3],nghttp2_submit_head:[7,11],nghttp2_on_header_callback:[7,11,10,14],now:[7,11],name:[],version_num:[7,11],config:[8,12,15],no_error:8,drop:[6,11,14,10,7],hd_inflat:[7,11],millisec:[8,3],compil:[8,15],replac:[6,11,12,7],individu:[7,11,12],continu:[0,14,2,7,8,10,11],event_base_loop:[14,10],turoti:10,happen:[0,14,12,4,10],ai_addrlen:14,nghttp2_hd_inflate_init:0,shown:0,libjemalloc:8,space:[0,6,11,8,7],output_length:8,correct:15,earlier:[14,10],nghttp2_option_set_no_auto_window_upd:[7,11],event_base_new:[14,10],argv:[0,14,10],org:[0,1,11,8,7],"byte":[0,6,2,3,4,14,7,8,9,10,11],argc:[0,14,10],care:[7,11],nghttp2_hd_deflate_change_table_s:[7,11],nghttp2ver:[],"88448504252dd5918485":8,badli:[7,11],nghttp2_session_callbacks_set_on_frame_not_send_callback:[7,11],turn:12,nghttp2_flag_non:[7,11,10,14],place:[7,11],evdns_base_new:10,origin:[6,2,7,8,11,12],directli:[7,11,10,14],carri:[7,11],onc:[0,7,11],arrai:[0,7,11,8,10],yourself:8,reopen:6,nghttp2_is_fat:[7,11],nghttp2_flow_control_error:[7,11],submit:[7,11,8,10],on_frame_recv_callback:[7,11,10,14],open:[],size:[0,6,2,3,4,14,7,8,9,11,13],given:[0,6,2,3,4,7,8,11,13],capac:[0,11],paramt:0,sigpip:[14,10],averag:6,internal_error:[7,11],conveni:[7,11,4],ssl_ctx:[7,11,10,14],copi:[0,14,4,5,7,10,11],specifi:[13,2,3,9,15],on_head:[8,4],mostli:8,holder:[0,14,11,10,5],than:[0,14,3,4,7,8,9,11,13],png:9,serv:[14,12],wide:[6,14],nghttp2_session_get_outbound_queue_s:[7,11],were:[7,11,10,14],posit:[7,11],read_callback:[7,11,14],nghttp2_min_weight:[7,11],browser:[8,12],pre:[7,11],sai:[7,11],pri:11,ani:[0,6,4,5,14,7,8,10,11,12],deliv:[7,11],saw:12,sat:8,bitwis:[7,11],form:[6,11,8,4,7],nghttp2_flag_prior:[7,11],destroi:[14,10],payloadlen:[],note:[0,6,3,14,7,8,10,11,12],take:[7,11,8,10,14],deflate_hd_table_bufsize_max:[0,7,11],noth:[7,11,8,12,4],ndeflat:0,begin:10,sure:[14,8,10],trace:8,normal:[7,11],multipli:2,compress:[0,1,4,7,8,11],nghttp2_hcat_request:[7,11,14],pathlen:10,sublicens:[0,14,11,10,5],pair:[14,2,4,7,8,10,9,11],renam:12,http2_select:[7,11],later:[0,14,3,4,7,10,11,12],gracefulli:[7,11,12,10],show:[12,4],unprocess:[14,10],concurr:[6,2,3,14,7,8,11,13],permiss:[0,14,11,10,5],nghttp2_session_set_stream_user_data:[7,11,14],threshold:14,help:[6,2,9,13],print_hd_tabl:4,onli:[6,2,14,7,8,10,11,12],explicitli:[6,4],ratio:0,behind:6,overwritten:[7,11],hddeflat:[8,4],variou:[7,11],get:[14,2,4,7,8,10,11,12],clang:8,outlen:[0,7,11,10],ssl:[13,3,9],cannot:[0,14,4,7,11,12],nghttpd:[13,2],ssl_ctx_set_opt:[14,10],requir:[6,12,9,15],nghttp2_set_stream_user_data:14,where:[6,15],burst:[6,12],nghttp2_session_callbacks_set_before_frame_send_callback:[7,11],op_no_sslv2:[8,4],detect:[7,11,8,4],weighttp:8,nghttp2_hd_inflate_fin:[0,7,11],enough:[0,7,2,11],between:12,"import":[0,8,4,15],fcntl:14,awaaagqeaad__wuaaaab:8,pipefd:14,evdns_bas:10,come:[6,15,3,14],submit_request:10,region:[7,11],contract:[0,14,11,10,5],fontend:12,tutori:[],bufferevent_fre:[14,10],mani:[7,11],nghttp2_ext_frame_typ:[7,11],nghttp2_data_provid:[7,11,14],among:14,color:[2,9],inspir:8,nghttp2_err_too_many_inflight_set:[7,11],dispatch:12,cancel:[7,11],damag:[0,14,11,10,5],http2server:[8,4],header_table_s:8,"abstract":[14,10],nghttp2_on_unknown_frame_recv_callback:[],nghttp2_err_buffer_error:[7,11],hidden:[7,11],those:[0,14,3,7,8,10,11,13],"case":[6,4,14,7,8,10,11,12],hdr:[14,8,4,10],progoram:10,invok:[14,4,7,8,10,11,12],invoc:[7,11,4,14],margin:4,edch:8,nghttp2_nv_flag_no_index:[0,7,11],on_data_chunk_recv_callback:[7,11,10],stdout:[0,8,10],ascii:[7,11],develop:[],author:[0,14,4,5,8,10,11,12],bev_opt_defer_callback:[14,10],alphabet:[7,11],same:[0,14,2,4,7,8,11,12],ssl_library_init:[14,10],nghttp2_err_flow_control:[7,11],html:[1,2,14,7,8,11],pad:[6,2,11,9,7],document:[12,9,5],finish:[14,3,7,8,10,11],decompress:[7,11,8,3,4],handshake_leftlen:14,extern:11,postpon:[7,11],nghttp2_initial_max_concurrent_stream:[7,11],ai_next:14,without:[0,6,4,5,14,7,8,9,10,11,12,13,15],evict:[7,11],nghttp2_push_promis:[7,11],on_request_don:[8,4],event2:[14,10],nghttp2_err_def:[7,11],nghttp2_submit_set:[7,11,10,14],execut:[8,12,4],rest:3,multiplex:14,hint:14,except:[7,11,4],param:[6,9],identif:[7,11],nghttp2_select_next_protocol:[7,11,10],nghttp2_ext_altsvc:[7,11],real:[8,12],unistd:[14,10],read:2,nghttp2_version_ag:[7,11],sheme:3,test:[2,12],traffic:[12,8,3],nghttp2_hd_inflate_change_table_s:[7,11],next_proto_cb:14,integ:[7,11],server:[6,2,12,9,13],either:[7,11,4,14],output:[0,6,2,4,14,7,8,9,10,11,13],manag:[7,11,14],stream_clos:[7,11],protocol_sslv23:[8,4],set_no_refset:4,ssl_ctx_set_next_protos_advertised_cb:14,handshak:[6,14,9,10],nonzero:[0,7,11,14],easili:10,"2xx":[8,3],exit:[0,6,2,14,9,10,12,13,15],data_ptr:[7,11],power:8,base64url:[7,11],nghttp2_session_server_new:[7,11,14],fulli:[7,11,14],getnameinfo:14,refers:4,src:[8,15],inflater_ptr:[0,7,11],ack:[7,11,8],nghttp2_recv_callback:[7,11],settings_payload:[7,11],act:[14,12,10],routin:[14,10],consid:8,"0x0fu":0,ssl_ctx_set_next_proto_select_cb:[7,11,10],error_repli:14,strip:15,your:[14,8],b2a_hex:[8,4],nghttp2_hcat_respons:[7,11,10],hex:[14,8],start:[14,3,7,8,9,10,11,12],nghttp2_err_stream_clos:[7,11],interfac:4,ipv4:[6,8],lot:[7,11],ipv6:[6,8],strictli:[7,11,3,4,13],next_proto_list:14,nghttp2_proto_version_id_len:[7,11,14],tupl:[8,4],nghttp2_err_invalid_st:[7,11],satur:8,categor:[6,11,7],possibl:[7,11,8,10],"default":[13,2,3,9],applayerprotoneg:[7,11],hpack:[],expect:[8,4],creat:[14,7,8,10,11,12,15],mainli:[7,11],decreas:[7,11],file:[2,9,5,15],nghttp2_err_invalid_header_block:[7,11],fill:[7,11,14],denot:[6,11,10,7],functypedef:11,googl:[8,12],todo:[7,11],kbyte:[8,3],field:2,valid:[7,2,8,12,11],nghttp2_prioriti:[7,11],ignor:[6,2,3,14,7,11,13],you:[0,6,4,14,7,8,10,11,12,15],intention:[7,11],architectur:15,sequenc:[0,14,4,7,8,10,11],promised_stream_user_data:[7,11],briefli:[0,15],track:[14,8,10],reduc:[7,11],cunit:8,directori:[6,2,14,8,9,10,15],represent:[7,5],all:[0,6,4,5,14,7,10,11,12,13,15],on_unknown_frame_recv_callback:[],illustr:[8,4],nghttp2_err_start_stream_not_allow:[7,11],follow:[0,6,3,4,5,14,7,8,10,11,12,15],alt:[1,8,6],ptr:[7,11,10,14],app_cont:14,uint8_t:[0,7,11,10,14],articl:[12,15],readcb:[14,10],program:[6,12],bufferevent_writ:[14,10],introduc:15,uf_queri:10,evbuffer_remov:14,far:[0,14,8,10],pad_low:[7,11],nghttp2_option:[7,11],util:12,nghttp2_client_connection_header_len:[7,11],failur:[7,11],veri:[0,7,11,10],bottleneck:3,unalt:6,"__cplusplu":11,list:[6,11,14,4,7],nghttp2_headers_categori:[7,11],adjust:[0,7,11,8,3],stderr:[0,6,14,7,8,10,11],small:[7,11],inflate_header_block:[0,7,11],session_recv:14,syslog:6,rate:[],pass:[0,6,4,7,10,11],further:[0,7,11,10,14],what:[7,11,8,12,4],sub:14,sun:8,sum:[0,8,3],delet:[0,7,11,10],version:[13,15],method:[14,2,4,7,8,10,11],full:8,libjansson:8,varnish:8,padlen:[7,11,8],percentage_of_original_s:8,excess:14,modifi:[0,14,5,8,10,11],valu:[0,6,2,4,14,7,8,9,10,11,12],search:14,ai_addrconfig:14,nghttp2_err_push_dis:[7,11],on_clos:[8,4],prior:8,amount:[7,11,14,4,10],action:[0,14,5,7,10,11],via:[6,14,7,8,10,11,12],primit:10,ask:[7,11],famili:[14,10],establish:[14,10],select:[],regist:14,two:14,nghttp2_session_get_remote_window_s:[],taken:[7,11],minor:[7,5],more:[0,14,7,8,10,11],tsujikawa:[0,14,11,10,5],desir:[6,11,12,7],nghttp2_settings_header_table_s:[7,11],default_header_table_s:4,select_next_proto_cb:[7,11,10],flag:[0,14,7,8,10,11,15],particular:[0,14,5,7,10,11],known:0,nghttp2_err_wouldblock:[7,11,10,14],cach:[8,12],none:[6,8,4],endpoint:[7,2,8,11],dev:[6,8,5],remain:[7,11,10,14],learn:14,def:[8,4],share:[0,8,4,15],accept:[0,6,14,7,8,11,12],minimum:[7,11,12,14],ssl_op_al:[14,10],nghttp2_submit_altsvc:[7,11],create_ssl:[14,10],strlen:[14,10],huge:[14,10],netinet:[14,10],secur:[0,6,8,12],rather:9,anoth:[7,11,12],tyep:[],serveraddr:[8,12],reject:[7,11],sec9:[7,11],simpl:[7,11,10,14],css:[0,8,4,9],resourc:[],referenc:8,variant:[7,11],spdylai:[12,8,3,15],nghttp2_client_connection_preface_len:[7,11,10,14],associ:[0,14,4,5,7,8,10,11],keypath:6,"short":[14,10],proto:[6,13],caus:[7,11],callback:[14,4,7,8,10,11],nghttp2_nv_flag_non:[0,7,11,10,14],alpn:[6,4,7,8,11,12,13],authroiti:10,rotat:12,max_ag:[7,11],hypertext:[1,8],libcunit1:8,through:[6,8,12,14],paramet:[0,6,7,9,10,11],style:[0,8,4],nghttp2_hcat_push_respons:[7,11],pend:[7,11,10,14],nghttp2_err_eof:[7,11],alter:[6,8],valuelen:[0,7,11,10,14],tri:[7,11,12],"return":[0,14,3,4,7,8,9,10,11,12],check_path:14,nghttp2_session_callbacks_set_on_invalid_frame_recv_callback:[7,11],readlen:[14,10],nghttp2_err_callback_failur:[7,11,10,14],authent:6,tear:[14,10],achiev:[7,11,14],found:[7,11,14],unicod:4,trailer:[7,11],nghttp2_on_frame_send_callback:[7,11],weight:[7,2,11],realli:[12,10],nghttp2_hd_inflate_flag:[7,11],connect:[12,2,3,5,13],field_set:10,event:[0,14,4,5,8,10,11],ftw:[8,4],publish:[0,14,11,10,5],payload:[6,2,3,7,9,11],etag:8,print:[6,2,4,8,10,9],on_frame_not_send_callback:[7,11],proxi:[],advanc:12,nghttp2_internal_error:[7,11,14],effect:[7,11],reason:[0,7,11,4,14],base:[6,8,14],put:[7,11,8],nghttp2_session_mem_recv:[7,11,10,14],nghttp2_flag:[7,11],recv:8,prefac:[7,11,12,10,14],omit:[7,11,4,10],nghttp2_err_invalid_stream_st:[7,11],assign:[0,14,7,8,10,11],feed:[7,11,10,14],major:[7,5],notifi:[7,11,14],prevent:[7,11,8],number:[0,6,3,4,5,14,7,9,11,13],pkgconfig:15,done:[6,3,14,8,10,12],construct:[7,11,8,4],stdlib:11,differ:[7,11,12],script:[2,8,12,4,15],interact:6,data_prd:[7,11,14],nghttp2_session_get_stream_user_data:[7,11,14],least:[7,11,8],scheme:[0,2,4,8,10,12,13],store:[0,7,11,10,14],input_length:8,option:3,memcmp:14,nghttp2_client_connection_head:[7,11],part:[6,3],pars:10,consult:12,dpkg:15,window_upd:[7,11,8],doubli:14,remot:[7,2,14,10,11],remov:[7,11,15],bridg:[],callbacks_ptr:[7,11],str:4,consumpt:10,nghttp2_error:[7,11],libspdylai:15,window_size_incr:[7,11,8],lib_error_cod:[7,11],arrlen:[14,10],packag:8,"null":[0,14,2,7,10,11],syn_stream:[7,11],sell:[0,14,11,10,5],outbound:[7,11],built:[8,3,15],equival:[7,11],check:[7,11,10,14],self:[8,12,4],also:[3,15],append:[6,4],nghttp2_err_frame_size_error:[7,11],make_nv:[0,14,10],distribut:[0,14,11,10,5],reacb:10,passwd:6,reach:[7,11,14],chart:[7,11],most:[6,2,11,9,7],private_kei:[6,9],charg:[0,14,11,10,5],addr:14,"01881f3468e5891afcbf83868a3d856659c62e3f":8,compar:[7,11],clear:[],cover:[8,12],ext:[7,11],h2c:[13,11,8],pri_spec:[7,11],nghttp2_settings_max_frame_s:[7,11],hdtabl:4,rtt:[7,11],session:[6,14,7,8,10,11,13],fine:[7,11],nghttp2_submit_push_promis:[7,11],copyright:[0,14,5,8,10,11],refused_stream:[7,11],queu:[7,11,10,14],remedi:3,express:[0,14,11,10,5],kind:[0,14,5,7,10,11],nativ:[13,8,3],"3xx":[8,3],liabl:[0,14,11,10,5],before_frame_send_callback:[7,11],subcert:6,retreiv:10,crt:[14,8,12,4],statist:2,h2load:15,certif:[2,9],set:[0,6,2,3,4,14,7,8,9,10,11,12,13,15],dump:6,creator:8,ousid:8,remove_stream:14,startup:6,nghttp2_submit_goawai:[7,11],sec:[6,8,3],arg:[7,11,10,14],close:[14,4,7,8,10,11],jemalloc:8,arm:15,analog:[7,11],strchr:14,someth:[7,11,12],won:[6,11,14,7],hold:[7,11],nghttp2_on_data_chunk_recv_callback:[7,11,10],altern:[6,8],numer:[7,11,5],sole:[7,11,13],writelen:14,succeed:[8,3],percent_decod:14,verbos:[13,2,8,9],both:[6,3,14,7,8,10,11,12],last:[7,11,8],delimit:[0,6,8],nghttp2_data_flag_non:[7,11],nghttp2_session_want_writ:[7,11,10,14],tempor:[7,11],context:[7,11,8,10,14],app_ctx:14,whole:[0,7,11,8,4],load:[6,8],simpli:[14,10],send_server_connection_head:14,header:[2,3,9],shutdown:[7,11,12,10,14],linux:15,nghttp2_session:[7,11,10,14],backend:[6,8,12],due:[0,7,11],empti:[6,4,14,7,8,10,11,12],send_respons:[14,8,4],whom:[0,14,11,10,5],stdint:11,add_stream:14,flight:[7,11],nghttp2_err_nomem:[7,11],settings_enable_push:[7,11],nghttp2_session_terminate_sess:[7,11,10],imag:2,func:11,next_proto_list_len:14,look:[0,14,3,10],"while":[7,11,10,14],behavior:[7,11],error:[0,6,3,4,14,7,8,9,10,11],robin:3,loop:[14,8,4,10],earli:9,malloc:[0,14,10],nghttp2_session_callback:[7,11,10,14],readi:[7,11,14],user_data:[7,11,10,14],itself:[7,11,3,10,14],autoreconf:8,flow_control_error:[7,11],grant:[0,14,11,10,5],libcurl:8,belong:[7,11],nghttp2_session_callbacks_set_on_header_callback:[7,11,10,14],create_http2_session_data:[14,10],decod:[2,8,4,9],mytyp:[7,11],inflat:[8,4],moment:8,user:[0,6,7,8,10,11,12,15],implement:[1,2,14,7,8,10,11],recent:[7,11],nghttp2_h:11,noninfring:[0,14,11,10,5],lib:15,entri:[7,11,8,4],nghttp:13,person:[0,14,11,10,5],uint32_t:[7,11,14],qdeb_build_gnu_typ:15,on_frame_send_callback:[7,11],nghttp2_ping:[7,11],input:[0,14,7,8,10,11],subsequ:[0,7,11,4,13],bin:[8,4,15],on_begin_headers_callback:[7,11,10,14],obsolet:[7,11],format:[6,2,14,7,8,9,10,11,12],http_parser:10,nginx:8,bit:[6,2,5,7,11,13],strstr:14,success:[0,7,11,8],signal:[6,14,7,10,11,12],lib_error:[7,11],resolv:6,some:[0,14,4,7,10,11,12],back:[7,11,8,14],sampl:8,reverse_proxi:12,libssl:8,lev_opt_reus:14,per:[6,3,4,8,12,13],pem:[6,2,12,9],retri:12,larg:[7,2,8,11],make_nv2:10,nghttp2_session_callbacks_set_recv_callback:[7,11],settings_compress_data:8,machin:[8,12],run:[6,4,14,7,8,10,9,11,12,15],step:[7,11,12],prerequisit:15,handshake_readcb:14,nghttp2_hd_inflate_emit:[0,7,11],commun:[6,8,10,14],idl:[7,11],regular:[7,11],dialog:12,block:[6,3,4,14,7,8,10,11],nghttp2_err_paus:[7,11],nsm:11,within:8,nghttp2_send_callback:[7,11,10,14],chang:[6,3,4,14,7,8,9,11],announc:8,occupi:[8,4],inclus:[7,2,11],errno:14,"long":[7,11,8,14],nghttp2:15,sslv3:6,suit:[6,8,9],forward:[6,11,8,12,7],change_table_s:4,properli:6,session_ptr:[7,11],repeatedli:[0,7,11,9],link:[6,2,8,12,14],translat:12,ni_maxhost:14,nghttp2_hd_inflate_end_head:[0,7,11],line:[6,12,8,3,15],mitig:8,info:6,concaten:0,utf:4,caller:[0,7,11,14],nghttpx:[13,2,9,15],frame_size_error:[7,11],parser:10,repres:[7,11],"char":[0,7,11,10,14],incomplet:8,sublen:14,curl:[8,12],titl:14,invalid:[7,11],librari:[3,15],llvm:15,nghttp2_default_header_table_s:[7,11],meaning:6,libtool:8,create_http2_stream_data:[14,10],algorithm:[7,11],svc:[1,8,6],nghttp2_submit_request:[7,11,10],namelen:[0,7,11,10,14],avoid:[7,11,8,10,14],asyncio:[8,4],getaddrinfo:14,code:[0,14,3,4,7,8,10,11],examin:0,queri:10,nghttp2_frame_hd:[7,11],cython:8,privat:[6,2,14,8,9,12,15],send:[6,2,4,14,7,8,9,10,11,12],http_parser_url:10,lower:[7,11],outgo:[7,11,14],aris:[0,14,11,10,5],fatal:[6,11,14,10,7],nghttp2_data_flag:[7,11],sent:[0,6,14,7,10,11],nghttp2_submit_p:[7,11],untouch:[7,11],relev:10,"0x010203":[7,5],magic:[14,10],button:12,http_parser_parse_url:10,"try":[7,11,8],microsec:[8,3],pleas:[14,3,7,8,10,11,12],impli:[0,14,11,10,5],smaller:8,snprintf:10,memset:[14,10],download:[1,2,8],c100:3,click:12,client_address:[8,4],index:[7,2,8,11],o_rdonli:14,access:[6,2,4,7,8,11,12,13],experiment:[1,2,9,6],nghttp2_hd_deflate_new:[0,7,11],whatev:[8,4],inspect:[7,11],uf_schema:10,nghttp2_enhance_your_calm:[7,11],len:[7,11,10,14],bodi:[14,3,4,7,8,10,11],compression_error:[7,11],ubuntu:8,becom:[7,11,3,5,14],sinc:[7,11,8,10,14],convert:6,larger:[7,11,4],ctx:[8,4],settings_payloadlen:[7,11],nghttp2_session_callbacks_set_on_unknown_frame_recv_callback:[],jansson:8,cert:[6,2,9],greac:[14,10],typic:8,set_npn_protocol:4,firefox:12,output_wouldblock_threshold:14,apr:8,appli:[7,11],gatewai:12,bufferev:[14,10],from:[6,2,12,5,15],dnsbase:10,doubl:0,binascii:[8,4],upgrad:[6,2,7,8,11,12],next:[7,11,10,14],implic:12,doubt:0,findproxyforurl:[8,12],usr:[8,4,15],nghttp2_nv:[0,7,11,10,14],nghttp2_option_del:[7,11],sort:6,goawai:[7,11,8,10,14],deflat:[8,4],in_fin:[0,7,11],account:[7,11,8,10],retriev:[7,11,14,4,10],tunnel:[6,8],nghttp2_settings_id:[7,11],pac:[8,12],about:[7,11,14,4,10],aliv:[6,11,14,7],sslv23_client_method:10,control:[],process:[0,14,4,7,8,10,11,12],nghttp2_session_get_remote_set:[7,11],high:4,fprintf:[0,7,11,10,14],tab:12,onlin:[7,8],serial:[7,11,10,14],evdns_base_fre:10,no_refset:4,gcc:8,filepath:6,nghttp2_session_want_read:[7,11,10,14],gcm:8,ssl_ctx_use_privatekey_fil:14,evbas:[14,10],instead:[6,3,4,7,11,13],nullifi:[7,11],npn:[6,14,7,8,10,11,12],max_payloadlen:[7,11],eventcb:[14,10],nghttp2_compression_error:[7,11],alloc:[0,7,11,14],bind:[],nvlen:[0,7,11,10,14],correspond:[14,8],element:[7,11,14],issu:[1,3,7,8,11,12,13],stream_id:[14,4,7,8,10,11],nghttp2_connect_error:[7,11],ssize_t:[0,7,11,10,14],fallback:12,furnish:[0,14,11,10,5],"02f":0,nva2:0,nva1:0,move:[7,11],comma:6,"02x":0,chosen:4,nghttp2_hd_inflate_hd:[0,7,11],suppli:[7,11,12],therefor:[0,4,7,10,9,11],least_vers:[7,11],inlen:[0,7,11,10],recept:[14,2,7,9,10,11],crash:[7,8],greater:[7,11],python:[],auto:[13,3],nghttp2_goawai:[7,11],automat:[7,11,12],warranti:[0,14,11,10,5],nghttp2_session_mem_send:[7,11],anyth:[6,10],edit:[12,15],uf_port:10,mode:[],ndk:15,bump:[7,11],chunk:[7,11,8,4,10],ouf:[7,11],nghttp2_err_temporal_callback_failur:[7,11,14],"static":[0,14,7,8,10,11,15],our:10,patch:[7,8,5],out:[0,14,2,5,7,8,10,11,12],variabl:[8,12,4,15],accesslog:[6,12],req:[8,3],n1000:8,categori:[7,11,10],suitabl:[6,11,7],rel:[0,14,9],field_data:10,recv_callback:[7,11],insid:8,cleartext:[7,11],standalon:15,releas:[],nghttp2_session_callbacks_set_on_frame_recv_callback:[7,11,10,14],nghttp2_hd_inflate_non:[7,11],remap_requir:12,log:[2,9],syn_repli:[7,11,3],keep:[6,14,7,8,10,11],length:[0,14,2,7,8,10,11],outsid:[6,8,7],retain:[7,11],softwar:[0,14,11,10,5],addrinfo:14,echo:15,date:8,facil:6,prioriti:[7,2,11],seq:8,nghttp2_hd_inflat:[0,7,11],strict:8,unknown:14,licens:8,system:[6,15,12,10,14],messag:[7,11,10],attach:[14,10],attack:8,termin:[14,7,8,9,10,11],"final":[0,7,11],low:[7,11],request_head:[8,4],proclen:0,sa_handl:[14,10],enqueu:10,exactli:[14,8],nghttp2_err_header_comp:[7,11],see:[],structur:[7,11,10,14],charact:[7,11,10,14],sens:[7,11],nghttp2_session_del:[7,11,10,14],"08zx":0,bev:[14,10],ssl_new:[14,10],unencrypt:12,bufferevent_get_input:[14,10],nghttp2_inbound_num_iv:11,corrupt:10,have:[0,14,7,8,10,11,15],reserv:[7,11],need:[0,7,8,10,11,12,15],ai_socktyp:14,"0x08":[7,11],"0x09":[7,11],min:[],origin_len:[7,11],"0x05":[7,11,8],"0x06":[7,11],"0x07":[7,11],"0x00":[0,7,11,8],nghttp2_session_get_stream_effective_recv_data_length:[7,11],"0x02":[7,11],"0x03":[7,11],nghttp2_refused_stream:[7,11],evbuffer_pullup:[14,10],which:[0,14,3,4,7,8,10,11,12,15],zlib:[8,15],singl:[0,6,4,14,7,8,10,11],opaque_data_len:[7,11],unless:[6,11,8,9,7],bufferevent_openssl_socket_new:[14,10],deploy:[12,15],who:8,settings_max_concurrent_stream:[14,2,7,8,10,11],cipher:[6,8,9],stream_data:[14,10],noind:8,deploi:[],"class":[8,4],nghttp2_error_cod:[7,11,10,14],nghttp2_err_stream_id_not_avail:[7,11],url:[14,8,12],request:[0,6,2,3,4,14,7,8,9,10,11,12,13],pipe:14,determin:[7,11,8,4],nghttp2_pack_settings_payload:[7,11],"0x0d":[7,11],"0x0a":[7,11],"0x0b":[7,11],"0x0c":[7,11],ssl_load_error_str:[14,10],bufferevent_get_output:[14,10],redirect:10,nghttp2_submit_rst_stream:[7,11,14],forev:4,should:[0,14,7,8,10,11,15],suppos:12,local:[7,11,12,15],meant:[6,10],contribut:[],familiar:8,memcpi:[14,10],nghttp2_session_client_new2:[7,11],nghttp2_session_terminate_session2:[7,11],settings_initial_window_s:[7,11,8],nghttp2_data:[7,11,14],increas:[7,11],tbd:[7,11],portion:[0,14,4,5,10,11],nghttp2_submit_respons:[7,11,14],enabl:[6,4,7,8,11,12,15],whether:[0,14,11,10,5],nghttp2_session_remote_window_s:[],contain:[0,6,4,14,7,8,9,10,11,12],nghttp2_window_upd:[7,11],frame:[0,6,2,4,14,7,8,9,10,11],knowledg:8,nghttp2_hd_deflat:[0,7,11],temporarili:[7,11],statu:3,wire:[14,8,10],correctli:[7,11],nghttp2_settings_entri:[7,11,10,14],state:[0,7,11,8,14],https_uri:10,progress:8,nghttp2_initial_connection_window_s:[7,11],kei:[6,2,4,14,7,8,9,11,12],entir:[7,11,14],n100000:3,last_stream_id:[7,11,8],disconnect:[14,10],addit:15,revers:[6,8,12],nghttp2_proto_version_id:[7,11,10,14],equal:14,etc:[6,8,10,14],instanc:[7,11,8,4],grain:[7,11],freeli:15,uint16_t:[7,11,10],get_hd_tabl:4,nghttp2_data_flag_eof:[7,11,14],arriv:[8,4],precondit:[7,11],m10:[8,3],commenc:10,respect:[7,11,10],chromium:12,quit:12,tort:[0,14,11,10,5],compos:8,insuffici:[7,11],compon:[12,10],json:8,treat:[6,11,14,7],immedi:[7,11],nghttp2_hcat_head:[7,11],altsvc:[6,11,8,7],http2jp:8,iobas:4,sock_stream:14,evconnlisten:14,present:[0,13],on_header_callback:[7,11,10,14],nghttp2_frame_size_error:[7,11],plain:[8,12,4],nghttp2_session_send:[7,11,10,14],defin:[0,14,5,7,10,11],eintr:14,inadequate_secur:[7,11],layer:8,helper:[7,11],on_request_recv:14,libxml2:[8,15],squid:[8,12],site:8,archiv:[14,10],substanti:[0,14,11,10,5],incom:[6,4,14,7,8,11,12],let:[14,10,15],welcom:8,dereiv:2,satisfi:12,cross:15,member:[0,7,11,14],handl:[14,4,7,8,10,11],ifndef:[11,5],nightli:12,http:[],hostnam:[6,8,12,4],uf_host:10,initi:[0,6,2,3,4,14,7,10,11,13],dealloc:[7,11],inflate_flag:[0,7,11],off:[14,12,10],well:[14,11,10,15],app_context:14,exampl:[0,6,4,14,7,8,9,10,11,12,15],command:[12,8,3,15],nghttp2_session_callbacks_del:[7,11,10,14],choos:[6,11,15,7],error_cod:[14,4,7,8,10,11],nghttp2_data_sourc:[7,11,14],usual:[7,11],paus:[7,11],less:[0,7,11,3,13],send_callback:[7,11,10,14],half:[7,11],obtain:[0,14,11,10,5],tcp:[7,11,12,10,14],libnghttp2:[0,8],heavili:8,simultan:6,web:[14,8,12],wed:8,cert_fil:14,point:[14,7,10,11,12,15],priorit:[7,11],addrlen:14,add:[6,2,7,9,11,15],nghttp2_on_begin_frame_callback:[7,11],c10:8,match:[6,12,10,14],gmt:8,nvu:8,five:14,know:[0,7,11,12],nva:[0,7,11,10,14],password:6,python3:[8,4],insert:0,resid:[14,10],like:[0,6,3,4,14,7,8,10,11,12],foobarbuzz:8,protocol_id:[7,11,8],ldflag:15,nghttp2_priority_spec_check_default:[7,11],necessari:[7,11,4,14],page:[14,10],backlog:6,file_read_callback:14,nghttp2_session_client_new:[7,11,10],"export":[14,15],nghttp2_session_get_effective_recv_data_length:[7,11],error_html:14,guarante:[7,11],transport:[8,10],lead:[7,11],baseeventloop:4,octet:[14,10],overlap:[7,11],isxdigit:14,estim:0,nghttp2_session_upgrad:[7,11],delete_http2_stream_data:[14,10],host:[1,3,4,6,7,8,10,11,12,13,14,15],nghttp2_nv_compare_nam:[7,11],nghttp2_extens:[7,11],err_get_error:[14,10],toolchain:15,socket:[14,10],constructor:4,fals:8,discard:2,ssl_tlsext_err_ok:[7,11,10,14],disabl:[2,9,15],nghttp2_client_connection_prefac:[7,11,10,14],own:[7,11,8],nghttp2_err_invalid_fram:[7,11],ssl_op_no_sslv2:[14,10],nghttp2_session_consum:[7,11],automak:8,merg:[0,14,11,10,5],val:[7,11,10,14],nghttp2_priority_spec_default_init:[7,11],ai_famili:14,transfer:[1,11,8,12,7],ssl_filetype_pem:14,much:14,buz:[8,4],unexpect:[7,11],nghttp2_hd_deflate_bound:[0,7,11],gain:0,overflow:[7,11],highest:[7,11],buf:[0,7,11,14],count:[7,11],succe:[7,11],made:8,nghttp2_stream_clos:[7,11],nghttp2_info:[7,11],googlecod:[7,11],displai:[13,2,9],asynchron:[7,11],limit:5,otherwis:[0,14,3,5,7,8,10,11,13],problem:[7,11],sockaddr:14,nghttp2_on_frame_not_send_callback:[7,11],evalu:4,strndup:10,"int":[0,14,7,10,11,12],baserequesthandl:[8,4],pid:6,nghttp2_flag_end_stream:[7,11,14],allow:[6,11,8,7],percent:[6,14],detail:[7,11],other:[0,14,5,7,10,11,12],nghttp2_err_invalid_argu:[7,11],rememb:14,nghttp2_submit_:[14,10],buflen:[0,7,11],stat:[14,2],nghttp2_max_weight:[7,11],err_error_str:[14,10],rel_path:14,proto_str:[7,11],debian:15,session_data:[14,10],sphinx:8,eof:[7,11,14],indirectli:7,rule:[7,11],nghttp2_no_error:[7,11,10]},objtypes:{"0":"std:option","1":"c:macro","2":"c:member","3":"c:type","4":"c:function","5":"py:module","6":"py:attribute","7":"py:method","8":"py:class","9":"py:data","10":"py:function"},objnames:{"0":["std","option","option"],"1":["c","macro","C macro"],"2":["c","member","C member"],"3":["c","type","C type"],"4":["c","function","C function"],"5":["py","module","Python module"],"6":["py","attribute","Python attribute"],"7":["py","method","Python method"],"8":["py","class","Python class"],"9":["py","data","Python data"],"10":["py","function","Python function"]},filenames:["tutorial-hpack","index","nghttp.1","h2load-howto","python-apiref","nghttp2ver.h","nghttpx.1","apiref","package_README","nghttpd.1","tutorial-client","nghttp2.h","nghttpx-howto","h2load.1","tutorial-server","building-android-binary"],titles:["Tutorial: HPACK API","nghttp2 - HTTP/2 C Library","nghttp(1)","h2load - HTTP/2 benchmarking tool - HOW-TO","Python API Reference","nghttp2ver.h","nghttpx(1)","API Reference","nghttp2 - HTTP/2 C Library","nghttpd(1)","Tutorial: HTTP/2 client","nghttp2.h","nghttpx - HTTP/2 proxy - HOW-TO","h2load(1)","Tutorial: HTTP/2 server","Building Android binary"],objects:{"":{"-D":[9,0,1,"cmdoption-nghttpd-D"],"-M":[2,0,1,"cmdoption-nghttp-M"],"-L":[6,0,1,"cmdoption-nghttpx-L"],"-O":[2,0,1,"cmdoption-nghttp-O"],"-H":[2,0,1,"cmdoption-nghttp-H"],nghttp2_frame_hd:[7,3,1,"c.nghttp2_frame_hd"],nghttp2_on_frame_recv_callback:[7,3,1,"c.nghttp2_on_frame_recv_callback"],"-W":[2,0,1,"cmdoption-nghttp-W"],"-V":[9,0,1,"cmdoption-nghttpd-V"],nghttp2_priority_spec_init:[7,4,1,"c.nghttp2_priority_spec_init"],"-e":[9,0,1,"cmdoption-nghttpd-e"],"-d":[2,0,1,"cmdoption-nghttp-d"],"-f":[6,0,1,"cmdoption-nghttpx-f"],"-a":[2,0,1,"cmdoption-nghttp-a"],"-c":[13,0,1,"cmdoption-h2load-c"],"-b":[6,0,1,"cmdoption-nghttpx-b"],"-m":[2,0,1,"cmdoption-nghttp-m"],"-o":[6,0,1,"cmdoption-nghttpx-o"],"-n":[13,0,1,"cmdoption-h2load-n"],"-h":[6,0,1,"cmdoption-nghttpx-h"],"-k":[6,0,1,"cmdoption-nghttpx-k"],"-u":[2,0,1,"cmdoption-nghttp-u"],"-t":[13,0,1,"cmdoption-h2load-t"],"-w":[2,0,1,"cmdoption-nghttp-w"],"-v":[2,0,1,"cmdoption-nghttp-v"],"-p":[13,0,1,"cmdoption-h2load-p"],"-s":[6,0,1,"cmdoption-nghttpx-s"],nghttp2_data_flag:[7,3,1,"c.nghttp2_data_flag"],NGHTTP2_ERR_INVALID_HEADER_BLOCK:[7,1,1,"c.NGHTTP2_ERR_INVALID_HEADER_BLOCK"],nghttp2_session_callbacks_set_send_callback:[7,4,1,"c.nghttp2_session_callbacks_set_send_callback"],"--connection-window-bits":[2,0,1,"cmdoption-nghttp--connection-window-bits"],nghttp2_submit_window_update:[7,4,1,"c.nghttp2_submit_window_update"],nghttp2_option:[7,3,1,"c.nghttp2_option"],NGHTTP2_HD_INFLATE_FINAL:[7,1,1,"c.NGHTTP2_HD_INFLATE_FINAL"],nghttp2_hd_inflate_new:[7,4,1,"c.nghttp2_hd_inflate_new"],NGHTTP2_FLAG_ACK:[7,1,1,"c.NGHTTP2_FLAG_ACK"],nghttp2_headers_category:[7,3,1,"c.nghttp2_headers_category"],NGHTTP2_ERR_WOULDBLOCK:[7,1,1,"c.NGHTTP2_ERR_WOULDBLOCK"],NGHTTP2_ERR_START_STREAM_NOT_ALLOWED:[7,1,1,"c.NGHTTP2_ERR_START_STREAM_NOT_ALLOWED"],"--frontend-http2-read-timeout":[6,0,1,"cmdoption-nghttpx--frontend-http2-read-timeout"],NGHTTP2_ERR_FATAL:[7,1,1,"c.NGHTTP2_ERR_FATAL"],"--frontend-http2-connection-window-bits":[6,0,1,"cmdoption-nghttpx--frontend-http2-connection-window-bits"],"--backlog":[6,0,1,"cmdoption-nghttpx--backlog"],"--client":[6,0,1,"cmdoption-nghttpx--client"],NGHTTP2_SETTINGS_TIMEOUT:[7,1,1,"c.NGHTTP2_SETTINGS_TIMEOUT"],nghttp2_hd_deflate_new:[7,4,1,"c.nghttp2_hd_deflate_new"],nghttp2_version:[7,4,1,"c.nghttp2_version"],nghttp2_session_resume_data:[7,4,1,"c.nghttp2_session_resume_data"],"--timeout":[2,0,1,"cmdoption-nghttp--timeout"],nghttp2_hd_inflate_del:[7,4,1,"c.nghttp2_hd_inflate_del"],nghttp2_rst_stream:[7,3,1,"c.nghttp2_rst_stream"],"--client-proxy":[6,0,1,"cmdoption-nghttpx--client-proxy"],NGHTTP2_HCAT_REQUEST:[7,1,1,"c.NGHTTP2_HCAT_REQUEST"],"--http2-max-concurrent-streams":[6,0,1,"cmdoption-nghttpx--http2-max-concurrent-streams"],NGHTTP2_RST_STREAM:[7,1,1,"c.NGHTTP2_RST_STREAM"],nghttp2_headers:[7,3,1,"c.nghttp2_headers"],NGHTTP2_VERSION_NUM:[7,1,1,"c.NGHTTP2_VERSION_NUM"],nghttp2_frame:[7,3,1,"c.nghttp2_frame"],nghttp2_submit_push_promise:[7,4,1,"c.nghttp2_submit_push_promise"],"--insecure":[6,0,1,"cmdoption-nghttpx--insecure"],nghttp2_session_mem_recv:[7,4,1,"c.nghttp2_session_mem_recv"],NGHTTP2_REFUSED_STREAM:[7,1,1,"c.NGHTTP2_REFUSED_STREAM"],NGHTTP2_ENHANCE_YOUR_CALM:[7,1,1,"c.NGHTTP2_ENHANCE_YOUR_CALM"],NGHTTP2_HCAT_PUSH_RESPONSE:[7,1,1,"c.NGHTTP2_HCAT_PUSH_RESPONSE"],nghttp2_session_callbacks_set_on_begin_frame_callback:[7,4,1,"c.nghttp2_session_callbacks_set_on_begin_frame_callback"],nghttp2_nv:[7,3,1,"c.nghttp2_nv"],nghttp2_on_invalid_frame_recv_callback:[7,3,1,"c.nghttp2_on_invalid_frame_recv_callback"],nghttp2_option_del:[7,4,1,"c.nghttp2_option_del"],"--peer-max-concurrent-streams":[2,0,1,"cmdoption-nghttp--peer-max-concurrent-streams"],"--no-location-rewrite":[6,0,1,"cmdoption-nghttpx--no-location-rewrite"],"--verbose":[9,0,1,"cmdoption-nghttpd--verbose"],nghttp2_check_header_value:[7,4,1,"c.nghttp2_check_header_value"],"--frontend-http2-window-bits":[6,0,1,"cmdoption-nghttpx--frontend-http2-window-bits"],NGHTTP2_PROTO_VERSION_ID:[7,1,1,"c.NGHTTP2_PROTO_VERSION_ID"],nghttp2_settings_id:[7,3,1,"c.nghttp2_settings_id"],nghttp2_window_update:[7,3,1,"c.nghttp2_window_update"],NGHTTP2_FLAG_NONE:[7,1,1,"c.NGHTTP2_FLAG_NONE"],nghttp2_session_terminate_session:[7,4,1,"c.nghttp2_session_terminate_session"],nghttp2_submit_altsvc:[7,4,1,"c.nghttp2_submit_altsvc"],"--no-tls-proto":[13,0,1,"cmdoption-h2load--no-tls-proto"],nghttp2_session_want_read:[7,4,1,"c.nghttp2_session_want_read"],nghttp2_submit_data:[7,4,1,"c.nghttp2_submit_data"],"--threads":[13,0,1,"cmdoption-h2load--threads"],nghttp2_data_provider:[7,3,1,"c.nghttp2_data_provider"],nghttp2_session_get_effective_local_window_size:[7,4,1,"c.nghttp2_session_get_effective_local_window_size"],NGHTTP2_INITIAL_WINDOW_SIZE:[7,1,1,"c.NGHTTP2_INITIAL_WINDOW_SIZE"],NGHTTP2_HCAT_RESPONSE:[7,1,1,"c.NGHTTP2_HCAT_RESPONSE"],nghttp2_session:[7,3,1,"c.nghttp2_session"],"--cert":[2,0,1,"cmdoption-nghttp--cert"],"--accesslog-file":[6,0,1,"cmdoption-nghttpx--accesslog-file"],NGHTTP2_PRIORITY:[7,1,1,"c.NGHTTP2_PRIORITY"],"--header-table-size":[2,0,1,"cmdoption-nghttp--header-table-size"],CERT:[9,0,1,"cmdoption-nghttpd-arg-CERT"],"--verify-client":[9,0,1,"cmdoption-nghttpd--verify-client"],"--worker-read-rate":[6,0,1,"cmdoption-nghttpx--worker-read-rate"],"--frontend-no-tls":[6,0,1,"cmdoption-nghttpx--frontend-no-tls"],"--frontend-http2-dump-response-header":[6,0,1,"cmdoption-nghttpx--frontend-http2-dump-response-header"],nghttp2_settings_entry:[7,3,1,"c.nghttp2_settings_entry"],"--stream-read-timeout":[6,0,1,"cmdoption-nghttpx--stream-read-timeout"],NGHTTP2_FLAG_PADDED:[7,1,1,"c.NGHTTP2_FLAG_PADDED"],NGHTTP2_CLIENT_CONNECTION_HEADER_LEN:[7,1,1,"c.NGHTTP2_CLIENT_CONNECTION_HEADER_LEN"],"--backend-http2-connection-window-bits":[6,0,1,"cmdoption-nghttpx--backend-http2-connection-window-bits"],nghttp2_hd_inflate_hd:[7,4,1,"c.nghttp2_hd_inflate_hd"],nghttp2_priority_spec:[7,3,1,"c.nghttp2_priority_spec"],nghttp2_frame_type:[7,3,1,"c.nghttp2_frame_type"],NGHTTP2_ERR_INVALID_STREAM_ID:[7,1,1,"c.NGHTTP2_ERR_INVALID_STREAM_ID"],nghttp2_session_send:[7,4,1,"c.nghttp2_session_send"],nghttp2_session_callbacks:[7,3,1,"c.nghttp2_session_callbacks"],NGHTTP2_ERR_PROTO:[7,1,1,"c.NGHTTP2_ERR_PROTO"],nghttp2_hd_deflate_del:[7,4,1,"c.nghttp2_hd_deflate_del"],URI:[2,0,1,"cmdoption-nghttp-arg-URI"],nghttp2_session_callbacks_set_on_invalid_frame_recv_callback:[7,4,1,"c.nghttp2_session_callbacks_set_on_invalid_frame_recv_callback"],NGHTTP2_DATA:[7,1,1,"c.NGHTTP2_DATA"],nghttp2_on_header_callback:[7,3,1,"c.nghttp2_on_header_callback"],nghttp2_goaway:[7,3,1,"c.nghttp2_goaway"],nghttp2_session_mem_send:[7,4,1,"c.nghttp2_session_mem_send"],nghttp2_error_code:[7,3,1,"c.nghttp2_error_code"],nghttp2_session_callbacks_set_select_padding_callback:[7,4,1,"c.nghttp2_session_callbacks_set_select_padding_callback"],"--cacert":[6,0,1,"cmdoption-nghttpx--cacert"],nghttp2_hd_inflate_change_table_size:[7,4,1,"c.nghttp2_hd_inflate_change_table_size"],"--stat":[2,0,1,"cmdoption-nghttp--stat"],nghttp2_ext_frame_type:[7,3,1,"c.nghttp2_ext_frame_type"],nghttp2_hd_inflate_flag:[7,3,1,"c.nghttp2_hd_inflate_flag"],nghttp2_select_padding_callback:[7,3,1,"c.nghttp2_select_padding_callback"],"--daemon":[9,0,1,"cmdoption-nghttpd--daemon"],nghttp2_session_server_new2:[7,4,1,"c.nghttp2_session_server_new2"],NGHTTP2_PROTO_VERSION_ID_LEN:[7,1,1,"c.NGHTTP2_PROTO_VERSION_ID_LEN"],"--requests":[13,0,1,"cmdoption-h2load--requests"],"--backend-write-timeout":[6,0,1,"cmdoption-nghttpx--backend-write-timeout"],NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE:[7,1,1,"c.NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE"],NGHTTP2_CONTINUATION:[7,1,1,"c.NGHTTP2_CONTINUATION"],"--http2-no-cookie-crumbling":[6,0,1,"cmdoption-nghttpx--http2-no-cookie-crumbling"],NGHTTP2_CLIENT_CONNECTION_PREFACE_LEN:[7,1,1,"c.NGHTTP2_CLIENT_CONNECTION_PREFACE_LEN"],nghttp2_session_callbacks_set_on_frame_recv_callback:[7,4,1,"c.nghttp2_session_callbacks_set_on_frame_recv_callback"],nghttp2_flag:[7,3,1,"c.nghttp2_flag"],"--worker-read-burst":[6,0,1,"cmdoption-nghttpx--worker-read-burst"],NGHTTP2_DEFAULT_WEIGHT:[7,1,1,"c.NGHTTP2_DEFAULT_WEIGHT"],nghttp2_session_consume:[7,4,1,"c.nghttp2_session_consume"],"--errorlog-file":[6,0,1,"cmdoption-nghttpx--errorlog-file"],NGHTTP2_SETTINGS_MAX_FRAME_SIZE:[7,1,1,"c.NGHTTP2_SETTINGS_MAX_FRAME_SIZE"],NGHTTP2_ERR_EOF:[7,1,1,"c.NGHTTP2_ERR_EOF"],NGHTTP2_SETTINGS:[7,1,1,"c.NGHTTP2_SETTINGS"],"--htdocs":[9,0,1,"cmdoption-nghttpd--htdocs"],nghttp2_data_source:[7,3,1,"c.nghttp2_data_source"],nghttp2_on_frame_send_callback:[7,3,1,"c.nghttp2_on_frame_send_callback"],nghttp2_session_get_remote_settings:[7,4,1,"c.nghttp2_session_get_remote_settings"],nghttp2_session_get_stream_user_data:[7,4,1,"c.nghttp2_session_get_stream_user_data"],NGHTTP2_FLAG_PRIORITY:[7,1,1,"c.NGHTTP2_FLAG_PRIORITY"],"--worker-frontend-connections":[6,0,1,"cmdoption-nghttpx--worker-frontend-connections"],NGHTTP2_CLEARTEXT_PROTO_VERSION_ID_LEN:[7,1,1,"c.NGHTTP2_CLEARTEXT_PROTO_VERSION_ID_LEN"],NGHTTP2_FLOW_CONTROL_ERROR:[7,1,1,"c.NGHTTP2_FLOW_CONTROL_ERROR"],"--early-response":[9,0,1,"cmdoption-nghttpd--early-response"],"--backend-tls-sni-field":[6,0,1,"cmdoption-nghttpx--backend-tls-sni-field"],nghttp2_hd_deflater:[7,3,1,"c.nghttp2_hd_deflater"],NGHTTP2_ERR_GOAWAY_ALREADY_SENT:[7,1,1,"c.NGHTTP2_ERR_GOAWAY_ALREADY_SENT"],"--help":[6,0,1,"cmdoption-nghttpx--help"],"--frontend-frame-debug":[6,0,1,"cmdoption-nghttpx--frontend-frame-debug"],nghttp2_error:[7,3,1,"c.nghttp2_error"],NGHTTP2_CLIENT_CONNECTION_HEADER:[7,1,1,"c.NGHTTP2_CLIENT_CONNECTION_HEADER"],"--get-assets":[2,0,1,"cmdoption-nghttp--get-assets"],NGHTTP2_DATA_FLAG_NONE:[7,1,1,"c.NGHTTP2_DATA_FLAG_NONE"],nghttp2_session_recv:[7,4,1,"c.nghttp2_session_recv"],nghttp2_session_want_write:[7,4,1,"c.nghttp2_session_want_write"],NGHTTP2_VERSION_AGE:[7,1,1,"c.NGHTTP2_VERSION_AGE"],nghttp2_session_get_stream_effective_recv_data_length:[7,4,1,"c.nghttp2_session_get_stream_effective_recv_data_length"],nghttp2_session_callbacks_set_before_frame_send_callback:[7,4,1,"c.nghttp2_session_callbacks_set_before_frame_send_callback"],NGHTTP2_CONNECT_ERROR:[7,1,1,"c.NGHTTP2_CONNECT_ERROR"],NGHTTP2_ERR_DATA_EXIST:[7,1,1,"c.NGHTTP2_ERR_DATA_EXIST"],nghttp2_session_get_stream_effective_local_window_size:[7,4,1,"c.nghttp2_session_get_stream_effective_local_window_size"],nghttp2_before_frame_send_callback:[7,3,1,"c.nghttp2_before_frame_send_callback"],"--color":[9,0,1,"cmdoption-nghttpd--color"],NGHTTP2_FRAME_SIZE_ERROR:[7,1,1,"c.NGHTTP2_FRAME_SIZE_ERROR"],NGHTTP2_ERR_STREAM_SHUT_WR:[7,1,1,"c.NGHTTP2_ERR_STREAM_SHUT_WR"],"--client-cert-file":[6,0,1,"cmdoption-nghttpx--client-cert-file"],"--null-out":[2,0,1,"cmdoption-nghttp--null-out"],nghttp2_pack_settings_payload:[7,4,1,"c.nghttp2_pack_settings_payload"],"--backend-connections-per-frontend":[6,0,1,"cmdoption-nghttpx--backend-connections-per-frontend"],NGHTTP2_ERR_INVALID_STATE:[7,1,1,"c.NGHTTP2_ERR_INVALID_STATE"],NGHTTP2_SETTINGS_HEADER_TABLE_SIZE:[7,1,1,"c.NGHTTP2_SETTINGS_HEADER_TABLE_SIZE"],"--verify-client-cacert":[6,0,1,"cmdoption-nghttpx--verify-client-cacert"],NGHTTP2_EXT_ALTSVC:[7,1,1,"c.NGHTTP2_EXT_ALTSVC"],nghttp2_submit_rst_stream:[7,4,1,"c.nghttp2_submit_rst_stream"],"--multiply":[2,0,1,"cmdoption-nghttp--multiply"],NGHTTP2_ERR_INVALID_FRAME:[7,1,1,"c.NGHTTP2_ERR_INVALID_FRAME"],"--no-tls":[9,0,1,"cmdoption-nghttpd--no-tls"],"--worker-write-burst":[6,0,1,"cmdoption-nghttpx--worker-write-burst"],NGHTTP2_ERR_TOO_MANY_INFLIGHT_SETTINGS:[7,1,1,"c.NGHTTP2_ERR_TOO_MANY_INFLIGHT_SETTINGS"],nghttp2_session_client_new2:[7,4,1,"c.nghttp2_session_client_new2"],nghttp2_session_terminate_session2:[7,4,1,"c.nghttp2_session_terminate_session2"],nghttp2_data:[7,3,1,"c.nghttp2_data"],"--max-concurrent-streams":[13,0,1,"cmdoption-h2load--max-concurrent-streams"],NGHTTP2_MAX_WINDOW_SIZE:[7,1,1,"c.NGHTTP2_MAX_WINDOW_SIZE"],nghttp2_strerror:[7,4,1,"c.nghttp2_strerror"],"--accesslog-syslog":[6,0,1,"cmdoption-nghttpx--accesslog-syslog"],nghttp2_submit_goaway:[7,4,1,"c.nghttp2_submit_goaway"],NGHTTP2_ERR_PAUSE:[7,1,1,"c.NGHTTP2_ERR_PAUSE"],nghttp2_hd_deflate_change_table_size:[7,4,1,"c.nghttp2_hd_deflate_change_table_size"],"--backend-keep-alive-timeout":[6,0,1,"cmdoption-nghttpx--backend-keep-alive-timeout"],PORT:[9,0,1,"cmdoption-nghttpd-arg-PORT"],nghttp2_push_promise:[7,3,1,"c.nghttp2_push_promise"],NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE:[7,1,1,"c.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE"],NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS:[7,1,1,"c.NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS"],nghttp2_on_data_chunk_recv_callback:[7,3,1,"c.nghttp2_on_data_chunk_recv_callback"],nghttp2_session_callbacks_set_on_data_chunk_recv_callback:[7,4,1,"c.nghttp2_session_callbacks_set_on_data_chunk_recv_callback"],nghttp2_session_upgrade:[7,4,1,"c.nghttp2_session_upgrade"],"--data":[2,0,1,"cmdoption-nghttp--data"],NGHTTP2_ERR_INVALID_ARGUMENT:[7,1,1,"c.NGHTTP2_ERR_INVALID_ARGUMENT"],NGHTTP2_ERR_FRAME_SIZE_ERROR:[7,1,1,"c.NGHTTP2_ERR_FRAME_SIZE_ERROR"],nghttp2_session_del:[7,4,1,"c.nghttp2_session_del"],NGHTTP2_HEADERS:[7,1,1,"c.NGHTTP2_HEADERS"],"--dh-param-file":[9,0,1,"cmdoption-nghttpd--dh-param-file"],"--errorlog-syslog":[6,0,1,"cmdoption-nghttpx--errorlog-syslog"],nghttp2_hd_deflate_hd:[7,4,1,"c.nghttp2_hd_deflate_hd"],nghttp2_submit_response:[7,4,1,"c.nghttp2_submit_response"],NGHTTP2_FLAG_END_HEADERS:[7,1,1,"c.NGHTTP2_FLAG_END_HEADERS"],nghttp2_option_set_peer_max_concurrent_streams:[7,4,1,"c.nghttp2_option_set_peer_max_concurrent_streams"],"--backend-ipv4":[6,0,1,"cmdoption-nghttpx--backend-ipv4"],"--backend-ipv6":[6,0,1,"cmdoption-nghttpx--backend-ipv6"],"--backend":[6,0,1,"cmdoption-nghttpx--backend"],NGHTTP2_CANCEL:[7,1,1,"c.NGHTTP2_CANCEL"],"--log-level":[6,0,1,"cmdoption-nghttpx--log-level"],nghttp2_session_client_new:[7,4,1,"c.nghttp2_session_client_new"],"--frontend-http2-dump-request-header":[6,0,1,"cmdoption-nghttpx--frontend-http2-dump-request-header"],NGHTTP2_VERSION:[7,1,1,"c.NGHTTP2_VERSION"],"--push":[9,0,1,"cmdoption-nghttpd--push"],nghttp2_submit_headers:[7,4,1,"c.nghttp2_submit_headers"],nghttp2_recv_callback:[7,3,1,"c.nghttp2_recv_callback"],NGHTTP2_DEFAULT_HEADER_TABLE_SIZE:[7,1,1,"c.NGHTTP2_DEFAULT_HEADER_TABLE_SIZE"],PRIVATE_KEY:[9,0,1,"cmdoption-nghttpd-arg-PRIVATE_KEY"],"--syslog-facility":[6,0,1,"cmdoption-nghttpx--syslog-facility"],NGHTTP2_ERR_CALLBACK_FAILURE:[7,1,1,"c.NGHTTP2_ERR_CALLBACK_FAILURE"],"--workers":[9,0,1,"cmdoption-nghttpd--workers"],NGHTTP2_ERR_STREAM_CLOSING:[7,1,1,"c.NGHTTP2_ERR_STREAM_CLOSING"],"--remote-name":[2,0,1,"cmdoption-nghttp--remote-name"],NGHTTP2_DATA_FLAG_EOF:[7,1,1,"c.NGHTTP2_DATA_FLAG_EOF"],NGHTTP2_PROTOCOL_ERROR:[7,1,1,"c.NGHTTP2_PROTOCOL_ERROR"],nghttp2_on_begin_headers_callback:[7,3,1,"c.nghttp2_on_begin_headers_callback"],"--user":[6,0,1,"cmdoption-nghttpx--user"],NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS:[7,1,1,"c.NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS"],"--frontend-read-timeout":[6,0,1,"cmdoption-nghttpx--frontend-read-timeout"],nghttp2_option_set_no_auto_window_update:[7,4,1,"c.nghttp2_option_set_no_auto_window_update"],nghttp2_submit_settings:[7,4,1,"c.nghttp2_submit_settings"],"--error-gzip":[9,0,1,"cmdoption-nghttpd--error-gzip"],nghttp2_session_callbacks_set_on_frame_send_callback:[7,4,1,"c.nghttp2_session_callbacks_set_on_frame_send_callback"],"--backend-http2-window-bits":[6,0,1,"cmdoption-nghttpx--backend-http2-window-bits"],NGHTTP2_MAX_WEIGHT:[7,1,1,"c.NGHTTP2_MAX_WEIGHT"],"--padding":[2,0,1,"cmdoption-nghttp--padding"],nghttp2_session_callbacks_set_on_header_callback:[7,4,1,"c.nghttp2_session_callbacks_set_on_header_callback"],nghttp2_session_get_stream_remote_window_size:[7,4,1,"c.nghttp2_session_get_stream_remote_window_size"],NGHTTP2_HD_INFLATE_NONE:[7,1,1,"c.NGHTTP2_HD_INFLATE_NONE"],nghttp2_on_stream_close_callback:[7,3,1,"c.nghttp2_on_stream_close_callback"],NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE:[7,1,1,"c.NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE"],NGHTTP2_PUSH_PROMISE:[7,1,1,"c.NGHTTP2_PUSH_PROMISE"],NGHTTP2_ERR_PUSH_DISABLED:[7,1,1,"c.NGHTTP2_ERR_PUSH_DISABLED"],"--version":[6,0,1,"cmdoption-nghttpx--version"],nghttp2_submit_priority:[7,4,1,"c.nghttp2_submit_priority"],NGHTTP2_MIN_WEIGHT:[7,1,1,"c.NGHTTP2_MIN_WEIGHT"],"--http2-proxy":[6,0,1,"cmdoption-nghttpx--http2-proxy"],"--client-private-key-file":[6,0,1,"cmdoption-nghttpx--client-private-key-file"],nghttp2_extension:[7,3,1,"c.nghttp2_extension"],nghttp2_session_callbacks_del:[7,4,1,"c.nghttp2_session_callbacks_del"],NGHTTP2_INTERNAL_ERROR:[7,1,1,"c.NGHTTP2_INTERNAL_ERROR"],nghttp2_hd_inflate_end_headers:[7,4,1,"c.nghttp2_hd_inflate_end_headers"],nghttp2_nv_flag:[7,3,1,"c.nghttp2_nv_flag"],NGHTTP2_ERR_HEADER_COMP:[7,1,1,"c.NGHTTP2_ERR_HEADER_COMP"],"--clients":[13,0,1,"cmdoption-h2load--clients"],nghttp2_session_callbacks_set_on_stream_close_callback:[7,4,1,"c.nghttp2_session_callbacks_set_on_stream_close_callback"],nghttp2_ping:[7,3,1,"c.nghttp2_ping"],"--conf":[6,0,1,"cmdoption-nghttpx--conf"],nghttp2_on_begin_frame_callback:[7,3,1,"c.nghttp2_on_begin_frame_callback"],nghttp2_select_next_protocol:[7,4,1,"c.nghttp2_select_next_protocol"],nghttp2_ext_altsvc:[7,3,1,"c.nghttp2_ext_altsvc"],"--npn-list":[6,0,1,"cmdoption-nghttpx--npn-list"],NGHTTP2_ERR_UNSUPPORTED_VERSION:[7,1,1,"c.NGHTTP2_ERR_UNSUPPORTED_VERSION"],NGHTTP2_SETTINGS_ENABLE_PUSH:[7,1,1,"c.NGHTTP2_SETTINGS_ENABLE_PUSH"],NGHTTP2_ERR_INVALID_STREAM_STATE:[7,1,1,"c.NGHTTP2_ERR_INVALID_STREAM_STATE"],"--continuation":[2,0,1,"cmdoption-nghttp--continuation"],NGHTTP2_STREAM_CLOSED:[7,1,1,"c.NGHTTP2_STREAM_CLOSED"],NGHTTP2_NV_FLAG_NO_INDEX:[7,1,1,"c.NGHTTP2_NV_FLAG_NO_INDEX"],nghttp2_session_callbacks_set_on_begin_headers_callback:[7,4,1,"c.nghttp2_session_callbacks_set_on_begin_headers_callback"],NGHTTP2_ERR_FLOW_CONTROL:[7,1,1,"c.NGHTTP2_ERR_FLOW_CONTROL"],NGHTTP2_INITIAL_CONNECTION_WINDOW_SIZE:[7,1,1,"c.NGHTTP2_INITIAL_CONNECTION_WINDOW_SIZE"],NGHTTP2_ERR_NOMEM:[7,1,1,"c.NGHTTP2_ERR_NOMEM"],"--ciphers":[6,0,1,"cmdoption-nghttpx--ciphers"],NGHTTP2_NO_ERROR:[7,1,1,"c.NGHTTP2_NO_ERROR"],nghttp2_session_get_stream_local_close:[7,4,1,"c.nghttp2_session_get_stream_local_close"],nghttp2_session_get_effective_recv_data_length:[7,4,1,"c.nghttp2_session_get_effective_recv_data_length"],NGHTTP2_ERR_DEFERRED:[7,1,1,"c.NGHTTP2_ERR_DEFERRED"],nghttp2_session_get_outbound_queue_size:[7,4,1,"c.nghttp2_session_get_outbound_queue_size"],nghttp2_data_source_read_callback:[7,3,1,"c.nghttp2_data_source_read_callback"],nghttp2_priority_spec_check_default:[7,4,1,"c.nghttp2_priority_spec_check_default"],"--no-via":[6,0,1,"cmdoption-nghttpx--no-via"],nghttp2_session_callbacks_set_on_frame_not_send_callback:[7,4,1,"c.nghttp2_session_callbacks_set_on_frame_not_send_callback"],nghttp2_session_callbacks_set_recv_callback:[7,4,1,"c.nghttp2_session_callbacks_set_recv_callback"],nghttp2_session_server_new:[7,4,1,"c.nghttp2_session_server_new"],NGHTTP2_ERR_BUFFER_ERROR:[7,1,1,"c.NGHTTP2_ERR_BUFFER_ERROR"],"--no-content-length":[2,0,1,"cmdoption-nghttp--no-content-length"],"--http2-bridge":[6,0,1,"cmdoption-nghttpx--http2-bridge"],NGHTTP2_HD_INFLATE_EMIT:[7,1,1,"c.NGHTTP2_HD_INFLATE_EMIT"],NGHTTP2_FLAG_END_STREAM:[7,1,1,"c.NGHTTP2_FLAG_END_STREAM"],"--frontend-write-timeout":[6,0,1,"cmdoption-nghttpx--frontend-write-timeout"],"--tls-proto-list":[6,0,1,"cmdoption-nghttpx--tls-proto-list"],NGHTTP2_HCAT_HEADERS:[7,1,1,"c.NGHTTP2_HCAT_HEADERS"],NGHTTP2_ERR_DEFERRED_DATA_EXIST:[7,1,1,"c.NGHTTP2_ERR_DEFERRED_DATA_EXIST"],nghttp2_send_callback:[7,3,1,"c.nghttp2_send_callback"],NGHTTP2_COMPRESSION_ERROR:[7,1,1,"c.NGHTTP2_COMPRESSION_ERROR"],NGHTTP2_CLEARTEXT_PROTO_VERSION_ID:[7,1,1,"c.NGHTTP2_CLEARTEXT_PROTO_VERSION_ID"],nghttp2_priority_spec_default_init:[7,4,1,"c.nghttp2_priority_spec_default_init"],nghttp2:[4,5,0,"-"],nghttp2_submit_ping:[7,4,1,"c.nghttp2_submit_ping"],NGHTTP2_CLIENT_CONNECTION_PREFACE:[7,1,1,"c.NGHTTP2_CLIENT_CONNECTION_PREFACE"],NGHTTP2_ERR_STREAM_CLOSED:[7,1,1,"c.NGHTTP2_ERR_STREAM_CLOSED"],nghttp2_hd_deflate_bound:[7,4,1,"c.nghttp2_hd_deflate_bound"],nghttp2_session_set_stream_user_data:[7,4,1,"c.nghttp2_session_set_stream_user_data"],NGHTTP2_INADEQUATE_SECURITY:[7,1,1,"c.NGHTTP2_INADEQUATE_SECURITY"],nghttp2_hd_inflater:[7,3,1,"c.nghttp2_hd_inflater"],nghttp2_check_header_name:[7,4,1,"c.nghttp2_check_header_name"],nghttp2_info:[7,3,1,"c.nghttp2_info"],"--weight":[2,0,1,"cmdoption-nghttp--weight"],"--worker-write-rate":[6,0,1,"cmdoption-nghttpx--worker-write-rate"],"--key":[2,0,1,"cmdoption-nghttp--key"],"--subcert":[6,0,1,"cmdoption-nghttpx--subcert"],"--window-bits":[13,0,1,"cmdoption-h2load--window-bits"],NGHTTP2_ERR_INSUFF_BUFSIZE:[7,1,1,"c.NGHTTP2_ERR_INSUFF_BUFSIZE"],"--header":[2,0,1,"cmdoption-nghttp--header"],nghttp2_settings:[7,3,1,"c.nghttp2_settings"],"--pid-file":[6,0,1,"cmdoption-nghttpx--pid-file"],nghttp2_on_frame_not_send_callback:[7,3,1,"c.nghttp2_on_frame_not_send_callback"],"--private-key-passwd-file":[6,0,1,"cmdoption-nghttpx--private-key-passwd-file"],"--altsvc":[6,0,1,"cmdoption-nghttpx--altsvc"],"--add-x-forwarded-for":[6,0,1,"cmdoption-nghttpx--add-x-forwarded-for"],nghttp2_session_callbacks_new:[7,4,1,"c.nghttp2_session_callbacks_new"],NGHTTP2_NV_FLAG_NONE:[7,1,1,"c.NGHTTP2_NV_FLAG_NONE"],nghttp2_is_fatal:[7,4,1,"c.nghttp2_is_fatal"],NGHTTP2_PING:[7,1,1,"c.NGHTTP2_PING"],nghttp2_priority:[7,3,1,"c.nghttp2_priority"],"--backend-http-proxy-uri":[6,0,1,"cmdoption-nghttpx--backend-http-proxy-uri"],"--stream-write-timeout":[6,0,1,"cmdoption-nghttpx--stream-write-timeout"],NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE:[7,1,1,"c.NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE"],nghttp2_option_new:[7,4,1,"c.nghttp2_option_new"],NGHTTP2_WINDOW_UPDATE:[7,1,1,"c.NGHTTP2_WINDOW_UPDATE"],"--backend-read-timeout":[6,0,1,"cmdoption-nghttpx--backend-read-timeout"],NGHTTP2_GOAWAY:[7,1,1,"c.NGHTTP2_GOAWAY"],"--frontend":[6,0,1,"cmdoption-nghttpx--frontend"],"--upgrade":[2,0,1,"cmdoption-nghttp--upgrade"],"--backend-no-tls":[6,0,1,"cmdoption-nghttpx--backend-no-tls"],nghttp2_submit_request:[7,4,1,"c.nghttp2_submit_request"],nghttp2_session_get_stream_remote_close:[7,4,1,"c.nghttp2_session_get_stream_remote_close"],"--add-response-header":[6,0,1,"cmdoption-nghttpx--add-response-header"],nghttp2_nv_compare_name:[7,4,1,"c.nghttp2_nv_compare_name"]},nghttp2_frame:{push_promise:[7,2,1,"c.nghttp2_frame.push_promise"],settings:[7,2,1,"c.nghttp2_frame.settings"],ping:[7,2,1,"c.nghttp2_frame.ping"],rst_stream:[7,2,1,"c.nghttp2_frame.rst_stream"],ext:[7,2,1,"c.nghttp2_frame.ext"],priority:[7,2,1,"c.nghttp2_frame.priority"],headers:[7,2,1,"c.nghttp2_frame.headers"],goaway:[7,2,1,"c.nghttp2_frame.goaway"],window_update:[7,2,1,"c.nghttp2_frame.window_update"],data:[7,2,1,"c.nghttp2_frame.data"],hd:[7,2,1,"c.nghttp2_frame.hd"]},nghttp2_settings_entry:{settings_id:[7,2,1,"c.nghttp2_settings_entry.settings_id"],value:[7,2,1,"c.nghttp2_settings_entry.value"]},nghttp2_window_update:{hd:[7,2,1,"c.nghttp2_window_update.hd"],window_size_increment:[7,2,1,"c.nghttp2_window_update.window_size_increment"]},nghttp2_frame_hd:{stream_id:[7,2,1,"c.nghttp2_frame_hd.stream_id"],length:[7,2,1,"c.nghttp2_frame_hd.length"],flags:[7,2,1,"c.nghttp2_frame_hd.flags"],type:[7,2,1,"c.nghttp2_frame_hd.type"]},nghttp2_push_promise:{padlen:[7,2,1,"c.nghttp2_push_promise.padlen"],nvlen:[7,2,1,"c.nghttp2_push_promise.nvlen"],promised_stream_id:[7,2,1,"c.nghttp2_push_promise.promised_stream_id"],hd:[7,2,1,"c.nghttp2_push_promise.hd"],nva:[7,2,1,"c.nghttp2_push_promise.nva"]},nghttp2_ping:{hd:[7,2,1,"c.nghttp2_ping.hd"]},nghttp2_priority:{pri_spec:[7,2,1,"c.nghttp2_priority.pri_spec"],hd:[7,2,1,"c.nghttp2_priority.hd"]},nghttp2_priority_spec:{stream_id:[7,2,1,"c.nghttp2_priority_spec.stream_id"],weight:[7,2,1,"c.nghttp2_priority_spec.weight"],exclusive:[7,2,1,"c.nghttp2_priority_spec.exclusive"]},nghttp2:{HTTP2Server:[4,8,1,""],HDDeflater:[4,8,1,""],DEFLATE_MAX_HEADER_TABLE_SIZE:[4,9,1,""],DEFAULT_HEADER_TABLE_SIZE:[4,9,1,""],HDInflater:[4,8,1,""],print_hd_table:[4,10,1,""],BaseRequestHandler:[4,8,1,""]},nghttp2_nv:{valuelen:[7,2,1,"c.nghttp2_nv.valuelen"],namelen:[7,2,1,"c.nghttp2_nv.namelen"],flags:[7,2,1,"c.nghttp2_nv.flags"],name:[7,2,1,"c.nghttp2_nv.name"],value:[7,2,1,"c.nghttp2_nv.value"]},nghttp2_ext_altsvc:{origin:[7,2,1,"c.nghttp2_ext_altsvc.origin"],max_age:[7,2,1,"c.nghttp2_ext_altsvc.max_age"],protocol_id:[7,2,1,"c.nghttp2_ext_altsvc.protocol_id"],origin_len:[7,2,1,"c.nghttp2_ext_altsvc.origin_len"],host:[7,2,1,"c.nghttp2_ext_altsvc.host"],protocol_id_len:[7,2,1,"c.nghttp2_ext_altsvc.protocol_id_len"],host_len:[7,2,1,"c.nghttp2_ext_altsvc.host_len"],port:[7,2,1,"c.nghttp2_ext_altsvc.port"]},nghttp2_data_provider:{source:[7,2,1,"c.nghttp2_data_provider.source"],read_callback:[7,2,1,"c.nghttp2_data_provider.read_callback"]},nghttp2_rst_stream:{error_code:[7,2,1,"c.nghttp2_rst_stream.error_code"],hd:[7,2,1,"c.nghttp2_rst_stream.hd"]},nghttp2_headers:{pri_spec:[7,2,1,"c.nghttp2_headers.pri_spec"],nvlen:[7,2,1,"c.nghttp2_headers.nvlen"],cat:[7,2,1,"c.nghttp2_headers.cat"],padlen:[7,2,1,"c.nghttp2_headers.padlen"],nva:[7,2,1,"c.nghttp2_headers.nva"],hd:[7,2,1,"c.nghttp2_headers.hd"]},nghttp2_goaway:{opaque_data:[7,2,1,"c.nghttp2_goaway.opaque_data"],error_code:[7,2,1,"c.nghttp2_goaway.error_code"],opaque_data_len:[7,2,1,"c.nghttp2_goaway.opaque_data_len"],hd:[7,2,1,"c.nghttp2_goaway.hd"],last_stream_id:[7,2,1,"c.nghttp2_goaway.last_stream_id"]},"nghttp2.BaseRequestHandler":{on_data:[4,7,1,""],scheme:[4,6,1,""],on_close:[4,7,1,""],method:[4,6,1,""],on_headers:[4,7,1,""],stream_id:[4,6,1,""],host:[4,6,1,""],push:[4,7,1,""],path:[4,6,1,""],on_request_done:[4,7,1,""],send_response:[4,7,1,""],client_address:[4,6,1,""]},nghttp2_info:{age:[7,2,1,"c.nghttp2_info.age"],version_str:[7,2,1,"c.nghttp2_info.version_str"],version_num:[7,2,1,"c.nghttp2_info.version_num"],proto_str:[7,2,1,"c.nghttp2_info.proto_str"]},"nghttp2.HDDeflater":{change_table_size:[4,7,1,""],get_hd_table:[4,7,1,""],deflate:[4,7,1,""],set_no_refset:[4,7,1,""]},"nghttp2.HTTP2Server":{serve_forever:[4,7,1,""]},nghttp2_data:{padlen:[7,2,1,"c.nghttp2_data.padlen"]},"nghttp2.HDInflater":{change_table_size:[4,7,1,""],inflate:[4,7,1,""],get_hd_table:[4,7,1,""]},nghttp2_data_source:{fd:[7,2,1,"c.nghttp2_data_source.fd"],ptr:[7,2,1,"c.nghttp2_data_source.ptr"]},nghttp2_extension:{payload:[7,2,1,"c.nghttp2_extension.payload"],hd:[7,2,1,"c.nghttp2_extension.hd"]},nghttp2_settings:{niv:[7,2,1,"c.nghttp2_settings.niv"],hd:[7,2,1,"c.nghttp2_settings.hd"],iv:[7,2,1,"c.nghttp2_settings.iv"]}},titleterms:{protocol:3,text:3,typedef:7,locat:12,struct:7,field:12,program:8,synopsi:[6,2,9,13],contribut:8,python:[8,4],misc:6,ssl:[6,12],requir:8,name:[6,2,9,13],server:[14,8,4],mode:[6,12],timeout:6,h2load:[13,3],certif:12,see:[6,2,9,13],connect:6,resourc:1,librari:[1,8],statu:8,rewrit:12,version:1,"public":8,refer:[7,4],proxi:[8,12],"enum":7,usag:3,releas:1,decompressor:8,addit:12,spdy:6,remark:7,thread:3,tutori:[0,14,10],deflatehd:8,disabl:12,encod:0,header:[0,8,12],api:[0,7,4],open:12,select:3,git:8,from:8,log:[6,12],union:7,libev:[14,10],binari:15,nghttp2:[1,11,8],includ:7,basic:3,type:7,"function":7,option:[6,2,9,13],tool:[8,3],benchmark:[8,3],nghttp2ver:5,specifi:12,compressor:8,also:[6,2,9,13],multi:3,nghttpd:[8,9],"default":12,rate:12,bridg:12,limit:12,hpack:[0,8,4],macro:7,nghttpx:[6,8,12],control:3,descript:[6,2,9,13],file:12,multipl:3,perform:6,write:12,how:[12,3],hot:12,decod:0,build:[8,15],test:8,android:15,document:8,http:[1,3,4,6,8,10,12,14],inflat:0,deploi:12,develop:8,read:12,bind:8,clear:3,nghttp:[2,8],flow:3,uri:3,inflatehd:8,client:[8,12,10],deflat:0}}) \ No newline at end of file diff --git a/tutorial-client.html b/tutorial-client.html index a1d66506..2063fe22 100644 --- a/tutorial-client.html +++ b/tutorial-client.html @@ -342,15 +342,30 @@ finished successfully. We first initialize nghttp2 session object in initialize_nghttp2_session() function:

    static void initialize_nghttp2_session(http2_session_data *session_data)
     {
    -  nghttp2_session_callbacks callbacks = {0};
    +  nghttp2_session_callbacks *callbacks;
     
    -  callbacks.send_callback = send_callback;
    -  callbacks.on_frame_recv_callback = on_frame_recv_callback;
    -  callbacks.on_data_chunk_recv_callback = on_data_chunk_recv_callback;
    -  callbacks.on_stream_close_callback = on_stream_close_callback;
    -  callbacks.on_header_callback = on_header_callback;
    -  callbacks.on_begin_headers_callback = on_begin_headers_callback;
    -  nghttp2_session_client_new(&session_data->session, &callbacks, session_data);
    +  nghttp2_session_callbacks_new(&callbacks);
    +
    +  nghttp2_session_callbacks_set_send_callback(callbacks, send_callback);
    +
    +  nghttp2_session_callbacks_set_on_frame_recv_callback
    +    (callbacks, on_frame_recv_callback);
    +
    +  nghttp2_session_callbacks_set_on_data_chunk_recv_callback
    +    (callbacks, on_data_chunk_recv_callback);
    +
    +  nghttp2_session_callbacks_set_on_stream_close_callback
    +    (callbacks, on_stream_close_callback);
    +
    +  nghttp2_session_callbacks_set_on_header_callback
    +    (callbacks, on_header_callback);
    +
    +  nghttp2_session_callbacks_set_on_begin_headers_callback
    +    (callbacks, on_begin_headers_callback);
    +
    +  nghttp2_session_client_new(&session_data->session, callbacks, session_data);
    +
    +  nghttp2_session_callbacks_del(callbacks);
     }
     
    @@ -474,11 +489,9 @@ frames. The session_send()

    The nghttp2_session_send() function serializes the frame into wire -format and call nghttp2_session_callbacks.send_callback with -it. We set send_callback() function to -nghttp2_session_callbacks.send_callback in -initialize_nghttp2_session() function described earlier. It is -defined as follows:

    +format and call send_callback() function of type +nghttp2_send_callback. The send_callback() is defined as +follows:

    static ssize_t send_callback(nghttp2_session *session,
                                  const uint8_t *data, size_t length,
                                  int flags, void *user_data)
    @@ -494,15 +507,14 @@ defined as follows:

    data to the bufferevent object. Note that nghttp2_session_send() continues to write all frames queued so far. If we were writing the data to the non-blocking socket directly using write() system call -in the nghttp2_session_callbacks.send_callback, we will -surely get EAGAIN or EWOULDBLOCK since the socket has limited -send buffer. If that happens, we can return -NGHTTP2_ERR_WOULDBLOCK to signal the nghttp2 library to stop -sending further data. But writing to the bufferevent, we have to -regulate the amount data to be buffered by ourselves to avoid possible -huge memory consumption. In this example client, we do not limit -anything. To see how to regulate the amount of buffered data, see the -send_callback() in the server tutorial.

    +in the send_callback(), we will surely get EAGAIN or +EWOULDBLOCK since the socket has limited send buffer. If that +happens, we can return NGHTTP2_ERR_WOULDBLOCK to signal the +nghttp2 library to stop sending further data. But writing to the +bufferevent, we have to regulate the amount data to be buffered by +ourselves to avoid possible huge memory consumption. In this example +client, we do not limit anything. To see how to regulate the amount of +buffered data, see the send_callback() in the server tutorial.

    The third bufferevent callback is writecb(), which is invoked when all data written in the bufferevent output buffer have been sent:

    static void writecb(struct bufferevent *bev, void *ptr)
    @@ -961,17 +973,30 @@ here.

    static void initialize_nghttp2_session(http2_session_data *session_data) { - nghttp2_session_callbacks callbacks; + nghttp2_session_callbacks *callbacks; - memset(&callbacks, 0, sizeof(callbacks)); + nghttp2_session_callbacks_new(&callbacks); - callbacks.send_callback = send_callback; - callbacks.on_frame_recv_callback = on_frame_recv_callback; - callbacks.on_data_chunk_recv_callback = on_data_chunk_recv_callback; - callbacks.on_stream_close_callback = on_stream_close_callback; - callbacks.on_header_callback = on_header_callback; - callbacks.on_begin_headers_callback = on_begin_headers_callback; - nghttp2_session_client_new(&session_data->session, &callbacks, session_data); + nghttp2_session_callbacks_set_send_callback(callbacks, send_callback); + + nghttp2_session_callbacks_set_on_frame_recv_callback + (callbacks, on_frame_recv_callback); + + nghttp2_session_callbacks_set_on_data_chunk_recv_callback + (callbacks, on_data_chunk_recv_callback); + + nghttp2_session_callbacks_set_on_stream_close_callback + (callbacks, on_stream_close_callback); + + nghttp2_session_callbacks_set_on_header_callback + (callbacks, on_header_callback); + + nghttp2_session_callbacks_set_on_begin_headers_callback + (callbacks, on_begin_headers_callback); + + nghttp2_session_client_new(&session_data->session, callbacks, session_data); + + nghttp2_session_callbacks_del(callbacks); } static void send_client_connection_header(http2_session_data *session_data) diff --git a/tutorial-server.html b/tutorial-server.html index 4ebb0412..421b2586 100644 --- a/tutorial-server.html +++ b/tutorial-server.html @@ -412,14 +412,27 @@ HTTP/2 communication. These two functions are described later.

    initialize_nghttp2_session():

    static void initialize_nghttp2_session(http2_session_data *session_data)
     {
    -  nghttp2_session_callbacks callbacks = {0};
    +  nghttp2_session_callbacks *callbacks;
     
    -  callbacks.send_callback = send_callback;
    -  callbacks.on_frame_recv_callback = on_frame_recv_callback;
    -  callbacks.on_stream_close_callback = on_stream_close_callback;
    -  callbacks.on_header_callback = on_header_callback;
    -  callbacks.on_begin_headers_callback = on_begin_headers_callback;
    -  nghttp2_session_server_new(&session_data->session, &callbacks, session_data);
    +  nghttp2_session_callbacks_new(&callbacks);
    +
    +  nghttp2_session_callbacks_set_send_callback(callbacks, send_callback);
    +
    +  nghttp2_session_callbacks_set_on_frame_recv_callback
    +    (callbacks, on_frame_recv_callback);
    +
    +  nghttp2_session_callbacks_set_on_stream_close_callback
    +    (callbacks, on_stream_close_callback);
    +
    +  nghttp2_session_callbacks_set_on_header_callback
    +    (callbacks, on_header_callback);
    +
    +  nghttp2_session_callbacks_set_on_begin_headers_callback
    +    (callbacks, on_begin_headers_callback);
    +
    +  nghttp2_session_server_new(&session_data->session, callbacks, session_data);
    +
    +  nghttp2_session_callbacks_del(callbacks);
     }
     
    @@ -499,11 +512,9 @@ frames. The session_send()

    The nghttp2_session_send() function serializes the frame into wire -format and calls nghttp2_session_callbacks.send_callback with -it. We set the send_callback() function to -nghttp2_session_callbacks.send_callback in -initialize_nghttp2_session() function described earlier. It is -defined as follows:

    +format and calls send_callback() of type +nghttp2_send_callback. The send_callback() is defined as +follows:

    static ssize_t send_callback(nghttp2_session *session,
                                  const uint8_t *data, size_t length,
                                  int flags, void *user_data)
    @@ -520,20 +531,20 @@ defined as follows:

    }
    -

    Since we use bufferevent to abstract network I/O, we just write the data to -the bufferevent object. Note that nghttp2_session_send() continues to write -all frames queued so far. If we were writing the data to a non-blocking socket -directly using write() system call in the -nghttp2_session_callbacks.send_callback, we would surely get -EAGAIN or EWOULDBLOCK back since the socket has limited send -buffer. If that happens, we can return NGHTTP2_ERR_WOULDBLOCK to -signal the nghttp2 library to stop sending further data. But when writing to -the bufferevent, we have to regulate the amount data to get buffered ourselves -to avoid using huge amounts of memory. To achieve this, we check the size of -the output buffer and if it reaches more than or equal to -OUTPUT_WOULDBLOCK_THRESHOLD bytes, we stop writing data and return -NGHTTP2_ERR_WOULDBLOCK to tell the library to stop calling -send_callback.

    +

    Since we use bufferevent to abstract network I/O, we just write the +data to the bufferevent object. Note that nghttp2_session_send() +continues to write all frames queued so far. If we were writing the +data to a non-blocking socket directly using write() system call +in the send_callback(), we would surely get EAGAIN or +EWOULDBLOCK back since the socket has limited send buffer. If that +happens, we can return NGHTTP2_ERR_WOULDBLOCK to signal the +nghttp2 library to stop sending further data. But when writing to the +bufferevent, we have to regulate the amount data to get buffered +ourselves to avoid using huge amounts of memory. To achieve this, we +check the size of the output buffer and if it reaches more than or +equal to OUTPUT_WOULDBLOCK_THRESHOLD bytes, we stop writing data +and return NGHTTP2_ERR_WOULDBLOCK to tell the library to stop +calling send_callback.

    The next bufferevent callback is readcb(), which is invoked when data is available to read in the bufferevent input buffer:

    static void readcb(struct bufferevent *bev, void *ptr)
    @@ -1315,16 +1326,27 @@ is about to close and we no longer use that object.

    static void initialize_nghttp2_session(http2_session_data *session_data) { - nghttp2_session_callbacks callbacks; + nghttp2_session_callbacks *callbacks; - memset(&callbacks, 0, sizeof(callbacks)); + nghttp2_session_callbacks_new(&callbacks); - callbacks.send_callback = send_callback; - callbacks.on_frame_recv_callback = on_frame_recv_callback; - callbacks.on_stream_close_callback = on_stream_close_callback; - callbacks.on_header_callback = on_header_callback; - callbacks.on_begin_headers_callback = on_begin_headers_callback; - nghttp2_session_server_new(&session_data->session, &callbacks, session_data); + nghttp2_session_callbacks_set_send_callback(callbacks, send_callback); + + nghttp2_session_callbacks_set_on_frame_recv_callback + (callbacks, on_frame_recv_callback); + + nghttp2_session_callbacks_set_on_stream_close_callback + (callbacks, on_stream_close_callback); + + nghttp2_session_callbacks_set_on_header_callback + (callbacks, on_header_callback); + + nghttp2_session_callbacks_set_on_begin_headers_callback + (callbacks, on_begin_headers_callback); + + nghttp2_session_server_new(&session_data->session, callbacks, session_data); + + nghttp2_session_callbacks_del(callbacks); } /* Send HTTP/2 client connection header, which includes 24 bytes