Commit Graph

859 Commits

Author SHA1 Message Date
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
Tatsuhiro Tsujikawa 744f35e7ea Disable header compression for now 2012-09-14 21:43:41 +09:00
Tatsuhiro Tsujikawa b8d0b4034c Eliminate malloc in spdylay_map
We use intrusive style pattern in spdylay_stream, which now has
spdylay_map_entry has its first member.
2012-09-12 00:13:02 +09:00
Tatsuhiro Tsujikawa 4e5e741907 Add spdylay_npn_get_proto_list() public API function.
spdylay_npn_get_proto_list() returns a pointer to the supported SPDY
version list. The element of the list is spdylay_npn_proto struct. It
contains all SPDY version information this library supports. The
application can use this information to configure NPN protocol
offerings/selection.
2012-08-27 23:16:44 +09:00
Tatsuhiro Tsujikawa d8c4b19351 Fix error with w64-mingw32 cross compiler. Add --enable-example option. 2012-08-24 02:15:57 +09:00
Tatsuhiro Tsujikawa c59c591ee0 Updated doc 2012-08-22 21:33:35 +09:00
Tatsuhiro Tsujikawa c28b731ef0 Updated doc 2012-08-22 01:11:10 +09:00
Tatsuhiro Tsujikawa bafcbfde88 Remove unused zlib.h header file from spdylay.h 2012-08-22 00:14:02 +09:00
Tatsuhiro Tsujikawa f8fcee122a Check that empty name and NULL value are not included in nv 2012-08-21 23:19:15 +09:00
Tatsuhiro Tsujikawa 5dcdf95a67 Fix doc 2012-08-21 01:03:22 +09:00
Tatsuhiro Tsujikawa 7cc1c73120 Updated doc 2012-08-03 22:35:38 +09:00
Tatsuhiro Tsujikawa 05e6d527b1 Fix compile error on netbsd
Include config.h from sources under examples.  Added kevent.udata type
check.
2012-07-27 22:11:13 +09:00
Tatsuhiro Tsujikawa 5236394c1c Take into account shut_flags when accepting DATA frame 2012-06-14 22:39:44 +09:00
Tatsuhiro Tsujikawa adefcad530 Don't call on_data_recv_callback and on_data_chunk_recv_callback if
stream was closed or being closed.
2012-06-08 23:48:35 +09:00
Tatsuhiro Tsujikawa d654ad0cc6 Fixed bug on_ctrl_recv_callback not called for RST_STREAM 2012-06-04 23:44:18 +09:00
Tatsuhiro Tsujikawa 3c49a31a07 Fixed typo 2012-05-30 21:20:38 +09:00
Tatsuhiro Tsujikawa ad13e56617 Removed unused variable 2012-05-25 19:07:01 +09:00
Tatsuhiro Tsujikawa e13152c0a5 Made spdylay_strerror(0) return "Success" 2012-05-25 14:44:25 +09:00
Tatsuhiro Tsujikawa 4dd9c32c25 Added SPDYLAY_OPT_MAX_RECV_CTRL_FRAME_BUFFER option.
This option sets maximum receive buffer size for incoming control
frame.  Basically the library checks the length field of the incoming
control frame. For frames with name/value header block, the library
also checks the length of inflated block is also under the limit. This
is done while incrementally inflating block. If the length of frames
with name/value header block exceeds the limit, the library will issue
RST_STREAM with FRAME_TOO_LARGE. For other frames, it will issue
GOAWAY.
2012-05-25 13:49:18 +09:00
Tatsuhiro Tsujikawa a6ae4fc72c Incremental name/value block decompression 2012-05-25 10:46:40 +09:00
Tatsuhiro Tsujikawa a18f04e8c7 Fixed buffer overrun in spdylay_pq_push 2012-05-24 21:35:27 +09:00
Tatsuhiro Tsujikawa b06fa25ad2 Fixed compile error with -Wshadow. Fixed const cast. 2012-05-20 17:40:29 +09:00
Tatsuhiro Tsujikawa 6f066d7f64 Avoid overflow of spdylay_stream.recv_window_size 2012-05-20 16:13:26 +09:00
Tatsuhiro Tsujikawa b95e9a8c4c Made spdylay_submit_window_update() not be bounded by recv_window_size
Current SPDY/3 spec does not clearly prohibit to send
delta_window_size which makes resulting window size more than initial
window size. For this reason, spdylay_submit_window_update() can send
delta_window_size in [1, (1 << 31)-1], inclusive, without bounded by
stream's recv_window_size. Of course, the application is now
responsible to keep the resulting window size <= (1 << 31)-1.

