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
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
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
3daeadcb07
Remove bogus comments
2014-06-07 18:51:20 +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
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
832f2fc00f
Call on_data_chunk_recv_callback only when stream is active
2014-05-29 22:18:52 +09: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
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
4fffd23dd3
Code cleanup
2014-05-11 13:53:42 +09:00
Tatsuhiro Tsujikawa
4c8d4f8a85
Code cleanup
2014-05-10 00:13:40 +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
f207089604
Update doc
2014-05-06 18:34:48 +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
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
Tatsuhiro Tsujikawa
52b74144ee
Fix 0 size malloc, part 2
2014-04-30 22:40:43 +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
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
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
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
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
ece6521d26
Check stream availability when sending ALTSVC with stream_id != 0
2014-04-10 23:27:10 +09:00
Tatsuhiro Tsujikawa
7563839756
Update doc
2014-04-06 21:13:44 +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
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
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
ac2a8ef4a2
Fix bug that transfer stuck when stream marked as top is deferred
2014-04-03 15:48:51 +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
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
b85e2ab7f7
Share stream_group weight among streams marked as top
2014-03-31 22:51:33 +09:00
Tatsuhiro Tsujikawa
ab2dc5967d
Replace HTTP/2.0 with HTTP/2
2014-03-30 19:26:37 +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
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
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
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
781d1a2b70
Code cleanup
2014-03-14 02:23:50 +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
7b2d585896
Return 0 if nghttp2_session_prep_frame succeeds rather than frame length
2014-03-11 02:15:05 +09:00
Tatsuhiro Tsujikawa
74f899fc01
Replace NGHTTP2_MAX_FRAME_LENGTH with NGHTTP2_MAX_PAYLOADLEN
2014-03-11 02:01:08 +09:00
Tatsuhiro Tsujikawa
e803c6b65e
Replace NGHTTP2_FRAME_HEAD_LENGTH with NGHTTP2_FRAME_HDLEN
2014-03-11 01:55:42 +09:00
Tatsuhiro Tsujikawa
358b4386d3
Introduce nghttp2_buf to ease buffer management
2014-03-11 01:47:38 +09:00
Tatsuhiro Tsujikawa
54dab50015
Support END_SEGMENT in nghttp2_submit_data()
2014-03-06 00:19:02 +09:00
Tatsuhiro Tsujikawa
b60679808b
Filter supported flags in received frame
2014-03-05 23:25:42 +09:00
Tatsuhiro Tsujikawa
979feaecc6
Mitigate heap fragmentation when lots of concurrent http2 sessions run
2014-03-02 16:34:23 +09:00
Tatsuhiro Tsujikawa
d1c1deaf03
Add promised_stream_user_data parameter to nghttp2_submit_push_promise
...
This is very useful to associate application specific data to promised
stream.
nghttp2_nv_array_copy now does not complain the header field is large.
2014-02-25 00:26:12 +09:00
Tatsuhiro Tsujikawa
9703c5de5c
Code cleanup
2014-02-20 23:12:42 +09:00
Tatsuhiro Tsujikawa
3395f7158f
Strict handling of max concurrent streams
...
Exceeding ACKed max concurrent streams results in connection error.
This change fixes the bug that num_{incoming,outgoing}_streams
is decremented wrongly if a stream is in reserved state and
RST_STREAM is send and its state is changed to NGHTTP2_STREAM_CLOSING.
This change also fixes the bug that transmission of push response
HEADERS does not increase num_outgoing_streams.
2014-02-20 23:10:32 +09:00
Tatsuhiro Tsujikawa
4ced1c1622
Code cleanup
2014-02-19 01:08:52 +09:00
Tatsuhiro Tsujikawa
649586fff6
Add nghttp2_session_mem_send() API function
...
This function behaves like nghttp2_session_send(), but it does not
use nghttp2_send_callback to send data. Instead, it returns the
serialized data to trasmit and its length to the caller.
2014-02-18 23:23:11 +09:00
Tatsuhiro Tsujikawa
0da79865b8
Don't set PAD_HIGH and PAD_LOW flags to HEADERS/PUSH_PROMISE object to user cb
2014-02-15 17:12:17 +09:00
Tatsuhiro Tsujikawa
3f3f258cd6
Add padding to PUSH_PROMISE
2014-02-15 16:30:43 +09:00
Tatsuhiro Tsujikawa
1e95c8b313
Allow always max 1024 padding for HEADERS
...
We need paddings regardless of payload and frame boundary to mitigate
certain attacks.
Since we handles CONTINUATION internally, we don't show FLAG_PAD_HIGH
and PAD_LOW flags of HEADERS in nghttp/nghttpd. We just show the
total paddings in HEADERS + CONTINUATION.
2014-02-15 01:34:04 +09:00
Tatsuhiro Tsujikawa
622f783675
Disallow PUSH_PROMISE from client side
2014-02-14 16:12:04 +09:00
Tatsuhiro Tsujikawa
7ab4206269
Tear down connection if SETTINGS makes window size overflow
2014-02-14 16:08:39 +09:00
Tatsuhiro Tsujikawa
fd88c6160d
HPACK post -05 updates
...
* Use 1 Huffman code table for both request and response
* Remove complicated deflater side table size management
* Add encoding context update
* Fix memory leak in inflater
2014-02-13 23:22:52 +09:00
Tatsuhiro Tsujikawa
082876d92d
Contribute flow control window for each byte PAD_HIGH and _LOW in DATA
...
This may help the pathological situation where window is too small.
2014-02-12 21:35:40 +09:00
Tatsuhiro Tsujikawa
c7a17093cb
Fix compile errors with --enable-maintainer-mode
2014-02-11 21:39:35 +09:00
Tatsuhiro Tsujikawa
bac31e844a
Add more debug output
2014-02-11 21:35:41 +09:00
Tatsuhiro Tsujikawa
7822bbd7e8
Fix PAD_HIGH and PAD_LOW are not counted in flow control
2014-02-11 21:30:44 +09:00
Tatsuhiro Tsujikawa
dbb131d13d
Simplify framebufmark calculation for DATA frame
2014-02-11 18:55:22 +09:00
Tatsuhiro Tsujikawa
6364ae1a98
Fix nghttp2_active_outbound_item is not reset on DATA deferred
2014-02-11 18:43:45 +09:00
Tatsuhiro Tsujikawa
16b5e99e88
Bitwise-OR last CONTINUATION flags to first HEADERS flags
2014-02-11 17:30:38 +09:00
Tatsuhiro Tsujikawa
788072af9b
Fix HEADERS padding is not added
2014-02-11 17:23:08 +09:00
Tatsuhiro Tsujikawa
3144bcbe20
Remove unused iframe->error_code
2014-02-11 16:34:42 +09:00
Tatsuhiro Tsujikawa
eb2856f3df
Add inbound_frame_reset_left() not to forget to reset iframe->buflen
2014-02-11 16:33:07 +09:00
Tatsuhiro Tsujikawa
9865b46905
Don't change state in inbound_frame_handle_pad
2014-02-11 16:24:21 +09:00
Tatsuhiro Tsujikawa
78d202ac30
Callback based padding from application
...
Now previous padding options are removed and instead we added
select_padding_callback to select padding length for each frame
by application. If this callback is not implemented by application,
no padding is added.
This change also fixes the broken session_detect_idle_stream()
if stream_id is our side.
2014-02-11 15:28:44 +09:00
Tatsuhiro Tsujikawa
118ed09da5
Allow disabling padding
2014-02-09 23:53:53 +09:00
Tatsuhiro Tsujikawa
5b58b4ace5
Add padding if payload length is zero
2014-02-09 22:01:07 +09:00
Tatsuhiro Tsujikawa
68b5ffc1dc
Rename padding related names
2014-02-09 21:46:15 +09:00
Tatsuhiro Tsujikawa
ba95cd936d
Fix flow control error because padding is excluded
2014-02-09 18:26:46 +09:00
Tatsuhiro Tsujikawa
1db2195389
Implement padding for HEADERS and CONTINUATION
2014-02-09 15:17:26 +09:00
Tatsuhiro Tsujikawa
10feab02e8
Fix bufoff_ptr if no padding is made
2014-02-09 12:39:43 +09:00
Tatsuhiro Tsujikawa
e9d1ba2539
Handle incoming PAD_HIGH and PAD_LOW in inbound_frame_handle_padding
2014-02-09 12:39:43 +09:00
Tatsuhiro Tsujikawa
2ff3d97b2e
Add nghttp2_frame_add_pad to deal with adding pads
2014-02-09 12:39:43 +09:00
Tatsuhiro Tsujikawa
b6a0eff8a8
Add more DEBUGFs
2014-02-08 00:32:50 +09:00
Tatsuhiro Tsujikawa
814d0f76f3
Implement DATA frame padding
2014-02-08 00:23:18 +09:00
Tatsuhiro Tsujikawa
f26270b5b4
Change SETTINGS payload format according to the spec
2014-02-06 22:06:42 +09:00
Tatsuhiro Tsujikawa
40a5756564
Terminate connection if unknown frame type is received
2014-02-06 21:42:49 +09:00
Tatsuhiro Tsujikawa
f2c654f898
Fix reception of ENABLE_PUSH ignored; strict check for SETTINGS value
2014-02-06 21:39:58 +09:00
Tatsuhiro Tsujikawa
c79adf6997
Remove flow control disabling feature
2014-02-06 00:23:20 +09:00
Tatsuhiro Tsujikawa
08ff95d402
Detect frame reception for idle stream and make it connection error
...
Only stream ID which larger than currently used stream ID is
detected as idle.
2014-02-01 17:03:55 +09:00
Tatsuhiro Tsujikawa
2402b46cf3
Fix bug header block is not ignored as properly
2014-01-30 21:26:18 +09:00
Tatsuhiro Tsujikawa
ab684a9f30
Remove nghttp2_on_request_recv_callback
...
It is easy enough to check the end of incoming data by evaluating
frame->hd.flags & NGHTTP2_FLAG_END_STREAM in on_frame_recv_callback
2014-01-29 21:56:01 +09:00
Tatsuhiro Tsujikawa
bbdc015e84
Call on_frame_recv_callback for DATA even if stream has been closed
...
This makes the callback semantics consistent with the other
frames like HEADERS/PUSH_PROMISE.
2014-01-29 21:34:48 +09:00
Tatsuhiro Tsujikawa
e186e01933
Replace on_end_headers_callback with on_begin_headers_callback
...
Previously, there is inconsistency when on_frame_recv_callback
is called between HEADERS/PUSH_PROMISE and the other frames.
For former case, it is called before header block, in latter
case, it is called after whole frame is received. To make it
consistent, we call on_frame_recv_callback for HEADERS/PUSH_PROMISE
after its frame is fully received. Since on_frame_recv_callback
can signal the end of header block, we replaced on_end_headers_callback
with on_begin_headers_callback, which is called when the reception
of the header block is started.
2014-01-29 21:23:13 +09:00
Tatsuhiro Tsujikawa
4a56c0ae3d
Update doc
2014-01-28 01:59:21 +09:00
Tatsuhiro Tsujikawa
f308b7b512
Allow NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE return from on_headers_callback
2014-01-28 01:17:23 +09:00
Tatsuhiro Tsujikawa
7f5a87395e
Refactor a bit
2014-01-27 23:28:45 +09:00
Tatsuhiro Tsujikawa
a3193bee69
Code cleanup
2014-01-27 23:00:08 +09:00
Tatsuhiro Tsujikawa
a3082b7c1e
Remove nghttp2_on_data_recv_callback and nghttp2_on_data_send_callback
...
nghttp2_data is added to nghttp2_frame union. When DATA is
received, nghttp2_on_frame_recv_callback is called. When DATA is
sent, nghttp2_on_frame_send_callback is called.
2014-01-27 22:16:05 +09:00
Tatsuhiro Tsujikawa
fc07a62337
Rename nghttp2_data as nghttp2_private_data
...
This is a preparation to add public nghttp2_data struct to
nghttp2_frame union.
2014-01-27 21:22:33 +09:00
Tatsuhiro Tsujikawa
9314e30987
Support transmission of CONTINUATION, change nghttp2_frame_hd
...
The maximum frame size including header block is still limited
to NGHTTP2_HD_MAX_BUFFER_LENGTH, which is 32KB.
2014-01-26 23:10:33 +09:00
Tatsuhiro Tsujikawa
91401cfe26
Support CONTINUATION frame reception
2014-01-26 20:31:28 +09:00
Tatsuhiro Tsujikawa
e7fc2951b8
nghttp2_hd: Define dedicated struct for HPACK deflater and inflater
2014-01-26 17:53:04 +09:00
Tatsuhiro Tsujikawa
45a9f0b637
Remove nghttp2_frame_unpack_* functions
2014-01-26 16:46:18 +09:00
Tatsuhiro Tsujikawa
dba2406aba
nghttp2_sesson_mem_recv: Process incoming data in streaming fashion
...
Now incoming data is processed in very small buffer (up to 8 bytes)
using state machine. GOAWAY debug data can get to 16K - 1, and we
don't have callback for it. Since we don't want to buffer that
amount of data just for debugging, we currently discard it.
This change also makes parse_error callback not function.
It probably be removed from API.
2014-01-26 15:44:43 +09:00
Tatsuhiro Tsujikawa
8317559090
nghttp2_hd: Implement stream header inflater
...
This stream inflater can inflate incoming header block in streaming
fashion. Currently, we buffer up single name/value pair, but we chose
far more smaller buffer size than HTTP/2 frame size.
2014-01-25 18:24:15 +09:00
Tatsuhiro Tsujikawa
6540ac1bab
Fix crash
2014-01-23 21:25:49 +09:00
Tatsuhiro Tsujikawa
62e394b3e3
Fix memory leak
2014-01-23 00:28:23 +09:00
Tatsuhiro Tsujikawa
d647799c6f
Take int account received data length to check flow control error
2014-01-20 19:50:11 +09:00
Tatsuhiro Tsujikawa
594e1caad6
Code cleanup
2014-01-20 00:01:10 +09:00
Tatsuhiro Tsujikawa
d0968ea609
Tear down session if GOAWAY with stream ID != 0
2014-01-19 00:37:45 +09:00
Tatsuhiro Tsujikawa
2a95da6bee
Code cleanup
2014-01-18 16:25:44 +09:00
Tatsuhiro Tsujikawa
b6d039e888
Make nghttp2_is_fatal public API
2014-01-18 16:24:44 +09:00
Tatsuhiro Tsujikawa
e960c56aad
Don't call on_request_recv_callback if header decompression failed
2014-01-17 23:49:40 +09:00