Tatsuhiro Tsujikawa
94ca9705ef
asio: Rewrite response body handling if response body is not expected
2015-03-06 21:36:40 +09:00
Tatsuhiro Tsujikawa
05a847b6b8
asio: Use passed URI for request
2015-03-06 02:35:44 +09:00
Tatsuhiro Tsujikawa
38788d707b
asio: Don't send response body if it is not expected by status code or method
2015-03-06 02:15:34 +09:00
Tatsuhiro Tsujikawa
44c0d32a1b
asio: Fix compile error with gcc
2015-03-06 02:05:01 +09:00
Tatsuhiro Tsujikawa
36aae8c310
asio: Move server::http2 to its own file
2015-03-06 01:58:56 +09:00
Tatsuhiro Tsujikawa
34ac90443f
asio: Rename http2::listen as http2::listen_and_serve
2015-03-06 01:54:28 +09:00
Tatsuhiro Tsujikawa
992c14e354
asio: Rename *_reader as *_generator and read_cb as generator_cb
2015-03-06 01:47:55 +09:00
Tatsuhiro Tsujikawa
529fc937dc
asio: Document public APIs
2015-03-06 01:41:06 +09:00
Tatsuhiro Tsujikawa
05b8d8c5b7
asio: Start sending response header when write_head is called
2015-03-06 00:06:53 +09:00
Tatsuhiro Tsujikawa
a1c937a007
src: Add missing dquote in HTML
2015-03-05 23:34:42 +09:00
Tatsuhiro Tsujikawa
8baec366f0
asio: Make redirect_handler and status_handler part of public API
2015-03-05 23:32:21 +09:00
Tatsuhiro Tsujikawa
c64bb62ffe
asio: Make redirect_handler use passed uri as is and percent-encode path part
2015-03-05 23:23:17 +09:00
Tatsuhiro Tsujikawa
6020b727d8
asio: Add signal_write() to server::http2_handler to avoid scattered ifs
2015-03-05 22:00:14 +09:00
Tatsuhiro Tsujikawa
7f04968950
asio: Add dtor to API classes
2015-03-05 21:51:44 +09:00
Tatsuhiro Tsujikawa
ca1f43dfca
asio: Export session_impl* from stream rather than delegating everything
2015-03-05 21:48:37 +09:00
Tatsuhiro Tsujikawa
9efb62f40b
asio: Move server classes to dedicated files
2015-03-05 21:42:48 +09:00
Tatsuhiro Tsujikawa
f1c7d3edfd
asio: Rename server::http2_stream as server::stream
2015-03-05 21:03:03 +09:00
Tatsuhiro Tsujikawa
7ff38eeb2e
asio: Start writing on cancel
2015-03-05 03:00:18 +09:00
Tatsuhiro Tsujikawa
e4ce595ebb
asio: Add serve_mux class to route incoming requet by path
...
serve_mux is direct port of ServeMux from go
2015-03-05 02:12:32 +09:00
Tatsuhiro Tsujikawa
8accf3898a
asio: Add client::request::resume() member function
2015-03-05 02:12:32 +09:00
Tatsuhiro Tsujikawa
690a1622aa
asio: Add const qualifier to client::session member functions
2015-03-05 02:12:32 +09:00
Tatsuhiro Tsujikawa
aaef798566
asio: Add server::response::io_service()
2015-03-05 02:12:32 +09:00
Tatsuhiro Tsujikawa
0753fcd6e5
asio: Add error_code parameter to cancel()
2015-03-05 02:12:32 +09:00
Tatsuhiro Tsujikawa
a14029744c
asio:: Add cancel() and on_close() to server::response
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
7e46d0b142
asio: Call signal_write() on session_impl::cancel()
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
726e6c087d
asio: server: Move push member function to response object
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
ff0eaf8399
asio: Indicate EOF by passing 0 to the second parameter to data_cb
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
7fb7575f78
asio: read_cb: Use similar semantics with nghttp2_data_source_read_callback
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
44642af227
asio: Remove unused struct header
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
e7d052100c
asio: Utilize aggregate or value-initialization for header_value
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
fc2170e488
asio: Use uri_ref in server code
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
0cda2282dd
asio: Assign values to uri_ref directly
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
6753b6d61e
asio: Use header_map in server code
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
35817876fe
asio: Move server API to asio_http2_server.h
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
7d753d779e
asio: Fix resource leak (socket not closed) in server code
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
f6f908a541
asio: Make impl() const
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
b0c1986a46
asio: Avoid shared_ptr for request and response
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
9671eaa850
asio: Set stream pointer to request and response in stream ctor
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
062b42918c
asio: Remove threaded task runner
...
This is too complicated and not suitable for event driven server. We
plan to expose io_service instead.
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
2fa28e790d
asio: Separate client API to asio_http2_client.h
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
76eab3faa0
asio: Pass connected address to connect_cb
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
70ea774f23
asio: Clear up TLS peer verification
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
e15d302985
asio: Introduce uri_ref
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
b2196f215a
asio: Use boost::system::error_code for on_error callback
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
8afd75ca47
Make request, response const
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
0676535caf
Do async-resove in ctor
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
dd741a58ae
Use header_map instead of wrapping it
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
26304546c4
[WIP] Add asio client interface
2015-03-05 02:12:31 +09:00
Tatsuhiro Tsujikawa
c2426bc732
Merge branch 'pthread-getspecific' of https://github.com/icing/nghttp2 into icing-pthread-getspecific
2015-03-05 02:04:56 +09:00
Tatsuhiro Tsujikawa
08d0cdfd31
Fix typo
2015-03-04 02:48:20 +09:00
Stefan Eissing
1fd44b1567
replacing thread_local, which does not exist on OS X, with pthread_getspecific call
2015-03-03 17:09:15 +01:00
acesso
6a2e6b744f
Update shrpx_config.cc
...
declaration of make_socket_closeonexec need the proper scope here, it was there per request at https://github.com/tatsuhiro-t/nghttp2/pull/142 , not sure why is was removed.
2015-03-02 17:14:09 -03:00
Tatsuhiro Tsujikawa
4de8db523f
nghttpx: Check frame type in HTTP/2 backend on_begin_headers_callback
2015-03-02 00:53:48 +09:00
Tatsuhiro Tsujikawa
cf5ac0f363
nghttpx: Fix broken server push after HTTP upgrade
2015-03-01 11:03:48 +09:00
Tatsuhiro Tsujikawa
185ebd7b79
nghttpx: Fix crash when upgrading HTTP/2 failed
2015-03-01 10:11:45 +09:00
Tatsuhiro Tsujikawa
f3a0ab6552
nghttpd: Fix help output so that it can be generated in man/html nicely
2015-02-27 00:56:26 +09:00
Tatsuhiro Tsujikawa
1c2c5bdd05
Revert "nghttpx: Add missing Downstream::end_upload_data() call in HTTP/2 and SPDY"
...
This reverts commit ef090d425e
.
2015-02-27 00:32:48 +09:00
Tatsuhiro Tsujikawa
3715a89655
Merge branch 'bcard/address-nghttp2-server' of https://github.com/bcard/nghttp2 into bcard-bcard/address-nghttp2-server
...
Conflicts:
src/nghttp.cc
2015-02-27 00:02:45 +09:00
Tatsuhiro Tsujikawa
ef090d425e
nghttpx: Add missing Downstream::end_upload_data() call in HTTP/2 and SPDY
...
This ensures that all frontend code calls
Downstream::end_upload_data() when request was all received.
2015-02-26 23:50:21 +09:00
Tatsuhiro Tsujikawa
e1bb06d8ab
nghttpx: Remove unused error check
2015-02-26 23:46:42 +09:00
Brian Card
1bdf664f4d
Changing signature of numeric_name from numeric_name(addrinfo *addr)
...
to numeric_name(const struct sockaddr *sa, socklen_t salen) to remove
dependency on addrinfo struct.
2015-02-26 08:59:25 -05:00
Tatsuhiro Tsujikawa
1c0d617742
nghttpx: Rename WorkerConfig as LogConfig
...
This is a sign that we only use thread-local storage for logging only.
2015-02-26 00:02:29 +09:00
Tatsuhiro Tsujikawa
b161dfe573
nghttpx: Move graceful_shutdown flag from WorkerConfig to Worker
...
A part of an effort to eliminate thread_local WorkerConfig
2015-02-25 22:53:53 +09:00
Brian Card
b773d63b92
Moving nghttp's numeric_name function to util.cc and using this to generate the address name in HttpServer.cc
2015-02-24 09:50:18 -05:00
Tatsuhiro Tsujikawa
66b6787fbe
src: Use "sensitive" to indicate "never indexed" header field
2015-02-24 23:12:12 +09:00
Tatsuhiro Tsujikawa
1a2bccd71c
nghttpx: Share nghttp2_session_callbacks between objects
2015-02-24 15:21:10 +09:00
Tatsuhiro Tsujikawa
8417275368
nghttpx: Code cleanup
2015-02-24 15:11:09 +09:00
Tatsuhiro Tsujikawa
c98cf045d6
nghttpx: Use omit minor version in case of HTTP/2 in via header and accesslog
2015-02-24 14:43:01 +09:00
Brian Card
933b9636e5
removing additional space after option variable
2015-02-23 07:15:54 -05:00
Brian Card
d10bce3dc8
fixing formatiing
2015-02-23 07:13:03 -05:00
Tatsuhiro Tsujikawa
8b533e19bb
nghttpx: Remove option name from unix path sample since it is a bit strange
2015-02-22 18:09:37 +09:00
Tatsuhiro Tsujikawa
df32a534fc
nghttpx: Rename ConnectionHandler::acceptor4_ as acceptor_
...
This change is motivated by that fact that we use it for UNIX domain
socket as well as IPv4.
2015-02-22 17:59:50 +09:00
Tatsuhiro Tsujikawa
e583a25a8b
nghttpx: Fix error found by coverity scan
2015-02-22 17:53:12 +09:00
Tatsuhiro Tsujikawa
da2376effd
nghttpx: Add host_unix field to DownstreamAddr to tell it is UNIX domain sock
2015-02-22 17:25:23 +09:00
Tatsuhiro Tsujikawa
0c4ae3dea5
nghttpx: Support UNIX domain socket on frontend
...
This commit also fixes environment variables used to tell inherited
file descriptors to new binary are stacked up each time new binary is
executed.
2015-02-22 17:25:23 +09:00
Tatsuhiro Tsujikawa
e457c9a414
src: Add util::strieq_l
2015-02-22 15:32:48 +09:00
Tatsuhiro Tsujikawa
997f9233bc
nghttpx: Support UNIX domain socket in backend connections
2015-02-22 12:27:51 +09:00
Tatsuhiro Tsujikawa
49781da8f0
nghttpx: Don't need to const_cast to sockaddr*
2015-02-22 12:06:31 +09:00
Tatsuhiro Tsujikawa
7f9de007d0
nghttpx: Fix crash in http/1 backend when backend returns more bytes than CL
...
This is typically programming mistake that we did not check return
value before doing another.
2015-02-21 21:17:52 +09:00
Tatsuhiro Tsujikawa
c84a190ac7
nghttpx: Use return 0 instead of break for readability
2015-02-21 17:08:03 +09:00
Tatsuhiro Tsujikawa
a26a597453
nghttpx: Cast configuration value to rlim_t to avoid compile error on 32bit
2015-02-21 16:57:02 +09:00
Tatsuhiro Tsujikawa
04ef26473a
asio-lib: Increase output buffer size
2015-02-21 00:08:10 +09:00
Tatsuhiro Tsujikawa
7897f5b94b
asio-lib: Remove validation offered by nghttp2 lib
2015-02-21 00:06:05 +09:00
Tatsuhiro Tsujikawa
9302e3edf4
src: Use util::streq_l to compare against string literal
2015-02-20 23:57:40 +09:00
Tatsuhiro Tsujikawa
ab93a700ce
src: Announce h2 ALPN
2015-02-20 23:50:17 +09:00
Tatsuhiro Tsujikawa
4424cf5b65
nghttpx: Fix 1 second delay in HTTP/2 backend connection
2015-02-20 19:48:35 +09:00
Tatsuhiro Tsujikawa
00a83a44b4
nghttp: Simplify checking
2015-02-20 19:35:54 +09:00
Tatsuhiro Tsujikawa
f755ea3894
nghttpx: Simplify HttpsUpstream::on_read
2015-02-20 19:24:48 +09:00
Tatsuhiro Tsujikawa
50c4aa061f
nghttpx: Response with 503 when re-submission to backend failed
2015-02-20 19:23:52 +09:00
Tatsuhiro Tsujikawa
6657966334
nghttpx: HttpsUpdatem: Don't send error_page if response state is MSG_COMPLETE
2015-02-20 01:25:18 +09:00
Tatsuhiro Tsujikawa
512aa8942a
nghttp: Fix -H does not work with -u upgrade request
2015-02-20 01:16:49 +09:00
Tatsuhiro Tsujikawa
489b4f307c
nghttp, nghttpd, nghttpx: Remove validations libnghttp2 offers
2015-02-20 01:01:10 +09:00
Tatsuhiro Tsujikawa
b157d4ebb2
Validate HTTP semantics by default
...
Previously we did not check HTTP semantics and it is left out for
application. Although checking is relatively easy, but they are
scattered and error prone. We have implemented these checks in our
applications and also feel they are tedious. To make application
development a bit easier, this commit adds basic HTTP semantics
validation to library code. We do following checks:
server:
* HEADERS is either request header or trailer header. Other type of
header is disallowed.
client:
* HEADERS is either zero or more non-final response header or final
response header or trailer header. Other type of header is
disallowed.
For both:
* Check mandatory pseudo header fields.
* Make sure that content-length matches the amount of DATA we
received.
If validation fails, RST_STREAM of type PROTOCOL_ERROR is issued.
2015-02-20 01:01:10 +09:00
Tatsuhiro Tsujikawa
9845729709
nghttp: Update resource timing terminology according to Resource Timing TR
2015-02-18 00:45:52 +09:00
Tatsuhiro Tsujikawa
dbfc02cba0
nghttpx: Issue RST_STREAM if END_STREAM seen without final response
2015-02-18 00:36:49 +09:00
Tatsuhiro Tsujikawa
d1a1e882bf
nghttpx: Fix request re-submission bug in HTTP/2 backend
2015-02-17 23:15:53 +09:00
Tatsuhiro Tsujikawa
799778af69
Revert "nghttpx: Fix request resubmit bug on HTTP/2 backend connection check"
...
This reverts commit d45f5a51e4
.
2015-02-17 22:28:03 +09:00
Tatsuhiro Tsujikawa
d45f5a51e4
nghttpx: Fix request resubmit bug on HTTP/2 backend connection check
2015-02-17 21:50:32 +09:00
Tatsuhiro Tsujikawa
bb856fe4c5
nghttp: Fix unaligned field output in --stat
2015-02-15 16:24:04 +09:00
Tatsuhiro Tsujikawa
f87aaf1fbf
nghttp: Show '*' to mark pushed resources in --stat output
2015-02-15 12:46:00 +09:00
Tatsuhiro Tsujikawa
685dabc2d6
nghttp: Don't request already pushed resources
2015-02-15 12:36:18 +09:00
Tatsuhiro Tsujikawa
4cafdb7670
nghttp: Show received size in --stat
2015-02-15 12:36:13 +09:00
Tatsuhiro Tsujikawa
58d3b5b4a0
nghttpx: Fix occasional HTTP/2 backend connection failure with proxy
...
Previously if HTTP/1 proxy is used for backend connection, we read all
incoming bytes from proxy including response body, which may be part
of HTTP/2 protocol. While investigating this issue, we found that
http_parser_execute() returns 1-less length when we call
http_parser_pause() inside on_headers_complete callback. To
workaround this, we increment the return value by 1. This commit also
fixes possible segmentation fault error, which could be caused by the
lack of stopping libev watcher in disconnect().
2015-02-15 01:09:10 +09:00
Tatsuhiro Tsujikawa
011e3b325d
nghttpx: Cancel backend request when frontend HTTP/1 connection is lost
2015-02-13 22:41:50 +09:00
Tatsuhiro Tsujikawa
6f4f252907
nghttpd: Handle return value from server.run()
2015-02-12 23:18:25 +09:00
Tatsuhiro Tsujikawa
115d7133a0
nghttpx: Don't check HEADERS category in on_frame_not_send_callback
2015-02-12 22:44:29 +09:00
Tatsuhiro Tsujikawa
c462093555
src: Use same convention for len parameter in TLS I/O with cleartext I/O
2015-02-11 23:22:53 +09:00
Tatsuhiro Tsujikawa
364772f508
src: Fix error reported by coverity scan
2015-02-11 23:20:13 +09:00
Tatsuhiro Tsujikawa
ae0100a9ab
nghttpx: Refactor worker interface
2015-02-11 22:49:03 +09:00
Tatsuhiro Tsujikawa
756e2b3e9b
nghttp, h2load: Fix regression introduced in 795a22a
...
We missed wb.reset(), which makes write buffer's capacity becomes 0
and communication stalls eventually.
2015-02-11 21:42:11 +09:00
Tatsuhiro Tsujikawa
73b999a662
src: Fix crash
2015-02-11 01:05:22 +09:00
Tatsuhiro Tsujikawa
4401f697e5
src: Try to write immediately after read
2015-02-11 00:44:30 +09:00
Tatsuhiro Tsujikawa
f360b5c1e3
src: Prefer std::equal
2015-02-11 00:20:33 +09:00
Tatsuhiro Tsujikawa
07fdaaba45
src: Use case-insensitive match when parsing Link header field
2015-02-10 23:29:45 +09:00
Tatsuhiro Tsujikawa
7fa62c9904
src: Clean up string utlity functions
2015-02-10 23:16:34 +09:00
Tatsuhiro Tsujikawa
3e2714810a
src: Fix invalid memory access
2015-02-10 21:28:17 +09:00
Tatsuhiro Tsujikawa
68866f53b0
src: Use nullptr instead of 0, since they are char*
2015-02-09 23:45:20 +09:00
Tatsuhiro Tsujikawa
ad8e9a4741
src: Ignore URI with non-empty anchor parameter
2015-02-09 23:25:10 +09:00
Tatsuhiro Tsujikawa
3c5d8f446b
src: Fix typo
2015-02-09 23:25:10 +09:00
Tatsuhiro Tsujikawa
2e425e3cb6
src: Support backslash escapes in quoted-string when parsing Link header
2015-02-09 23:25:10 +09:00
Tatsuhiro Tsujikawa
1b00bc1929
src: Support rel with quoted value in Link header parser
2015-02-09 23:25:10 +09:00
Tatsuhiro Tsujikawa
d151759f8a
nghttpx: Fix location rewrite, take 2
2015-02-08 21:26:47 +09:00
Tatsuhiro Tsujikawa
807d39abe3
nghttpx: Fix location rewrite does not work
2015-02-08 18:54:24 +09:00
Tatsuhiro Tsujikawa
4d47c31ebe
src: Refactor parse_next_link_header_once
2015-02-08 17:47:21 +09:00
Tatsuhiro Tsujikawa
9e723b6b1d
src: Rename LinkHeader.url as LinkHeader.uri
2015-02-08 17:29:38 +09:00
Tatsuhiro Tsujikawa
7aff00496a
nghttpx: Log push request headers
2015-02-08 17:25:21 +09:00
Tatsuhiro Tsujikawa
0efdeab1db
nghttpx: Fix handling of return value from nghttp2_submit_push_promise
2015-02-08 17:21:27 +09:00
Tatsuhiro Tsujikawa
502b552b68
nghttpx: Add --no-server-push option
2015-02-08 16:19:12 +09:00
Tatsuhiro Tsujikawa
8c90e5314d
src: Update doc
2015-02-08 16:10:01 +09:00
Tatsuhiro Tsujikawa
af960f1982
nghttpx: Don't push if http2 proxy is used
2015-02-08 16:10:01 +09:00
Tatsuhiro Tsujikawa
7c09d5eb8d
nghttpx: PUSH_PROMISE from client is handled by library
2015-02-08 16:10:01 +09:00
Tatsuhiro Tsujikawa
88f0bc70c4
nghttpx: Reworkd inherited request headers in PUSH_PROMISE
2015-02-08 16:10:01 +09:00
Tatsuhiro Tsujikawa
b14cfaf308
src: Store token in Header object to avoid additional lookups
2015-02-08 16:10:01 +09:00
Tatsuhiro Tsujikawa
8dd8d68b83
src: Make index of header int16_t
2015-02-08 16:10:01 +09:00
Tatsuhiro Tsujikawa
c55d7343ca
nghttpx: Support server push using Link header field
...
nghttpx server push is initiated by looking for Link header field from
backend server response. Currently we only enable server push for
HTTP/1 backend and without HTTP/2 proxy mode. The URIs which have
rel=preload are eligible to resource to be pushed.
2015-02-08 16:10:00 +09:00
Tatsuhiro Tsujikawa
4dea318b5b
nghttpx: Fix compile error if SOCK_NONBLOCK is undefined
2015-02-08 00:49:56 +09:00
Tatsuhiro Tsujikawa
795a22a320
src: Remove ringbuf.h, use buffer.h instead
2015-02-06 23:40:34 +09:00
Tatsuhiro Tsujikawa
b4b2ddad3b
src: Rewrite defer function template
2015-02-06 23:27:15 +09:00
Tatsuhiro Tsujikawa
6ff67ae869
src: Move array_size to nghttp2 namespace
2015-02-06 22:44:09 +09:00
Tatsuhiro Tsujikawa
33879219ff
Refactor ALPN/NPN protocol selection and introduce NGHTTP2_PROTO_ALPN macro
2015-02-06 22:35:30 +09:00
Tatsuhiro Tsujikawa
4956bdc4da
src: Use std::copy_n
2015-02-06 21:35:03 +09:00
Tatsuhiro Tsujikawa
b165775811
nghttpx: Refactor CertLookupTree
2015-02-06 21:25:43 +09:00
Tatsuhiro Tsujikawa
90746cdd0e
nghttpx: Fix compile error with OpenSSL 1.0.2
2015-02-06 21:14:04 +09:00
Tatsuhiro Tsujikawa
4cda09beff
src: Prefer std::array
2015-02-06 00:15:43 +09:00
Tatsuhiro Tsujikawa
9a2d36fc6c
src: Use std::copy instead of std::copy_n since gcc-4.7 does not have it
2015-02-06 00:15:43 +09:00
Tatsuhiro Tsujikawa
ab6663c785
src: Use std::array instead of std::vector if size is compile time constant
2015-02-06 00:15:43 +09:00
Tatsuhiro Tsujikawa
54851ef7a6
src: Move make_unique to nghttp2 namespace
2015-02-06 00:15:43 +09:00
Tatsuhiro Tsujikawa
f8f9b36acd
http2: Use std::array for indexing headers
2015-02-06 00:15:43 +09:00
Tatsuhiro Tsujikawa
6774fa6e07
buffer: Refactor
2015-02-06 00:15:43 +09:00
Tatsuhiro Tsujikawa
7baf6f781e
memchunk: Refactor
2015-02-06 00:15:42 +09:00
Tatsuhiro Tsujikawa
2349a03882
nghttpx: Fix regression HTTP/2 upgrade does not work
2015-02-06 00:15:13 +09:00
Tatsuhiro Tsujikawa
3904550d5d
nghttpd: Shut up travis
2015-02-05 22:49:19 +09:00
Tatsuhiro Tsujikawa
be3ee91e90
nghttpd: Fix compile error on travis
2015-02-05 21:50:20 +09:00
Tatsuhiro Tsujikawa
d4f87ce29f
nghttpd: Fix multiple push configuration does not work
2015-02-05 21:31:16 +09:00
Tatsuhiro Tsujikawa
1216d7d912
nghttpx: Connection: Explicit assignment to double field
2015-02-05 21:26:55 +09:00
Tatsuhiro Tsujikawa
f3b247e4c8
nghttpx: Add missing rev start in HTTP/2 backend
2015-02-05 03:05:34 +09:00
Tatsuhiro Tsujikawa
7c75d9db98
nghttpx: Set nghttp2_option_set_peer_max_concurrent_streams for HTTP/2 backend
2015-02-05 03:05:34 +09:00
Tatsuhiro Tsujikawa
b2fb888363
Share I/O code with all upstreams/downstream objects
2015-02-05 03:05:34 +09:00
Tatsuhiro Tsujikawa
a4d729d36b
nghttpx: Return HTTP error on downstream parser failure on HTTPS upstream
2015-02-04 21:30:05 +09:00
Tatsuhiro Tsujikawa
a68c4c1e3c
nghttpx: Add --no-host-rewrite option
2015-02-04 01:42:26 +09:00
Tatsuhiro Tsujikawa
82f90f9030
nghttpx: Rewrite :authority and host header field
...
We don't rewrite them if -s or -p is used
2015-02-04 01:42:19 +09:00
Tatsuhiro Tsujikawa
b707cfe986
nghttpx: Fix busy loop when HTTP/2 backend reset after connection established
...
We have now Downstream retry count to be limited to 5 times. At 6th
failure, we send 503 message to client.
2015-02-03 01:47:04 +09:00
Tatsuhiro Tsujikawa
d37fc8f3a6
src: Fix compiler warning
2015-02-02 22:40:41 +09:00
Tatsuhiro Tsujikawa
9f5f724147
nghttpd, nghttpx: Don't log error NGHTTP2_ERR_BAD_PREFACE
2015-02-02 00:20:44 +09:00
Tatsuhiro Tsujikawa
36e216d24a
src: Delete unused source files
2015-02-01 18:12:57 +09:00
Tatsuhiro Tsujikawa
cabb7c73cd
nghttp: Widen column for complete and request to account for +
2015-02-01 18:07:53 +09:00
Tatsuhiro Tsujikawa
3a37ed97f4
nghttp: Rewrite statistics output with -s option
...
Now timing information (completion, request, processing), status code
and request path are listed in the order by completion time. This
ordering is very convenient to check resource prioritization
validation.
2015-02-01 17:59:49 +09:00
Tatsuhiro Tsujikawa
0f14c93fa4
nghttp: Refactor
2015-02-01 17:21:13 +09:00
Tatsuhiro Tsujikawa
f321ee5a61
nghttp: Record request time just before transmission of request
2015-02-01 16:58:58 +09:00
Tatsuhiro Tsujikawa
17de036d85
h2load: Code cleanup
2015-01-31 23:54:03 +09:00
Tatsuhiro Tsujikawa
a91e0de06c
h2load: Add request stats (time for request min, max, mean and sd)
2015-01-31 23:49:30 +09:00
Tatsuhiro Tsujikawa
f1049a66e2
nghttpx: Detach DownstreamConnection early
2015-01-31 01:11:55 +09:00
Tatsuhiro Tsujikawa
5a497b9f30
nghttpx: Update doc
2015-01-30 21:33:18 +09:00
Tatsuhiro Tsujikawa
b4ad0a30af
Fix typo
2015-01-30 21:32:41 +09:00
Tatsuhiro Tsujikawa
1816738b3c
nghttpx: Change frontend write buffer size to 32768
2015-01-30 21:32:21 +09:00
Tatsuhiro Tsujikawa
0a0618baac
nghttpx: Add test for util::duration_str, rename util::parse_duration_with_unit
2015-01-29 23:28:47 +09:00
Tatsuhiro Tsujikawa
e03f36eeeb
nghttpx: Use <DURATION> instead of <T>
2015-01-29 23:23:30 +09:00
Tatsuhiro Tsujikawa
6b1ef95d3f
nghttpx: Replace RingBuf with sequential Buffer
...
It turns out that we don't need circular buffer functionality. We
replaced RingBuf with simple sequential Buffer.
2015-01-29 22:57:56 +09:00
Tatsuhiro Tsujikawa
147bc45658
nghttpx: Refactor memchunk a bit
2015-01-29 21:18:30 +09:00
Tatsuhiro Tsujikawa
00555dc7bb
nghttpx: Use TCP_DEFER_ACCEPT if available
2015-01-29 21:14:44 +09:00
Tatsuhiro Tsujikawa
d1a4002b22
nghttpx: Remove --accept-delay and --num-accept options
2015-01-29 20:58:47 +09:00
Tatsuhiro Tsujikawa
8ddad1a53d
nghttpx: Remove shrinking memchunks for now
...
It requires more careful optimization. Remove it for now.
2015-01-28 21:25:22 +09:00
Tatsuhiro Tsujikawa
96e66b1a81
nghttpx: Make num_accept 0 on graceful shutdown
...
Make num_accept unlimited so that we can accept all pending
connections waiting in listen queue.
2015-01-28 21:02:31 +09:00
Tatsuhiro Tsujikawa
19429abd07
nghttpx: Make --accept-delay default to 10ms
2015-01-28 21:00:47 +09:00
Fabian Möller
3167aa4081
nghttpx: set the supplementary group access list
2015-01-28 20:56:05 +09:00
Tatsuhiro Tsujikawa
93daa98608
src: Make option suggestion work with unknown option followed by '='
2015-01-28 00:58:42 +09:00
Tatsuhiro Tsujikawa
f8765be817
nghttpx: Make --backend-keep-alive-timeout default to 2s
2015-01-28 00:47:09 +09:00
Tatsuhiro Tsujikawa
f0c7839f25
nghttpx: Clarify --num-accept=0 case
2015-01-28 00:39:56 +09:00
Tatsuhiro Tsujikawa
6a39de0ae5
nghttpx: Accept s or ms as unit for <T> argument
2015-01-28 00:36:44 +09:00
Tatsuhiro Tsujikawa
402ebb277f
nghttpx: Add --num-accept and --accept-delay options
2015-01-27 23:47:56 +09:00
Tatsuhiro Tsujikawa
4e68ca8233
integration: Add tests about via header field manipulation
...
This test reveals bug in SPDY upstream code, and contains its fix.
2015-01-27 00:19:57 +09:00
Tatsuhiro Tsujikawa
b99b83812b
nghttpd: RST_STREAM if te header field contains value other than trailers
2015-01-25 22:58:43 +09:00
Tatsuhiro Tsujikawa
0b48448270
nghttpx: RST_STREAM for invalid request header values
2015-01-25 22:58:43 +09:00
Tatsuhiro Tsujikawa
2a56a3d9ea
nghttpx: Fix te request header handling
...
Checking against "trailers" is enough for now.
2015-01-25 22:58:43 +09:00
Tatsuhiro Tsujikawa
b9c6162cd5
nghttp: Use compatible cipher list
2015-01-25 17:53:17 +09:00
Tatsuhiro Tsujikawa
68510f1282
nghttpx: SpdyUpstream: Handle error from error_reply
2015-01-25 15:37:09 +09:00
Tatsuhiro Tsujikawa
4b58b25c19
nghttpx: Refactor code to build cert_tree, add SNI test
2015-01-25 15:36:14 +09:00
Brian Card
516a2f0efc
Adding an address parameter that allows nghttpd to bind to a non-default address. Both IPv4 and IPv6 addresses are supported. In addition with verbose mode enable the address that the webserver binds to is now printed in addition to the port.
2015-01-24 15:26:49 -05:00
Tatsuhiro Tsujikawa
fbd9bcb00e
Use _LDADD to specify libraries instead of _LDFLAGS
...
This is because _LDFLAGS comes before _LDADD. If we specify a library
and another library in _LDADD depends on it, we get undefined
reference error.
2015-01-25 00:58:30 +09:00
Tatsuhiro Tsujikawa
434e80dc7b
nghttpx: Reset stream if TE header field contains other than trailer
2015-01-24 15:31:59 +09:00
Tatsuhiro Tsujikawa
6b4b7bef23
nghttpx: Reset stream if request header field name is malformed
2015-01-24 00:37:26 +09:00
Tatsuhiro Tsujikawa
9a89db575a
nghttpx: Reject multiple Content-Length even if their values are identical
2015-01-24 00:07:28 +09:00
Tatsuhiro Tsujikawa
0f4b0966ef
nghttpx: Merge all options settings in one SSL_CTX_set_options
2015-01-23 23:32:01 +09:00
Tatsuhiro Tsujikawa
ecfd593076
nghttpx: Call ConnectBlocker::on_success when connection is established
2015-01-23 23:00:18 +09:00
acesso
7ea8037ee1
Use fcntl and FD_CLOEXEC if O_CLOEXEC is undefined
...
Same reported at #87 but at src/shrpx_config.cc src/instead of util.cc
2015-01-23 21:17:06 +09:00
Tatsuhiro Tsujikawa
a0028ea8ef
nghttpx: Add logging when downstream connect is blocked by connect_blocker
2015-01-23 00:15:38 +09:00
Tatsuhiro Tsujikawa
d174ffeb00
memchunk: Rename append_cstr as append
...
We may later add append(const T &), where we require T for .size() and
.data(). We can coexist former append_cstr and new one. If we pass
string literal, append(const (&)[N]) is selected.
2015-01-22 23:54:30 +09:00
Tatsuhiro Tsujikawa
5a93bedf72
nghttpx: Make error page modern
2015-01-22 23:51:22 +09:00
Tatsuhiro Tsujikawa
4a0dba08b9
nghttpx: Set Connection: close after graceful shutdown in HTTP/1 upstream
2015-01-22 23:46:35 +09:00
Tatsuhiro Tsujikawa
b685747643
Add nghttp2_submit_shutdown_notice() to start graceful shutdown
...
nghttp2_submit_shutdown_notice() is used to notify the client that
graceful shutdown is started. We expect that after this call, the
server application should send another GOAWAY using
nghttp2_submit_goaway() with appropriate last_stream_id. In this
commit, we also added nghttp2_session_get_last_proc_stream_id(), which
can be used as last_stream_id parameter.
This commit implements graceful shutdown in nghttpx. The integration
test for graceful shutdown is also added.
2015-01-22 23:21:58 +09:00
Tatsuhiro Tsujikawa
76a97b9718
nghttpx: Update last_write_time_ after SSL_write
...
SSL_write may return error indicating blocking until all given data
are written. Because of this, it is preferable to update
last_write_time_ after SSL_write regardless of its return value.
2015-01-22 21:14:16 +09:00
Tatsuhiro Tsujikawa
ac1cc56fbb
nghttpx: Stop wev_ on h1 backend connect failure
2015-01-22 21:13:34 +09:00
Tatsuhiro Tsujikawa
f604cbae70
nghttpx: Fix shutdown too early with QUIT signal if num_worker == 1
2015-01-22 01:46:25 +09:00
Tatsuhiro Tsujikawa
91ae5291cc
nghttpx: Cache string representation of time for logging
2015-01-21 23:52:30 +09:00
Tatsuhiro Tsujikawa
5770c6bd04
nghttpx: Return 503 on hard disconnect in HTTP/2 backend
2015-01-21 23:30:48 +09:00
Tatsuhiro Tsujikawa
7492f628aa
nghttpx: Use ConnectBlocker on h1 backend connect attempt failure
2015-01-21 23:11:47 +09:00
Tatsuhiro Tsujikawa
2f788aa214
nghttpx: Return 503 when h1 backend connect attempt failed
2015-01-21 23:08:13 +09:00
Tatsuhiro Tsujikawa
cee22df073
nghttpx: Always close connection in HttpsUpstream::error_reply
2015-01-21 23:03:39 +09:00
Tatsuhiro Tsujikawa
e219d6a94f
nghttpx: Clarify error_reply upstream method
...
There is no application level failure in h1 upstream. For h2, SPDY
upstreams, don't call DIE(), instead return -1 to delete handler.
2015-01-21 22:55:00 +09:00
Tatsuhiro Tsujikawa
41e72064e0
nghttpx: Log error in INFO level when frame cannot be sent
2015-01-21 22:49:00 +09:00
Tatsuhiro Tsujikawa
c0fc726955
nghttpx: Call signal_write in HttpsUpstream::on_downstream_abort_request
2015-01-21 22:45:52 +09:00
Tatsuhiro Tsujikawa
041d9863c2
nghttpx: Set request_start_time_ at Downstream ctor
...
.. so that we can avoid the problem that request_start_time_ is 0
2015-01-21 22:28:15 +09:00
Tatsuhiro Tsujikawa
3c5ca63b6f
nghttpx: Fix TLS write limit does not work
2015-01-21 21:47:25 +09:00
Tatsuhiro Tsujikawa
53a41c953d
nghttpx: Don't call ev_TYPE_set macro while watcher is active
2015-01-21 21:43:49 +09:00
Tatsuhiro Tsujikawa
9938a4e952
Remove AM_EXTRA_RECURSIVE_TARGETS since travis automake is too old
2015-01-21 02:07:16 +09:00
Tatsuhiro Tsujikawa
8997e4369d
nghttpx: Adjust backend buffers
2015-01-21 01:47:43 +09:00
Tatsuhiro Tsujikawa
5a6d6ccbd4
nghttpx: Read from backend eagerly in all upstreams
2015-01-21 01:41:17 +09:00
Tatsuhiro Tsujikawa
16e91746d9
nghttpx: Return 400 error if multiple CLs are received in SPDY upstream
...
This change adds SPDY upstream tests.
2015-01-21 01:03:56 +09:00
Tatsuhiro Tsujikawa
b9a9a23b1e
nghttpx: Close connection when error_reply is used for HTTP/1 upstream
2015-01-20 23:37:00 +09:00
Tatsuhiro Tsujikawa
8059380fb0
nghttpx: Don't need to set response state to MSG_COMPLETE after error_reply
2015-01-20 23:33:45 +09:00
Tatsuhiro Tsujikawa
b9f41e34ef
nghttpx: Return error when downstream HTTP/1 connection attempt failed
2015-01-20 23:27:30 +09:00
Tatsuhiro Tsujikawa
ca7288ae38
nghttpx: Return 502 if HTTP/1 downstream receives multiple CLs
2015-01-20 23:11:54 +09:00
Tatsuhiro Tsujikawa
f1bec6f05c
nghttpx: Return 400 for multiple CLs for HTTP/1 upstream
2015-01-20 22:55:01 +09:00
Tatsuhiro Tsujikawa
daec7c16d3
nghttpx: Don't discard data on HTTP/1 backend EOF
...
Also HTTP/1 frontend testing method was added.
2015-01-20 22:19:28 +09:00
Tatsuhiro Tsujikawa
6e446934d4
integration: Add recursive it target
2015-01-20 21:19:52 +09:00
Tatsuhiro Tsujikawa
a440bdf15e
nghttpx: Response 502 if HTTP/2 backend receives invalid Content-Length
2015-01-19 23:44:23 +09:00
Tatsuhiro Tsujikawa
8004ea9726
nghttpx: Return 400 if request CL is invalid or multiple CLs
2015-01-19 22:40:37 +09:00
Tatsuhiro Tsujikawa
e8053ac931
nghttpx: Check Content-Length only when Transfer-Encoding is not found
2015-01-19 21:16:47 +09:00
Tatsuhiro Tsujikawa
af24f8394e
nghttpx: Fix nghttp2 error code use in SPDY upstream
2015-01-17 21:35:36 +09:00
Tatsuhiro Tsujikawa
62b9e4bb56
nghttpx: Validate received request body length against content-length
2015-01-17 21:33:23 +09:00
Tatsuhiro Tsujikawa
441f1cc282
nghttpx: Validate received response body length against content-length
2015-01-17 21:33:23 +09:00
Tatsuhiro Tsujikawa
f92110c54c
nghttpx: Http2Upstream: Try to read data from backend if buffer is empty
2015-01-17 17:37:32 +09:00
Tatsuhiro Tsujikawa
3817798905
Compile with g++-4.7
...
g++-4.7 lacks thread_local, which can be workaround by
--disable-threads. What left remaining is std::map::emplace, which is
what this change deals with. First check availability of
std::map::emplace, if there is none, use std::map::insert.
2015-01-17 15:32:49 +09:00
Tatsuhiro Tsujikawa
13a14ecda8
nghttpx: Workaround IRIX's struct sockaddr which contains union
2015-01-17 14:59:24 +09:00
Tatsuhiro Tsujikawa
2b458666ba
nghttpd: Fix compiler warning
2015-01-16 23:22:10 +09:00
Tatsuhiro Tsujikawa
cbd878bbd5
nghttp, nghttpd: Allow unit for --header-table-size option
2015-01-16 00:07:52 +09:00
Tatsuhiro Tsujikawa
5f36d91afd
nghttp, nghttpd, h2load: Same indentation with nghttpx
2015-01-16 00:07:52 +09:00
Tatsuhiro Tsujikawa
a08ce38bcf
nghttpd: Cache date by comparing ev_now
2015-01-15 23:27:52 +09:00
Tatsuhiro Tsujikawa
5d204fc3aa
nghttpx: Add more option categories
2015-01-15 23:19:35 +09:00
Tatsuhiro Tsujikawa
84ead30e58
nghttpx: Remove NGHTTP2_HCAT_REQUEST halding since already handled in lib
2015-01-15 23:16:24 +09:00
Tatsuhiro Tsujikawa
b11e1afc91
nghttpx: Remove unused noop function
2015-01-15 23:14:25 +09:00
Tatsuhiro Tsujikawa
c3aa02f003
nghttpd: Use Http2Handler::submit_rst_stream
2015-01-15 23:11:14 +09:00
Tatsuhiro Tsujikawa
d142830109
nghttpd: Issue RST_STREAM if content-length does not match uploaded bytes
2015-01-15 23:07:25 +09:00
Tatsuhiro Tsujikawa
22e41bab3f
nghttpd: Issue RST_STREAM if received header field contains invalid chars
2015-01-15 22:45:18 +09:00
Tatsuhiro Tsujikawa
aa1c8d1fa4
nghttpx: Don't forward Trailer header field
2015-01-14 21:33:22 +09:00
Tatsuhiro Tsujikawa
1de20c1232
nghttpx: Ignore trailer headers in HTTP/1.1
2015-01-14 21:28:31 +09:00
Tatsuhiro Tsujikawa
8fe093de1d
nghttpx: Set initial backlog to 512
2015-01-14 21:24:12 +09:00
Tatsuhiro Tsujikawa
f004361ef2
nghttpx: Add --backend-request-buffer option
2015-01-13 23:30:28 +09:00
Tatsuhiro Tsujikawa
d6db38a318
nghttpx: Clean up integer configuration range checking
2015-01-13 23:23:35 +09:00
Tatsuhiro Tsujikawa
c88a5291b7
nghttpx: Add --backend-response-buffer option
2015-01-13 23:20:06 +09:00
Tatsuhiro Tsujikawa
0d614cf103
nghttpx: Longer help message
2015-01-13 23:02:18 +09:00
Tatsuhiro Tsujikawa
29d6cfae80
nghttpx: Add explanation about units in <SIZE>
2015-01-13 22:42:52 +09:00
Tatsuhiro Tsujikawa
c48a6e73e8
nghttpx: Clean up metavar
2015-01-13 22:39:35 +09:00
Tatsuhiro Tsujikawa
956c11388c
nghttpx: Allow units (k, m, and g) in --{read,write}-{rate,burst}
...
So that you can specify --read-rate=1M --read-burst=4M
2015-01-13 21:54:53 +09:00
Tatsuhiro Tsujikawa
5e8eb926f2
nghttpx: Fix server error with -n1 and --tls-ctx-per-worker
2015-01-13 21:53:53 +09:00
Tatsuhiro Tsujikawa
1e4f8f27fd
nghttpx: Add --tls-ctx-per-worker option
...
When same SSL_CTX is used by multiple thread simultaneously we have to
setup some number of mutex locks for it. We could not check how this
locking affects scalability since we have 4 cores at best in our
development machine. Good side of sharing SSL_CTX across threads is
we can share session ID pool.
If --tls-ctx-per-worker is enabled, SSL_CTX is created per thread
basis and we can eliminate mutex locks. The downside is session ID is
no longer shared, which means if session ID generated by one thread
cannot be acceptable by another thread. But we have now session
ticket enabled and its keys are shared by all threads.
2015-01-13 00:25:02 +09:00
Tatsuhiro Tsujikawa
0ea041e8cb
nghttpx: Add doc and clean up
2015-01-12 22:47:30 +09:00
Tatsuhiro Tsujikawa
e048deb64c
nghttpx: Fix error message
2015-01-12 22:35:45 +09:00
Tatsuhiro Tsujikawa
1c0fa46dfa
nghttpx: RateLimit: Use ev_timer_again for clarity
2015-01-11 00:32:08 +09:00
Tatsuhiro Tsujikawa
f7455d48cc
Compile with android NDK
...
This also fixes the bug that nghttpx's acceptor fd is blocking if
SOCK_NONBLOCK is undefined.
2015-01-11 00:28:00 +09:00
Tatsuhiro Tsujikawa
0ca979b453
nghttpx: Add --rlimit-nofile option
2015-01-10 23:17:48 +09:00
Tatsuhiro Tsujikawa
987aa2dd85
nghttpx: Define max iovcnt for http1 backend write operation
2015-01-10 23:04:54 +09:00
Tatsuhiro Tsujikawa
91b40d1e84
src: Add test for memchunk.h
2015-01-10 23:01:03 +09:00
Tatsuhiro Tsujikawa
bc17f95c80
src: Move ipv6_numeric_addr to util and add test
2015-01-10 21:33:53 +09:00
Tatsuhiro Tsujikawa
0069ca9ce8
nghttp: Fix compile error with libstdc++
2015-01-10 17:57:44 +09:00
Tatsuhiro Tsujikawa
1795d3ea27
nghttp: Add include file to clarify used objects
2015-01-10 16:44:09 +09:00
Tatsuhiro Tsujikawa
b933ee8e78
h2load: Don't retry connection on read error
...
Connection failure is handled by connected() and other errors lead to
just failure, no retry is needed.
2015-01-10 16:02:15 +09:00
Tatsuhiro Tsujikawa
a3dcf1e004
Produce man pages using sphinx
...
Previously to create manual page for bundled programs, we use help2man
to create man page from program's help output. Then our man2rst.py
script converts man page to rst document. Sphinx generates html from
rst documents.
Now help2rst.py produces rst document from programs output. We use
Sphinx solely to produce both man pages and html files.
2015-01-10 00:37:42 +09:00
Tatsuhiro Tsujikawa
19101f7f4a
Revert "nghttpx: Use smaller write buffer"
...
This reverts commit 742d80aac4
.
2015-01-09 20:55:39 +09:00
Tatsuhiro Tsujikawa
742d80aac4
nghttpx: Use smaller write buffer
2015-01-09 09:51:46 +09:00
Tatsuhiro Tsujikawa
473f1d71ff
src: Clear OpenSSL error queue before SSL_shutdown
2015-01-09 09:15:01 +09:00
Tatsuhiro Tsujikawa
8f40bd4675
nghttp, nghttpd, h2load: Clear OpenSSL error queue and handle renegotiation
2015-01-09 09:10:59 +09:00
Tatsuhiro Tsujikawa
7add262721
nghttpx: Detect TLS renegotiation after SSL_read and SSL_write
2015-01-09 00:49:27 +09:00
Tatsuhiro Tsujikawa
4a218f1b79
nghttpx: Clear OpenSSL error and handle limit change in read_tls
2015-01-09 00:08:34 +09:00
Tatsuhiro Tsujikawa
419c03daa2
nghttpx: Fix TLS write error
...
SSL_write requires the same arguments (buf pointer and its length) on
SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE. get_write_limit() may
return smaller length than previously passed to SSL_write, which
violates OpenSSL assumption. To avoid this, we keep last legnth
passed to SSL_write to tls_last_writelen_ if SSL_write indicated I/O
blocking.
2015-01-08 23:03:56 +09:00
Tatsuhiro Tsujikawa
019f1e9fc7
nghttpx: Remove useless comments
2015-01-08 22:28:30 +09:00
Tatsuhiro Tsujikawa
53604782e5
nghttpx: Clean up worker_event handling
2015-01-08 22:24:29 +09:00
Tatsuhiro Tsujikawa
689e8c0ee3
nghttpx: Don't copy ticket_keys std::shared_ptr
2015-01-08 21:49:19 +09:00
Tatsuhiro Tsujikawa
0173929538
nghttpx: Rename ListenHandler as ConnectionHandler
2015-01-08 21:48:39 +09:00
Tatsuhiro Tsujikawa
f570757701
nghttpd: Fix data race when updating cached_date
2015-01-08 21:41:26 +09:00
Tatsuhiro Tsujikawa
5473e870eb
nghttpx: Use smaller buffer for reading
2015-01-08 21:28:52 +09:00
Tatsuhiro Tsujikawa
a41b7baf81
nghttpx: Handle NEW_CONNECTION event first
2015-01-08 21:20:17 +09:00
Tatsuhiro Tsujikawa
fcddb5c06c
nghttpx: Distribute session ticket keys to workers without mutex
2015-01-08 21:15:45 +09:00
Tatsuhiro Tsujikawa
5d3544185c
nghttpx: Fix crash in SSL_CTX_set_tlsext_ticket_key_cb
...
It seems that returning 0 when enc == 0 crashes OpenSSL.
2015-01-08 20:46:35 +09:00
Tatsuhiro Tsujikawa
5dce9501a6
Fix compile error with libstdc++ and/or --disable-threads
2015-01-08 01:57:59 +09:00
Tatsuhiro Tsujikawa
08e8cc1915
nghttpx: Add --tls-ticket-key-file option
...
This option specifies files contains 48 random bytes to construct
session ticket key data. This option can be used repeatedly to
specify multiple keys, but only the first one is used to encrypt
tickets.
2015-01-08 01:26:30 +09:00
Tatsuhiro Tsujikawa
52f3572d5b
nghttpx: Enable TLS session tickets with session key rotation every 12hrs
2015-01-08 00:01:09 +09:00
Tatsuhiro Tsujikawa
90914b38f1
nghttpx: Do not limit DATA frame length
2015-01-07 01:25:43 +09:00
Tatsuhiro Tsujikawa
8bfd900be5
src, examples: Check return value
2015-01-07 00:26:17 +09:00
Tatsuhiro Tsujikawa
40e8eaf5fd
nghttpx: Fix uninitialized pointer member
2015-01-07 00:25:42 +09:00
Tatsuhiro Tsujikawa
d3a606e9d9
nghttpx: open_file_for_write: Use O_CLOEXEC flag
2015-01-07 00:25:10 +09:00
Tatsuhiro Tsujikawa
2fb3d5fd1f
nghttpx: Remove Http2Upstream::deferred_ for now
2015-01-06 23:32:58 +09:00
Tatsuhiro Tsujikawa
ba795d86f0
nghttpx: Don't cache time for logging
...
Update is done by main event loop which is stopped after graceful
shutdown is commenced, which means time is no longer update. To avoid
this situation, we just avoid caching and get time for each logging.
2015-01-06 23:17:09 +09:00
Tatsuhiro Tsujikawa
e8107b68c8
nghttpx: Avoid std::chrono::high_resolution_clock as wall clock
...
This is because std::chrono::high_resolution_clock may not be wall
clock; it may be alias of std::chrono::stead_clock.
2015-01-06 23:10:11 +09:00
Tatsuhiro Tsujikawa
94e69d5e30
nghttpx: Remove commented lines
2015-01-06 22:55:01 +09:00
Tatsuhiro Tsujikawa
d1391f1db7
nghttpx: Process buffered data first without reading additional data
2015-01-06 22:48:17 +09:00
Tatsuhiro Tsujikawa
b9174b828e
nghttpx: Use util::make_socket_closeonexec instead of calling fcntl
2015-01-06 22:03:44 +09:00
Tatsuhiro Tsujikawa
a6cf6c00ea
nghttpx: Add SSL_read/write error logging
2015-01-06 22:02:24 +09:00
Tatsuhiro Tsujikawa
f6097ce6d0
nghttp: Fix compile error with openssl >= 1.0.2
2015-01-06 01:40:24 +09:00
Tatsuhiro Tsujikawa
dcdbd5ab20
h2load: Fix wrong kbytes/s value
2015-01-06 01:24:03 +09:00
Tatsuhiro Tsujikawa
cbc02bbc4c
nghttpx: Code cleanup
2015-01-06 00:51:52 +09:00
Tatsuhiro Tsujikawa
b5796c6b96
nghttp: Add missing initialization Request::res_hdidx on res_nva.clear()
2015-01-06 00:51:18 +09:00
Tatsuhiro Tsujikawa
d80952a2bc
nghttpx: Implement stream level timeout using ev_timer
2015-01-06 00:30:57 +09:00
Tatsuhiro Tsujikawa
f26d436ee6
src: http2::lookup_token: Don't need to make char lowcase
2015-01-05 18:17:52 +09:00
Tatsuhiro Tsujikawa
9854e3746f
src: Fix compile error with libstdc++
2015-01-05 16:20:35 +09:00
Tatsuhiro Tsujikawa
7a50299cb0
nghttpx: Handle connect error
2015-01-05 16:14:10 +09:00
Tatsuhiro Tsujikawa
7dba426db4
nghttpx: Use accept if accept4 is not available
2015-01-05 16:04:28 +09:00
Tatsuhiro Tsujikawa
fcf0ceeac6
nghttpd: Make use of accept4
2015-01-05 15:59:51 +09:00
Tatsuhiro Tsujikawa
e253d8f6db
h2load: Retry next address when connection cannot be established
2015-01-05 01:56:02 +09:00
Tatsuhiro Tsujikawa
8fb544523c
nghttpx: Fix HTTP/2 settings timer for HTTP/2 backend
2015-01-05 01:46:41 +09:00
Tatsuhiro Tsujikawa
3ae44ef2f3
nghttpd, nghttpx: Rework incoming header handling
2015-01-05 01:46:41 +09:00
Tatsuhiro Tsujikawa
730d47f7ad
src: Add unittest for http2::index_header
2015-01-03 22:03:00 +09:00
Tatsuhiro Tsujikawa
ea0ab938c4
src: Only index header in lowercase
2015-01-03 21:56:59 +09:00
Tatsuhiro Tsujikawa
8e3406ad20
nghttpd: Use faster request header handling
2015-01-03 00:19:41 +09:00
Tatsuhiro Tsujikawa
db6eec653b
Fix errors reported by scan-build
2015-01-03 00:19:41 +09:00
Tatsuhiro Tsujikawa
c654549d35
nghttpx: Remove commented code
2015-01-03 00:19:41 +09:00
Tatsuhiro Tsujikawa
645897503d
nghttpx: Reset buffer on empty
2015-01-03 00:19:41 +09:00
Tatsuhiro Tsujikawa
fe8f2a4603
nghttpd: Use larger write buffer
2015-01-03 00:19:41 +09:00
Tatsuhiro Tsujikawa
0a4330ee3c
nghttpd: Fix handling pending data and rename rb_ as wb_
2015-01-03 00:19:41 +09:00
Tatsuhiro Tsujikawa
d157744fb2
nghttpx: Fix handling of pending data
2015-01-03 00:19:41 +09:00
Tatsuhiro Tsujikawa
82320d6e55
nghttpd: Reset write buffer on empty
2015-01-03 00:19:41 +09:00
Tatsuhiro Tsujikawa
7db1864766
nghttpx: Add --backend-http1-connections-per-frontend option
2015-01-03 00:19:41 +09:00
Tatsuhiro Tsujikawa
a55a07940c
nghttpx: Show not implemented warning for per wroker rate limit
2015-01-03 00:19:41 +09:00
Tatsuhiro Tsujikawa
37c01a0a4d
nghttpx: Remove unused IOControl::set_lim
2015-01-03 00:19:41 +09:00
Tatsuhiro Tsujikawa
2003be8dc5
src: Fix unit tests failure
2015-01-03 00:19:41 +09:00
Tatsuhiro Tsujikawa
bfac015d61
src: Use libev for rest of the applications
2015-01-03 00:19:41 +09:00
Tatsuhiro Tsujikawa
cd7258a7cd
Use libev for nghttpd
...
Benchmark shows 10% faster with libev compared to libevent. Also
response time in high load condition is much faster.
2015-01-03 00:19:41 +09:00
Tatsuhiro Tsujikawa
ab1dd11705
nghttpd: Fix typo :host, which should be host
2014-12-25 00:49:36 +09:00
Tatsuhiro Tsujikawa
7bf5be9c17
nghttpd: Reserve 10 headers for request headers
2014-12-24 01:05:12 +09:00
Tatsuhiro Tsujikawa
ac11ba32ee
nghttpd: Use stack allocated array for headers in submit_file_response
2014-12-24 00:56:25 +09:00
Tatsuhiro Tsujikawa
a20ad03f7b
nghttpd: Use evbuffer_pullup(input, -1) cause buffer is most likely just one
2014-12-24 00:46:04 +09:00
Tatsuhiro Tsujikawa
292f219900
nghttpd: Avoid sending last 0-sized DATA
2014-12-24 00:31:21 +09:00
Tatsuhiro Tsujikawa
55e550f08f
nghttpd: Remove unused variable
2014-12-24 00:23:01 +09:00
Tatsuhiro Tsujikawa
32943a74b2
nghttpd: Just use socket send buffer and don't count our own buffer size
2014-12-24 00:19:16 +09:00
Tatsuhiro Tsujikawa
89291e4010
nghttpx: Improve priority handling in http2 upstream
2014-12-23 17:45:57 +09:00
Kazuho Oku
45d0d731eb
fill-in `data_stat` after copying the request entity into the temporary file
2014-12-22 07:26:02 +09:00
Kazuho Oku
125f62b71e
unlink the temporary file immediately after calling mkstemp
2014-12-22 07:24:36 +09:00
Kazuho Oku
eb6ba2a703
copy the request entity to temporary file if the source is stdin and if it is not a regular file
2014-12-21 14:06:44 +09:00
Tatsuhiro Tsujikawa
39eb1e4753
nghttp: Adjust priority upon upgrade
2014-12-19 23:33:13 +09:00
Tatsuhiro Tsujikawa
079682f313
deflatehd: Fix crash
2014-12-19 23:23:42 +09:00
Tatsuhiro Tsujikawa
eb8138bfbd
nghttp: Advance next stream ID only when --idle-dep is used
2014-12-17 23:36:29 +09:00
Tatsuhiro Tsujikawa
adc22ec80b
nghttp: Print failed address
2014-12-17 00:26:41 +09:00
Tatsuhiro Tsujikawa
d695d2ccc0
nghttp, nghttpx, nghttpd, h2load: Support h2-16 in NPN/ALPN
...
The nghttp2 library itself is still h2-14. To experiment with the
implementations to require h2-16 to test new features (e.g.,
prioritization), nghttp, nghttpx, nghttpd and h2load now support h2-16
as well as h2-14. Cleartext HTTP Upgrade is still limited to h2-14
however.
2014-12-16 22:57:58 +09:00
Tatsuhiro Tsujikawa
5fa9dd7cd5
nghttpx: Remove unused variable
2014-12-16 01:10:54 +09:00
Tatsuhiro Tsujikawa
b352ae03a9
src: Fix undefined reference error
2014-12-16 01:09:19 +09:00
Tatsuhiro Tsujikawa
c93da867e0
nghttpx: Fix bug SPDY upstream requires content-length if no FIN in SYN_STREAM
2014-12-15 23:42:59 +09:00
Tatsuhiro Tsujikawa
556811ec64
nghttpx: Don't connect backend if connection is not establish up front
2014-12-15 23:34:00 +09:00
Tatsuhiro Tsujikawa
403ece66e3
nghttpd: Fail if listen failed
2014-12-15 23:17:50 +09:00
Tatsuhiro Tsujikawa
9a35dbc4ab
src: Just check emptiness for value since spaces around value are stripped
2014-12-15 23:14:07 +09:00
Tatsuhiro Tsujikawa
6f70a53da6
src: http2::add_header: strip white spaces in value
2014-12-15 23:04:45 +09:00
Tatsuhiro Tsujikawa
93ee9e30d8
nghttp, h2load: Use recommended ciphers and assign sane SSL_CTX options
2014-12-13 01:37:57 +09:00
Tatsuhiro Tsujikawa
a84c319d62
src: Print stream ID in priority field as dep_stream_id
2014-12-13 01:20:58 +09:00
Tatsuhiro Tsujikawa
467b419947
nghttp: Add --dep-idle option to create anchor idle node for dependency
2014-12-13 01:19:27 +09:00
Tatsuhiro Tsujikawa
e4c59dd164
nghttpd: Fix next_session_id_ is not incremented
2014-12-10 01:21:12 +09:00
Tatsuhiro Tsujikawa
dce20c3e6a
nghttpx: Check HTTP/2 downstream connection after certain idle time
...
Previously when requests are issued to HTTP/2 downstream connection,
but it turns out that connection is down, handlers of those requests
are deleted. In some situations, we only know connection is down when
we write something to network, so we'd like to handle this kind of
situation in more robust manner. In this change, certain seconds
passed after last network activity, we first issue PING frame to
downstream connection before issuing new HTTP request. If writing
PING frame is failed, it means connection was lost. In this case,
instead of deleting handler, pending requests are migrated to new
HTTP2/ downstream connection, so that it can continue without
affecting upstream connection.
2014-12-09 21:41:29 +09:00
Tatsuhiro Tsujikawa
c0ffed7788
Support custom memory allocator
...
nghttp2_mem structure is introduced to hold custom memory allocator
functions and user supplied pointer. nghttp2_mem object can be passed
to nghttp2_session_client_new3(), nghttp2_session_server_new3(),
nghttp2_hd_deflate_new2() and nghttp2_hd_inflate_new2() to replace
standard malloc(), free(), calloc() and realloc(). nghttp2_mem
structure has user supplied pointer mem_user_data which can be used as
per session/object memory pool.
2014-12-08 00:55:55 +09:00
Tatsuhiro Tsujikawa
b607a22076
nghttpx: Support multiple HTTP/1 backend address
...
For HTTP/1 backend, -b option can be used several times to specify
multiple backend address. HTTP/2 backend does not support multiple
addresses and only uses first address even if multiple addresses are
specified.
2014-12-06 19:30:27 +09:00
Tatsuhiro Tsujikawa
b8dafbdf5e
nghttpx: Pass NI_NUMERICSERV to getnameinfo to get numeric service name
2014-12-06 01:07:05 +09:00
Tatsuhiro Tsujikawa
3b03ff626a
nghttpx: Don't log access log for blocked streams
2014-12-05 21:29:31 +09:00
Tatsuhiro Tsujikawa
9614611969
nghttpx: Limit # of downstream connections per host when h2 proxy is used
...
This commit limits the number of concurrent HTTP/1 downstream
connections to same host. By defualt, it is limited to 8 connections.
--backend-connections-per-frontend option was replaced with
--backend-http1-connections-per-host, which changes the maximum number
of connections per host. This limitation only kicks in when h2 proxy
is used (-s option).
2014-12-05 01:47:03 +09:00
Tatsuhiro Tsujikawa
f178b78816
nghttpx: Longer read timeouts
2014-12-03 23:45:44 +09:00
Tatsuhiro Tsujikawa
e180d8e594
nghttpx: Longer downstream HTTP/1 idle connection timeout
2014-12-03 23:00:53 +09:00
Tatsuhiro Tsujikawa
cbb5da5285
nghttpx: Fix --backend-http-proxy-uri does not work
2014-12-02 03:03:14 +09:00
Tatsuhiro Tsujikawa
03877c3752
asio-lib: Put ${AM_CPPFLAGS} before ${BOOST_CPPFLAGS}
2014-12-01 23:20:53 +09:00
Tatsuhiro Tsujikawa
54a3209cf5
configure.ac: Rename some variables so that they follow automake convention
2014-12-01 23:14:28 +09:00
Tatsuhiro Tsujikawa
7036859823
Do not change user variable CFLAGS in configure.ac
2014-12-01 23:06:11 +09:00
Tatsuhiro Tsujikawa
dcc7b23980
nghttpx: Remove cipher suite requirement
...
This makes the library h2-16 compatible now.
2014-11-30 22:52:34 +09:00
Tatsuhiro Tsujikawa
b9667fd209
asio: Listen to all resolved addresses
2014-11-30 22:39:16 +09:00
Tatsuhiro Tsujikawa
204ff787fa
nghttpx: Submit RST_STREAM if HEADERS appears in the middle of a stream
2014-11-28 00:23:46 +09:00
Tatsuhiro Tsujikawa
b1f807abd1
Reformat lines with clang-format-3.5
2014-11-27 23:56:30 +09:00
Tatsuhiro Tsujikawa
c67ccad74d
nghttpx: Use cached get_config()->pid in save_pid()
2014-11-27 22:41:14 +09:00
Tatsuhiro Tsujikawa
04dae32509
nghttpx: Store PID to Config again after daemon()
2014-11-27 21:32:34 +09:00
Tatsuhiro Tsujikawa
e11834d1c9
src: Add code in case struct tm.tm_gmtoff is not available
2014-11-24 18:39:35 +09:00
Tatsuhiro Tsujikawa
9bba616426
nghttpx: Add $alpn variable to accesslog formatting
...
$alpn is a variable which represents ALPN identifier of the protocol
which generates the response.
2014-11-24 15:24:09 +09:00
Tatsuhiro Tsujikawa
1fe50f272b
nghttpx: Add $pid to --accesslog-format variable
...
$pid refers to the PID of the running process.
2014-11-24 14:34:43 +09:00
Tatsuhiro Tsujikawa
93023acc6c
nghttpx: Make --accesslog-format usage doc help2man friendly
...
This is unfortunate but help2man behaves badly when there is indented
lines in help messages in commnad-line args. We removed indentations
to make help2man happy.
2014-11-24 14:16:48 +09:00
Tatsuhiro Tsujikawa
daf659c64e
nghttpx: Note the conversion made in <VAR>
2014-11-24 14:04:37 +09:00
Tatsuhiro Tsujikawa
de2a855572
Implement faster formatting for format_iso8601 and format_common_log
2014-11-24 14:00:52 +09:00
Lucas Pardue
6e178653a5
fixed conflict
2014-11-23 21:10:51 +00:00
Lucas Pardue
9cf1a0c77c
Add features to logging, client and server port,
...
time_iso8601 and request_time.
2014-11-23 20:37:51 +00:00
Tatsuhiro Tsujikawa
74ec1d3377
nghttpx: Write accesslog when upstream connection is lost for HTTP/2 and SPDY
2014-11-23 17:24:23 +09:00
Tatsuhiro Tsujikawa
1e4f288a7c
nghttpx: Remove misleading logging
2014-11-23 16:45:36 +09:00
Tatsuhiro Tsujikawa
ecd143fcc2
nghttpx: Send RST_STREAM with NO_ERROR when closing upgraded connection
2014-11-22 23:13:29 +09:00
Tatsuhiro Tsujikawa
bd9389b956
nghttpx: Refactor http2_data_read_callback
2014-11-22 21:12:28 +09:00
Tatsuhiro Tsujikawa
1a09cef0ef
nghttpx: Avoid 0-length DATA in HTTP/2 upstream
2014-11-22 21:12:28 +09:00
Tatsuhiro Tsujikawa
bded1d1115
h2load: Support ALPN
2014-11-22 01:13:18 +09:00
Tatsuhiro Tsujikawa
fa4f03525e
nghttp: Fix compile error and warning with libc++
2014-11-22 00:37:37 +09:00
Tatsuhiro Tsujikawa
ee65dea8af
nghttp: Fix compile error without libjansson
2014-11-19 21:18:31 +09:00
Tatsuhiro Tsujikawa
27609327ee
nghttpx: Fix heap-after-free crash in https upstream
...
Add Upstream::on_handler_delete() hook to safely write log for
HttpsUpstream.
2014-11-19 01:59:09 +09:00
Tatsuhiro Tsujikawa
958cd0de64
nghttpx: Add configurable access logging format
...
This commit adds functionality to customize access logging format in
nghttpx. The format variables are inspired by nginx. The default
format is combined format.
2014-11-19 01:29:55 +09:00
Tatsuhiro Tsujikawa
1d7601edfb
nghttpx: Better handling EOF from downstream connection to tunnel stream
2014-11-18 00:03:52 +09:00
Tatsuhiro Tsujikawa
8a0fdcfea9
nghttpd: Fix crash
2014-11-17 19:01:06 +09:00
Tatsuhiro Tsujikawa
75a1ad8bdb
src: format_iso8601: Fix invalid millisecond formatting
2014-11-16 17:32:35 +09:00
Tatsuhiro Tsujikawa
54232c6542
nghttp: Add --no-dep option to disable sending priority hints to server
2014-11-15 23:42:26 +09:00
Tatsuhiro Tsujikawa
ee2856f9bc
nghttp: Update doc
2014-11-15 23:34:37 +09:00
Tatsuhiro Tsujikawa
737cea0b38
nghttp: Add -r, --har option to output HTTP transactions in HAR format
2014-11-15 23:34:10 +09:00
Tatsuhiro Tsujikawa
a2bc88f6db
nghttpx: Check max length of ALPN field
2014-11-14 23:19:16 +09:00
Tatsuhiro Tsujikawa
5ce8ae79f0
nghttpx: Disable spdy/3 and spdy/2 by default
2014-11-14 23:16:06 +09:00
Tatsuhiro Tsujikawa
d98e9a63d0
src: Refactor code around ALPN setup
2014-11-14 23:14:39 +09:00
Tatsuhiro Tsujikawa
8e30adbca0
asio: Add http2::backlog API function
2014-11-10 23:26:01 +09:00
Tatsuhiro Tsujikawa
9adfd08848
asio_http2_handler: Use util::utos instead of std::to_string
2014-11-10 22:39:20 +09:00
Tatsuhiro Tsujikawa
2e3419ccbb
nghttpd: Cache formatted date string
2014-11-10 22:35:08 +09:00
Tatsuhiro Tsujikawa
5b6b6dc1b7
src: Rewrite http_date
2014-11-10 21:53:19 +09:00
Tatsuhiro Tsujikawa
d0271a90b5
nghttpd: Use util::utos instead of slow util::to_str
2014-11-10 21:23:26 +09:00
Tatsuhiro Tsujikawa
2ba9a009fe
nghttpd: Fix resource leak
2014-11-08 23:07:40 +09:00
Tatsuhiro Tsujikawa
80b361dbb0
nghttpx: Use exit instead of abort for DIE macro
2014-11-08 21:38:57 +09:00
Tatsuhiro Tsujikawa
58254adb11
h2load: Print used SSL/TLS cipher name and parameters
2014-11-08 21:24:24 +09:00
Tatsuhiro Tsujikawa
ce71e65aee
nghttpx: Replace WARNING with WARN for consistency
2014-11-08 10:51:56 +09:00
Tatsuhiro Tsujikawa
1119701071
nghttpx: Fix -L option help message
...
WARNING should be WARN.
2014-11-08 10:45:58 +09:00
Tatsuhiro Tsujikawa
c410f4055f
Merge branch 'log_notice' of https://github.com/LPardue/nghttp2 into LPardue-log_notice
2014-11-07 21:15:02 +09:00
Tatsuhiro Tsujikawa
1e86635572
h2load: Make shutdown sequence simpler
2014-11-07 00:28:10 +09:00
Lucas Pardue
a067eb02a5
Add LOG_NOTICE level logging for application lifecycle events
2014-11-06 14:32:56 +00:00
Tatsuhiro Tsujikawa
154876a17b
nghttpx: Apply TLS record length limit to DATA frame payload
...
This is not obvious but it makes intermediaries flush and forward DATA
frame boundary without excessive buffering. Since we have different
TCP connections frontend and backend, this may not work. This is
still experimental.
2014-11-06 21:14:14 +09:00
Tatsuhiro Tsujikawa
f8c70993c0
nghttpx: Adjust TLS record size dynamically
...
Use the same behaviour the current Google server does: start with 1300
TLS record size and after transmitting 1MiB, change record size to
16384. After 1 second idle time, reset to 1300. Only applies to
HTTP/2 and SPDY upstream connections.
2014-11-06 02:36:53 +09:00
Tatsuhiro Tsujikawa
03a2828fcf
src: Disable SSL_MODE_ENABLE_PARTIAL_WRITE for apps which use libevent
2014-11-05 01:15:38 +09:00
Tatsuhiro Tsujikawa
2fc0056ada
nghttp: Allow multiple -v option to increase verbosity
...
Now the number of -v option specifies verbosity level. Current all
verbose output are turned on for at lest one -v option, except for the
debug output for each data chunk which is only turned on more than one
-v options.
2014-11-05 00:42:12 +09:00
Tatsuhiro Tsujikawa
29fcd7c946
nghttpd: Use http2::Headers
2014-11-02 23:33:04 +09:00
Tatsuhiro Tsujikawa
189f122dd7
nghttpd: Perform redirect if directory is requested
2014-11-02 23:27:38 +09:00
Tatsuhiro Tsujikawa
7d282cd0bd
Code cleanup
2014-10-30 23:31:28 +09:00
Tatsuhiro Tsujikawa
4d93dd9d91
Upate to draft-15
...
* Add NGHTTP2_HTTP_1_1_REQUIRED error code
* Allow transmission of WINDOW_UPDATE on reserved (remote)
* Allow reception of WINDOW_UPDATE on reserved (local)
* Treat frame larger than MAX_FRAME_SIZE as FRAME_SIZE_ERROR
ALPN identifier is still h2-14 to continue interop, since draft-14 and
-15 are binary compatible. The new error code was added in draft-15,
but HTTP/2 allows extensions can freely add new error code, so it is
not a problem.
2014-10-30 22:40:02 +09:00
Tatsuhiro Tsujikawa
be1a513c59
nghttpx: Shut up scan-build
2014-10-30 22:36:22 +09:00
Tatsuhiro Tsujikawa
20900b133e
nghttpx: Fix heap-use-after-free in ClientHandler object
...
This bug was found by scan-build
2014-10-30 21:47:38 +09:00
Tatsuhiro Tsujikawa
0ef99b90d9
asio-lib: Make request_cb take const ref and use int64_t as http_date arg
2014-10-28 01:01:48 +09:00
Tatsuhiro Tsujikawa
7fa0f2763e
nghttpx: Update Alt-Svc header field spec to alt-svc-04
2014-10-28 00:17:32 +09:00
Tatsuhiro Tsujikawa
6933e0ef54
h2load: Use Headers instead of std::vector<std::pair<>> to store custom headers
2014-10-27 21:23:36 +09:00
Tatsuhiro Tsujikawa
a9ecdca08a
h2load: Read URIs from stdin if -i- is used
2014-10-27 21:23:36 +09:00
Tatsuhiro Tsujikawa
af5bedd45f
h2load: Move code pasing URIs to separate function
2014-10-27 21:23:36 +09:00
Tatsuhiro Tsujikawa
7097a31968
h2load: Uniform handling of URIs from command-line and file
2014-10-27 21:23:36 +09:00
Tatsuhiro Tsujikawa
4122920dc6
h2load: Fix doc and remove trailing spaces
2014-10-27 21:23:36 +09:00
Lucas Pardue
9ea4905f68
Added X-Forwarded-For header stripping option to nghttpx
2014-10-27 10:23:20 +00:00
Tatsuhiro Tsujikawa
c6cfcc3c30
src: Disable insecure SSLv3
2014-10-22 23:14:07 +09:00
Tatsuhiro Tsujikawa
566a252577
Merge branch 'header_add_override' of https://github.com/kennypeng/nghttp2 into kennypeng-header_add_override
2014-10-22 21:25:53 +09:00
Kenny (kang-yen) Peng
27c766cb04
fix some comments and descriptions
2014-10-21 22:38:45 +00:00
Kenny (kang-yen) Peng
41dd6d0205
use option i to accept input URI list file
2014-10-21 22:29:36 +00:00
Kenny (kang-yen) Peng
db071ca35c
fix comments of header add/override
2014-10-21 21:25:38 +00:00
Tatsuhiro Tsujikawa
e3af9d8bd3
nghttp: Use Headers to store custom headers
2014-10-21 23:24:50 +09:00
Tatsuhiro Tsujikawa
73955f0519
nghttp: Take advantage the fact that custom headers are already lower cased
2014-10-21 23:17:53 +09:00
Tatsuhiro Tsujikawa
5df21e3683
nghttp: Add missing metavar to -H and add example
2014-10-21 22:47:24 +09:00
Kenny (kang-yen) Peng
a6e1a40c05
support uri list file input
2014-10-20 20:59:55 +00:00
Kenny Peng
dd02c4cd9b
support header add/override
2014-10-17 15:25:59 -07:00
Tatsuhiro Tsujikawa
f2aa6f4e2b
nghttp: Document prioritization with -a option
2014-10-16 23:17:19 +09:00
Tatsuhiro Tsujikawa
8fffa05513
src: Fix possible heap-use-after free for OpenSSL global locking
...
This is simply programming error, but it is interesting that using
libstdc++ does not reveal this error. With clang++-libc++, we got
std::system_error: mutex lock faild: Invalid argument. This is
because we did not give a name to lock object, so it is immediately
destructed. I think this will fix the reported crash on Mac OSX.
2014-10-14 21:47:07 +09:00
Tatsuhiro Tsujikawa
0d4120ce2c
nghttpx: Apply same fix from a225bb2
to spdy upstream
2014-10-13 21:13:45 +09:00
Tatsuhiro Tsujikawa
20de432725
nghttpx: Pool http downstream connection per thread
2014-10-13 21:09:00 +09:00
Tatsuhiro Tsujikawa
225b90eefd
Use switch-case instead of if
2014-10-10 22:52:47 +09:00
Tatsuhiro Tsujikawa
3931a0b04d
Fix bugs found by coverity scan
2014-10-10 22:50:35 +09:00
Tatsuhiro Tsujikawa
bcbb2e8649
src: Use fcntl and FD_CLOEXEC if O_CLOEXEC is undefined
...
We may run into race condition if execve is called at the same time
when fcntl is called. But we just does this for now to compile
nghttp2 applications under older kernel.
2014-10-08 23:44:38 +09:00
Tatsuhiro Tsujikawa
a225bb29df
nghttpx: Fix request is sent to backend prematurely with http2 upstream
2014-10-07 00:31:35 +09:00
Tatsuhiro Tsujikawa
7a09feebc3
h2load: Don't use std::future with --disable-threads
...
Now we don't use std::future with --disable-threads, checking
std::future in configure.ac was removed and building h2load is always
enabled.
2014-10-05 14:25:15 +09:00
Svante Signell
df875db989
Avoid PATH_MAX by using getcwd(nullptr, 0) as supported by modern glibc-based OSes.
2014-10-03 21:58:15 +09:00
Tatsuhiro Tsujikawa
4f0d03b4b9
libnghttp2_asio: Move common types and functions to nghttp2::asio_http2 ns
2014-09-28 16:54:00 +09:00
Tatsuhiro Tsujikawa
88d7abcc23
libnghttp2_asio: Add request::run_task to execute task in separate thread
2014-09-28 16:25:45 +09:00
Tatsuhiro Tsujikawa
e20d2ba9c1
nghttpx: Don't send x-forwarded-proto if -s or -p is used
2014-09-25 00:41:38 +09:00
Tatsuhiro Tsujikawa
c1be28684a
libnghttp2_asio: Add request::closed() to indicate that stream has been closed
2014-09-25 00:15:52 +09:00
Tatsuhiro Tsujikawa
fd07f5e142
src: Add utility APIs to asio_http2.h; add asio-sv2 example to serve files
2014-09-24 23:05:13 +09:00
Tatsuhiro Tsujikawa
3651467c71
src: Silence compiler warning
2014-09-24 00:57:43 +09:00
Tatsuhiro Tsujikawa
5d0bf4cc84
Add C++ library libnghttp2_asio on top of libnghttp2
...
The libnghttp2_asio library is C++ library built on top of libnghttp2.
Currently, it has server API and easily create HTTP/2 server using
node.js like API calls. See the example server source code in
examples/asio-sv.cc. The library depends on Boost::ASIO library.
2014-09-24 00:45:40 +09:00
Tatsuhiro Tsujikawa
446f8f13aa
src: Move libevent related helper functions to libevent_util
2014-09-24 00:45:40 +09:00
Tatsuhiro Tsujikawa
a9b74261b6
nghttpd: Rewrite using bufferevent (again) for simplicity
2014-09-19 00:58:32 +09:00
Tatsuhiro Tsujikawa
83309b6391
nghttpx: Reduce epoll_ctl call
2014-09-18 23:56:01 +09:00
Tatsuhiro Tsujikawa
23dd428d65
nghttpx: Reset timeouts when either read or write succeeds
...
See previous commit message why we need this.
2014-09-18 23:19:28 +09:00
Tatsuhiro Tsujikawa
b305495a75
nghttpx: Reset both timeouts when either read or write succeeds
...
Previously read and write timeouts work independently. When we are
writing response to the client, read timeout still ticks (e.g., HTTP/2
or tunneled HTTPS connection). So read timeout may occur during long
download. This commit fixes this issue. This commit only fixes the
upstream part. We need similar fix for the downstream.
2014-09-18 23:03:36 +09:00
Tatsuhiro Tsujikawa
44ac571037
nghttpx: Add more handling situation where response ends before request
2014-09-17 22:53:29 +09:00
Tatsuhiro Tsujikawa
5bff48a15a
nghttpx: Call upstream resume_read after sending pending request to backend
...
With the combination of HTTP/1 upstream and HTTP/2 downstream,
downstream tells SHRPX_NO_BUFFER while connecting to the backend
server. Previously, we did not call upstream resume_read and upload
was blocked. This commit now calls upstream resume_read to unblock.
This commit also remove pending output buffer size of Http2Session
when calculating downstream connection's buffer is full. This is
desirable since we only operate resume_read by stream basis.
2014-09-17 22:36:42 +09:00
Tatsuhiro Tsujikawa
e4751a798a
Replace auto_delete* with defer
2014-09-16 23:39:38 +09:00
Tatsuhiro Tsujikawa
d00d4d647d
Compile with android NDK r10b 32bit target
...
Android does not have _Exit. We detect this and use _exit instead.
clang-3.4 has an issue around undefined reference to
__atomic_fetch_add_4, so we stick to gcc-4.8 for now.
2014-09-14 21:32:53 +09:00
Tatsuhiro Tsujikawa
901de5fbce
Add nghttp2_option_set_recv_client_preface()
...
By default, nghttp2 library only handles HTTP/2 frames and does not
recognize first 24 bytes of client connection preface. This design
choice is done due to the fact that server may want to detect the
application protocol based on first few bytes on clear text
communication. But for simple servers which only speak HTTP/2, it is
easier for developers if nghttp2 library takes care of client
connection preface.
If this option is used with nonzero val, nghttp2 library checks first
24 bytes client connection preface. If it is not a valid one,
nghttp2_session_recv() and nghttp2_session_mem_recv() will return
error NGHTTP2_ERR_BAD_PREFACE, which is fatal error.
2014-09-13 19:50:44 +09:00
Tatsuhiro Tsujikawa
85f605f20d
src: Check availability of ENONET
2014-09-02 01:00:27 +09:00
Tatsuhiro Tsujikawa
d8c0d87c90
src: Add missing SETTINGS ID to debug output
...
SETTINGS_MAX_FRAME_SIZE and SETTINGS_MAX_HEADER_LIST_SIZE are 2
missing SETTINGS IDs and now they are shown correctly.
2014-08-29 00:14:10 +09:00
Tatsuhiro Tsujikawa
8890e593e6
src: Add util::array_size
2014-08-28 00:45:12 +09:00
Tatsuhiro Tsujikawa
f8471a5f45
nghttpx: Move --backend-http-proxy-uri to Connections section
2014-08-27 23:37:54 +09:00
Tatsuhiro Tsujikawa
f34cbf9b45
tests: Include config.h
2014-08-27 23:36:57 +09:00
Tatsuhiro Tsujikawa
a23a705121
nghttpx: Strict integer config validation
2014-08-27 23:36:36 +09:00
Tatsuhiro Tsujikawa
822ec75814
nghttpx: Add --listener-disable-timeout option
2014-08-27 22:34:00 +09:00
Tatsuhiro Tsujikawa
0209b7c083
nghttpx: Fix location rewrite is failed because request headers are empty
...
Previously we empties request headers after they are sent to
downstream in order to free memory. But it turns out that we use
request headers when rewriting location header response field. Also
user reported that request headers are useful to add new features.
This commits defers the deletion of request headers to the point when
response headers are deleted (which is after response headers are sent
to upstream client).
2014-08-27 21:25:25 +09:00
Tatsuhiro Tsujikawa
223242b512
nghttpx: Don't consume response data in downstream on_stream_close_callback
...
Even after on_stream_close_callback, Http2DownstreamConnection is
still alive and upstream keeps sending response to the client. The
consumed bytes are processed normally (data_source_read_callback) and
also we have a code to consume all allocated bytes for
Http2DownstreamConnection object when it is deleted. This means that
we don't need to and should not consume response data in downstream
on_stream_close_callback. If we do, we may get assertion error in
Http2DownstreamConnection::resume_read().
2014-08-26 22:16:19 +09:00
Tatsuhiro Tsujikawa
82bc7198e6
Change nghttp2_session_get_stream_remote_window_size behavior
...
Now it returns only stream's available remote window size, without
considering connection level window size. For connection-level window
size, nghttp2_session_get_remote_window_size() is added by this
commit. To get old behavior of
nghttp2_session_get_stream_remote_window_size() is use
min(nghttp2_session_get_stream_remote_window_size(),
nghttp2_session_get_remote_window_size()). The reason of this change
is that it is desirable to know just stream level window size without
taking into connection level window size. This is useful for
debugging purpose.
2014-08-25 21:44:22 +09:00
Tatsuhiro Tsujikawa
53ee21caa9
Remove nghttp2_on_unknown_frame_recv_callback
...
It is not used by library for a while. It could be used to pass
unsupported extension frames to application, but its interface
requires library to buffer entire frame, which we'd like to avoid.
For unsupported extension frames, we will add new callbacks which does
not require buffering if they are required.
2014-08-25 21:24:04 +09:00
Tatsuhiro Tsujikawa
31528b6267
Use uint32_t for HTTP/2 error_code
...
h2-14 now allows extensions to define new error codes. To allow
application callback to access such error codes, we uses uint32_t as
error_code type for structs and function parameters. Previously we
treated unknown error code as INTERNAL_ERROR, but this change removes
this and unknown error code is passed to application callback as is.
2014-08-25 21:24:04 +09:00
Tatsuhiro Tsujikawa
ab5b81bee1
Hide nghttp2_session_callbacks details and provide setter like functions
...
To make it possible to add new callbacks without bumping so name, we
decided to hide details of nghttp2_session_callbacks. We provide
setter like functions to set individual callback function.
2014-08-25 21:24:04 +09:00
Tatsuhiro Tsujikawa
1673ae2c99
src: Add 308 Permanent Redirect (RFC 7238)
2014-08-24 22:56:48 +09:00
Tatsuhiro Tsujikawa
d5da7611fa
nghttpx: Remove unused member function and variable
2014-08-24 22:27:10 +09:00
Tatsuhiro Tsujikawa
9ad2c0887e
nghttpx: Use _Exit() instead of exit() when execve is failed in child process
2014-08-23 18:15:47 +09:00
Tatsuhiro Tsujikawa
d5dcbf6f3b
nghttpx: Fix possible flow control issue
...
Previously we only update consumed flow control window when number of
bytes read in nghttp2 and spdylay callback is 0. Now we notify
nghttp2 library the consumed bytes even if number of bytes read > 0.
This change also uses newly added spdylay_session_consume() API, so we
require spdylay >= 1.3.0.
2014-08-21 21:22:16 +09:00
Tatsuhiro Tsujikawa
69b9ce6b68
nghttpx: Fix possible deadlock due to exhaustion of send window
2014-08-20 01:39:07 +09:00
Tatsuhiro Tsujikawa
c81e87bf37
nghttpx: Fix dereference after null check
2014-08-20 00:17:50 +09:00
Tatsuhiro Tsujikawa
97533c966d
nghttpx: Fix gcc compiler warning
2014-08-20 00:09:18 +09:00
Tatsuhiro Tsujikawa
d6b495f2a7
nghttpx: Returns 503 if downstream connect fail for https upstream
2014-08-19 23:41:53 +09:00
Tatsuhiro Tsujikawa
c7e9fe8154
nghttpx: Implement connection blocker for HTTP/1 backend
2014-08-19 23:36:04 +09:00
Tatsuhiro Tsujikawa
fb62a5ed4f
nghttpx: Use pointer for worker_config
2014-08-19 22:29:44 +09:00
Tatsuhiro Tsujikawa
345121975a
nghttpx: Handle socket creation error
2014-08-19 22:29:44 +09:00
Tatsuhiro Tsujikawa
a5dfe24e49
nghttpx: Use std::unique_ptr for DownstreamConnection
2014-08-19 00:20:57 +09:00
Tatsuhiro Tsujikawa
273d9f4f7d
nghttpx: Use std::unique_ptr for Downstream object
2014-08-19 00:20:56 +09:00
Tatsuhiro Tsujikawa
500c5eea56
nghttpx: Rename Http2Upstream::add_downstream as add_pending_downstream
2014-08-18 21:38:03 +09:00
Tatsuhiro Tsujikawa
83a39f5b49
nghttpx: Fix stream handling of upgraded request
2014-08-18 21:36:55 +09:00
Tatsuhiro Tsujikawa
2fb675f13c
nghttpx: Open default log files for errors occurred while parsing options
2014-08-17 22:37:30 +09:00
Tatsuhiro Tsujikawa
eebd1f5492
nghttpx: Add some more info about prohibition of --read-burst=0
2014-08-17 22:31:44 +09:00
Tatsuhiro Tsujikawa
86dd1519b4
nghttpx: Android specific hack for special files for logging
...
Android lacks /dev/stderr, so directly use /proc/self/fd/2 as default
errorlog-file. Android does not like O_APPEND for /proc/self/fd/1 and
/proc/self/fd/2, so omit the flag for these paths.
2014-08-17 19:01:51 +09:00
Tatsuhiro Tsujikawa
a507fc80b6
Isolate std::future when NOTHREADS is defined and build without SOCK_{NONBLOCK, CLOEXEC}
2014-08-17 18:50:10 +09:00
Tatsuhiro Tsujikawa
49a9ec2cb3
nghttpx: Use int for resonse_rst_stream_error_code_
2014-08-17 16:36:02 +09:00
Tatsuhiro Tsujikawa
5d2390deba
nghttpx: Bring per-connection rate limit back
...
--read-burst=0 still does not work. But specifying n > 0 workarounds
this.
2014-08-17 16:17:10 +09:00
Tatsuhiro Tsujikawa
3c056973a1
nghttpx: Ignore SIGCHLD not to create zombie on SIGUSR2 if -D is used
2014-08-17 00:05:24 +09:00
Tatsuhiro Tsujikawa
0e8419ac37
nghttpx: Add backend-connections-per-frontend option
...
This option limits the number of backend connections per frontend.
This is meaningful for the combination of HTTP/2 and SPDY frontend and
HTTP/1 backend.
2014-08-16 22:24:17 +09:00
Tatsuhiro Tsujikawa
da08ba5d50
nghttpx: Reset upstream timer on upgrade
2014-08-15 10:29:46 +09:00
Tatsuhiro Tsujikawa
30fa6d24d0
nghttpx: Rewirte server header field if configured as reverse proxy
2014-08-14 22:45:21 +09:00
Tatsuhiro Tsujikawa
f776c50d43
nghttpx: Just record error code when RST_STREAM is received
...
libnghttp2 will call on_stream_close callback when RST_STREAM is
received. So we can use on_stream_close callback to handle existing
stream, instead of on_frame_recv callback.
2014-08-14 12:48:30 +09:00
Tatsuhiro Tsujikawa
7b85f6c50d
nghttpx: Store errno to a variable temporarly
2014-08-13 22:13:08 +09:00
Tatsuhiro Tsujikawa
21cbf417c8
nghttpx: Use SOCK_NONBLOCK and SOCK_CLOEXEC flag in socketpair to avoid race
2014-08-13 22:09:35 +09:00
Tatsuhiro Tsujikawa
ca680c16e3
nghttpx: Chown file to effective user
2014-08-13 01:53:44 +09:00
Tatsuhiro Tsujikawa
bf13d91264
nghttpx: Add hot deploy feature
...
nghttpx supports hot deploy feature using signals. The host deploy in
nghttpx is multi step process. First send USR2 signal to nghttpx
process. It will do fork and execute new executable, using same
command-line arguments and environment variables. At this point, both
current and new processes can accept requests. To gracefully shutdown
current process, send QUIT signal to current nghttpx process. When
all existing frontend connections are done, the current process will
exit. At this point, only new nghttpx process exists and serves
incoming requests.
2014-08-13 00:43:54 +09:00
Tatsuhiro Tsujikawa
8aa6580d89
nghttpx: Chown log files with --user
2014-08-10 20:58:02 +09:00
Tatsuhiro Tsujikawa
58afce2382
nghttp: Verbose output for received DATA chunk with current received window
2014-08-10 17:18:28 +09:00
Tatsuhiro Tsujikawa
24cfb52b5a
nghttpx: Add --no-location-rewrite option
...
--no-location-rewrite option disallows location header rewrite on
--http2-bridge, --client and default mode. This option is useful when
connecting nghttpx proxy with --http2-bridge to backend nghttpx with
http2-proxy mode.
2014-08-10 12:39:27 +09:00
Tatsuhiro Tsujikawa
93ed89df5f
nghttpx: Make stream timeout disable by default
...
It might be useful to clean the unused stream out to make up the room
for new streams. On the other hand, proxy should maintain the
connection between upstream client and downstream server and they have
the timeout for their own. Proxy just reacts to their decision.
2014-08-10 00:08:44 +09:00
Tatsuhiro Tsujikawa
1a2e50ca08
nghttpx: Lower timeouts
2014-08-09 22:59:31 +09:00
Tatsuhiro Tsujikawa
76703f79fa
nghttpx: Add stream level timeout for HTTP/2 and SPDY upstream/downstream
2014-08-09 22:56:27 +09:00
Tatsuhiro Tsujikawa
4c3aa081a0
nghttp: Improve error logging a bit
2014-08-09 00:03:33 +09:00
Tatsuhiro Tsujikawa
88add854ff
nghttpx: Treat malformed request as PROTOCOL_ERROR
2014-08-08 23:11:58 +09:00
Tatsuhiro Tsujikawa
704bbbfcaa
nghttpx: Fail if :status is not digits on http2 downstream
2014-08-08 23:08:24 +09:00
Tatsuhiro Tsujikawa
e217e789de
nghttp: Support non-final response and check pseudo headers
2014-08-08 23:03:12 +09:00
Tatsuhiro Tsujikawa
d4d56e1846
nghttpd, nghttpx: Check that pseudo headers come before normal headers
2014-08-08 20:52:32 +09:00
Tatsuhiro Tsujikawa
d496c42dc9
Revert "nghttpx, nghttpd: Check pseudo header fields come before normal header fields"
...
This reverts commit cc24b9aaf0
.
2014-08-08 20:17:03 +09:00
Tatsuhiro Tsujikawa
76b3ba2832
nghttp: Sort request header fields using http2::name_less
2014-08-08 00:27:04 +09:00
Tatsuhiro Tsujikawa
05f982dcfb
src: Sort header fields so that pseudo headers come first
2014-08-07 23:27:13 +09:00
Tatsuhiro Tsujikawa
cc24b9aaf0
nghttpx, nghttpd: Check pseudo header fields come before normal header fields
2014-08-07 22:49:34 +09:00
Tatsuhiro Tsujikawa
e6695d9ba7
nghttp: Check HTTP header field characters
2014-08-07 22:01:00 +09:00
Tatsuhiro Tsujikawa
9fb2bc8468
src: Remove http2::sort_nva
...
This function is no longer necessary because 0x00 concatenation rule
is gone.
2014-08-07 21:55:30 +09:00
Tatsuhiro Tsujikawa
3f212a60a5
nghttpx: Fix android build error
2014-08-06 00:23:46 +09:00
Tatsuhiro Tsujikawa
5c61917007
src: Move jemalloc front so that it is surely linked
2014-08-05 22:27:54 +09:00
Tatsuhiro Tsujikawa
455d911f61
src, examples: Call OPENSSL_config()
2014-08-02 10:11:45 +09:00
Tatsuhiro Tsujikawa
7c781bcd1a
nghttpx: Issue RST_STREAM instead of returning NGHTTP2_ERR_TEMPORAL_CALLBACKFAILURE
...
NGHTTP2_ERR_TEMPORAL_CALLBACKFAILURE is not supported in
on_frame_recv_callback.
2014-08-02 00:26:43 +09:00
Tatsuhiro Tsujikawa
2e083352d5
nghttpx: Fix crash on http2 downstream disconnect
2014-07-31 23:34:33 +09:00
Tatsuhiro Tsujikawa
6e027ad830
nghttpd, nghttpx: Check allowed pseudo headers
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
9d78167297
nghttpx: Treat unexpected HEADERS as stream error
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
b8a2bf2675
Remove END_SEGMENT flag
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
04b5d1679f
nghttpx: Log non-final response headers
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
15055c11f9
nghttpx: Support server-wide OPTIONS in http/1 upstream
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
c859fb8f7c
nghttpx: Don't respond DATA frame for HEAD request or 204, 304, 1xx
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
079db14d45
Add nghttp2_session_consume() API
...
Reworked no automatic WINDOW_UPDATE feature. We added new API
nghttp2_session_consume() which tells the library how many bytes are
consumed by the application. Instead of submitting WINDOW_UPDATE by
the application, the library is now responsible to submit
WINDOW_UPDATE based on consumed bytes. This is more reliable method,
since it enables us to properly send WINDOW_UPDATE for stream and
connection individually. The previous implementation of nghttpx had
broken connection window management.
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
9f17bee51d
Fix unittest failure
2014-07-31 23:05:53 +09:00
Tatsuhiro Tsujikawa
4f815521ae
nghttpx, nghttpd: Support non-final response
2014-07-31 23:05:52 +09:00
Tatsuhiro Tsujikawa
af5fd2019d
src: Remove 0x00 concatenation for headers
...
Now concatenating header values with 0x00 as delimiter is not
necessary because HPACK reference set is removed and the order of
header field fed into HPACK encoder is preserved when they are
decoded.
2014-07-31 23:05:52 +09:00
Tatsuhiro Tsujikawa
38bfbffb1b
Remove HPACK reference set
2014-07-31 23:05:52 +09:00
Tatsuhiro Tsujikawa
8dc47c6750
Fix resource leaks
2014-07-18 00:31:32 +09:00
Tatsuhiro Tsujikawa
61053653df
src: Retry write(2) if errno == EINTR
2014-07-17 23:41:54 +09:00
Tatsuhiro Tsujikawa
bb47484667
nghttpx: Log transmission and reception of GOAWAY
2014-07-12 23:30:13 +09:00
Tatsuhiro Tsujikawa
c4d2639ed8
nghttpd: Don't shutdown session if pending data is left
2014-07-12 23:17:25 +09:00
Tatsuhiro Tsujikawa
25e18174dd
src: Add additional HTTP status codes defined in RFC 6585
2014-07-08 22:41:17 +09:00
Tatsuhiro Tsujikawa
a072d719b3
nghttpx: Use 431 instead of 413
2014-07-08 22:37:48 +09:00
Tatsuhiro Tsujikawa
0d1ebd73de
nghttpx: Only use thread_local if NOTHREADS is not defined
2014-07-08 21:28:11 +09:00
Tatsuhiro Tsujikawa
d3ca003346
Update android-config and fix build warning with android NDK
2014-07-06 23:32:08 +09:00
Tatsuhiro Tsujikawa
9cbedb16d0
nghttpx: Log filename and line number after severity in one line
2014-07-06 19:26:12 +09:00
Tatsuhiro Tsujikawa
9f1c819242
nghttpx: Cleanup create_evlistener
2014-07-06 19:21:18 +09:00
Tatsuhiro Tsujikawa
a02624c9ed
nghttpx: Use std::shared_ptr to share cached time
...
To ensure that cached time buffer is not altered while referencing it,
we rely on inerlocking in std::shared_ptr to acheive this.
2014-07-06 13:27:51 +09:00
Tatsuhiro Tsujikawa
933e24d412
nghttpx: Use std::atomic for Config::cached_time
2014-07-05 23:50:32 +09:00
Tatsuhiro Tsujikawa
fe2843f9d6
nghttpx: Include pid in errorlog
2014-07-05 22:53:17 +09:00
Tatsuhiro Tsujikawa
afdc61a253
nghttpx: Remove S_IROTH when creating log file
2014-07-05 22:41:53 +09:00
Tatsuhiro Tsujikawa
367e764ca3
nghttpx: Log user-agent as "-" if it is empty
2014-07-05 19:48:14 +09:00
Tatsuhiro Tsujikawa
9841f778a9
nghttpx: Do not compile pthread_sigmask if NOTHREADS is defined
2014-07-05 19:43:39 +09:00
Tatsuhiro Tsujikawa
bf4042ce98
nghttpx: Cache time for logging
2014-07-05 19:40:30 +09:00
Tatsuhiro Tsujikawa
2e6d5e9bd0
nghttpx: Use %lld instead of PRId64
2014-07-05 18:51:55 +09:00
Tatsuhiro Tsujikawa
0ce848a611
nghttpx: Rewrite logging system
...
This change rewrites logging system of nghttpx. Previously access log
and error log are written to stderr or syslog and there was no option
to change stderr to something else. With this change, file path of
access log and error log can be configured separately and logging to
regular file is now added. To support rotating log, if SIGUSR1 signal
is received by nghttpx, it closes the current log files and reopen it
with the same name. The format of access log is changed and has same
look of apache's. But not all columns are not supported yet.
2014-07-05 18:43:24 +09:00
Tatsuhiro Tsujikawa
57230b4029
nghttpx: Fix regression POST http2 downstream does not work
2014-07-04 02:03:09 +09:00
Tatsuhiro Tsujikawa
3111138ca3
nghttpx: Don't add transfer-encoding to CONNECT request
2014-07-03 23:44:20 +09:00
Tatsuhiro Tsujikawa
0f4d01c25c
nghttpx: Pass through NGHTTP2_NO_ERROR from downstream to upstream
2014-07-03 23:00:19 +09:00
Tatsuhiro Tsujikawa
f8b872096e
nghttpx: Use NGHTTP2_NO_ERROR to close upgraded (tunneled) stream
2014-07-03 22:59:49 +09:00
Tatsuhiro Tsujikawa
e18c439a73
nghttp: Add --no-content-length option
2014-07-03 22:48:43 +09:00
Tatsuhiro Tsujikawa
545732fed8
nghttpd: Add --early-response option
...
This option is testing the client behavior when it gets response
before sending all request.
2014-07-03 22:44:27 +09:00
Tatsuhiro Tsujikawa
4b6f124b7e
Add API to check half-closed state for both direction of stream
2014-07-03 21:44:29 +09:00
Tatsuhiro Tsujikawa
119fb05cc2
nghttpx: Call on_response_headers for response header only in http2 downstream
2014-07-03 21:18:01 +09:00
Tatsuhiro Tsujikawa
e08df2840c
nghttpx: Disallow 2nd message in http downstream
2014-07-03 20:57:07 +09:00
Tatsuhiro Tsujikawa
1ce00f455c
nghttpx: Remove requirement of content-length for HTTP2 upstream POST
2014-07-03 19:59:10 +09:00
Tatsuhiro Tsujikawa
9cddb05f54
nghttpx: Use error_reply instead of RST_STREAM for http2 upstream request
2014-07-03 00:12:16 +09:00
Tatsuhiro Tsujikawa
93b3a44fb5
nghttpx: Add ability to Http2Upstream to send RST_STREAM after END_STREAM
2014-07-02 23:56:26 +09:00
Tatsuhiro Tsujikawa
acb3d4dcfc
nghttpx: Handle connection flow control for DATA not sent to frontend
2014-07-02 23:24:59 +09:00
Tatsuhiro Tsujikawa
797edae4d4
nghttpx: Handle connection flow control for DATA not sent to backend
2014-07-02 23:24:58 +09:00
Tatsuhiro Tsujikawa
4e81a34146
nghttpd: Add --dh-param-file option to support DHE ciphers
2014-06-28 15:43:06 +09:00
Tatsuhiro Tsujikawa
9fec34968b
nghttpd: Disable SSL_CTX_set_ecdh_auto for OpenSSL >= 1.0.2
2014-06-28 15:35:10 +09:00
Tatsuhiro Tsujikawa
a3334bb21c
nghttpd: Use cipher suites recommended by Mozilla
2014-06-28 15:28:19 +09:00
Tatsuhiro Tsujikawa
c1be7c734f
src: Update status code according to RFC 7231
2014-06-27 23:02:12 +09:00
Tatsuhiro Tsujikawa
303f0f3fcd
nghttpx: Return 413 if request header is too large
...
For now, if request has request body, we'll issue RST_STREAM to inform
the peer to stop sending body. RST_STREAM may be sent before error
page header or data, so peer may receive RST_STREAM only.
2014-06-27 22:54:33 +09:00
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
31d99b3664
nghttp: Adjust header size for CONTINUATION test
2014-06-27 21:16:36 +09:00
Tatsuhiro Tsujikawa
3312df42d2
nghttpx: Use std::unique_ptr for ListenHandler::http2session_
2014-06-27 00:39:53 +09:00
Tatsuhiro Tsujikawa
68cd12ac29
nghttpx: Use std::vector instead of raw array
2014-06-27 00:26:21 +09:00
Tatsuhiro Tsujikawa
52ff158f34
h2load: Fix failed stream count is added multiple times
...
The number of failed stream is counted multiple times if several
connection attempts are made.
2014-06-26 23:20:12 +09:00
Tatsuhiro Tsujikawa
479e15469c
nghttpx: Add worker-frontend-connections option
2014-06-26 22:55:22 +09:00
Tatsuhiro Tsujikawa
ad60a18fb9
Remove BLOCKED frame
2014-06-24 00:22:41 +09:00
Tatsuhiro Tsujikawa
5aba6e6d1b
h2load: Set number of request per client explicitly
...
Previously we do not specify the number of requests each client has to
issue. The each client corresponds to 1 TCP connection. If
connection was not accepted by server or not TLS handshake is not
done, we effectively don't use that connection and the requests
supposed to be issued for those connections are done via other
established connections. If this occurs, servers which do not accept
all connections may gain good benchmark results since they don't have
to pay extra cost to handle all connections (e.g., SSL/TLS handshake).
This change explicitly set the number of requests each client has to
issue so that servers cannot *cheat*.
2014-06-22 15:03:46 +09:00
Tatsuhiro Tsujikawa
1caec7cb16
h2load: Fix memory leak detected by LeakSanitizer
2014-06-20 00:00:06 +09:00
Tatsuhiro Tsujikawa
0cd26d6f3b
nghttp: Remove garbage for deprecated per-stream compression which cause leak
2014-06-19 23:35:58 +09:00
Tatsuhiro Tsujikawa
2bfa772472
nghttpx: Update cipher suite list
2014-06-19 23:26:30 +09:00
Tatsuhiro Tsujikawa
133c3d66be
nghttpx: Remove TLSv1.0 from default TLS proto list
2014-06-19 23:21:53 +09:00
Tatsuhiro Tsujikawa
266a15ccd3
nghttpx: Remove per-connection rate limit
...
It looks like setting read-rate and read-burst to 0 makes busy loop.
It seems a bug. On the other hand, we most likely want per-thread
rate limit rather than per-connection. So we decided to drop them.
2014-06-19 23:19:14 +09:00
Tatsuhiro Tsujikawa
4ff522764c
h2load: Call session->on_write() explicitly in Client::on_connect()
2014-06-19 22:49:38 +09:00
Tatsuhiro Tsujikawa
4ab594b144
nghttpx: Fix connection preface is not read by upstream_http2_connhd_readcb
...
It seems that if readcb is not set before SSL/TLS handshake, the
incoming data already available when eventcb (BEV_EVENT_CONNECTED
event) is fired is not further notified after setting new readcb. We
knew this fact and call upstream->on_read() in eventcb, but it is
wrong for HTTP/2. We have to call upstream_http2_connhd_readcb to
check connection preface. Otherwise, we consume it by nghttp2 session
and it is treated as unknown frame and connection preface is not
detected properly.
2014-06-19 22:43:54 +09:00
Tatsuhiro Tsujikawa
a344a8f566
src: Don't build h2load if std::future is not working
2014-06-18 14:24:45 +09:00
Tatsuhiro Tsujikawa
87360b4f7d
nghttpx: Require TLSv.12 for h2
2014-06-18 12:09:30 +09:00
Tatsuhiro Tsujikawa
174e410b93
Use hex in nghttp2_error_code and nghttp2_settings_id
2014-06-18 10:48:31 +09:00
Tatsuhiro Tsujikawa
94b9c3771d
nghttpx: Throw away request and response headers when they are done
2014-06-15 17:25:24 +09:00
Tatsuhiro Tsujikawa
041cec2d97
nghttpx: Check error from SSL_set_fd
2014-06-12 23:39:58 +09:00
Tatsuhiro Tsujikawa
25b58d5e22
nghttpx: Code cleanup
2014-06-12 23:37:33 +09:00
Tatsuhiro Tsujikawa
1ee847c21a
nghttp: Code cleanup
2014-06-12 22:48:40 +09:00
Tatsuhiro Tsujikawa
1af9a9cee0
nghttpx: Don't stderr log if syslog is used
...
This change also reverts previous commits and tty is set to false if
syslog is used.
2014-06-12 21:47:00 +09:00
Tatsuhiro Tsujikawa
6a2950aef0
nghttpx: Make tty to false when daemonized
2014-06-12 00:19:46 +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
21c4931197
nghttpx: Get rid of openssl filter
...
Libevent Openssl filter is very inconvenient in various respect. The
most annoying thing is it somehow emits data when SSL_shutdown is
called. The reason we introduced this filter solution is drop
connection if TLS renegotiation is detected. This commit implements
renegotiation detection and drop connection without filtering.
2014-06-11 01:16:49 +09:00
Tatsuhiro Tsujikawa
24762db8f5
nghttpx: Drop connection if HTTP/2 security level is not satisfied on backend
2014-06-11 00:19:54 +09:00
Tatsuhiro Tsujikawa
492b42e6e9
nghttpx: Drop connection if HTTP/2 security level is not satisfied on frontend
2014-06-11 00:07:51 +09:00
Tatsuhiro Tsujikawa
d6b5824c9c
nghttpx: Don't check TLS requirement in ALPN cb cause cipher obj is nullptr
...
Also don't compare ALPN identifier with streq, since they are just
byte string.
2014-06-10 23:22:52 +09:00
Tatsuhiro Tsujikawa
c204861dec
nghttpx: Create NPN prefs only once
2014-06-10 23:22:23 +09:00
Tatsuhiro Tsujikawa
7b0ed5d9bd
nghttpx: Only allow DHE, ECDHE + AEAD ciphers for HTTP/2
...
Cipher suites are chosen by DHE and ECDHE ciphers + GCM (AEAD). Now
default cipher list is the one recommended by Mozilla web site. The
--honor-cipher-order option is removed and now it is always assumed.
2014-06-10 22:47:22 +09:00
Tatsuhiro Tsujikawa
5f5b5378c9
Merge branch 'master' into h2-13
...
Conflicts:
lib/nghttp2_session.c
2014-06-10 21:38:26 +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
de14c02227
nghttpx: Code cleanup
2014-06-08 23:09:44 +09:00
Tatsuhiro Tsujikawa
e665123ebe
nghttpx: Use nullptr instead of NULL
2014-06-08 23:09:44 +09:00
Tatsuhiro Tsujikawa
db8af31e2b
nghttpx: Code cleanup
2014-06-08 23:09:44 +09:00
Tatsuhiro Tsujikawa
0fd5b2aa32
nghttpx: Use std::vector for tls_proto_list and npn_list
...
Now SSL/TLS option mask to disable particular SSL/TLS protocol
versions are pre-calculated and stored in Config.
2014-06-08 23:09:44 +09:00
Tatsuhiro Tsujikawa
1f58be423d
nghttpx: Use nullptr instead of 0
2014-06-08 21:05:36 +09:00
Tatsuhiro Tsujikawa
14b818efc8
nghttpx: Use std::unique_ptr<char[]> instead of char*
2014-06-08 21:02:40 +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
3db8935e20
Remove per-frame compression
2014-06-07 16:04:43 +09:00
Tatsuhiro Tsujikawa
b8ed74c1ec
nghttpx: Disable SSL_CTX_set_ecdh_auto() for now
2014-06-06 23:17:32 +09:00
Tatsuhiro Tsujikawa
fcec996925
h2load: Use 1 thread if the number of concurrent client is 1
2014-06-06 23:11:08 +09:00
Tatsuhiro Tsujikawa
7cb28e88e2
h2load: Return Stats rather than Worker from std::future
2014-06-06 23:08:32 +09:00
Tatsuhiro Tsujikawa
aea4001d73
deflatehd: Fix crash with -t option
2014-06-05 00:59:22 +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
cc250386df
nghttpx: Lower read watermark
2014-06-01 02:32:26 +09:00
Tatsuhiro Tsujikawa
3b7c733246
nghttpx: Fix typo
2014-06-01 02:32:15 +09:00
Tatsuhiro Tsujikawa
7e5567341f
nghttpx: Set timeout to underlying bufferevent
...
Setting write timeout to filter bufferevent does not work as intended.
It timeouts even when there is no data to write.
2014-06-01 02:25:23 +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
d844b0acd0
h2load: Use std::async to dispatch parallel jobs
2014-05-26 23:29:28 +09:00
Tatsuhiro Tsujikawa
1fa5852f8f
nghttpx: Treat '*' in <HOST> parameter of --frontend as wildcard explicitly
...
It seems that specifyig '*' to node parameter in getaddrinfo() is
treated as specifying NULL, but it is not documented. So rather than
relying on this feature, we explicitly treat '*' as "wildcard" address
and specify NULL to node parameter in getaddrinfo().
Now '*,3000' is a default value of --frontend option. Specyfing '*'
binds all addresses including both IPv4 and IPv6.
2014-05-25 16:15:48 +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
672ad82849
nghttpx: Clarify that --npn-list is used in both ALPN and NPN
2014-05-21 21:28:58 +09:00
Tatsuhiro Tsujikawa
896717f5d4
nghttpx: Make --npn-list option work in ALPN
...
Previously --npn-list option is ignored in ALPN protocol selection
callback. This change fixes this issue.
2014-05-21 21:16:44 +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
3b5b5ce254
Update http-parser to 8d9e5db981b623fffc93657abacdc80270cbee58
2014-05-16 00:23:03 +09:00