spdylay_submit_window_update() now returns
SPDYLAY_ERR_INVALID_ARGUMENT if delta_window_size is 0 or negative.
2012-05-20 16:09:57 +09:00
Tatsuhiro Tsujikawa 3be09efbde Fixed the bug that erase_rotate_recur() erases parent node. 2012-05-19 00:49:15 +09:00
Tatsuhiro Tsujikawa f96c7f8720 Updated doc 2012-05-16 23:48:27 +09:00
Tatsuhiro Tsujikawa c53e7613c9 Renamed index in spdylay_get_credential_cert prototype to idx
This is because compiler may warn that name `index` shadows global
declaration if the application code uses the prototype argument names
as is.
2012-05-13 17:40:18 +09:00
Tatsuhiro Tsujikawa 88599228f8 Prefer spdy/3 to spdy/2 in spdylay_select_next_protocol() 2012-05-12 18:23:17 +09:00
Tatsuhiro Tsujikawa 5c187b950f spdylay_data_source_read_callback can return
SPDYLAY_ERR_TEMPORAL_CALLBACK_FAILURE to signal stream error.
2012-05-12 18:19:05 +09:00
Tatsuhiro Tsujikawa 42c0e3c758 Renamed error as error_code in spdylay_on_ctrl_not_send_callback prototype 2012-05-11 23:33:46 +09:00
Tatsuhiro Tsujikawa 93593a76ec spdylay_session_pack_data() now returns error code as specified in the doc. 2012-05-11 23:23:46 +09:00
Tatsuhiro Tsujikawa ef2bd10d94 Check window size is positive when bringing back deferred DATA frame
when WINDOW_UPDATE is received.
2012-05-11 23:02:13 +09:00
Tatsuhiro Tsujikawa 9b619e5dd7 Bring back deferred DATA to the outbound queue when SETTINGS with
INITIAL_WINDOW_SIZE is received and the window size becomes positive.
2012-05-11 23:01:40 +09:00
Tatsuhiro Tsujikawa 3e2dc04264 Fixed the bug that spdylay_recv does not return SPDYLAY_ERR_EOF. 2012-05-11 00:21:36 +09:00
Tatsuhiro Tsujikawa 0288bedabb Renamed FRAME_TOO_LARGE as SPDYLAY_FRAME_TOO_LARGE 2012-05-09 23:29:33 +09:00
Tatsuhiro Tsujikawa b371a0ae19 Updated doc 2012-05-09 23:25:31 +09:00
Tatsuhiro Tsujikawa 1158de22a3 Added status_code argument to spdylay_on_invalid_ctrl_recv_callback 2012-05-09 23:10:52 +09:00
Tatsuhiro Tsujikawa 649e62bd33 Updated doc 2012-05-09 23:03:16 +09:00
Tatsuhiro Tsujikawa d377fe0dc6 Added spdylay_strerror() public API. 2012-05-09 23:01:46 +09:00
Tatsuhiro Tsujikawa c68a0b5e6d Added spdylay_on_unknown_ctrl_recv_callback.
This callback function is invoked when the unknown frame type is received.
Added debug output using this callback to spdycat.
2012-05-09 22:41:08 +09:00
Tatsuhiro Tsujikawa 171bede1fa Added spdylay_session_on_ctrl_recv_parse_error_callback.
This callback function is invoked when the received frame data could not
be parsed correctly.
Added debug output using this callback to spdycat.
2012-05-09 21:55:21 +09:00
Tatsuhiro Tsujikawa b7429e7c2d Added spdylay_submit_window_update() public API. 2012-05-08 23:41:59 +09:00
Tatsuhiro Tsujikawa fa04757ff4 Don't send WINDOW_UPDATE automatically if SPDYLAY_OPT_NO_AUTO_WINDOW_UPDATE
is set.
2012-05-08 23:29:24 +09:00
Tatsuhiro Tsujikawa d6a03f74b7 Updated doc 2012-05-08 23:00:32 +09:00
Tatsuhiro Tsujikawa 13ea7c60ba Added spdylay_session_set_option() public API. 2012-05-08 22:59:34 +09:00
Tatsuhiro Tsujikawa 02e4440e4a Having the number of server and client streams be limited separately
using SETTINGS_MAX_CONCURRENT_STREAMS
2012-05-08 00:59:26 +09:00
Tatsuhiro Tsujikawa 67eca8d078 Use local_settings' INITIAL_WINDOW_SIZE when deciding to send WINDOW_UPDATE. 2012-05-08 00:08:24 +09:00
Tatsuhiro Tsujikawa 7972bd79b9 Initialized opaque with Z_NULL 2012-05-07 22:57:07 +09:00
Tatsuhiro Tsujikawa 5412ccf129 Renamed spdylay_gzip API. Added test for them. 2012-05-07 22:56:28 +09:00
Jim Morrison 1a384a6000 Move inflate functions to libspdylay from examples. 2012-04-30 12:36:37 -07:00
Tatsuhiro Tsujikawa a87303a731 Added zlib to Requires.private and updated Description 2012-04-26 23:32:17 +09:00
Tatsuhiro Tsujikawa b7392acf46 Document markup fix 2012-04-25 21:33:38 +09:00
Tatsuhiro Tsujikawa f21c0ee3d9 Don't call spdylay_zlib_inflate_free when inflateInit failed. 2012-04-24 22:40:59 +09:00
Tatsuhiro Tsujikawa 36ba636e30 Fixed memory leak in out of memory situation 2012-04-06 23:36:10 +09:00
Tatsuhiro Tsujikawa c89fc13c80 Fixed segmentation fault in out of memory situation 2012-04-06 23:35:30 +09:00
Tatsuhiro Tsujikawa d2b189e573 Updated doc 2012-04-06 21:29:37 +09:00
Tatsuhiro Tsujikawa 08d53318cd Updated doc 2012-04-06 02:34:45 +09:00
Tatsuhiro Tsujikawa 94650de16e Exposed spdylay_session_fail_session() to the public API. 2012-04-06 02:16:01 +09:00
Tatsuhiro Tsujikawa ab0bd62b14 Changed SPDYLAY_ERR_CREDENTIAL_PENDING code 2012-04-06 02:07:29 +09:00
Tatsuhiro Tsujikawa a5c7301f4b Updated doc 2012-04-06 02:07:08 +09:00
Tatsuhiro Tsujikawa 9627d5355a Moved SPDYLAY_SETTINGS_MAX inside spdylay_settings_id. 2012-04-06 02:04:54 +09:00
Tatsuhiro Tsujikawa d1d0a16fba Wrote SETTINGS ID pack/unpack without WORDS_BIGENDIAN 2012-04-06 02:02:19 +09:00
Tatsuhiro Tsujikawa d83d1cd33a Added CREDENTIAL frame support. 2012-04-06 01:45:39 +09:00
Tatsuhiro Tsujikawa 4456d2506d Added callbacks for CREDENTIAL frame. 2012-04-02 22:44:37 +09:00
Tatsuhiro Tsujikawa 169857742b Call on_ctrl_send_callback and before_ctrl_send_callback for WINDOW_UPDATE. 2012-03-30 00:17:01 +09:00
Tatsuhiro Tsujikawa 90c2739a9c Renamed spdylay_frame.common as spdylay_frame.ctrl 2012-03-30 00:07:27 +09:00
Tatsuhiro Tsujikawa db04143f32 Use assert instead of abort 2012-03-30 00:02:42 +09:00
Tatsuhiro Tsujikawa ba56ed6c48 Hide spdylay_data from public API.
The spdylay_data contains full of implementation details and is not
used in public API. It should be hidden.
The spdylay_frame union now only contains the control frame.
2012-03-29 23:59:51 +09:00
Tatsuhiro Tsujikawa 67e83e09a6 Fixed duplicate name/value header block detection 2012-03-29 23:50:08 +09:00
Tatsuhiro Tsujikawa efebc1e1af Made SPDYLAY_PROTO_SPDY2 and SPDYLAY_PROTO_SPDY3 enum 2012-03-27 18:23:05 +09:00
Tatsuhiro Tsujikawa 200012f1b5 Removed SPDYLAY_SPDY2_PRI_LOWEST and SPDYLAY_SPDY3_PRI_LOWEST macros.
Made spdylay_session_get_pri_lowest() to get the lowest priority value
for the current session.

