Commit Graph

707 Commits

Author SHA1 Message Date
Tatsuhiro Tsujikawa 2c1739a24e Add comment to category in HEADERS and reorder 2013-12-22 19:23:37 +09:00
Tatsuhiro Tsujikawa 7c4dbb6ffc nghttp2_hd: Don't malloc if huffman encoded string has 0 length 2013-12-19 23:19:14 +09:00
Tatsuhiro Tsujikawa 7a9eca1f7d nghttp2_hd: Simplify huffman encode 2013-12-19 23:02:48 +09:00
Tatsuhiro Tsujikawa 5ca0cfa018 nghttp2_hd: Search hd table once 2013-12-18 21:45:15 +09:00
Tatsuhiro Tsujikawa 12144acf4d nghttp2_hd: Check last byte of huffman encoded byte string strictly 2013-12-18 21:27:16 +09:00
Tatsuhiro Tsujikawa 01266182e9 nghttp2_hd: Match deflate_hd_tablelen to hd_table.len on decoder side 2013-12-17 21:39:21 +09:00
Tatsuhiro Tsujikawa 595493a0ec Add debug output in nghttp2_hd 2013-12-16 23:54:20 +09:00
Tatsuhiro Tsujikawa 650f63c728 Fail session on the reception of DATA in closed stream or illegal state 2013-12-15 16:23:01 +09:00
Tatsuhiro Tsujikawa 65e54ca7b0 Add nghttp2_free() 2013-12-14 23:49:16 +09:00
Tatsuhiro Tsujikawa bc7473182c Update doc 2013-12-14 19:18:14 +09:00
Tatsuhiro Tsujikawa 0867b57c39 Update doc 2013-12-14 18:59:09 +09:00
Tatsuhiro Tsujikawa e61876ccbd nghttp2_hd: Provide dedicated function to enable no reference set feature 2013-12-14 18:48:41 +09:00
Tatsuhiro Tsujikawa 41104f7b63 Abandon DATA frame priority adjustment (again)
We tried several times about this subject, but for the current
HTTP/2.0 priority scheme, we think it is best to serve the highest
priroty streams first (interleaving streams if there are several
higest ones). There are an issue when aggregating several frontend
connections to one connection in backend, but it is HTTP/2.0
spec issue, rather than implementation.
2013-12-14 17:02:59 +09:00
Tatsuhiro Tsujikawa 364501a2cd Get rid of magic value NGHTTP2_PRI_DECAY
For now we just double the priority value on each DATA frame
transmission. If priority is 0, it becomes to 1 and goes all
the way to (1 << 30) - 1.
2013-12-13 22:26:09 +09:00
Tatsuhiro Tsujikawa bcee1b27a7 Update doc 2013-12-12 00:30:15 +09:00
Tatsuhiro Tsujikawa e17f888944 Lower priority by constant value 2013-12-11 23:20:59 +09:00
Tatsuhiro Tsujikawa 9d49f9a356 Add copyright notice 2013-12-09 23:25:59 +09:00
Tatsuhiro Tsujikawa 6c77cec270 Remove nghttp2_submit_* API functions which has char **nv parameter
The nghttp2_submit_{request,response}2 functions are renamed as
nghttp2_submit_{request, response}.
2013-12-08 21:39:43 +09:00
Tatsuhiro Tsujikawa d6212a6055 Fix doc 2013-12-08 17:35:14 +09:00
Tatsuhiro Tsujikawa d773b42a2d Ensure that pri goes to the lowest value 2013-12-07 16:14:39 +09:00
Tatsuhiro Tsujikawa 6ea91e57e0 Adjust struct/class alignment 2013-12-06 23:17:38 +09:00
Tatsuhiro Tsujikawa 84d1fffb3f Announce HTTP-draft-09/2.0 2013-12-05 23:23:39 +09:00
Tatsuhiro Tsujikawa 1dea4e154b Reintroduce priority adjustment for DATA frame
This mechanism existed but was deleted. We bring it back in order to
prevent lower priority streams from starving.
2013-12-05 23:12:18 +09:00
Tatsuhiro Tsujikawa 3fde4c7669 nghttp2_map: Code cleanup 2013-12-05 19:26:16 +09:00
Tatsuhiro Tsujikawa a3c888d7d1 nghttp2_map: Implement hash table 2013-12-05 00:53:03 +09:00
Tatsuhiro Tsujikawa d0d0009a50 Use largest valid stream ID which passed to callback as last-stream-ID
Previously we use largest stream ID received so far as last-stream-ID,
and it is irrevant that it is passed to the callback (thus upper layer).
Now the stream ID which is passed to callback is eligible to
last-stream-ID.
2013-11-28 23:26:34 +09:00
Tatsuhiro Tsujikawa 2a83fc7559 Add nghttp2_submit_response2 2013-11-28 21:35:48 +09:00
Tatsuhiro Tsujikawa e57b3a2139 Set protocol ID to draft-08 temporarily 2013-11-21 21:58:45 +09:00
Tatsuhiro Tsujikawa bc21edf5b6 Interleave streams with the same priority 2013-11-19 23:59:10 +09:00
Tatsuhiro Tsujikawa e5e4fc9d14 nghttp2_hd: Define some headers not for indexing based on our research 2013-11-19 21:41:02 +09:00
Tatsuhiro Tsujikawa 8915e91b17 nghttp2_hd: Enlarge buffers used in inflation process dynamically 2013-11-16 23:13:46 +09:00
Tatsuhiro Tsujikawa 3d863ed254 nghttp2_hd: Clear reference set with index 0 2013-11-16 17:05:18 +09:00
Tatsuhiro Tsujikawa 5696a65c5e nghttp2_hd: Update doc 2013-11-16 16:33:38 +09:00
Tatsuhiro Tsujikawa 94ec4dbe42 nghttpd_hd: Update static table and use 1-based index
The specification now says that index to the header table entry is
1-based. Since 0-based index is very handy to access arrays, we
internally uses 0-based index. We just convert it to 1-based when
we emit to the block and convert 1-based to 0-based on decoding.
2013-11-16 16:18:44 +09:00
Tatsuhiro Tsujikawa 1f3840f4a2 Update doc 2013-11-15 00:57:15 +09:00
Tatsuhiro Tsujikawa 40347487c9 Don't sort headers in library code
Remove sorting headers from library code. The application must sort
them if necessary. nghttpx and nghttpd do the sorting of the headers
in stable way if names are equal.
2013-11-13 23:56:02 +09:00
Tatsuhiro Tsujikawa 45c3c5b80f Cleanup nghttp2_session_mem_recv 2013-11-12 10:52:03 +09:00
Tatsuhiro Tsujikawa a39a816a63 Cleanup nghttp2_session_next_data_read 2013-11-12 10:48:29 +09:00
Tatsuhiro Tsujikawa 5044b59453 Handle error from nghttp2_session_push_back_deferred_data 2013-11-12 10:44:04 +09:00
Tatsuhiro Tsujikawa 415b8ed674 Code cleanup 2013-11-08 01:47:29 +09:00
Tatsuhiro Tsujikawa ac354d3b91 Fix compile error with --enable-maintainer-mode 2013-11-08 01:35:15 +09:00
Tatsuhiro Tsujikawa 2ae788eddd Replace nghttp2_set_option with nghttp2_session_{client,server}_new2
nghttp2_session_client_new2 and nghttp2_session_server_new2 take
additional parameters which specifies session options.
nghttp2_set_option is somewhat crumsy because of type checking.
Now we use nghttp2_opt_set, which specifies individual options with
types. We changed the value of nghttp2_opt, so this change will
require re-compile.
2013-11-08 00:12:39 +09:00
Tatsuhiro Tsujikawa d92a161c46 nghttp2_hd_huffman: Code cleanup 2013-11-05 23:34:58 +09:00
Tatsuhiro Tsujikawa 0d6faa74b7 nghttp2_hd_huffman: Avoid memset on encoding 2013-11-03 22:31:06 +09:00
Tatsuhiro Tsujikawa 2d08d30409 nghttp2_hd: Fix crash 2013-11-03 17:46:10 +09:00
Tatsuhiro Tsujikawa 4bc44b0c0b Implement SETTINGS_ENABLE_PUSH
It is not clear that SETTINGS_ENABLE_PUSH = 0 disallows HEADERS
to the reserved streams. For now, we just check the reception
and transmission of PUSH_PROMISE against SETTINGS_ENABLE_PUSH.
2013-11-02 16:53:06 +09:00
Tatsuhiro Tsujikawa 29ef3fde8b Initialize settings in common function 2013-11-02 16:23:56 +09:00
Tatsuhiro Tsujikawa 66fce93d98 Update doc 2013-10-31 02:12:48 +09:00
Tatsuhiro Tsujikawa b0f76773e1 nghttp2_hd: Use defalte_hd_table_bufsize for decoder as well 2013-10-31 01:51:16 +09:00
Tatsuhiro Tsujikawa c8a9f8d312 nghttp2_hd: Fix crash on fail 2013-10-31 01:26:37 +09:00
Tatsuhiro Tsujikawa ad64f11a95 Remove code submitting WINDOW_UPDATE with negative delta
It is effectively dead code because we should have already submit
WINDOW_UPDATE before this case happens.
2013-10-30 23:43:40 +09:00
Tatsuhiro Tsujikawa 2e7bc014e1 Return 0 if recv_window_size is negative; add tests 2013-10-30 01:58:38 +09:00
Tatsuhiro Tsujikawa dfa1194804 Add new API to return effective recv data/win size for connection
Using this feature, connection level flow control is now enabled
in nghttpx.
2013-10-30 00:51:01 +09:00
Tatsuhiro Tsujikawa 6c23c34d77 Add new API to return effective received data length and local window size 2013-10-30 00:07:35 +09:00
Tatsuhiro Tsujikawa a4cf37306a Enfoce flow control error strictly
Now we have SETTINGS synchronization, flow control error can be
detected strictly. If DATA frame is received with length > 0 and
current received window size is equal to or larger than local
window size (latter happens when we shirnk window size), it is
subject to FLOW_CONTROL_ERROR,
2013-10-29 22:46:30 +09:00
Tatsuhiro Tsujikawa 6c99ff12c9 nghttp2_hd: Rename local as deflate 2013-10-29 00:42:08 +09:00
Tatsuhiro Tsujikawa 683253e334 Declare HTTP-draft-07/2.0 2013-10-27 23:16:49 +09:00
Tatsuhiro Tsujikawa bfa7dfb37e Use bit shift for easy reading 2013-10-27 23:09:10 +09:00
Tatsuhiro Tsujikawa 34b3833c71 Update doc 2013-10-27 21:27:48 +09:00
Tatsuhiro Tsujikawa 67ce60544e Change maximum frame length to 16383 2013-10-27 21:17:09 +09:00
Tatsuhiro Tsujikawa cfb9857f27 Use FRAME_SIZE_ERROR for invalid payload length 2013-10-27 20:55:44 +09:00
Tatsuhiro Tsujikawa 431f78f008 Rename NGHTTP2_ERR_FRAME_TOO_LARGE as NGHTTP2_ERR_FRAME_SIZE_ERROR 2013-10-27 19:35:36 +09:00
Tatsuhiro Tsujikawa 5ace898392 Update error code 2013-10-27 19:31:24 +09:00
Tatsuhiro Tsujikawa a46ccdb144 Apply initiated SETTINGS changes on reception of ACK 2013-10-27 19:22:51 +09:00
Tatsuhiro Tsujikawa 22df6f4190 nghttp2_hd: Fix bug on local_hd_table_bufsize_max > hd_table_bufsize_max 2013-10-26 23:30:48 +09:00
Tatsuhiro Tsujikawa cbdd44c4ae nghttp2_hd: Implement local header table size limit for encoder 2013-10-26 18:49:23 +09:00
Tatsuhiro Tsujikawa 8f8c841df0 Merge branch 'master' into hpack-exp 2013-10-25 22:51:51 +09:00
Tatsuhiro Tsujikawa 896db5b24f API change: Add flags parameter to all submit_* functions
The nghttp2_submit_{request,response} family do not get this change.
2013-10-25 22:50:24 +09:00
Tatsuhiro Tsujikawa abfc00983d nghttp2_hd: Fix memory leak and bad free 2013-10-24 23:49:37 +09:00
Tatsuhiro Tsujikawa 0c3cb104e9 nghttp2_hd: Share static table globally 2013-10-24 22:09:40 +09:00
Tatsuhiro Tsujikawa 5a81e03497 nghttp2_hd: Add static table entry to dynamic table on emission 2013-10-24 21:52:02 +09:00
Tatsuhiro Tsujikawa d5ccc89fc4 Update huffman table and static table
Use huffman table in https://github.com/grmocg/httpbis-header-compression
2013-10-21 23:56:14 +09:00
Tatsuhiro Tsujikawa 9e50ae46d9 nghttp_hd: Use NGHTTP2_HD_SIDE_{REQUEST,RESPONSE} instead of {CLIENT,SERVER}
This change conveys better notion about compression context.
2013-10-21 00:44:39 +09:00
Tatsuhiro Tsujikawa 8ef134a702 nghttp_hd: Refactor emit_indname_block and emit_newname_block 2013-10-21 00:22:14 +09:00
Tatsuhiro Tsujikawa 28aea5c6b7 nghttp_hd: Use huffman encoding only when it is usable
We use huffman encoding only when its encoded length is strictly less
than the original length.
As noted in the HPACK draft, the length of name/value is now 7-bit
prefix and its MSB is 1 if the following string is huffman encoded.
2013-10-20 23:59:15 +09:00
Tatsuhiro Tsujikawa a658f1367e encode_length: Or-ing first byte with prefix mask
So that we can preserve leading bits.
2013-10-20 16:28:52 +09:00
Tatsuhiro Tsujikawa 4e4fab01b1 Merge branch 'master' into hpack-exp
Conflicts:
	lib/nghttp2_hd.c
