Tatsuhiro Tsujikawa
ca87b45fe4
nghttpx: Don't fail backend connection if one of backend request fails
2014-06-27 22:34:54 +09:00
Tatsuhiro Tsujikawa
94b9c3771d
nghttpx: Throw away request and response headers when they are done
2014-06-15 17:25:24 +09:00
Tatsuhiro Tsujikawa
7e217511bf
nghttpx: Code cleanup
...
Mainly make nested code block to rather flat style.
2014-06-01 23:44:32 +09:00
Tatsuhiro Tsujikawa
8c67bbe3a8
src: Avoid copy in evbuffer_pullup()
...
Previously, we use evbuffer_pullup(buf, -1) to linearize the memory
region and it may cause buffer copy. To avoid this, we use the return
value of evbuffer_get_contiguous_space() as 2nd parameter. According
to the libevent manual, by doing so evbuffer_pullup() will not copy or
modify any data in evbuffer.
2014-06-01 21:01:01 +09:00
Tatsuhiro Tsujikawa
7a797b2c11
nghttpx: Reduce socket I/O buffer size
2014-05-29 22:24:15 +09:00
Tatsuhiro Tsujikawa
86ab9f33de
nghttpx: Fix regression bug that frame with stream_id = 0 not handled
2014-05-28 00:26:27 +09:00
Tatsuhiro Tsujikawa
ebf0e4d787
nghttpd, nghttpx: Check END_STREAM flag in HEADERS other than request
2014-05-24 15:02:46 +09:00
Tatsuhiro Tsujikawa
3f80472e0a
nghttpx: Minor tweak to buffer size
...
Simplified when to send WINDOW_UPDATE to the backend, that is we send
WINDOW_UPDATE when input buffer is empty.
2014-05-16 21:42:30 +09:00
Tatsuhiro Tsujikawa
a8a2236da9
nghttpx: Add --add-response-header option
2014-04-26 14:56:08 +09:00
Tatsuhiro Tsujikawa
f9f6cdc93d
nghttpx: Specify altsvc info in one option and allow multiple occurrences
2014-04-08 22:28:50 +09:00
Tatsuhiro Tsujikawa
0a527f16f5
nghttpx: Log when connection was upgraded to HTTP/2
2014-04-05 18:59:22 +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
22c88af1ab
nghttpx: Resume deferred DATA after complete DATA frame arrived on backend
...
If SPDY or HTTP/2 ustream is used and HTTP/2 downstream is used, only
call {spdylay,nghttp2}_resume_data when complete DATA frame was read
in backend to avoid to transmit too small DATA frame to the upstream.
2014-04-03 18:54:15 +09:00
Tatsuhiro Tsujikawa
db6c41a219
nghttpx: Add altsvc related options
...
To advertise alternative serive, at least --altsvc-port and
--altsvc-protocol-id must be specified.
2014-04-03 13:20:50 +09:00
Tatsuhiro Tsujikawa
b1edb1f3ae
Don't index name/value pair bearing NO_INDEX flag when forwarding it
2014-04-03 11:22:11 +09:00
Tatsuhiro Tsujikawa
c9f90924a9
Add flags parameter to nghttp2_on_header_callback
2014-04-02 02:10:35 +09:00
Tatsuhiro Tsujikawa
ab2dc5967d
Replace HTTP/2.0 with HTTP/2
2014-03-30 19:26:37 +09:00
Tatsuhiro Tsujikawa
f7162ab702
Implement dependency based priority
2014-03-30 01:24:16 +09:00
Tatsuhiro Tsujikawa
334656b704
nghttpx: Announce 2.0 in via header field
2014-03-21 19:25:46 +09:00
Tatsuhiro Tsujikawa
a7eb6502a9
src: Use large transmission buffer to reduce SSL/TLS overhead
2014-03-15 16:10:42 +09:00
Tatsuhiro Tsujikawa
27e161dc31
src: Add EvbufferBuffer class to simplify the code base
2014-03-05 00:23:33 +09:00
Tatsuhiro Tsujikawa
e34b8ac7fb
src: Avoid to call costly evbuffer_add() repeatedly
...
The profiler and benchmarking showed that calling evbuffer_add()
repeatedly is very costly. To avoid this, we buffer up small writes
into one large chunk and call evbuffer_add() less times.
2014-03-03 23:45:57 +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
1fd5fdd54a
src: Remove redundant SETTINGS_ENABLE_PUSH from server side
2014-02-16 16:05:26 +09:00
Tatsuhiro Tsujikawa
c280cc7c4d
nghttpx: Add --padding option for debugging purpose
2014-02-11 17:23:22 +09:00
Tatsuhiro Tsujikawa
c7c283f3a9
nghttpx: Add --frontend-frame-debug option to debug HTTP/2 frame in upstream
...
The output format is the same one with nghttp/nghttpd. The output
is made into stderr to make it sync with logging.
2014-02-09 18:47:26 +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
864789ca65
nghttpx: Limit the maximum header block size (again)
2014-01-28 01:17:54 +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
fbffd2c923
nghttpx: Limit the number of receiving headers
2014-01-27 00:45:36 +09:00
Tatsuhiro Tsujikawa
545f24bc1b
Remove nghttp2_on_frame_recv_parse_error_callback
2014-01-26 23:23:07 +09:00
Tatsuhiro Tsujikawa
dfbea797bd
src: Use static_cast instead of reinterpret_cast if possible
2014-01-19 21:18:37 +09:00
Tatsuhiro Tsujikawa
a37bc88f40
nghttpx: Rename ClientHandler::get_pending_write_length to get_outbuf_length
...
And other renames.
2014-01-19 17:49:04 +09:00
Tatsuhiro Tsujikawa
bacea078da
nghttpx: Take into account both frontend buffer and body buffer length
2014-01-19 17:42:31 +09:00
Tatsuhiro Tsujikawa
f59a9c5c58
nghttpx: Disable TLS renegotiation properly
...
4ed4efc
does not disable TLS renegotiation at all, if client keeps
rengotiations without sending application data. In this change,
we intercept the raw incoming data from the client and if it is a
renegotiation, drop the connection immediately.
2014-01-19 17:25:18 +09:00
Tatsuhiro Tsujikawa
6f5e1662c6
nghttpx: Handle error from Downstream::resume_read()
2014-01-19 14:42:42 +09:00
Tatsuhiro Tsujikawa
becc206ba9
nghttpx: Don't show warning WINDOW_UPDATE failure for HTTP/1 downstream
2014-01-19 00:38:11 +09:00
Tatsuhiro Tsujikawa
8f3d4fdeec
nghttpx: Remove deprecated evbuffer_setcb, send WU before buffer gets empty
2014-01-18 18:39:25 +09:00
Tatsuhiro Tsujikawa
0872ce27f4
nghttpx: Use nghttp2_session_mem_recv instead of nghttp2_session_recv
2014-01-18 16:50:52 +09:00
Tatsuhiro Tsujikawa
59ff0b2f77
nghttpx: Propagate upstream priority change to downstream
2014-01-18 16:12:03 +09:00
Tatsuhiro Tsujikawa
707a0b4103
Move name/value validation functions to src
...
nghttp2 library itself now accept octet header/value pairs,
completely not restricted by HTTP/1 header name/value rule.
The applications may impose restriction about them using
validators.
2014-01-17 02:16:53 +09:00
Tatsuhiro Tsujikawa
0e4b3d435e
Emit header name/value pair using callback functions
...
Now, in nghttp2_on_frame_recv_callback, nva and nvlen in
HEADERS and PUSH_PROMISE frames are always NULL and 0 respectively.
The header name/value pairs are emitted successive
nghttp2_on_header_callback functions. The end of header fields are
signaled with nghttp2_on_end_headers_callback function.
Since NGHTTP2_ERR_PAUSE for nghttp2_on_frame_recv_callback is
introduced to handle header block, it is now deprecated.
Instead, nghttp2_on_header_callback can be paused using
NGHTTP2_ERR_PAUSE.
2014-01-17 01:49:43 +09:00
Tatsuhiro Tsujikawa
88d31ada75
src: Handle PUSH_PROMISE from client and request HEADERS from server
...
They are just RST_STREAMed for now
2014-01-09 23:47:21 +09:00
Tatsuhiro Tsujikawa
1c43cdbbc8
nghttpx: Don't rewrite location if proxy mode is used
2013-12-28 17:02:43 +09:00
Tatsuhiro Tsujikawa
9cb8754d09
Rename nghttp2_session_fail_session as nghttp2_session_terminate_session
2013-12-26 00:23:07 +09:00
Tatsuhiro Tsujikawa
e955598923
nghttpx: Remove downstream_port from location rewrite code
2013-12-21 18:35:53 +09:00
Tatsuhiro Tsujikawa
ccfa13cd5b
nghttpx: Rewrite location header field
...
We thought that this kind of rewrite can be achieved by the configuration
of the backend severs, but in some configuration, however, it may get
complicated. So we decided to implement at least location rewrite in
nghttpx.
This commit also contains a fix to the bug which prevents the http2
backend request from concatenating header fields with the same value.
2013-12-21 17:49:31 +09:00
Tatsuhiro Tsujikawa
b38b233aa6
nghttpx: Check failure of evbuffer_* and bufferevent_* functions
2013-12-20 23:28:54 +09:00
Tatsuhiro Tsujikawa
658b7d0727
src: Replace MAKE_NV macros with function templates
2013-12-08 22:31:43 +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
baa2272b0a
src: Concatenate header fields with same name by NULL as delimiter
...
cookie and set-cookie are treated specially and won't be concatenated.
2013-12-07 00:32:14 +09:00
Tatsuhiro Tsujikawa
e596385fc0
src: Split NULL-separated values
2013-12-05 21:54:36 +09:00
Tatsuhiro Tsujikawa
d1049f389f
nghttpx: Use nghttp2_submit_{request, response}2 API
2013-11-28 21:36:04 +09:00
Tatsuhiro Tsujikawa
01f7162be3
nghttpx: Add connection-level flow control window size options
...
This commit also changes SPDY's flow control size. Previously,
the size for SPDY is the same amount of bytes with HTTP/2.
For example, --frontend-http2-upstream-window-bits=N,
the window size is 2**N - 1. Now SPDY code uses 2**N.
2013-11-21 00:15:17 +09:00
Tatsuhiro Tsujikawa
faedc4381d
nghttpx: Add options to dump HTTP headers in HTTP/2.0 upstream
2013-11-17 23:52:19 +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
0ba2883940
nghttpx: Use initial window size in config directly
2013-11-12 11:08:43 +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
b1905c5815
nghttpx: More replacement of spdy with http2
2013-11-04 18:22:29 +09:00
Tatsuhiro Tsujikawa
ba3db66cec
nghttpx: Replace "spdy" in option name with "http2"
2013-11-04 18:14:05 +09:00
Tatsuhiro Tsujikawa
f3d71aa5bb
nghttpx: Rename Spdy{Session,DownstreamConnection} to Http2{*}
2013-11-04 17:53:57 +09:00
Tatsuhiro Tsujikawa
e0fe939951
nghttpx: Add SETTINGS timeout timer to Http2Upstream
2013-10-31 00:44:23 +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
b75455dd96
nghttpx: Remove recv data length calculation in HTTP/2 code
2013-10-30 00:10:28 +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
9b6a0e5875
nghttpx: Fix stream hang with request body
...
The end of request stream is not detected correct place.
Also Downstream::end_upload_data() is not called.
2013-10-30 00:00:58 +09:00
Tatsuhiro Tsujikawa
0ced4741d2
nghttpx: Remove flow control error detection code
...
Now flow control error detection is handled by the library
2013-10-29 22:46:38 +09:00
Tatsuhiro Tsujikawa
5ca8f147f2
nghttpx: Code cleanup
2013-10-27 16:25:50 +09:00
Tatsuhiro Tsujikawa
67553d47e0
nghttpx: Use :authority and host instead of :host
2013-10-27 16:25:50 +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
8c855c5567
src: Use std::vector to store name/value pairs
2013-10-23 23:18:24 +09:00
Tatsuhiro Tsujikawa
a9ba00914e
nghttpx: Log error_code when submitting RST_STREAM
2013-09-30 00:13:04 +09:00
Tatsuhiro Tsujikawa
55b8a0b777
shrpx_http2_upstream: Use std::unique_ptr for pre_upstream_
2013-09-26 21:46:35 +09:00
Tatsuhiro Tsujikawa
825c1bac6b
shrpx_downstream.cc: Utilize std::move
2013-09-24 23:53:55 +09:00
Tatsuhiro Tsujikawa
cbef6fd0c6
nghttpx: Replace \r\n with space when constructing HTTP/1 headers
2013-09-11 23:24:32 +09:00
Tatsuhiro Tsujikawa
1a05caf847
src: Use util::utos instead of std::to_string
...
Some platform (e.g., freebsd) does not define _GLIBCXX_USE_C99
and it hides std::to_string functions.
2013-09-08 14:29:18 +09:00
Tatsuhiro Tsujikawa
776cff3dc7
src: Use std::unique_ptr for nv
2013-09-07 01:52:46 +09:00
Tatsuhiro Tsujikawa
d960cf8953
Add const to read-only nghttp2_frame* parameter in callbacks
2013-09-03 21:24:14 +09:00
Tatsuhiro Tsujikawa
2f26b04730
nghttpx: Code cleanup
2013-09-01 00:23:07 +09: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
81653c1d1b
Add int return value to nghttp2_on_stream_close_callback
2013-08-29 22:58:05 +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
972b47d6af
Add int return value to nghttp2_on_data_chunk_recv_callback
2013-08-29 21:39:32 +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
3544bfdbef
src: Move pure HTTP code from shrpx_http.cc to http2.cc
2013-08-28 02:47:22 +09:00
Tatsuhiro Tsujikawa
1f3b96e233
nghttpx: Rewrite header handling
2013-08-28 00:09:46 +09:00
Tatsuhiro Tsujikawa
89cd2ff479
nghttpx: Stream error if disallowed header field in HTTP2 is received
2013-08-26 01:25:31 +09:00
Tatsuhiro Tsujikawa
33743ab832
nghttpx: Remove banned header fields in HTTP2 request and response
2013-08-26 01:09:15 +09:00
Tatsuhiro Tsujikawa
4fb1811d18
nghttpx: Include status code only in :status header field in HTTP2 response
2013-08-25 23:28:34 +09:00
Tatsuhiro Tsujikawa
5d7b7a1691
nghttpx: Stream error if mandatory HTTP/2 request header field is missing
2013-08-25 23:21:07 +09:00
Tatsuhiro Tsujikawa
b2a34c2e5b
nghttpx: Fix bug content-length is removed
2013-08-23 02:49:21 +09:00
Tatsuhiro Tsujikawa
358d12a842
nghttpx: Fix bug CONNECT does not work
2013-08-22 21:28:27 +09:00
Tatsuhiro Tsujikawa
b8a01f5212
nghttpx: Require content-length in HTTP2 upstream if END_STREAM flag is not set
2013-08-21 01:19:16 +09:00
Tatsuhiro Tsujikawa
aa9688b459
nghttpx: Fix possible multiple replies on HTTP2 and SPDY upstreams
2013-08-21 00:56:08 +09:00
Tatsuhiro Tsujikawa
4fac4eb92d
nghttpx: HttpUpstream: Check required request headers strictly
...
If multiple required headers (e.g., :path) found, return HTTP 400
error.
Fix util::strieq(a,b,n) where boundary of b is not checked in the
loop.
2013-08-11 00:08:44 +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
fafec1fdb8
nghttpx: Accept incoming bytes at least initial window size
2013-08-07 21:27:08 +09:00
Tatsuhiro Tsujikawa
f613f68a13
src: Make window size - 1
...
To match the -w16 to 65535, which is HTTP/2.0 default initial window
size, decrement 1 from (1 << window_bits).
2013-08-03 19:53:07 +09:00
Tatsuhiro Tsujikawa
f620655d08
nghttp, nghttpx: Add HTTP Upgrade from HTTP/1.1 to HTTP/2.0
...
nghttpx does not perform upgrade if the request has request body.
2013-08-03 18:51:01 +09:00
Tatsuhiro Tsujikawa
1bbcbd365c
shrpx: Cast uint8_t to uint32_t to print its decimal number
2013-08-01 20:33:04 +09:00
Tatsuhiro Tsujikawa
fec566aa23
src: Send out data in output buffer before HTTP2/SPDY session tear down
2013-08-01 20:31:29 +09:00
Tatsuhiro Tsujikawa
924b1bd61a
Use unmodified http-parser
...
Handle HTTP Upgrade and CONNECT explicitly
2013-07-31 21:48:37 +09:00
Tatsuhiro Tsujikawa
1fca42ed2b
nghttpx: Remove :version from http2 connection
2013-07-26 21:47:53 +09:00
Tatsuhiro Tsujikawa
41b21f7938
fixup
2013-07-26 19:38:54 +09:00