This change allows the application code to get the lowest priority value
without knowing the protocol version which the current session uses.
2012-03-26 23:35:20 +09:00
Tatsuhiro Tsujikawa 262cda86e8 Issue RST_STREAM with PROTOCOL_ERROR if invalid header block is received.
We say the header block is invalid if at least one of the following
condition is true:
There are duplicate header names; or the header names are not
encoded in US-ASCII character set and not lower cased; or the
header name is zero-length string; or the header value contains
multiple in-sequence NUL bytes.

spdylay_frame_unpack_nv() returns SPDYLAY_ERR_INVALID_HEADER_BLOCK
if the unpacking suceeded but it found the header block is invalid.
This means that caller treats it as success, but do additional
processing for invalid header block if it wants.
The functions calling spdylay_frame_unpack_nv() also return
SPDYLAY_ERR_INVALID_HEADER_BLOCK.
2012-03-26 23:19:58 +09:00
Tatsuhiro Tsujikawa 5deef03687 Moved include of arpa/inet.h to spdylay_net.h
spdylay_net.h is compatibility layer for network related header files.
In the nature of spdylay library it should not depend on the actual
networking implementations, but we need some system headers for
optimization. Currently, arpha/inet.h and netinet/in.h are needed for
ntoh*/hton* functions.
2012-03-24 00:14:04 +09:00
Tatsuhiro Tsujikawa e9b56ab1f6 Added @DEFS@ to CPPFLAGS/CFLAGS. 2012-03-24 00:07:56 +09:00
Tatsuhiro Tsujikawa 9e716eb635 Code cleanup: C89 and old-style-prototypes and definition. 2012-03-23 02:17:48 +09:00
Tatsuhiro Tsujikawa f40615a3dc Updated doc 2012-03-19 00:47:15 +09:00
Tatsuhiro Tsujikawa 33e86024d9 Updated doc 2012-03-17 23:44:49 +09:00
Tatsuhiro Tsujikawa 742a8bbac9 Added spdylay_session_mem_recv()
spdylay_session_mem_recv() processes input bytes as the received data
from the remote endpoint. spdylay_session_recv() uses it internally.
The spdylay_inbound_buffer and ibuf member in spdylay_session is removed.
The buffer is allocated in the stack when spdylay_session_recv() is called.
2012-03-17 23:39:38 +09:00
Tatsuhiro Tsujikawa 8f038ae4b6 Added spdylay_session_get_outbound_queue_size() 2012-03-15 23:06:28 +09:00
Tatsuhiro Tsujikawa b8e4116f9a Updated doc 2012-03-15 22:39:26 +09:00
Tatsuhiro Tsujikawa 488b5acec7 Sort nv after 3to2 and 2to3 translation. 2012-03-14 22:53:14 +09:00
Tatsuhiro Tsujikawa a01b63b37a Added doc about the required members for spdylay_session_callbacks when
it is passed to spdylay_session_{client,server}_new().
2012-03-14 00:36:53 +09:00
Tatsuhiro Tsujikawa 07b02404c3 Added API reference generator script.
Formatted the public APIs with Sphinx syntax.
2012-03-14 00:32:52 +09:00
Tatsuhiro Tsujikawa 686c2ea95d Merge git://github.com/sorced-jim/spdylay into sorced-jim-master 2012-03-11 22:44:39 +09:00
Tatsuhiro Tsujikawa 6024106695 Issue stream error with the status code STREAM_IN_USE if multiple SYN_REPLY
frames are received for the same active stream ID.
2012-03-11 22:42:22 +09:00
Tatsuhiro Tsujikawa ce6dc1303e Issue session error with PROTOCOL_ERROR if SYN_STREAM with a stream ID
which is less than any previously received SYN_STREAM.
2012-03-11 19:27:33 +09:00
Tatsuhiro Tsujikawa 8284746163 spdylay_submit_syn_stream: Return SPDYLAY_ERR_INVALID_ARGUMENT if even
Associated-To-Stream-ID is specified.
Check the Associated-To-Stream is active before sending SYN_STREAM.
2012-03-11 18:55:40 +09:00
Tatsuhiro Tsujikawa 94c7e89742 Renamed SPDYLAY_CONCURRENT_STREAMS_MAX as
SPDYLAY_INITIAL_MAX_CONCURRENT_STREAMS
2012-03-10 18:49:25 +09:00
Tatsuhiro Tsujikawa 02924b6dd0 Added spdylay_submit_settings 2012-03-10 18:41:01 +09:00
Tatsuhiro Tsujikawa 82e20192d8 Added functions to process received SETTINGS frame.
Now remote and local settings are stored separately.
The initial window size is included in SETTINGS frame, all active stream's
window sizes are now updated.
Removed the initial_window_size member from spdylay_stream because
it is the same as remote_settings's initial window size.
2012-03-10 00:10:11 +09:00
Tatsuhiro Tsujikawa 6c9e79e8ca Use SPDY/3 name in spdylay_settings_flag.
Added SPDYLAY_SETTINGS_CLIENT_CERTIFICATE_VECTOR_SIZE.
2012-03-09 21:38:05 +09:00
Tatsuhiro Tsujikawa d05d29b507 Added SPDY/3 SETTINGS frame pack/unpack 2012-03-08 23:49:26 +09:00
Tatsuhiro Tsujikawa 643238813d Added doc for spdylay_error values. 2012-03-08 22:44:17 +09:00
Tatsuhiro Tsujikawa e2092966ef Mentioned on_ctrl_not_send_callback in spdylay_session_send doc. 2012-03-08 22:02:48 +09:00
Tatsuhiro Tsujikawa fcde841cab Added spdylay_is_fatal 2012-03-08 00:40:17 +09:00
Tatsuhiro Tsujikawa 0a7c510147 Renamed SPDYLAY_ERR_STREAM_ALREADY_CLOSED as SPDYLAY_ERR_STREAM_CLOSED
Added doc for spdylay_error values
2012-03-08 00:37:18 +09:00
Tatsuhiro Tsujikawa 11020146f5 Added on_ctrl_not_send_callback.
This callback function is invoked after the control frame
is not sent because of the error. The error is indicated by
the error argument, which is one of the values defined in spdylay_error.
2012-03-08 00:18:18 +09:00
Jim Morrison dc1e79f409 Fix a typo. 2012-03-06 09:02:38 -08:00
Tatsuhiro Tsujikawa 185d929d86 Translate received SPDY/2 name/value pairs into SPDY/3 style.
The callback functions receives SPDY/3 style name/value pairs.
2012-03-07 00:42:47 +09:00
Tatsuhiro Tsujikawa 00abfc8dd3 Always accept SPDY/3 style name/value pairs from spdylay_submit_* and
translate them into SPDY/2 as needed.
2012-03-07 00:38:27 +09:00
Tatsuhiro Tsujikawa 7d9a7b3069 Don't return on partial write 2012-03-06 23:43:45 +09:00
Tatsuhiro Tsujikawa e2658ca757 Added doc about callback time chart and about how to get stream ID
of the request submitted by spdylay_submit_request().
2012-03-06 23:00:17 +09:00
Tatsuhiro Tsujikawa 8fd2fabef8 Made spdylay_select_next_protocol() return SPDY protocol version if one of
SPDY versions is selected.
2012-03-02 22:52:01 +09:00
Jim Morrison cee79961f6 Update documentation for spdylay_select_next_protocol. 2012-03-01 13:26:51 -08:00
Tatsuhiro Tsujikawa e29bb449e9 Exposed spdylay_frame_alloc_{pack,unpack}_nv for easy performance test 2012-03-01 23:52:15 +09:00
Tatsuhiro Tsujikawa a9d9126229 Assign 0 to GOAWAY status_code for SPDY/2 2012-03-01 22:39:26 +09:00
Tatsuhiro Tsujikawa abfc100edb Added convenient function spdylay_frame_nv_norm_copy() 2012-02-28 23:38:40 +09:00
Tatsuhiro Tsujikawa e79de111a4 Added spdylay_submit_syn_reply 2012-02-28 23:27:10 +09:00
Tatsuhiro Tsujikawa 9185629604 Fixed memory leak 2012-02-28 23:25:44 +09:00
Tatsuhiro Tsujikawa 7b3a6a2e8b Updated doc. 2012-02-28 23:14:32 +09:00
Tatsuhiro Tsujikawa 3ed2ab2451 Code cleanup 2012-02-28 21:42:31 +09:00
Tatsuhiro Tsujikawa a452893068 Fixed the potential dead lock in flow control. 2012-02-28 21:40:19 +09:00
Tatsuhiro Tsujikawa d5cc71c636 Added status_code handling to GOAWAY 2012-02-26 16:26:38 +09:00
Tatsuhiro Tsujikawa 88cd97843f Fixed GOAWAY length in SPDY/3 2012-02-26 01:48:18 +09:00
Tatsuhiro Tsujikawa 0a723aa10f Added spdylay_npn_get_version() 2012-02-26 01:30:41 +09:00
Tatsuhiro Tsujikawa 8693874340 Added SPDY/3 flow control. 2012-02-26 00:12:32 +09:00
Tatsuhiro Tsujikawa 4e62c75b02 Added function to pack and unpack WINDOW_UPDATE frame. 2012-02-25 01:47:37 +09:00
Tatsuhiro Tsujikawa 895562a15b Fixed uninitialized return value in spdylay_session_new() 2012-02-25 01:41:02 +09:00
Tatsuhiro Tsujikawa 847830f132 Added ability to pack/unpack SPDY/3 frames.
Added SPDY/3 zlib dictionary from draft-mbelshe-httpbis-spdy-00.
2012-02-25 01:17:03 +09:00
Tatsuhiro Tsujikawa 995ccbc8e5 Added version argument to spdylay_frame_*_init. Added version member to
spdylay_session.
2012-02-24 23:33:06 +09:00
Tatsuhiro Tsujikawa 7652d3f4ca Added support for 4 bytes length in name/value pair. 2012-02-24 23:05:49 +09:00
Tatsuhiro Tsujikawa cf7da38598 Define flags separately for control and data frames. 2012-02-24 21:40:13 +09:00
Tatsuhiro Tsujikawa 946e6f41af Updated doc 2012-02-24 00:05:45 +09:00
Tatsuhiro Tsujikawa 9dbec4f2bf Small refactoring 2012-02-24 00:04:35 +09:00
Tatsuhiro Tsujikawa 769150d5f7 Added spdylay_submit_headers function. 2012-02-24 00:02:29 +09:00
Tatsuhiro Tsujikawa e182308cb7 Fixed assoc_stream_id type. 2012-02-23 23:28:46 +09:00
Tatsuhiro Tsujikawa 75bdfbf256 Made data_prd argument const. 2012-02-23 23:22:58 +09:00
Tatsuhiro Tsujikawa 9e9e281bca Added spdylay_submit_syn_stream function. 2012-02-23 23:20:05 +09:00
Tatsuhiro Tsujikawa a1d2325a5e Assert where FATAL error is expected. Don't return arbitrary error code from
user callback. Updated doc.
2012-02-23 22:49:08 +09:00
Tatsuhiro Tsujikawa 5408a21ce9 Merged spdylay_session_pack_data_overwrite() into spdylay_session_pack_data().
spdylay_session_pack_data() now takes the maximum length of DATA payload.
2012-02-22 23:58:33 +09:00
Tatsuhiro Tsujikawa 05627f7712 Updated doc 2012-02-22 23:39:30 +09:00
Tatsuhiro Tsujikawa 33cd4b5946 Updated doc 2012-02-21 23:56:51 +09:00
Tatsuhiro Tsujikawa 11c83aae73 Updated doc 2012-02-21 23:24:16 +09:00
Tatsuhiro Tsujikawa 9fa8357bbc Made return value of spdylay_map_init() void. Updated doc. 2012-02-21 23:23:47 +09:00
Tatsuhiro Tsujikawa 37944253d2 Ensure read_callback is non-NULL for response bodies. 2012-02-21 22:04:24 +09:00
Jim Morrison 6e7025b9f5 Test that FLAG_FIN is set if the read callback is NULL. 2012-02-20 13:12:13 -08:00
Tatsuhiro Tsujikawa 54e4c80b96 Added stream_id argument to spdylay_data_source_read_callback 2012-02-19 23:48:39 +09:00
Tatsuhiro Tsujikawa 301eb29cd4 Added ability to postpone DATA frames for asynchronous I/O. 2012-02-19 23:42:25 +09:00
Tatsuhiro Tsujikawa 4f28698572 Fixed: if bytes of one frame are received in several chunks, unpacking fails. 2012-02-19 00:05:52 +09:00
Tatsuhiro Tsujikawa 03307116a2 Send GOAWAY when spdylay_frame_unpack_* is failed with non-fatal error.
SPDYLAY_ERR_ZLIB is now moved back to non-fatal error and it is subject
to GOAWAY if it occurred.
2012-02-18 21:55:40 +09:00
Tatsuhiro Tsujikawa b182179aca Check frame length strictly for GOAWAY, RST_STREAM and PING. 2012-02-18 21:51:57 +09:00
Tatsuhiro Tsujikawa 122c619260 Fixed spdylay_frame_count_nv_space() bug. Check all data is processed in spdylay_frame_count_unpack_nv_space() 2012-02-18 17:25:13 +09:00
Tatsuhiro Tsujikawa b1da54a549 Made SPDYLAY_ERR_ZLIB FATAL error. Removed SPDYLAY_ERR_ZLIB_BUF.
If SPDYLAY_ERR_ZLIB is encountered, zlib context is out of sync.
So we cannot further SYN_STREAM/SYN_REPLY/HEADERS frames.
I'm not sure we should send GOAWAY in this case.
So bail out with fatal error and drop connection for now.
2012-02-18 02:19:09 +09:00
Tatsuhiro Tsujikawa 005883e363 Added TODO comment 2012-02-17 00:34:36 +09:00
Tatsuhiro Tsujikawa 4dd43fc28f Updated doc 2012-02-16 23:48:12 +09:00
Tatsuhiro Tsujikawa 6cb4259232 Merge branch 'master' of https://github.com/sorced-jim/spdylay into sorced-jim-master 2012-02-16 23:41:53 +09:00
Tatsuhiro Tsujikawa b81b5a3116 Added eof member to spdylay_data to indicate all data are read.
Ensure that if flags contains SPDYLAY_FLAG_FIN, only the last DATA frame
has FLAG_FIN set.
2012-02-16 23:38:19 +09:00
Tatsuhiro Tsujikawa d4ba423248 Reuse session->iframe.buf for all incoming frames. 2012-02-16 23:09:06 +09:00
Tatsuhiro Tsujikawa 7a6bf8e5cc Allocate bytes divisible by 4KiB when expanding buffer 2012-02-16 22:54:08 +09:00
Tatsuhiro Tsujikawa 61cfa3b9f8 Simplified error handling in spdylay_session_new 2012-02-16 22:47:49 +09:00
Tatsuhiro Tsujikawa ac1629e61b Reuse buffers when unpacking frames. 2012-02-16 22:01:34 +09:00
Tatsuhiro Tsujikawa 050f33e8f9 Reuse buffers when packing frames.
Temporal name/value buffer will be shared by unpacking frame.
2012-02-16 20:54:30 +09:00
Jim Morrison 63353ea486 Ensure read_callback is non-NULL for request bodies. 2012-02-15 14:30:36 -08:00
Jim Morrison f05a67641f Be a bit more liberal about what methods accept message bodies. 2012-02-15 13:49:02 -08:00
Jim Morrison d04449eb28 Document that url should have the query parameters. 2012-02-15 13:33:30 -08:00
Tatsuhiro Tsujikawa 85ec883d11 Lower-case names in name/value pairs in spdylay_submit_{request, response} 2012-02-15 23:54:42 +09:00
Tatsuhiro Tsujikawa e7e2c69526 Renamed spdylay_submit_cancel() as spdylay_submit_rst_stream(). 2012-02-15 23:27:19 +09:00
Tatsuhiro Tsujikawa c1aefb3ba5 Added flags argument to spdylay_submit_data() and spdylay_frame_data_init().
The intention is make spdylay_submit_data() more generic, allowing trailing
DATA and/or HEADERS frames.
2012-02-15 23:02:51 +09:00
Tatsuhiro Tsujikawa 938f51964d Respond RST_STREAM with PROTOCOL_ERROR when upper cased name is present in nv. 2012-02-15 22:11:42 +09:00
Tatsuhiro Tsujikawa f71572b835 Don't send DATA frame if RST_STREAM was queued for this stream. 2012-02-15 01:07:51 +09:00
Tatsuhiro Tsujikawa fd06d21638 Call on_stream_close_callback when server pushed SYN_STREAM has FIN flag set.
Don't mix status code and return value in
spdylay_session_on_syn_stream_received.
2012-02-15 00:45:09 +09:00
Tatsuhiro Tsujikawa 97b853254a Fixed the bug that length parameter in on_data_send_callback includes header length. 2012-02-14 01:42:00 +09:00
Tatsuhiro Tsujikawa 7abf48f061 Fixed typo 2012-02-13 01:41:35 +09:00
Tatsuhiro Tsujikawa 81307745c4 Made spdylay_outbound_item_compar() static 2012-02-13 00:48:03 +09:00
Tatsuhiro Tsujikawa a48ad800b2 When a stream is canceled by RST_STREAM, don't send further DATA on that stream. 2012-02-12 19:01:23 +09:00
Tatsuhiro Tsujikawa 9e3191a548 Updated doc 2012-02-12 17:43:50 +09:00
Tatsuhiro Tsujikawa a4961a95bd Moved spdylay_submit_* functions to spdylay_submit.c 2012-02-12 17:41:55 +09:00
Tatsuhiro Tsujikawa 8fac259285 For non-overlap case, made out and outlen left untouched 2012-02-09 22:46:26 +09:00
Tatsuhiro Tsujikawa 4f5c6b60ef Ignore control frame other than SYN_STREAM if version != SPDYLAY_PROTO_VERSION 2012-02-09 00:27:22 +09:00
Tatsuhiro Tsujikawa d7e58b5cab Updated doc 2012-02-08 23:51:52 +09:00
Tatsuhiro Tsujikawa 34f0f6be1b Refuse incoming SYN_STREAM with SPDYLAY_REFUSED_STREAM if max-concurrent-streams number is reached. 2012-02-08 23:45:48 +09:00
Tatsuhiro Tsujikawa 580a2b1b1e Updated doc 2012-02-08 22:34:48 +09:00
Tatsuhiro Tsujikawa 656a4b6e72 Fixed compiler warning 2012-02-08 21:49:15 +09:00
Tatsuhiro Tsujikawa 679159878f Merge branch 'master' of https://github.com/sorced-jim/spdylay into sorced-jim-master
Conflicts:
	tests/main.c
	tests/spdylay_session_test.c
	tests/spdylay_session_test.h