2013-10-18 20:06:36 +09:00
Tatsuhiro Tsujikawa 7b87d71121 nghttp2_hd: Fix missing return value handling 2013-10-18 19:48:15 +09:00
Tatsuhiro Tsujikawa 0efa6e657f Fix outbound flow control count
We wrongly added the whole payload length even if we sent part of it.
2013-10-18 19:43:59 +09:00
Tatsuhiro Tsujikawa 7bd145fd23 Fix out of bound array access in decode_length 2013-10-18 19:30:04 +09:00
Tatsuhiro Tsujikawa f7389ff2e6 Revert 622b05aa31
It turns out that 0-bit prefix is wrong, and the author now
clearly stated that the intention is 8-bit prefix for 8+ fields.
2013-10-18 19:28:01 +09:00
Tatsuhiro Tsujikawa 5add90489f Protocol ID change for HPACK experiment 2013-10-16 01:19:06 +09:00
Tatsuhiro Tsujikawa a2735ed025 Fix leak on failure 2013-10-16 00:12:33 +09:00
Tatsuhiro Tsujikawa ed43635c7b Updated latest initial static header table 2013-10-16 00:09:00 +09:00
Tatsuhiro Tsujikawa 50cdcca911 Implement static Huffman for header compression
The current implementation uses Huffman code tables described
in http://tools.ietf.org/html/draft-rpeon-httpbis-header-compression-03
2013-10-15 23:55:12 +09:00
Tatsuhiro Tsujikawa 5b1fc35e82 Make max header table size configurable 2013-10-13 19:24:21 +09:00
Tatsuhiro Tsujikawa afd5cd0585 Remove NGHTTP2_HD_INVALID_INDEX 2013-10-13 17:44:58 +09:00
Tatsuhiro Tsujikawa 6d7bcabe4c Don't allocate name when indexing with name in static table 2013-10-12 22:56:29 +09:00
Tatsuhiro Tsujikawa 8cf3731802 Experiment HPACK with upcoming changes
* remove substitution
* reversed insertion and removal from header table
* unified initial static table
2013-10-12 21:49:01 +09:00
Tatsuhiro Tsujikawa e85418f045 Fix local window size adjustments
Now shrinking local window size properly limits the amount of
WINDOW_UPDATE value so that shrinked window is honored.
2013-10-12 17:02:37 +09:00
Tatsuhiro Tsujikawa 622b05aa31 Fix HPACK using 0-bit prefix instead of 8-bits 2013-10-10 23:58:33 +09:00
Tatsuhiro Tsujikawa 2b9d4efa68 Refactor predicate_*_send functions 2013-10-04 22:42:34 +09:00
Tatsuhiro Tsujikawa 252c77f775 Return NGHTTP2_ERR_INVALID_STREAM_STATE for DATA, WINDOW_UPDATE to reserved
Use NGHTTP2_ERR_INVALID_STREAM_STATE when trying to send DATA or
WINDOW_UPDATE to reserved stream.
Also a bit refactored nghttp2_session_predicate_window_update_send
and nghttp2_session_predicate_data_send
2013-10-04 21:59:44 +09:00
Tatsuhiro Tsujikawa bddb4de946 Fix data_stream_id and data_flags are not assigned 2013-10-03 22:51:58 +09:00
Tatsuhiro Tsujikawa f30a238e41 Update doc 2013-09-28 23:13:55 +09:00
Tatsuhiro Tsujikawa 21d76dcc75 Add nghttp2_session_continue API function
The NGHTTP2_ERR_PAUSE library error code is introduced to pause
the execution of nghttp2_session_mem_recv() when that error code
is returned from nghttp2_on_frame_recv_callback or
nghttp2_on_data_chunk_recv_callback. If this happens, the parameters
available for both callbacks are retained until the application
calls nghttp2_session_continue(). The application must retain
input bytes which was used to produce the frame.
After successful call of nghttp2_session_continue, the application
can continue to call nghttp2_session_mem_recv() to process
additional data.
2013-09-28 17:59:24 +09:00
Tatsuhiro Tsujikawa 99ba622fed Add NGHTTP2_OPT_PEER_MAX_CONCURRENT_STREAMS option
And utilize it in nghttp to limit initial max concurrent streams.
2013-09-14 19:41:49 +09:00
Tatsuhiro Tsujikawa 94263216fb Add nghttp2_submit_request2
This function is similar to nghttp2_submit_request and the
difference is it takes an array of nghttp2_nv as name/value pairs.
It is useful if name/value pairs is not NULL-terminated in the
application code.
2013-09-11 00:55:35 +09:00
Tatsuhiro Tsujikawa 98273b7db1 nghttp2_pack_settings_payload: Make iv const
The reordering iv in the comment is no longer applied to the current
code base, therefore it is removed and iv is made to const pointer.
2013-09-09 21:30:39 +09:00
Daniel Stenberg a1c3f89c72 nghttp2_pack_settings_payload: added a buffer size argument
To make it less likely that a user gets a buffer overflow if a
too small buffer is used.
2013-09-09 21:22:27 +09:00
Tatsuhiro Tsujikawa f233a1a45e nghttp2.h: mention where user_data is set in the other callbacks as well 2013-09-07 23:45:18 +09:00
Daniel Stenberg f7dffc69b3 nghttp2.h: mention where user_data is set in the send_callback docs
Just to make it easier to find the info.
2013-09-07 21:00:51 +09:00
Daniel Stenberg 2bf08650de nghttp2.h: clarify nghttp2_pack_settings_payload docs 2013-09-07 20:53:49 +09:00
Tatsuhiro Tsujikawa c751a6e935 Fix cosmetic errors 2013-09-07 16:38:21 +09:00
Tatsuhiro Tsujikawa 2c127b5cb6 Remove unused functions/macros 2013-09-07 15:48:16 +09:00
Tatsuhiro Tsujikawa 3390c2356e Update doc 2013-09-07 15:28:43 +09:00
Tatsuhiro Tsujikawa 4db8338012 Fix resource leak 2013-09-07 01:45:54 +09:00
Tatsuhiro Tsujikawa 4dcf9ad4f2 Make hd encoder ordering aware and one-pass
The encoder algorithm is simplified and it now preserves ordering
of the headers. It also becomes one-pass encoder.
2013-09-06 21:53:28 +09:00
Tatsuhiro Tsujikawa 16076cbc2f Increase NGHTTP2_HD_MAX_ENTRY_SIZE to 3072 2013-09-06 00:17:46 +09:00
Tatsuhiro Tsujikawa a3762b5b1f Add doc about returning 0 from recv_callback 2013-09-05 23:23:17 +09:00
Tatsuhiro Tsujikawa 87abc8b951 nghttp2_session_on_window_update_received: Split into 2 functions 2013-09-05 23:21:00 +09:00
Tatsuhiro Tsujikawa 464f141593 Refactor deeply nested if blocks 2013-09-05 23:17:16 +09:00
Tatsuhiro Tsujikawa 2c264f60a6 Update doc 2013-09-04 21:53:38 +09:00
Tatsuhiro Tsujikawa 61c4250e20 nghttp2_info: Format doc for API doc generator 2013-09-04 21:46:35 +09:00
Daniel Stenberg 2f992a68f8 NGHTTP2_VERSION_NUM: have configure generate the define 2013-09-04 21:30:00 +09:00
Daniel Stenberg 66b89006d5 nghttp2_version: new function, returns info about this nghttp2
This returns run-time information about the lib
2013-09-04 21:30:00 +09:00
Daniel Stenberg e8ca112749 nghttp2.h: avoid compiler warnings due to comma after last enum
warning: comma at end of enumerator list [-Werror=pedantic]
2013-09-04 00:28:38 +09:00
Tatsuhiro Tsujikawa 7a9cff9b5a Fix typo 2013-09-03 21:44:18 +09:00
Tatsuhiro Tsujikawa faae05157c Merge branch 'bagder-master' 2013-09-03 21:43:42 +09:00
Tatsuhiro Tsujikawa 1723912f35 Call nghttp2_hd_end_headers from nghttp2_hd_deflate_hd 2013-09-03 21:41:22 +09:00
Tatsuhiro Tsujikawa d960cf8953 Add const to read-only nghttp2_frame* parameter in callbacks 2013-09-03 21:24:14 +09:00
Daniel Stenberg 96446ff295 libnghttp2.pc: use full name, fix Libs.private
Since the name of the file is 'libnghttp2*' I think we should use the
full name within it as well (for the Name: field), as it gets confusing
otherwise for users and for pkg-config.

