Tatsuhiro Tsujikawa
3655090997
Merge branch 'window_size_control' of https://github.com/akamai/nghttp2 into akamai-window_size_control
2014-08-25 21:09:26 +09:00
Scott Mitchell
3cd08251ca
Send window size API extension
...
Motivation:
The send window size is currently fixed by a macro at compile time.
In order for users of the library to impact the send window size they
would have to change a macro at compile time. The window size may be dynamic
depending on the environment and deployment scheme. The library users
currently have no way to change this parameter.
Modifications:
Add a new optional callback method which is called before data is sent to
obtain the desired send window size. The callback return value will be
subject to a range check for the current session, stream, and settings
limits defined by flow control.
Result:
Library users have control over their send sizes.
2014-08-24 11:32:44 -04:00
Tatsuhiro Tsujikawa
1093b3eeab
Check explicitly that padding field is really read
2014-08-24 22:29:05 +09:00
Tatsuhiro Tsujikawa
9893ae81af
Add nghttp2_bufs_realloc
2014-08-24 15:34:55 +09:00
Tatsuhiro Tsujikawa
7bfa276e96
Fix bug that NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE causes session failure
...
Previously returning NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE from
on_header_callback moves input offset badly and it causes header
decompression error on the subsequent frames. This commit fix this
bug.
2014-08-24 00:50:55 +09:00
Tatsuhiro Tsujikawa
02c5621c61
Refactor functions to update consumed size
2014-08-23 18:56:04 +09:00
Tatsuhiro Tsujikawa
0c7e2fbec6
Use parenthesis explicitly for bit wise operation
2014-08-23 18:03:20 +09:00
Tatsuhiro Tsujikawa
cfee9cab36
Avoid possible double-free and make nghttp2_buf{s}_free(NULL) success
2014-08-23 11:16:49 +09:00
Tatsuhiro Tsujikawa
00ead22395
Don't allow frame submission for pending new frame
...
This is partial revert of bbe4f5a3d1
.
Only documentation is reverted. Since we have 2 queues to handle
maximum concurrent streams, we are not ready to allow immediate frame
submission for pending new frames.
2014-08-17 21:26:56 +09:00
Tatsuhiro Tsujikawa
bbe4f5a3d1
Allow frame submission immediately after nghttp2_submit_{request,headers,pp}
...
This commit makes handling of outgoing HEADERS and PUSH_PROMISE in the
same priority of other frames on the stream, so these frames are
processed in the order they are submitted. This allows application to
submit frames to a stream returned by nghttp2_submit_{request,
headers, push_promise} immediately. The only exception is
WINDOW_UPDATA frame, which requires nghttp2_stream object, which is
not created yet.
2014-08-17 17:31:43 +09:00
Tatsuhiro Tsujikawa
d499803221
Fix another heap-use-after-free bug
2014-08-10 12:20:36 +09:00
Tatsuhiro Tsujikawa
894783f572
Add note how to specify error code on NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE
2014-08-10 00:18:41 +09:00
Tatsuhiro Tsujikawa
4679188069
Fix crash
2014-08-09 18:41:08 +09:00
Tatsuhiro Tsujikawa
ab9b0538bc
Add doc how to issue non-final response headers
2014-08-08 23:38:20 +09:00
Tatsuhiro Tsujikawa
24edd2972d
Remove note about 0x00 concatenation rule and add note about pseudo-headers
2014-08-08 23:32:45 +09:00
Tatsuhiro Tsujikawa
6ccf06c6da
nghtp2_hd: Calculate hash values once
2014-08-06 22:00:12 +09:00
Tatsuhiro Tsujikawa
49e3fd6862
Add some header names which won't be indexed
2014-08-06 21:50:54 +09:00
Tatsuhiro Tsujikawa
86b089f957
Fix buffer overrun in raw_sbuf
2014-08-06 01:49:36 +09:00
Alexis La Goutte
ec93c9f55f
Fix some other shorten-64-to-32 casting error found by MSVC (64bits)
...
Thanks to Pascal
2014-08-04 09:04:49 +02:00
Alexis La Goutte
6c71889552
Fix some other shorten-64-to-32 casting error found by MSVC (64bits)
2014-08-03 16:09:30 +02:00
Tatsuhiro Tsujikawa
4bbb4172aa
Fix typo
2014-08-03 14:07:35 +09:00
Tatsuhiro Tsujikawa
3c603ec4ae
add_hd_table_incremental: Remove unused bufs parameter
2014-08-02 16:21:42 +09:00
Tatsuhiro Tsujikawa
d36bea8554
Add debug output for HPACK decoded integer
2014-08-02 10:40:25 +09:00
Tatsuhiro Tsujikawa
16101b8b3f
Fix compile error with --enable-debug
2014-08-02 10:16:32 +09:00
Tatsuhiro Tsujikawa
2fb750f2e3
nghttp2_check_header_value: Disallow 0x00
2014-08-02 00:30:09 +09:00
Alexis La Goutte
ac28cd7efa
Fix typo
2014-08-01 09:05:37 +02:00
Tatsuhiro Tsujikawa
7952029752
Advertise h2-14
2014-07-31 23:34:54 +09:00
Tatsuhiro Tsujikawa
48734b6d05
Update doc
2014-07-31 23:18:39 +09:00
Tatsuhiro Tsujikawa
d8d14a3fc9
Code cleanup
2014-07-31 23:08:51 +09:00
Tatsuhiro Tsujikawa
c13329b328
Treat delta 0 WINDOW_UPDATE as error
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
b8a2bf2675
Remove END_SEGMENT flag
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
98be65a1eb
Allow submission of unknown SETTINGS
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
742b28833a
Rename NGHTTP2_SETTINGS_MAX_HEADER_SET_SIZE as NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
77374ac6e2
Implement SETTINGS_MAX_FRAME_SIZE and SETTINGS_MAX_HEADER_LIST_SIZE
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
c4be7d48a0
nghttp2_hd: Code cleanup
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
0752ce6701
nghttp2_hd_deflate_bound: Take into account possible 2nd context update
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
8d5422c9bb
Remove check for incoming header block size
...
The application should be responsible for the size of incoming header
block size. Framing layer just passes everything (we have size limit
for one header/field though) to application.
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
dd1850aed0
Emit minimum header table size in encoding context update
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
079db14d45
Add nghttp2_session_consume() API
...
Reworked no automatic WINDOW_UPDATE feature. We added new API
nghttp2_session_consume() which tells the library how many bytes are
consumed by the application. Instead of submitting WINDOW_UPDATE by
the application, the library is now responsible to submit
WINDOW_UPDATE based on consumed bytes. This is more reliable method,
since it enables us to properly send WINDOW_UPDATE for stream and
connection individually. The previous implementation of nghttpx had
broken connection window management.
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
e904842504
Update doc
2014-07-31 23:05:52 +09:00
Tatsuhiro Tsujikawa
78df530b90
Don't ignore aux_data for HEADERS with NGHTTP2_HCAT_HEADERS tag
2014-07-31 23:05:52 +09:00
Tatsuhiro Tsujikawa
e147c14186
Remove ent_name member and use index solely
2014-07-31 23:05:52 +09:00
Tatsuhiro Tsujikawa
06453fb15e
Remove unused role member in nghttp2_hd_context
2014-07-31 23:05:52 +09:00
Tatsuhiro Tsujikawa
744ec4dba1
Don't copy static header and put static table in front of dynamic table
2014-07-31 23:05:52 +09:00
Tatsuhiro Tsujikawa
38bfbffb1b
Remove HPACK reference set
2014-07-31 23:05:52 +09:00
Tatsuhiro Tsujikawa
63398f30dd
Extend frame length field to 24 bits
2014-07-31 23:05:52 +09:00
Tatsuhiro Tsujikawa
961dcf614a
Fix wrong detection of neverIndex bit
2014-07-26 23:27:34 +09:00
Tatsuhiro Tsujikawa
57e9b94aaa
Handle header table size up to UINT32_MAX
2014-07-22 22:38:18 +09:00
Tatsuhiro Tsujikawa
9de9b6ebd6
Remove unnecessarily code
2014-07-22 01:52:51 +09:00
Tatsuhiro Tsujikawa
44310c6de5
Fix integer decoding when it takes multiple reads
2014-07-22 01:50:29 +09:00
Tatsuhiro Tsujikawa
d99e1135c8
Search static header table linearly
2014-07-20 19:13:56 +09:00
Tatsuhiro Tsujikawa
67b13ad9ff
Remove unused nghttp2_nva_out
2014-07-18 21:14:07 +09:00
Tatsuhiro Tsujikawa
8dc47c6750
Fix resource leaks
2014-07-18 00:31:32 +09:00
Tatsuhiro Tsujikawa
5c305acb97
Remove unused nghttp2_io_flag
2014-07-17 23:44:03 +09:00
Tatsuhiro Tsujikawa
62423f5949
Fix double free
2014-07-15 22:47:04 +09:00
Tatsuhiro Tsujikawa
55c697e9f4
Handle multiple SETTINGS_HEADER_TABLE_SIZE in incoming SETTINGS frame
...
Previously we just assumed that if same settings ID is found in
SETTINGS, it is enough to process last seen entry. But it turns out
it is not enough for SETTINGS_HEADER_TABLE_SIZE. If we have 0 and
4096 for SETTINGS_HEADER_TABLE_SIZE in one SETTINGS, we must first
shrink dynamic table to 0 and then enlarge it to 4096. This means
that we have to remember the minimum value and last value.
2014-07-15 00:25:31 +09:00
Tatsuhiro Tsujikawa
8f1249ab67
Check NGHTTP2_GOAWAY_SEND and NGHTTP2_GOAWAY_RECV flags explicitly
2014-07-12 23:16:25 +09:00
Tatsuhiro Tsujikawa
35ffeb5ff4
Send additional debug info when terminating session
2014-07-12 22:57:17 +09:00
Tatsuhiro Tsujikawa
d3ca003346
Update android-config and fix build warning with android NDK
2014-07-06 23:32:08 +09:00
Tatsuhiro Tsujikawa
4b6f124b7e
Add API to check half-closed state for both direction of stream
2014-07-03 21:44:29 +09:00
Tatsuhiro Tsujikawa
e5abc475f1
Don't send more than NGHTTP2_MAX_HEADERSLEN bytes header block
2014-07-02 22:45:38 +09:00
Tatsuhiro Tsujikawa
593485c652
Put a limit for total contiguous headers length currently receiving
2014-07-02 22:25:32 +09:00
Tatsuhiro Tsujikawa
6da044cbb5
Send WINDOW_UPDATE for ignored DATA bytes when manual flow control is enabled
...
Since we do not call on_data_chunk_recv_callback for ignored DATA
chunk, if nghttp2_option_set_no_auto_connection_window_update is used,
application may not have a chance to send connection WINDOW_UPDATE.
To fix this, we accumulate those received bytes, and if it exceeds
certain number, we automatically send connection-level WINDOW_UPDATE.
2014-07-02 21:20:40 +09:00
Tatsuhiro Tsujikawa
ed38dbf67a
Add const qualifier to opaque_data parameter in nghttp2_submit_ping
2014-07-02 00:59:36 +09:00
Tatsuhiro Tsujikawa
1039dc59ea
Update doc
2014-06-30 00:02:40 +09:00
Tatsuhiro Tsujikawa
bd06f2cec3
Add const qualifier to nva parameter in nghttp2_hd_deflate_hd()
2014-06-29 23:43:14 +09:00
Tatsuhiro Tsujikawa
d318e6a62e
Support one header field size (name + value) up to 64KiB by default
...
This commits changes the upper bound of one header field size (the sum
of the length of name and value) to 64KiB by default. We may add an
option to change this upper bound in the future.
2014-06-28 11:04:41 +09:00
Tatsuhiro Tsujikawa
ff3a4a770f
Treat larger last stream ID in GOAWAY than previous value as PROTOCOL_ERROR
2014-06-28 10:46:05 +09:00
Tatsuhiro Tsujikawa
16fef227e8
nghttp2_hd_*_new: Leave *inflater_ptr or *deflater_ptr untouched on failure
2014-06-25 21:26:47 +09:00
Tatsuhiro Tsujikawa
55c338d7af
nghttp2_session_*_new: Leave session parameter untouched on failure
2014-06-25 21:21:17 +09:00
Tatsuhiro Tsujikawa
4cbfe5d3d1
Ensure that maximum padding is 256
2014-06-25 21:17:03 +09:00
Tatsuhiro Tsujikawa
ad60a18fb9
Remove BLOCKED frame
2014-06-24 00:22:41 +09:00
Tatsuhiro Tsujikawa
31de732e3b
Allocate header table ringbuffer lazily
...
Previously in inflater we reserve new ringbuffer when table size is
changed. This may be potentially a problem if new table size is very
large number. When inflater is not used directly by application, this
is not a problem because application can choose the buffer size. On
the other hand, if application uses inflater directly and it does not
have control of new buffer size (e.g., protocol dissector), then we
just fail to allocate large buffer in
nghttp2_hd_inflate_change_table_size() without actually use such huge
buffer. This change defers the actual allocation of buffer when it is
actually needed so that we will fail when it is absolutely needed.
2014-06-22 13:39:17 +09:00
Tatsuhiro Tsujikawa
9294622519
Treat unknown error code as NGHTTP2_INTERNAL_ERROR
2014-06-18 11:53:32 +09:00
Tatsuhiro Tsujikawa
b78a51da0e
Support graceful shutdown using multiple GOAWAY
...
Add last_stream_id parameter to nghttp2_submit_goaway(). To terminate
connection immediately with application chosen last stream ID,
nghttp2_session_terminate_session2() was added.
2014-06-18 11:35:08 +09:00
Tatsuhiro Tsujikawa
975524a125
Don't send GOAWAY with last stream ID larger than the value previously sent
2014-06-18 11:03:55 +09:00
Tatsuhiro Tsujikawa
817e1ce2a7
Rename last_stream_id in nghttp2_session to remote_last_stream_id
...
This commits also fixes last stream ID in GOAWAY uses wrong stream ID.
2014-06-18 10:56:32 +09:00
Tatsuhiro Tsujikawa
62900cd85b
Allow multiple transmission of GOAWAY frame
2014-06-18 10:51:33 +09:00
Tatsuhiro Tsujikawa
174e410b93
Use hex in nghttp2_error_code and nghttp2_settings_id
2014-06-18 10:48:31 +09:00
Tatsuhiro Tsujikawa
a5af621947
Change protocol ID to h2-13
2014-06-18 09:42:51 +09:00
Alexis La Goutte
9a3cdeb7e6
Fix some other shorten-64-to-32 casting error found by MSVC (64bits)
...
Thanks for Pascal
2014-06-16 19:17:49 +02:00
Alexis La Goutte
c9b6371977
When assertions is disable, there is a warning about unused check_index_range function
...
Make the check for a valid index range a macro, so the compiler doesn't
whine if it's not used, but it's available if it *is* used.
2014-06-16 18:52:11 +02:00
Tatsuhiro Tsujikawa
7f6ddd0f2e
Update huffman code table
2014-06-16 23:03:55 +09:00
Tatsuhiro Tsujikawa
f85a213fb1
Update static header table
2014-06-14 22:24:47 +09:00
Tatsuhiro Tsujikawa
dd006f8a79
Change protocol ID to h2-lc
2014-06-12 22:51:30 +09:00
Alexis La Goutte
a15d4fc306
Fix nghttp2_hd_huffman.h:41:31: warning: comma at end of enumerator list [-Wpedantic]
2014-06-11 23:43:10 +09:00
Tatsuhiro Tsujikawa
9b174bf5c9
Fix compile error with -Wshorten-64-to-32
...
The original patch was contributed by Alexis La Goutte
2014-06-11 23:37:16 +09:00
Tatsuhiro Tsujikawa
f0f5342cd4
Update doc
2014-06-11 01:40:20 +09:00
Tatsuhiro Tsujikawa
cfcecca751
Make return type of inbound_frame_set_settings_entry void
2014-06-10 21:32:20 +09:00
Tatsuhiro Tsujikawa
2878e1e258
Refactor storage of settings
...
Now local and remote settings values are stored in dedicated structure
nghttp2_settings_storage.
2014-06-10 21:29:19 +09:00
Tatsuhiro Tsujikawa
4596f73ee0
Fix unused header_cb_arg structure
2014-06-09 23:21:55 +09:00
Tatsuhiro Tsujikawa
caf3e1c035
Fix compile error with --enable-debug
2014-06-09 23:21:30 +09:00
Tatsuhiro Tsujikawa
dacc9b2f1c
Separate extension frames from core frames
...
ALTSVC and BLOCKED frames are now extension frames. To add new
extension frame without modifying nghttp2_frame union, which causes so
name bump, we separated extension frames from core frames.
nghttp2_frame includes generic nghttp2_extension. The payload member
of nghttp2_extension will point to the structure of extension frame
payload. The frame types of extension frames are defined in
nghttp2_ext_frame_type.
2014-06-09 23:16:54 +09:00
Tatsuhiro Tsujikawa
317b8baa4f
Set HTTP/2 protocol id to h2-13 for now
2014-06-07 19:39:14 +09:00
Tatsuhiro Tsujikawa
d4602a0991
Remove reserved field from ALTSVC frame
2014-06-07 19:10:09 +09:00
Tatsuhiro Tsujikawa
3daeadcb07
Remove bogus comments
2014-06-07 18:51:20 +09:00
Tatsuhiro Tsujikawa
19729962a3
Check stream_id is nonzero for DATA, HEADERS, PRIORITY, RST_STREAM, PUSH_PROMISE
2014-06-07 18:48:37 +09:00
Tatsuhiro Tsujikawa
bfaab30733
Allow transmission and reception of PRIORITY frame to a closed stream
2014-06-07 18:36:58 +09:00
Tatsuhiro Tsujikawa
c46d3dafc6
Remove PAD_HIGH and Pad High field
...
CONTINUATION now doesn't have padding.
2014-06-07 18:15:36 +09:00
Tatsuhiro Tsujikawa
70c86979e8
Ignore unknown settings ID
2014-06-07 16:41:36 +09:00
Tatsuhiro Tsujikawa
d402ba6fa2
Make settings_id 2 bytes field
2014-06-07 16:37:29 +09:00
Tatsuhiro Tsujikawa
458ccb3681
Ignore unknown frame types
...
Unexpected CONTINUATION frame is handled separately as connection
error.
2014-06-07 16:30:55 +09:00
Tatsuhiro Tsujikawa
3db8935e20
Remove per-frame compression
2014-06-07 16:04:43 +09:00
Tatsuhiro Tsujikawa
eb0a894ede
Merge branch 'Wshadow' of https://github.com/alagoutte/nghttp2 into alagoutte-Wshadow
2014-06-04 23:34:04 +09:00
Alexis La Goutte
6b08534ffc
Fix declaration of ‘index’ shadows a global declaration [-Werror=shadow]
...
I have this error with some old gcc (4.6) release (Ubuntu 12.04 or Travis...)
2014-06-03 10:20:05 +02:00
Tatsuhiro Tsujikawa
99aaaccf03
Update doc
2014-06-02 22:33:23 +09:00
Tatsuhiro Tsujikawa
4f7223e89f
Add note to manual how to submit frames to new stream ID
2014-05-31 22:01:18 +09:00
Tatsuhiro Tsujikawa
88b69bb669
Reduce huffman decoding table
...
Previously we have uint16_t as state member variable in
nghttp2_huff_decode structure to express -1 as failure. This is
because we have 256 valid states. However, we can express failed
state using flags member variable and make state uint8_t. This commit
does this and as a result the size of decoding table is reduced.
2014-05-31 00:19:30 +09:00
Tatsuhiro Tsujikawa
832f2fc00f
Call on_data_chunk_recv_callback only when stream is active
2014-05-29 22:18:52 +09:00
Tatsuhiro Tsujikawa
d113055899
nghttp2_hd: Use single buffer for an name/value pair
...
Previously we use 2 separate buffer for each name and value. The
problem is we would waste buffer space for name because it is usually
small. Also tuning buffer size for each buffer separately is not
elegant and current HTTP server practice is that one buffer for 1
name/value pair. This commit unifies 2 buffers into 1.
2014-05-28 23:33:37 +09:00
Tatsuhiro Tsujikawa
5e6a2fa256
Assert ctx->state >= 0 in huffman decoding
2014-05-28 00:30:11 +09:00
Tatsuhiro Tsujikawa
d733c87567
Make state in nghttp2_hd_huff_decode_context int16_t to make compiler happy
2014-05-26 21:50:54 +09:00
Tatsuhiro Tsujikawa
589d3e71a3
Merge branch 'misc' of https://github.com/alagoutte/nghttp2 into alagoutte-misc
2014-05-26 21:48:30 +09:00
Alexis La Goutte
db354b228a
Remove unused include (stdint.h)
2014-05-26 08:58:15 +02:00
Tatsuhiro Tsujikawa
9677788317
Don't count closed streams in nghttp2_session_want_{read,write}
2014-05-23 22:23:38 +09:00
Tatsuhiro Tsujikawa
78a55935ac
Define constant for the length of priority related fields
2014-05-22 21:41:43 +09:00
Tatsuhiro Tsujikawa
2aa84019c7
Define constants for ALTSVC frame parsing
2014-05-22 21:36:12 +09:00
Tatsuhiro Tsujikawa
1ac028e166
Take into account that pending_local_max_concurrent_stream could be too large
...
pending_local_max_concurrent_stream is, once local settings applied,
becomes NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS, which is very large
number. When adjusting number of streams, we have to take min of
local effective SETTINGS_MAX_CONCURRENT_STREAMS and pending one.
2014-05-16 22:32:08 +09:00
Tatsuhiro Tsujikawa
2778e4aafc
Remove useless debug code in nghttp2_stream_roots_add()
2014-05-16 22:30:59 +09:00
Tatsuhiro Tsujikawa
7b9a8acc22
Add HPACK deflation API
2014-05-13 23:42:55 +09:00
Tatsuhiro Tsujikawa
062d6a8398
Remove outdated comment
2014-05-12 22:58:05 +09:00
Tatsuhiro Tsujikawa
ad4a4ee567
Add missing library error code to nghttp2_error()
2014-05-12 22:58:04 +09:00
Tatsuhiro Tsujikawa
ab76468971
Return NGHTTP2_ERR_BUFFER_ERROR from nghttp2_hd_{deflate,inflate}_hd
...
It is generally useful to know what is the cause of the error. Since
we expose HPACK API, it is friendly to tell application the
insufficient buffer size is a culprit.
2014-05-12 22:58:04 +09:00
Tatsuhiro Tsujikawa
bc6d952361
Check max SETTINGS_HEADER_TABLE_SIZE in nghttp2_iv_check()
...
Hide NGHTTP2_MAX_HEADER_TABLE_SIZE from public API. Now it is defined
as ((1u << 31) - 1) in nghttp2_frame.h, which is sufficiently big
enough.
2014-05-12 21:28:49 +09:00
Tatsuhiro Tsujikawa
f85c592818
Fix compile error with clang -Wunreachable-code
2014-05-12 21:11:27 +09:00
Tatsuhiro Tsujikawa
9683f88e6a
Add NGHTTP2_DEFAULT_HEADER_TABLE_SIZE macro
...
Use this macro in Python sources. Python module constant
HD_DEFLATE_HD_TABLE_BUFSIZE_MAX was renamed as
DEFLATE_MAX_HEADER_TABLE_SIZE since the previous name was awkward.
2014-05-11 21:38:30 +09:00
Tatsuhiro Tsujikawa
2e5c7f598f
Fix bug HPACK deflater does not send context update after table size change
2014-05-11 21:25:27 +09:00
Tatsuhiro Tsujikawa
4fffd23dd3
Code cleanup
2014-05-11 13:53:42 +09:00
Tatsuhiro Tsujikawa
b187895e1d
nghttp2_bufs_remove: Prevent NULL from being passed to memcpy
2014-05-11 13:51:46 +09:00
Tatsuhiro Tsujikawa
dc791a641d
Update doc
2014-05-10 21:43:16 +09:00
Tatsuhiro Tsujikawa
0707720b11
Code cleanup
2014-05-10 18:27:53 +09:00
Tatsuhiro Tsujikawa
4c8d4f8a85
Code cleanup
2014-05-10 00:13:40 +09:00
Tatsuhiro Tsujikawa
3ebb3faf32
Remove nghttp2_ prefix from static function, part 2
2014-05-08 23:54:07 +09:00
Tatsuhiro Tsujikawa
65bbdf56cd
Remove nghttp2_ prefix from static function
2014-05-08 23:37:56 +09:00
Tatsuhiro Tsujikawa
3e3d51842b
Interleave stream DATA more naturally
...
We simulate resource sharing by decreasing weight. The thing is if
weight is wrapped, that item continues to send DATA until its weight
gets lowered under the other items. This commits fix this issue.
2014-05-08 23:07:29 +09:00
Tatsuhiro Tsujikawa
d2890dfb91
Remove adjust_priority_callback
...
Since we have stream ID immediately available from nghttp2_submit_*,
we don't need adjust_priority_callback.
2014-05-07 23:43:45 +09:00
Tatsuhiro Tsujikawa
e8de437d5c
Return new stream ID from nghttp2_submit_{request, headers, push_promise}
...
Previously stream ID was assigned just before HEADERS or PUSH_PROMISE
was serialized and nghttp2_submit_{request, headers, push_promise} did
not return stream ID. The application has to check assigned stream ID
using before_frame_send_callback. Now it is apparent that priority is
meant to DATA transfer only. Also application can reorder the
requests if it wants. Therefore we can assign stream ID in
nghttp2_submit_* functions and return stream ID from them. With this
change, now application does not have to check stream ID using
before_frame_send_callback and its code will be simplified.
2014-05-07 23:24:07 +09:00
Tatsuhiro Tsujikawa
51e79c5a3d
Remove debug output
2014-05-07 23:23:43 +09:00
Alexis La Goutte
8e22eadc76
Fix typo
2014-05-06 17:05:47 +02:00
Tatsuhiro Tsujikawa
9228e223fa
Remove NGHTTP2_ERR_GZIP error code
2014-05-06 23:42:57 +09:00
Tatsuhiro Tsujikawa
4f027c1562
libnghttp2: Remove dependency to zlib
...
We inherited gzip compression API from spdylay codebase. In spdylay,
the cost of having such API is almost free because spdylay requires
zlib for header compression. nghttp2 no longer uses gzip to header
compression. zlib dependency exists just for gzip compression API,
which is not an essential. So we decided to move gzip code to under
src and remove zlib dependency from libnghttp2 itself. As nghttp2
package, we depend on zlib to compile tools under src.
2014-05-06 23:10:50 +09:00
Tatsuhiro Tsujikawa
704f362804
nghttp2.h: Use hex style flag definition
2014-05-06 18:49:24 +09:00
Tatsuhiro Tsujikawa
e2535df505
Code cleanup
2014-05-06 18:39:04 +09:00
Tatsuhiro Tsujikawa
f207089604
Update doc
2014-05-06 18:34:48 +09:00
Tatsuhiro Tsujikawa
7b7b0ebcca
Update doc
2014-05-06 18:08:41 +09:00
Tatsuhiro Tsujikawa
8289943a58
nghttp2_frame: Add assertion to available buffer size in first buffer
2014-05-06 18:06:46 +09:00
Tatsuhiro Tsujikawa
56d6784d8d
nghttp2_frame: Return NGHTTP2_ERR_FRAME_SIZE_ERROR instead of .._BUFFER_ERROR
...
Also updates docs
2014-05-06 18:02:26 +09:00
Tatsuhiro Tsujikawa
9125499dd0
src: Implement per-frame DATA compression
...
Currently, nghttpd server only compresses files whose extensions are
one of .html, .js, .css and .txt. nghttp advertises its support of
per-frame compression in SETTINGS frame. To implement this feature,
we added 2 public API: nghttp2_session_get_remote_settings() and
nghttp2_gzip_inflate_finished().
2014-05-03 00:02:17 +09:00
Tatsuhiro Tsujikawa
3fc1d2dfaa
Merge branch 'gcc' of https://github.com/alagoutte/nghttp2 into alagoutte-gcc
2014-05-01 10:29:40 +09:00
Tatsuhiro Tsujikawa
855f39743a
Fix crash when indexed repr index=0
2014-05-01 09:06:54 +09:00
Tatsuhiro Tsujikawa
3c431da6aa
Fix bug that server treats reception of ENABLE_PUSH=0 as connection error
2014-05-01 08:38:28 +09:00
Alexis La Goutte
33a6851abe
Fix GCC build with -Werror
...
nghttp2_session.c:1615:9: error: C++ style comments are not allowed in ISO C90 [-Werror]
2014-04-30 17:09:06 +02:00
Alexis La Goutte
763cdc3499
Fix GCC when use -Wpedantic
...
nghttp2_stream.h:94:43: error: comma at end of enumerator list [-Werror=pedantic]
2014-04-30 17:09:05 +02:00
Alexis La Goutte
0f5c28ac46
Fix GCC when use -Wpedantic
...
nghttp2_hd.h:115:30: error: comma at end of enumerator list [-Werror=pedantic]
2014-04-30 17:09:05 +02:00
Alexis La Goutte
941236948f
Fix GCC when use -Wpedantic
...
nghttp2_int.h:50:33: error: comma at end of enumerator list [-Werror=pedantic]
2014-04-30 17:09:05 +02:00
Tatsuhiro Tsujikawa
660c536275
Extend namelen and valuelen in nghttp2_nv to size_t
2014-04-30 23:08:34 +09:00
Tatsuhiro Tsujikawa
52b74144ee
Fix 0 size malloc, part 2
2014-04-30 22:40:43 +09:00
Tatsuhiro Tsujikawa
1b79114d2d
Fix compiler warnings
2014-04-30 22:16:21 +09:00
Tatsuhiro Tsujikawa
ab634853df
Fix 0 size malloc
2014-04-30 22:09:02 +09:00
Tatsuhiro Tsujikawa
d2e64317ba
Code cleanup, include nghttp2_int.h explicitly to ensure debug macro
2014-04-30 22:08:32 +09:00
Alexis La Goutte
b2f07b1d8c
Fix Dead Store (Dead assignement/Dead increment) warning found by Clang Analyzer
2014-04-30 22:06:42 +09:00
Alexis La Goutte
eff5c7d0d0
Fix Dead Store (Dead assignement/Dead increment) warning found by Clang Analyzer
2014-04-30 22:06:42 +09:00
Alexis La Goutte
e00b8f1f73
Fix Dead Store (Dead assignement/Dead increment) warning found by Clang Analyzer
2014-04-30 22:06:42 +09:00
Tatsuhiro Tsujikawa
fe6b541233
Handle hd inflate buffer allocation failure
2014-04-30 11:32:05 +09:00
Tatsuhiro Tsujikawa
167a1102e0
Remove unused NGHTTP2_HD_MAX_BUFFER_LENGTH macro
2014-04-30 10:55:43 +09:00
Tatsuhiro Tsujikawa
d61208b394
Update doc
2014-04-30 10:49:19 +09:00
Tatsuhiro Tsujikawa
4cf023d94c
Update doc
2014-04-30 10:28:50 +09:00
Tatsuhiro Tsujikawa
3b4aedd566
Add HPACK decoder public API
2014-04-29 15:53:46 +09:00
Tatsuhiro Tsujikawa
8c5db539b3
Change NGHTTP2_MAX_HEADER_TABLE_SIZE to 256MiB
2014-04-28 22:50:43 +09:00
Tatsuhiro Tsujikawa
6d5f402380
Add nghttp2_adjust_priority_callback
...
Callback function invoked to adjust priority value for request
HEADERS.
Since the application doesn’t know stream ID when it submits
requests, it may not be able to add correct priority value to HEADERS
frame and forced to use follwing PRIORITY frame. The purpose of this
callback is give the chance to the application to adjust priority
value with the latest information it has just before transmission so
that correct priority is included in HEADERS frame and it doesn’t
have to send additional PRIORITY frame.
2014-04-27 14:48:43 +09:00
Tatsuhiro Tsujikawa
cc7929bdcc
Fix possible SIGFPE
2014-04-27 14:40:10 +09:00
Tatsuhiro Tsujikawa
59e42c1c69
Update doc
2014-04-25 01:39:40 +09:00
Tatsuhiro Tsujikawa
d49733a5c9
Declare h2-12 for now
2014-04-25 01:33:29 +09:00
Tatsuhiro Tsujikawa
052be3296c
Implement compressed DATA
...
The library interface supports compressed DATA. The library does not
deflate nor inflate data payload. When sending data, an application
has to compress data and set NGHTTP2_DATA_FLAG_COMPRESSED to
data_flags parameter in nghttp2_data_source_read_callback. On
receiving, flags parameter in nghttp2_on_data_chunk_recv_callback
includes NGHTTP2_FLAG_COMPRESSED. An application should check the
flags and inflate data as necessary. Since compression context is per
frame, when DATA is seen in nghttp2_on_frame_recv_callback, an
application should reset compression context.
2014-04-25 01:27:18 +09:00
Tatsuhiro Tsujikawa
6bb410d603
Implement BLOCKED frame
2014-04-25 00:38:24 +09:00
Tatsuhiro Tsujikawa
2d4b92fc2b
Merge branch 'priority'
2014-04-24 23:48:37 +09:00
Tatsuhiro Tsujikawa
ee26469cd9
Handle circular dependency
...
Handle the situation if a stream is told to depend on its descendant.
This is what
http://tools.ietf.org/html/draft-ietf-httpbis-http2-12#section-5.3.3
says.
2014-04-24 23:44:34 +09:00
Tatsuhiro Tsujikawa
853c9888d9
Distribute effective weight among only streams with marked as top
...
If stream with dpri value of no_data, we check any its descendant has
stream with dpri value of top. If so, we have to distribute of its
portion of weight to its descendants.
2014-04-24 23:37:40 +09:00
Tatsuhiro Tsujikawa
5aa0a0d099
Check protocol length so that scanner don't overrun buffer
2014-04-22 23:20:33 +09:00
Tatsuhiro Tsujikawa
aa4d43f31e
Allow exclusive dependency to stream 0
2014-04-17 21:18:18 +09:00
Tatsuhiro Tsujikawa
ac86b51e37
Implement simplified dependency based priority
2014-04-15 22:55:07 +09:00
Tatsuhiro Tsujikawa
27a91fc30e
Allow NGHTTP2_PRIORITY_TYPE_NONE in nghttp2_submit_{request,headers}
2014-04-10 23:29:56 +09:00
Tatsuhiro Tsujikawa
ece6521d26
Check stream availability when sending ALTSVC with stream_id != 0
2014-04-10 23:27:10 +09:00
Tatsuhiro Tsujikawa
792938d410
Update doc
2014-04-09 00:16:04 +09:00
Tatsuhiro Tsujikawa
9b3d5a8be5
Harden check for submit functions
...
nghttp2_submit_{headers,request}: Return NGHTTP2_ERR_INVAILD_ARGUMENT
if pri_spec->type is invalid.
nghttp2_submit_push_promise: Return NGHTTP2_ERR_PROTO if issued by
client.
nghttp2_submit_altsvc: Return NGHTTP2_ERR_PROTO instead of
NGHTTP2_ERR_INVALID_STATE if issued by client.
2014-04-09 00:13:11 +09:00
Tatsuhiro Tsujikawa
7563839756
Update doc
2014-04-06 21:13:44 +09:00
Tatsuhiro Tsujikawa
ffcbffc28b
Revert f763d76110
2014-04-06 17:56:48 +09:00
Tatsuhiro Tsujikawa
1aa69e334d
Fix compile error on 32-bit systems
2014-04-06 17:34:44 +09:00
Tatsuhiro Tsujikawa
f763d76110
Revert NGHTTP2_DATA_PAYLOADLEN to 4086
2014-04-05 23:42:37 +09:00
Tatsuhiro Tsujikawa
8f23c0c38b
Name unnamed union in nghttp2_priority_spec so that we can be C90 compatible
2014-04-05 18:40:44 +09:00
Tatsuhiro Tsujikawa
c1060f0d48
Announce h2-11
2014-04-05 18:26:48 +09:00
Tatsuhiro Tsujikawa
e7ad3633c7
nghttp2_data_source_read_callback: Replace eof with uint32_t *data_flags
...
Replace int *eof with uint32_t *data_flags so that we can easily
extend functionality if we have to (but we don't do if possible).
2014-04-05 17:59:24 +09:00
Tatsuhiro Tsujikawa
124da7720f
Fix compile error
2014-04-05 17:45:06 +09:00
Tatsuhiro Tsujikawa
d668d2448b
Hide session option from public API
...
To make adding new option easier, we decided to make the details of
option struct private and hide it from public API. We provide
functions to set individual option value.
2014-04-04 21:57:47 +09:00
Tatsuhiro Tsujikawa
21ab2f135b
Connection error if client changes SETTINGS_ENABLE_PUSH to nonzero
2014-04-04 20:36:09 +09:00
Tatsuhiro Tsujikawa
1e38ceb1cd
Allow empty SETTINGS in upgrade
2014-04-04 20:23:46 +09:00
Tatsuhiro Tsujikawa
5d80d18f31
Cosmetic change
2014-04-03 16:06:03 +09:00
Tatsuhiro Tsujikawa
37e1626478
Update doc
2014-04-03 16:01:30 +09:00
Tatsuhiro Tsujikawa
6cddfaf263
nghttp2_stream_resume_deferred_data: Call stream_update_dep_on_attach_data
...
.. instead of nghttp2_stream_attach_data() internal API
2014-04-03 15:52:21 +09:00
Tatsuhiro Tsujikawa
ac2a8ef4a2
Fix bug that transfer stuck when stream marked as top is deferred
2014-04-03 15:48:51 +09:00
Tatsuhiro Tsujikawa
b1edb1f3ae
Don't index name/value pair bearing NO_INDEX flag when forwarding it
2014-04-03 11:22:11 +09:00
Tatsuhiro Tsujikawa
c53c1dc669
nghttp2_session_resume_data: Return error if no deferred data exist
2014-04-03 00:01:35 +09:00
Tatsuhiro Tsujikawa
580a19e097
nghttp2_stream_detach_deferred_data -> nghttp2_stream_resume_deferred_data
2014-04-02 22:58:06 +09:00
Tatsuhiro Tsujikawa
ef40879b5f
Refactor nghttp2_stream
...
Combine deferred_data and data into data_item and merge deferred_flags
into flags.
2014-04-02 22:55:49 +09:00
Tatsuhiro Tsujikawa
2685e3405f
Rename NGHTTP2_DATA_PAYLOAD_LENGTH as NGHTTP2_DATA_PAYLOADLEN
2014-04-02 20:35:07 +09:00
Tatsuhiro Tsujikawa
9c4c99bf96
Adjust transmission frame buffer size to support maximum payload size
2014-04-02 20:33:01 +09:00
Tatsuhiro Tsujikawa
c9f90924a9
Add flags parameter to nghttp2_on_header_callback
2014-04-02 02:10:35 +09:00
Tatsuhiro Tsujikawa
e5b0303481
Update huffman codes
2014-04-02 01:44:39 +09:00
Tatsuhiro Tsujikawa
b1722cbe28
Update static table
2014-04-02 01:30:50 +09:00
Tatsuhiro Tsujikawa
7877b676e3
Honor NGHTTP2_NV_FLAG_NO_INDEX in deflater and inflater
2014-04-02 01:25:44 +09:00
Tatsuhiro Tsujikawa
c55df4a30b
Fix compile error with --enable-werror
2014-04-02 01:18:27 +09:00
Tatsuhiro Tsujikawa
24cb90806d
Add flags to nghttp2_nv structure
...
This is preliminary change for upcoming HPACK updates. The flags are
used to determine the name/value pair is indexable or not.
2014-04-01 23:17:50 +09:00
Tatsuhiro Tsujikawa
da5db205ca
Make group weight range [1, 256], inclusive
...
We do -+1 on serialization and deserialization since the field is 1
byte. This change also parameterized range so that we can change it
easily.
2014-04-01 22:54:20 +09:00
Tatsuhiro Tsujikawa
f2d945734e
Rename framebuflen as framerv, cause it is not a length
2014-04-01 21:59:26 +09:00
Tatsuhiro Tsujikawa
f5ead55f0e
Check payload length when submitting GOAWAY and ALTSVC
2014-04-01 21:55:29 +09:00
Tatsuhiro Tsujikawa
f785e56dba
Implement ALTSVC frame
2014-04-01 21:47:51 +09:00
Tatsuhiro Tsujikawa
6afb7442b5
Adjust weight when pushing data to queue
2014-03-31 23:01:05 +09:00
Tatsuhiro Tsujikawa
b85e2ab7f7
Share stream_group weight among streams marked as top
2014-03-31 22:51:33 +09:00
Tatsuhiro Tsujikawa
34581d830d
Define NGHTTP2_CLEARTEXT_PROTO_VERSION_ID
...
This identifier string is used if HTTP/2 is used over cleartext TCP.
2014-03-30 21:30:47 +09:00
Tatsuhiro Tsujikawa
60a2c260a5
Define NGHTTP2_CLIENT_CONNECTION_PREFACE macro
...
NGHTTP2_CLIENT_CONNECTION_PREFACE has the same content with
NGHTTP2_CLIENT_CONNECTION_HEADER, which is now obsoleted by
NGHTTP2_CLIENT_CONNECTION_PREFACE.
2014-03-30 21:02:25 +09:00
Tatsuhiro Tsujikawa
ab2dc5967d
Replace HTTP/2.0 with HTTP/2
2014-03-30 19:26:37 +09:00
Tatsuhiro Tsujikawa
705051ceb7
Update doc
2014-03-30 19:00:42 +09:00
Tatsuhiro Tsujikawa
d3962becf4
Ignore priority request if resultant tree has cycle
2014-03-30 18:48:32 +09:00
Tatsuhiro Tsujikawa
21d5986157
Fail nghttp2_submit_settings if there is pending SETTINGS frame in-flight
...
pending_local_max_concurrent_stream is now set in
nghttp2_session_add_settings, rather than after frame was sent.
2014-03-30 18:07:52 +09:00
Tatsuhiro Tsujikawa
74daa16a1c
Retain incoming closed streams for dependency tree
...
The number of closed stream to keep is limited by
MAX_CONCURRENT_STREAMS - current active stream.
2014-03-30 17:41:54 +09:00
Tatsuhiro Tsujikawa
a9d97d9d35
Update doc
2014-03-30 01:34:13 +09:00
Tatsuhiro Tsujikawa
c12b6bc360
Call on_stream_close_callback for a stream in reserved state
...
This is useful because application may allocate resources for it and
wants to free the resources if they are not used anymore.
2014-03-30 01:24:16 +09:00
Tatsuhiro Tsujikawa
58da463ad6
Make deflater bad state if parsing HEADERS/PUSH_PROMISE failed
2014-03-30 01:24:16 +09:00
Tatsuhiro Tsujikawa
36c8de9da5
Limit the number of streams in one dependency tree
2014-03-30 01:24:16 +09:00
Tatsuhiro Tsujikawa
f7162ab702
Implement dependency based priority
2014-03-30 01:24:16 +09:00
Tatsuhiro Tsujikawa
dbb82b0f9c
Make opaque_data parameter in nghttp2_submit_goaway const
2014-03-22 19:05:58 +09:00
Tatsuhiro Tsujikawa
e1eebf08fb
Support DEBUG_DATA in GOAWAY again
2014-03-22 18:59:59 +09:00
Tatsuhiro Tsujikawa
01586f473d
Wrap small inbound buffer by nghttp_buf
2014-03-22 18:27:38 +09:00
Tatsuhiro Tsujikawa
3c631b5625
Code cleanup
2014-03-22 17:16:25 +09:00
Tatsuhiro Tsujikawa
774cf88f68
Don't add RST_STREAM frame if stream is in NGHTTP2_STREAM_CLOSING
2014-03-22 00:51:40 +09:00
Tatsuhiro Tsujikawa
1dfe2f8670
Add nghttp2_session_get_stream_remote_window_size public API function
2014-03-22 00:34:25 +09:00
Tatsuhiro Tsujikawa
d0fbbe6932
Less cryptic debug message
2014-03-20 00:27:39 +09:00
Tatsuhiro Tsujikawa
c945d4ebbe
Fix compile error with --enable-debug
2014-03-19 23:24:46 +09:00
Tatsuhiro Tsujikawa
68b392817b
nghttp2_bufs: Add chunk_keep to specify the number of buffers to keep on reset
2014-03-16 21:38:13 +09:00
Tatsuhiro Tsujikawa
5b81f7c713
Don't show PAD_HIGH and PAD_LOW flags to user callback
2014-03-14 21:53:03 +09:00
Tatsuhiro Tsujikawa
2ec4b10805
Add nghttp2_buf tests
2014-03-14 21:40:14 +09:00
Tatsuhiro Tsujikawa
781d1a2b70
Code cleanup
2014-03-14 02:23:50 +09:00
Tatsuhiro Tsujikawa
142b433533
nghttp2_hd: Treat prematurely ended compressed header block as error properly
2014-03-14 00:52:44 +09:00
Tatsuhiro Tsujikawa
344d663e90
deflate_hd: Fix mishandled error return from emit_indexed_block
2014-03-14 00:25:03 +09:00
Tatsuhiro Tsujikawa
d48eca60cf
Fix broken nghttp2_bufs_avail
2014-03-14 00:24:34 +09:00
Tatsuhiro Tsujikawa
aefc0d1ebb
Use calloc instead of malloc + memset; remove useless memset
2014-03-13 23:27:14 +09:00
Tatsuhiro Tsujikawa
1be8d1b797
inflate_header_block: Issue RST_STREAM if header decompression failed
2014-03-13 23:02:33 +09:00
Tatsuhiro Tsujikawa
0fa4779d38
Don't call on_frame_recv_callback after stream close or being closed
2014-03-13 22:49:37 +09:00
Tatsuhiro Tsujikawa
d07bb1ddff
Rework outbound frame buffers
2014-03-13 22:11:02 +09:00
Tatsuhiro Tsujikawa
0666a73e10
Remove nghttp2_buffer
2014-03-11 21:20:51 +09:00