2012-02-08 21:37:44 +09:00
Tatsuhiro Tsujikawa b8700259fd Changed behaviour of spdylay_select_next_protocol()
We use following algorithm to select protocol:

 1. If server's list contains "spdy/2", this function selects
    "spdy/2" and returns 1. The following steps are not taken.

 2. If server's list contains "http/1.1", this function selects
    "http/1.1" and returns 0. The following step is not taken.

 3. This function selects "spdy/2" and returns -1. (So called
    non-overlap case).
2012-02-08 21:20:50 +09:00
Jim Morrison 4298dc8a51 Erase the stream from the map after calling the on_stream_close callback 2012-02-07 14:17:38 -08:00
Tatsuhiro Tsujikawa 6904ccc023 Removed unused debug function 2012-02-08 01:28:59 +09:00
Tatsuhiro Tsujikawa 154b02c464 Set max outbound DATA frame length to 8+4KiB 2012-02-08 01:28:00 +09:00
Tatsuhiro Tsujikawa 59329b0070 Set buffer size of inbound frames to 16KiB. 2012-02-08 01:25:26 +09:00
Tatsuhiro Tsujikawa 4630dfb4fe Added spdylay_on_request_recv_callback function.
This function invoked when request from remote peer is
received.  In other words, frame with FIN flag set is received.  In
HTTP, this means HTTP request, including request body, is fully
received.
2012-02-08 00:11:44 +09:00
Tatsuhiro Tsujikawa e8a9268985 Included spdylayver.h from spdylay.h 2012-02-07 21:19:23 +09:00
Tatsuhiro Tsujikawa 5012f177d0 Fixed 2 bugs: incorrect DATA frame length and data payload is zero-cleard. 2012-02-07 02:04:00 +09:00
Tatsuhiro Tsujikawa a14b9a1ba6 Added spdylay_submit_cancel() to send RST_STREAM 2012-02-06 21:20:35 +09:00
Tatsuhiro Tsujikawa 00bed87537 Support max concurrent streams limit.
If max concurrent streams limit is reached, SYN_STREAM frames are not sent
and backed off. If other type of frame is waiting in the tx queue, it is
sent first. We introduced another priority queue for this purpose.
In this change we did not add code to send RST_STREAM when SYN_STREAM is
received but max concurrent stream is reached.
2012-02-06 00:14:19 +09:00
Tatsuhiro Tsujikawa d4c5f39cf9 Don't check multiple in-sequence NULL in spdylay_frame_count_unpack_nv_space
If we return negative error code in that function, it means frame will not
unpacked and ends up to lose any information the frame contains.
The spec says it should send RST_STREAM with PROTOCOL_ERROR, so we need
at least stream ID.
Therefore, the check should be performed in
spdylay_session_on_syn_stream_received().
2012-02-05 21:57:55 +09:00
Tatsuhiro Tsujikawa d0cd362852 Changed spdylay_select_next_protocol behaviour
It now always select "spdy/2" as a next protocol regardless whether or not
the server advertises it. The NPN draft allows this.
Returning integer version number is not flexible because the selected protcol
is just a string.
The function now returns 0 if the server advertised spdy/2, or -1.
2012-02-05 21:48:20 +09:00
Tatsuhiro Tsujikawa 8b20e83652 Rewritten spdylay_frame_unpack_nv().
We use just single buffer to store name/value headers fields, instead of
allocating memory for each name/value strings.
It is now more than 2 times faster than old one.
2012-02-04 23:09:03 +09:00
Tatsuhiro Tsujikawa 1f72165549 Added stream_user_data arg to spdylay_submit_request() to identify stream ID later easily.
Specified stream_user_data_arg can be retrieved by
spdylay_session_get_stream_user_data() function. The application code can use
this function insde spdylay_on_ctrl_send_callback() and identify stream ID
for the request associated by the stream_user_data.
The sample usage is in examples/spdycat.cc.
2012-02-04 01:37:21 +09:00
Tatsuhiro Tsujikawa 876c33c562 Merge branch 'master' of https://github.com/sorced-jim/spdylay into sorced-jim-master
Conflicts:
	examples/spdylay_ssl.cc
	tests/Makefile.am
	tests/main.c