Also, 'Requires.private' breaks pkg-config's ability to extract -I etc
from the Cflags below it. I believe it should be 'Libs.private' and the
right side should then list the libs with -l.

With these changes, I've successfully written a configure script to
find and use libnghttp2.
2013-09-02 23:05:39 +02:00
Tatsuhiro Tsujikawa a7bd4f33a3 Call on_stream_close_callback for stream in NGHTTP2_STREAM_INITIAL state
We call on_stream_close_callback even if stream->state is
NGHTTP2_STREAM_INITIAL. This will happen while sending request
HEADERS, a local endpoint receives RST_STREAM for that
stream. It may be PROTOCOL_ERROR, but without notifying stream
closure will hang the stream in a local endpoint.
2013-09-02 23:09:36 +09:00
Daniel Stenberg d192a602f4 session: remove unused struct field 'version'
Also the comment referred to non-existing SPDY defines
2013-09-01 16:04:04 +02:00
Tatsuhiro Tsujikawa 59286adc5e Add int return value to nghttp2_on_unknown_frame_recv_callback 2013-08-29 23:10:18 +09:00
Tatsuhiro Tsujikawa db4f519500 Add int return value to nghttp2_on_frame_recv_parse_error_callback 2013-08-29 23:07:07 +09:00
Tatsuhiro Tsujikawa 053c444769 Add int return value to nghttp2_on_request_recv_callback 2013-08-29 23:03:21 +09:00
Tatsuhiro Tsujikawa 81653c1d1b Add int return value to nghttp2_on_stream_close_callback 2013-08-29 22:58:05 +09:00
Tatsuhiro Tsujikawa 5a7f65f1f7 Add int return value to on_data_send_callback 2013-08-29 21:55:04 +09:00
Tatsuhiro Tsujikawa b9d2f9b6b0 Add int return value to on_frame_not_send_callback 2013-08-29 21:51:58 +09:00
Tatsuhiro Tsujikawa d4852b0f11 Add int return value to on_frame_send_callback 2013-08-29 21:48:34 +09:00
Tatsuhiro Tsujikawa a51cdaacfc Add int return value to nghttp2_before_frame_send_callback 2013-08-29 21:45:10 +09:00
Tatsuhiro Tsujikawa 544ac9f61f Add int return value to nghttp2_on_data_recv_callback 2013-08-29 21:41:33 +09:00
Tatsuhiro Tsujikawa 972b47d6af Add int return value to nghttp2_on_data_chunk_recv_callback 2013-08-29 21:39:32 +09:00
Tatsuhiro Tsujikawa fb7d22fcb9 Add int return value to nghttp2_on_invalid_frame_recv_callback 2013-08-29 21:37:26 +09:00
Tatsuhiro Tsujikawa a59cd3be82 Add int return value to nghttp2_on_frame_recv_callback 2013-08-29 21:33:52 +09:00
Tatsuhiro Tsujikawa 39d50f9b88 Update doc 2013-08-29 00:29:25 +09:00
Tatsuhiro Tsujikawa 66e5ac03a6 Connection error if header continuation is used by peer for now 2013-08-28 23:38:56 +09:00
Tatsuhiro Tsujikawa 5c6ef84b97 Use COMPRESSION_ERROR if the cause of error comes from compressor 2013-08-28 23:32:37 +09:00
Tatsuhiro Tsujikawa 83b0c89e3c Handle indexing entry greater than header table limit without error 2013-08-28 23:16:23 +09:00
Tatsuhiro Tsujikawa 4fe056d208 nghttp2_hd.c: Use rv != 0 instead of rv < 0 2013-08-28 21:35:18 +09:00
Tatsuhiro Tsujikawa f0ef6e980f Refactor nghttp2_hd_inflate_hd 2013-08-28 21:33:57 +09:00
Tatsuhiro Tsujikawa b37f99ca03 Connection error if payload size is strictly greater than (1 << 14) - 1
It would be desired to add option to make this limit configurable.
Fix scripted_recv_callback in tests.
2013-08-28 02:13:57 +09:00
Tatsuhiro Tsujikawa 1f3b96e233 nghttpx: Rewrite header handling 2013-08-28 00:09:46 +09:00
Tatsuhiro Tsujikawa 82b9f78fc7 Check incoming header field name strictly
The validation rule is described in
http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-02#section-4.1.2
2013-08-25 17:39:29 +09:00
Tatsuhiro Tsujikawa 091f38a99d Revise common header processing
Instead of emitting common headers on decoder side, encoder
now keeps track of removed common headers and encode it
as necessary.
2013-08-24 22:58:26 +09:00
Tatsuhiro Tsujikawa 2d41c99289 Connection error if header continuation is employed by peer for now 2013-08-24 19:28:57 +09:00
Tatsuhiro Tsujikawa 005e60a5ed Rework header compression 2013-08-23 23:38:28 +09:00
Tatsuhiro Tsujikawa 93e5b9e562 Fix bug common header disappear if it is evicted 2013-08-23 03:45:26 +09:00
Tatsuhiro Tsujikawa 346fafde3f Implement draft-ietf-httpbis-header-compression-02 2013-08-23 03:33:05 +09:00
Tatsuhiro Tsujikawa 0b005e3f22 Change the value of END_PUSH_PROMISE flag as per the spec 2013-08-23 03:33:05 +09:00
Tatsuhiro Tsujikawa d154faa9ab Set protocol version draft-06 2013-08-23 03:33:05 +09:00
Tatsuhiro Tsujikawa 30d3ea7c93 Use old C style comment 2013-08-23 03:33:05 +09:00
Tatsuhiro Tsujikawa 35229b250f Treat reception of DATA in reserved stream as connection error 2013-08-23 03:33:05 +09:00
Tatsuhiro Tsujikawa 618a1e0782 Update doc 2013-08-23 03:33:05 +09:00
Tatsuhiro Tsujikawa e278efdf38 Strict handling of connection error
Following cases are now treated as connection error of type
PROTOCOL_ERROR.