Changes:
        spdylay_select_next_protocol() returns -1 if it fails.
        Use cunit without pkg-config because debian does not provide .pc file.
        Some doc updates to suite my taste.
        Added spdylay_npn.h
2012-02-03 23:53:43 +09:00
Jim Morrison ea60bd8c6e Add an NPN callback helper that finds the correct version of spdy 2012-02-02 16:31:11 -08:00
Tatsuhiro Tsujikawa df4a1b8da4 Updated doc 2012-02-02 23:23:35 +09:00
Tatsuhiro Tsujikawa 4030c5ccf5 Closes all server-pushed streams when original stream is closed by RST_STREAM with CANCEL from client.
Fixed spdylay_session_is_my_stream_id()
2012-02-02 23:20:25 +09:00
Tatsuhiro Tsujikawa bb6a90dc4d Added spdylay_stream_add_pushed_stream
With this function and 3 new member in spdylay_stream, we can track server-
pushed streams which associate them to this stream.
2012-02-02 21:51:52 +09:00
Tatsuhiro Tsujikawa 562278194c Added server push SYN_STREAM validation. Added spdylay_session_server_new()
We still does not check "url" is in nv.
2012-02-02 00:19:31 +09:00
Tatsuhiro Tsujikawa 24eb3a3b36 SETTINGS ID is little endian in wire format despite the fact that spec/2 says it is network byte order. 2012-02-01 01:13:17 +09:00
Tatsuhiro Tsujikawa f429cc45cb Added SETTINGS send/recv. Added missing RST_STREAM send. 2012-02-01 01:12:26 +09:00
Tatsuhiro Tsujikawa 0b75800c23 Added SETTINGS frame and its pack/unpack functions. 2012-02-01 00:26:26 +09:00
Tatsuhiro Tsujikawa 49096387c3 Added seq sort key in ob_pq to preserve the queueing order if priorit is the same. 2012-01-31 22:48:09 +09:00
Tatsuhiro Tsujikawa b87eb8987e Fixed compile error with gcc-4.4 2012-01-31 21:32:46 +09:00
Tatsuhiro Tsujikawa 1139502675 Removed on_ping_recv_callback. Removed last_ping_time from spdylay_session. 2012-01-31 21:29:46 +09:00
Jim Morrison 732f1cf21f Include sys/types.h 2012-01-30 17:11:14 -08:00
Tatsuhiro Tsujikawa 856d230595 The response DATA frame is now queued after SYN_STREAM/SYN_REPLY has been sent.
This is because our priority queue implementation does not have stable sort
property, so queueing SYN_STREAM, DATA in this order does not necessarily
mean SYN_STREAM will be sent first.
2012-01-30 23:55:00 +09:00
Tatsuhiro Tsujikawa e5dc14e20c Use CLOCK_MONOTONIC_RAW 2012-01-30 22:52:56 +09:00
Tatsuhiro Tsujikawa 6e12291ae1 Added spdylay_on_stream_close_callback 2012-01-29 23:00:33 +09:00
Tatsuhiro Tsujikawa bf1be4850e spdylay_submit_request: Fixed segmentation fault if data_prd is NULL 2012-01-29 19:15:59 +09:00
Tatsuhiro Tsujikawa 3d4cf8aec3 Added data_prd arugment to spdylay_submit_request() and supported POST request. 2012-01-29 19:07:31 +09:00
Tatsuhiro Tsujikawa c6a0fd06c1 Added doc 2012-01-29 17:07:13 +09:00
Tatsuhiro Tsujikawa 925078c199 Added handling of EOF from recv_callback 2012-01-29 16:46:18 +09:00
Tatsuhiro Tsujikawa 06dae79b28 Discard inbound HEADERS and DATA in CLOSING state. Handle stream shutdown when DATA is received with FIN bit set. 2012-01-29 16:27:00 +09:00
Tatsuhiro Tsujikawa e212eea08a Don't send GOAWAY when it is received from peer. Fixed want_read, want_write. 2012-01-29 15:11:10 +09:00
Tatsuhiro Tsujikawa ebd3dc9dcc Fixed bug that unique_id is not incremented by 2. 2012-01-29 02:00:03 +09:00
Tatsuhiro Tsujikawa 8afb91bae8 Added public API headers for distribution 2012-01-29 00:22:50 +09:00
Tatsuhiro Tsujikawa 580638c482 Made spdylay_session_open_stream return a pointer to created spdylay_stream. 2012-01-29 00:16:51 +09:00
Tatsuhiro Tsujikawa 971e46f563 More explicit handling of shutdown status of read and write in each stream. 2012-01-29 00:08:51 +09:00
Tatsuhiro Tsujikawa e7489503b8 Check protocol version. Check incoming DATA frame's stream ID. 2012-01-28 22:46:12 +09:00
Tatsuhiro Tsujikawa 31aff01697 Added spdylay_submit_goaway() 2012-01-28 19:35:51 +09:00
Tatsuhiro Tsujikawa aed626bfa5 Added GOAWAY handling 2012-01-28 19:22:38 +09:00
Tatsuhiro Tsujikawa cb58e6e893 Added NOOP handling 2012-01-28 17:29:22 +09:00
Tatsuhiro Tsujikawa 27e1bcab9e Added spdylay_before_ctrl_send_callback 2012-01-28 17:25:14 +09:00
Tatsuhiro Tsujikawa a657208ffd Added spdylay_on_{ctrl,data}_sent_callback functions 2012-01-28 04:28:39 +09:00
Tatsuhiro Tsujikawa 1ce97c7d5e Reorder arguments of spdylay_on_data*_recv_callback 2012-01-28 04:20:19 +09:00
Tatsuhiro Tsujikawa b35f019811 Added callback functions for DATA frames. Fixed unpacking length field. 2012-01-28 03:54:53 +09:00
Tatsuhiro Tsujikawa de57b6efea Sort nv in spdylay_submit_request and spdylay_submit_response 2012-01-28 00:09:01 +09:00
Tatsuhiro Tsujikawa 4c6765e1ed Added doc 2012-01-27 23:43:04 +09:00
Tatsuhiro Tsujikawa d614325024 Fixed compiler warning. Added missing spdylay_session_on_ping_received prototype in header 2012-01-27 23:37:47 +09:00
Tatsuhiro Tsujikawa 8f53343dc3 Renamed spdylay_req_submit and spdylay_reply_submit as spdylay_submit_request and spdylay_submit_response 2012-01-27 23:35:23 +09:00
Tatsuhiro Tsujikawa 9f2f6454f3 Added handling of received RST_STREAM 2012-01-27 23:22:27 +09:00
Tatsuhiro Tsujikawa 0ecf581e63 UNIDIRECTIONAL handling when SYN_REPLY and HEADERS are received. 2012-01-27 23:17:03 +09:00
Tatsuhiro Tsujikawa d1c4c59aad Added handling of received PING 2012-01-27 23:05:29 +09:00
Tatsuhiro Tsujikawa 9461147968 Added pack/unpack of PING 2012-01-27 19:35:05 +09:00
Tatsuhiro Tsujikawa a59c3efedb Added handling when HEADERS is received. 2012-01-27 19:10:13 +09:00
Tatsuhiro Tsujikawa 74673013ae Define constant for nv pair offset. Defined SPDYLAY_PROTO_VERSION. 2012-01-27 18:28:29 +09:00
Tatsuhiro Tsujikawa 1c0ec66a2b Added HEADERS frame. Added SPDYLAY_FRAME_HEAD_LENGTH. 2012-01-27 18:21:14 +09:00
Tatsuhiro Tsujikawa 83b4e245d9 Removed debug output 2012-01-27 17:47:39 +09:00
Tatsuhiro Tsujikawa 29df087ae8 Set FIN bit set in stream when requet DATA frame with FIN bit set is sent. 2012-01-27 17:22:17 +09:00
Tatsuhiro Tsujikawa 7272782f67 Close the stream if SYN_REPLY with FIN bit set is received. 2012-01-27 17:15:24 +09:00
Tatsuhiro Tsujikawa beb509ef39 Check stream before sending SYN_REPLY and DATA. Don't make stream if incoming SYN_STREAM has FIN and UNIDIRECTIONAL set. 2012-01-27 17:09:40 +09:00
Tatsuhiro Tsujikawa 21e165f1f8 Added spdylay_reply_submit() and DATA frame handling after SYN_REPLY. 2012-01-27 01:17:40 +09:00
Tatsuhiro Tsujikawa f642bb98c7 Added spdylay_map_size() 2012-01-26 02:28:58 +09:00
Tatsuhiro Tsujikawa 6e627548be Added stream status change after sending SYN_STREAM and SYN_REPLY. 2012-01-26 01:04:01 +09:00
Tatsuhiro Tsujikawa 1ce2598758 Fixed bug that causes segmentation fault when erasing key which does not exist in map. 2012-01-26 00:21:31 +09:00
Tatsuhiro Tsujikawa 800b362935 Updated doc 2012-01-25 23:55:11 +09:00
Tatsuhiro Tsujikawa 46478c2398 Make sure that pri in SYN_STREAM is 0(highest) to 3(lowest).
Use stream->pri for priority of SYN_REPLY.
2012-01-25 23:52:32 +09:00
Tatsuhiro Tsujikawa cbb8dd6a8c Added pri to spdylay_stream. Refactored SYN_STREAM, SYN_REPLY handling when they are received. 2012-01-25 23:46:07 +09:00
Tatsuhiro Tsujikawa 6629f35a94 Define mask for fields 2012-01-25 21:35:48 +09:00
Tatsuhiro Tsujikawa 3bfe48972c Queue RST_STREAM if invalid stream ID is received in SYN_STREAM or SYN_REPLY.
Fixed bug that Z_DATA_ERROR is not handled.
Fixed bug that spdylay_frame_alloc_pack_nv does not use nv_offset correctly.
2012-01-25 21:31:28 +09:00
Tatsuhiro Tsujikawa fa549aa3a7 Added state and flags to spdylay_stream 2012-01-24 23:18:50 +09:00
Tatsuhiro Tsujikawa 5ececcd8e7 Added test 2012-01-24 23:06:58 +09:00
Tatsuhiro Tsujikawa a52ff39850 Renamed spdylay_session_init as spdylay_session_new. Added session arg to cb.
Now recv_callback and send_callback accepts session argument.
spdylay_session_free was also renamed as spdylay_session_del.
2012-01-24 22:56:26 +09:00
Tatsuhiro Tsujikawa 9c8270436f Added header deflate/inflate using zlib. Added send/recv frame. 2012-01-24 22:02:24 +09:00
Tatsuhiro Tsujikawa 1330d74b73 Added struct of fixed sized chunk buffers backed by queue 2012-01-20 01:04:13 +09:00
Tatsuhiro Tsujikawa 09e57a1978 Fixed memory leak 2012-01-20 00:00:37 +09:00
Tatsuhiro Tsujikawa 1000998228 Added spdylay_queue 2012-01-19 21:57:26 +09:00
Tatsuhiro Tsujikawa a03afa6a82 Added spdylay_map. Added missing tests/main.c 2012-01-19 21:36:13 +09:00
Tatsuhiro Tsujikawa f7f3472c98 Added extern "C" 2012-01-18 21:36:29 +09:00
Tatsuhiro Tsujikawa 3d7bd0accb Moved spdylay_pq_compar to spdylay_int.h and renamed as spdylay_compar 2012-01-18 21:35:05 +09:00
Tatsuhiro Tsujikawa 0eebf89f35 Added priority queue 2012-01-18 02:10:22 +09:00
Tatsuhiro Tsujikawa 1f5bc832f8 Added libtool files 2012-01-18 00:53:12 +09:00