* Receiving HEADERS from client in reserved (local)
* Receiving PUSH_PROMISE against peer-initiated stream
* Receiving WINDOW_UPDATE against in reserved (local, remote)
2013-08-23 03:33:05 +09:00
Tatsuhiro Tsujikawa 0c9703fa2c Remove NGHTTP2_FLAG_END_FLOW_CONTROL 2013-08-23 03:33:05 +09:00
Tatsuhiro Tsujikawa f222403970 Update doc 2013-08-23 03:33:05 +09:00
Tatsuhiro Tsujikawa b1ae1c30d8 Allow duplicate settings ID in SETTINGS
If multiple same ID are found, use the last one.
2013-08-23 03:33:05 +09:00
Tatsuhiro Tsujikawa 591f73e043 Return error if nghttp2_gzip_inflate is invoked after Z_STREAM_END 2013-08-21 01:03:24 +09:00
Tatsuhiro Tsujikawa 407027452c Update doc 2013-08-17 22:34:57 +09:00
Tatsuhiro Tsujikawa 3ee7ca2cdd Handle non-fatal error from nghttp2_submit_data 2013-08-10 15:26:12 +09:00
Tatsuhiro Tsujikawa a52ca391a2 Do not RST_STREAM for DATA against nonexistent stream
This may be useful to the misbehaving implementation, but it could
result in lots of RST_STREAM, so just ignore it for now.
2013-08-10 15:13:53 +09:00
Tatsuhiro Tsujikawa 6ed8a8957b Early termination if stream is not found
Add this check in nghttp2_submit_{priority, window_update, data,
push_promise}.
2013-08-10 00:02:24 +09:00
Tatsuhiro Tsujikawa 80bacd0a54 Disable local flow control in nghttp2_submit_window_update() 2013-08-09 23:46:12 +09:00
Tatsuhiro Tsujikawa 1155606d5e Rewrite re-prioritization with PRIORITY 2013-08-09 23:40:41 +09:00
Tatsuhiro Tsujikawa 0dec04921d Remove priority adjustment for a DATA frame
Simply it does not work as expected.
2013-08-09 21:21:14 +09:00
Tatsuhiro Tsujikawa 6d8ab6ed0a Update doc 2013-08-09 01:51:45 +09:00
Tatsuhiro Tsujikawa 5dd6d86d66 Code cleanup 2013-08-09 01:46:07 +09:00
Tatsuhiro Tsujikawa a3ff4cb50b Rename window_size member of nghttp2_session as remote_window_size 2013-08-09 01:31:15 +09:00
Tatsuhiro Tsujikawa 19377fb3cd Allow disabling auto WINDOW_UPDATE for connection and stream individually
Now NGHTTP2_OPT_NO_AUTO_WINDOW_UPDATE is split into 2 options:
NGHTTP2_OPT_NO_AUTO_STREAM_WINDOW_UPDATE and
NGHTTP2_OPT_NO_AUTO_CONNECTION_WINDOW_UPDATE.
This is preparation for the upcoming removal of END_FLOW_CONTROL
flag. For nghttpx, instead of using END_FLOW_CONTROL to disable
connection-level flow control, increase window size by large
enough value, which is friendly way to current chromium
implementation.
2013-08-09 01:23:39 +09:00
Tatsuhiro Tsujikawa b979d2e8d2 Support increment/reduction of local window size by WINDOW_UPDATE 2013-08-09 00:58:52 +09:00
Tatsuhiro Tsujikawa e67096fef3 Handle overflow in initial window update in stream
Rename window_size in nghttp2_stream as remote_window_size.
2013-08-08 21:12:49 +09:00
Tatsuhiro Tsujikawa dcfa421d6f Fix connection-level flow control (local)
Fix the bug that connection-level local window is not updated
for the data is the last part of the stream. For the stream
level window may ignore this, connection-level window must
be updated. Also this change fixes the bug that connection-level
window is not updated for the ignored DATA frames.
2013-08-07 22:02:30 +09:00
Tatsuhiro Tsujikawa 55b074e96e Rename NGHTTP2_MAX_FRAME_SIZE as NGHTTP2_MAX_FRAME_LENGTH 2013-08-06 21:59:41 +09:00
Tatsuhiro Tsujikawa 73563de8d4 Specify max length for header value and header block
The max length of header block is not used right now. It will
be used when header continuation is implemented.
2013-08-06 21:57:26 +09:00
Tatsuhiro Tsujikawa c0a5ec8562 Update API doc 2013-08-04 18:27:07 +09:00
Tatsuhiro Tsujikawa ec733a6108 Remove unused nghttp2_mem_chunk 2013-08-04 18:03:41 +09:00
Tatsuhiro Tsujikawa b14d9d622f Fix error string 2013-08-03 23:45:10 +09:00
Tatsuhiro Tsujikawa ea5a1b60cf Change NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS
The previous value 100 is non-standard, and if it is not sent with
SETTINGS, session will be closed with protocol error.
2013-08-03 18:05:53 +09:00
Tatsuhiro Tsujikawa 737ac01d91 Add API for HTTP Upgrade 2013-08-03 18:05:14 +09:00
Tatsuhiro Tsujikawa bd64619cf5 Fix segmentation fault
Fix segmentation fault if DATA frame is received for the stream
which is already closed.
2013-07-31 20:32:44 +09:00
Tatsuhiro Tsujikawa 061b54fb72 Update doc 2013-07-28 19:39:43 +09:00
Tatsuhiro Tsujikawa 8033152e80 Disable local flow control on FLOW_CONTROL_OPTIONS = 1 2013-07-28 19:05:51 +09:00
Tatsuhiro Tsujikawa 608a493925 Change initial window size to 65535 2013-07-27 21:26:47 +09:00
Tatsuhiro Tsujikawa 7021a9fc5e Incremental indexing only when the entry size if less than threshold 2013-07-27 20:48:04 +09:00
Tatsuhiro Tsujikawa f74674aa7f Fix header compression (again) 2013-07-27 19:23:05 +09:00
Tatsuhiro Tsujikawa ddd04e8ced Fix header compression bug, and perform always incremental indexing 2013-07-27 00:58:38 +09:00
Tatsuhiro Tsujikawa 20173b5f61 NGHTTP2_SETTINGS_FLOW_CONTROL_OPTIONS: Check least significant bit only 2013-07-26 23:11:41 +09:00
Tatsuhiro Tsujikawa 459a269049 Define HTTP/2.0 protocol version ID 2013-07-26 01:38:04 +09:00
Tatsuhiro Tsujikawa 9c54e63871 Remove bogus assert 2013-07-26 01:34:57 +09:00
Tatsuhiro Tsujikawa e496800cb7 Fix header compression bug 2013-07-26 01:34:28 +09:00
Tatsuhiro Tsujikawa 48d7453a21 Rename SPDY terms 2013-07-25 21:18:13 +09:00
Tatsuhiro Tsujikawa 1056d8690e Rename functions related to HEADERS 2013-07-25 21:07:38 +09:00
Tatsuhiro Tsujikawa 3cc71a707e Rename nghttp2_headers_category members
Add NGHTTP2_HCAT_PUSH_RESPONSE
2013-07-25 20:57:50 +09:00
Tatsuhiro Tsujikawa 442e10cc78 Update doc 2013-07-25 02:13:13 +09:00
Tatsuhiro Tsujikawa 84cbebf4f7 Implement server push 2013-07-25 01:59:48 +09:00
Tatsuhiro Tsujikawa 321136b042 nghttp2_hd: Don't malloc if namelen/valuelen are zero 2013-07-23 23:10:53 +09:00
Tatsuhiro Tsujikawa 0000d3e7f9 Add test for nghttp2_nv_array_from_cstr 2013-07-23 23:03:18 +09:00
Tatsuhiro Tsujikawa b7ff05c4c6 Fail session if header compression failed on send 2013-07-23 22:47:15 +09:00
Tatsuhiro Tsujikawa 65cb559431 Change priority update scheme 2013-07-23 21:33:28 +09:00
Tatsuhiro Tsujikawa 3c9e31da87 Don't substitute if same indexed header field name is already in working set 2013-07-23 02:52:08 +09:00
Tatsuhiro Tsujikawa cca1d19d3d Fix WINDOW_UPDATE enum value 2013-07-23 02:08:32 +09:00
Tatsuhiro Tsujikawa ef3caffe8b Remove push related members from nghttp2_stream 2013-07-23 00:46:55 +09:00
Tatsuhiro Tsujikawa 4b6885ce9f Send PRIORITY with current stream priority 2013-07-23 00:36:20 +09:00
Tatsuhiro Tsujikawa 6f28d44bef Call nghttp2_session_handle_invalid_connection if stream_id == 0 or != 0 case 2013-07-23 00:33:47 +09:00
Tatsuhiro Tsujikawa 0bcf90d32d Support PRIORITY frame send and receive 2013-07-23 00:28:00 +09:00
Tatsuhiro Tsujikawa 9e9a7fb160 Add nghttpd and 24 bytes client connection header support 2013-07-22 21:56:19 +09:00
Tatsuhiro Tsujikawa 1dd21c1e30 Handle invalid stream ID (== 0 or != 0) cases 2013-07-21 18:40:47 +09:00
Tatsuhiro Tsujikawa ed39044273 nghttp2_session_handle_invalid_stream: Remove stream_id parameter 2013-07-21 18:26:29 +09:00
Tatsuhiro Tsujikawa ce47881e73 nghttp2_session_handle_parse_error: Call nghttp2_session_fail_session 2013-07-21 18:23:50 +09:00
Tatsuhiro Tsujikawa d96da77412 Add nghttp2_session_handle_invalid_connction to simply code 2013-07-21 18:20:23 +09:00
Tatsuhiro Tsujikawa 94258cd0b8 Move NGHTTP2_PRI_* to nghttp2.h, fix too small pri data type in src 2013-07-20 01:59:43 +09:00
Tatsuhiro Tsujikawa 8b3a3efadc Change priority increasing scheme 2013-07-20 01:58:44 +09:00
Tatsuhiro Tsujikawa 68afda92ac Cleanup 2013-07-20 01:28:52 +09:00
Tatsuhiro Tsujikawa b92b49f882 Cleanup 2013-07-20 01:27:26 +09:00
Tatsuhiro Tsujikawa 9c58004a86 Cleanup 2013-07-20 01:24:34 +09:00
Tatsuhiro Tsujikawa e92b74d66e Use substitution as long as no eviction is required 2013-07-20 01:19:00 +09:00
Tatsuhiro Tsujikawa aa87130711 Fix uninitialized nghttp2_hd_ws_entry index 2013-07-20 01:02:01 +09:00
Tatsuhiro Tsujikawa 00b2d06850 Refactor nghttp2_hd 2013-07-20 01:02:01 +09:00
Tatsuhiro Tsujikawa fb43f8aa93 Update doc 2013-07-20 00:28:25 +09:00
Tatsuhiro Tsujikawa aa4df35a10 Remove NGHTTP2_OPT_MAX_RECV_CTRL_FRAME_BUFFER option 2013-07-20 00:24:25 +09:00
Tatsuhiro Tsujikawa b5810479a4 Remove NGHTTP2_ERR_CREDENTIAL_PENDING check 2013-07-20 00:22:12 +09:00
Tatsuhiro Tsujikawa 3186dede72 Add comment 2013-07-20 00:21:07 +09:00
Tatsuhiro Tsujikawa 30d2c86a7a Remove old zlib compression and other cleanup 2013-07-20 00:20:16 +09:00
Tatsuhiro Tsujikawa 61bf7c6b02 Integrate new header compression 2013-07-20 00:08:14 +09:00
Tatsuhiro Tsujikawa 45c2245bfb Implement header compression draft 01 2013-07-19 16:50:31 +09:00
Tatsuhiro Tsujikawa 76b430c26b Invoke on_invalid_frame_recv_callback on session failure 2013-07-16 23:47:56 +09:00
Tatsuhiro Tsujikawa f9911a6251 Use realloc in nghttp2_reserve_buffer 2013-07-16 22:22:57 +09:00
Tatsuhiro Tsujikawa a3bdda68f8 End flow control by WINDOW_UPDATE 2013-07-16 21:30:36 +09:00
Tatsuhiro Tsujikawa d54cfb88ff Add connection-level flow control 2013-07-16 20:54:24 +09:00
Tatsuhiro Tsujikawa 1fdaa7e59a Disable flow control entirely with FLOW_CONTROL_OPTIONS 2013-07-16 18:26:57 +09:00
Tatsuhiro Tsujikawa 24cab312cf Make spdycat and spdyd barely work 2013-07-16 00:15:04 +09:00
Tatsuhiro Tsujikawa 48cb017245 Implement HTTP-draft-04/2.0 2013-07-15 21:45:59 +09:00
Tatsuhiro Tsujikawa 0edce70343 Rebranding nghttp2 2013-07-13 00:43:06 +09:00
Tatsuhiro Tsujikawa 9fc5c7c299 Adjust priority of outbound DATA frames so that it does not starve others 2013-05-26 15:40:16 +09:00
Tatsuhiro Tsujikawa f47bf214e5 Allow server initiated stream ID in associated-stream-id 2013-04-05 23:24:28 +09:00
Tatsuhiro Tsujikawa 439b34f49f Don't allow control characters in outgoing name/value pairs
This check is done in spdylay_submit_* family functions and they will
return error if they found control characters.
2013-03-23 21:23:13 +09:00
Tatsuhiro Tsujikawa 10c54e44ba Don't pack multiple empty header values in one header field
SPDY spec does not allow multiple empty header values in one header
field. This change makes out-going framer ignore such empty header
value if there is non-empty header value with the same name.
2013-03-23 19:31:22 +09:00
Tatsuhiro Tsujikawa 2ca7b51eb6 Fix the incoming last empty header value is not checked properly
This change fixes the bug that spdylay_frame_unpack_nv does not check
the size of header value if it is the last value in NULL separated
list.
2013-03-23 18:50:36 +09:00
Tatsuhiro Tsujikawa fc0cfc7faf Document about flags of spdylay_send_callback and spdylay_recv_callback 2013-03-01 21:01:45 +09:00
Tatsuhiro Tsujikawa cbb819aed7 spdylay_session_prep_frame: Remove dead code 2013-01-25 01:00:12 +09:00
Tatsuhiro Tsujikawa 258c7f1e65 spdylay_frame_pack_syn_reply: Make nv_offset ssize_t 2013-01-25 00:55:30 +09:00
Tatsuhiro Tsujikawa 0649a7ea61 Add spdylay_buffer_reader_count to replace bunch of 1 byte read 2013-01-22 00:12:15 +09:00
Tatsuhiro Tsujikawa 5adfd07e7c Fix SPDY/3 priority pack and unpack handling 2013-01-20 19:04:04 +09:00
Tatsuhiro Tsujikawa d81827c073 Update GOAWAY INTERNAL_ERROR value according to SPDY/3 spec change 2012-11-14 21:17:04 +09:00
Tatsuhiro Tsujikawa 46e7da2166 Get rid of flags member in spdylay_map 2012-10-05 23:41:49 +09:00
Tatsuhiro Tsujikawa 24e932dfa2 Iterative treap implementation
This change implements spdylay_map functions in iterative approach
instead of original recursive approach. The iterative version is
overall faster than recursive one. The traversal function
(spdylay_map_each) is slightly slower but it is not noticeable.
2012-10-05 00:46:03 +09:00
Tatsuhiro Tsujikawa 58619a4f97 Enable name/value header compression on server side 2012-09-15 00:47:17 +09:00
Tatsuhiro Tsujikawa 088e4f15a2 Check frame length after packing a frame
If resultant length of a frame exceeds the maximum value (which is
2**24 - 1 for SPDY/2 and 3), SPDYLAY_ERR_FRAME_TOO_LARGE is used to
indicate this error. This error will be notified by
on_ctrl_not_send_callback.
2012-09-14 22:41:55 +09:00