Commit Graph

252 Commits

Author SHA1 Message Date
Greg Wilkins 2536c1cc3f Handle HTTP2-16 black listed ciphers 2014-12-04 14:17:25 +01:00
Greg Wilkins c3472f01c4 updated hpack for draft 10 name changes 2014-12-04 10:27:14 +01:00
Greg Wilkins 4296d84a7b updated hpack for draft 10 name changes 2014-12-04 10:17:06 +01:00
Greg Wilkins 0a144ed3ac 453487 Recycle HttpChannelOverHTTP2
This is an initial recyling of the channel.   The pool is a concurrent linked list, but it may be better to use an array backed list/stack that can easily enforce a maximum pool size.
The pool is currently on the session listener, when it really should be on the HTTP2ServerConnection, but more refactoring is needed for that.
Also the pool is currently inaccessible to the push mechanism
2014-11-28 12:09:59 +11:00
Greg Wilkins f853adb43c fixed debug 2014-11-21 16:01:31 +11:00
Joakim Erdfelt d4d6cfdfa7 Removing virtual module [ssl-protonego]
+ This virtual module, rolled the ssl + protonego + (xml) into
  http2 & spdy modules instead.
2014-11-17 14:08:19 -07:00
Greg Wilkins 5b60e0c98d support h2-15 and h2-14 2014-11-14 10:53:37 +11:00
Greg Wilkins e3bda4efbe 446564 Refactored RequestLog Mechanism
RequestLog can now be set on the HttpChannel and is called during the onCommitted callback.
The RequestLog may be set either on the server or via an updated RequestLogHandler that can
be applied to a specific context.
2014-10-31 13:31:29 +11:00
Greg Wilkins 31e448ffd6 Removed duplication of HttpGenerator$Info vs http.MetaData
Use MetaData throughout code base
2014-10-24 15:51:20 +11:00
Greg Wilkins ec79a6f88e Improve HTTP header pre-encoding
The HttpContent class has been reworked to store HttpField instances, we may be generated on
demand or instances of PreEncodedHttpField.

The encoding of HTTP2 fields has been generalized to handle both indexed and literal fields, selected
by header enum set.

Default servlet and response classes have been cleaned up in how they set response headers.
2014-10-16 12:31:37 +11:00
Greg Wilkins 8c85b2f591 improved http2 static entry generation 2014-10-15 14:04:54 +11:00
Simone Bordet 8d2efaf7eb 445167 - Allow configuration of dispatch after select.
Introduced parameter "dispatchIO" in the relevant factories so that
they can be configured by users and connections will be created
taking into account this parameter.

For less configurable connection factories, this parameter is
currently hardcoded to either true or false depending on the case.
For example, ALPN and NPN connections have it to false, since they
don't do any blocking operation in onFillable().
2014-09-26 10:13:16 +02:00
Simone Bordet a8b461fe91 Cosmetics: removed unused imports, cleaned up source code, improved javadocs. 2014-09-26 10:13:16 +02:00
Simone Bordet 8af9ea4030 Calling notIdle() to avoid the idle timeout triggers when sending frames. 2014-09-26 10:13:16 +02:00
Simone Bordet 9a1acd59fc Made test more robust. 2014-09-26 10:13:15 +02:00
Jesse McConnell 3095a179f9 [maven-release-plugin] prepare for next development iteration 2014-09-24 12:24:31 -05:00
Jesse McConnell 390f3200cc [maven-release-plugin] prepare release jetty-9.3.0.M0 2014-09-24 12:24:23 -05:00
Greg Wilkins a573430840 PushCacheFilter handles multiple hosts and ports 2014-09-22 11:10:13 +10:00
Greg Wilkins fc4bfc8a66 improved debug logging 2014-09-21 15:03:54 +10:00
Simone Bordet 51631c2a46 Made the test more robust, avoiding WritePendingExceptions. 2014-09-19 10:33:09 +02:00
Simone Bordet bfda3620f3 444485 - Client resets stream, pending server data is failed, write hangs.
Fixed by ensuring that when a failure happens, either by catching an
exception or by failing a callback, we always call completed() and
abort the channel (via new method terminate()).
2014-09-18 16:31:16 +02:00
Simone Bordet 418a493337 More simplifications for the send() implementation. 2014-09-18 11:50:18 +02:00
Greg Wilkins 0acee9851f minor cleanups of exceptions 2014-09-18 18:23:48 +10:00
Simone Bordet ef4e0a9e7c Made the test more reliable. 2014-09-17 20:56:05 +02:00
Simone Bordet 3e602117b4 Improved send() implementation to be more clear, and covered also a
missing case where the callback may have not been notified.
2014-09-17 18:07:22 +02:00
Simone Bordet 5370f3c8cb 442950 - Embedded Jetty client requests to localhost hangs with high cpu usage (NIO OP_CONNECT Solaris/Sparc). 2014-09-01 12:06:18 +02:00
Simone Bordet 17c8f71724 Renamed onConnect() to onAccept() to reflect its server-side role. 2014-08-21 11:54:03 +02:00
Simone Bordet c07ea68b51 Improved configurability of stream idle timeout. 2014-08-21 11:54:03 +02:00
Simone Bordet 75c1322adc Rewritten close workflow to make sure that connections are correctly closed. 2014-08-21 11:54:03 +02:00
Simone Bordet 7a61c96ba1 Removed debug logging (wrongly assumes the ByteBuffer has a backing array). 2014-08-21 11:54:03 +02:00
Simone Bordet c10e5e8833 Renamed PushTest -> PushCacheFilterTest. 2014-08-21 11:54:02 +02:00
Simone Bordet c15480644f 442083 - Client resets stream, pending server data is failed, connection closed.
Introduced ResetException, and using it when failing frames of streams
that have been reset already.

HttpTransportOverHTTP2.abort(Throwable) checks for this exception and
does not close the connection.
2014-08-19 18:40:01 +02:00
Simone Bordet d4f140ff65 Ignoring HEADERS, PUSH_PROMISE and DATA if the stream cannot be found.
This typically happens when the stream has been reset.
2014-08-19 13:43:24 +02:00
Simone Bordet 20076fcdc5 Moved reset() from Session to Stream. 2014-08-19 13:41:52 +02:00
Simone Bordet 09d54eacab Accounting for the session flow control window in case of reset streams. 2014-08-19 13:38:43 +02:00
Simone Bordet 728a7c3442 Made push functionality honor configuration parameter sent via SETTINGS. 2014-08-15 18:34:20 +02:00
Simone Bordet c7987b154a Reverted logging of HTTP2 tests from DEBUG to INFO. 2014-08-15 17:29:38 +02:00
Greg Wilkins 1c71040eca moved config plugin to profile 2014-08-15 19:53:52 +10:00
Greg Wilkins b47f9ef605 cleaned up OSGi manifest creation 2014-08-15 19:35:49 +10:00
Simone Bordet 48b1f9f3f1 Implemented HTTP/2 push functionality.
A PushCacheFilter contains the logic to associate secondary resources
to primary resources.
PushCacheFilter calls a Jetty-specific API on the request dispatcher:
Dispatcher.push(ServletRequest). This is a technology preview of the
push functionality slated for Servlet 4.0.
The push() invocation arrives to the transport and it is converted to
HTTP/2 specific PUSH_PROMISE, along with the mechanism to simulate
the request for the secondary resource.
2014-08-14 23:05:35 +02:00
Greg Wilkins a14d843382 ignored osgi-spdy tests 2014-08-14 15:18:28 +10:00
Greg Wilkins 68a3ca8e31 improved debug logging of settings 2014-08-13 12:00:32 +10:00
Simone Bordet a97d4642ab Improved toString() methods for frames. 2014-08-12 23:01:03 +02:00
Simone Bordet 20963c9c61 Refactored host and port to local variables. 2014-08-12 18:54:50 +02:00
Simone Bordet 814c84a212 Introduced configuration properties for ALPN/NPN advertised protocols.
No more need to copy protonego-alpn.xml to a jetty.base to specify
which protocols are advertised and in which order.
Instead, simply specify:

alpn.protocols=h2-14,http/1.1
alpn.defaultProtocol=http/1.1

in start.ini (in the example above for http2).
2014-08-12 18:54:33 +02:00
Simone Bordet e147ce9528 Updated flow control implementation to detect when senders exceed
allowed windows.
2014-08-12 16:37:41 +02:00
Simone Bordet 4f4c3604a2 Made the test more reliable. 2014-08-12 16:27:33 +02:00
Simone Bordet d2fa4dca60 Introduced configuration properties for ALPN/NPN advertised protocols.
No more need to copy protonego-alpn.xml to a jetty.base to specify
which protocols are advertised.
Instead, simply specify:

protonego.protocols=h2-14,http/1.1
protonego.defaultProtocol=http/1.1

in start.ini (in the example above for http2).
2014-08-11 23:59:26 +02:00
Simone Bordet 107a4fff20 Fixed handling of INITIAL_WINDOW_SIZE setting.
It must update only stream windows, and not the session window.
2014-08-11 18:43:50 +02:00
Simone Bordet 187c42fa4a Closing the flusher instead of just disconnecting after a GO_AWAY.
This ensures that frames that may have been added to the flusher queue
concurrently after the GO_AWAY are properly failed and the queue
drained.
2014-08-11 11:30:49 +02:00
Simone Bordet 59a9c0890c Fixed off-by-one in counting the padding bytes. 2014-08-08 23:53:18 +02:00
Simone Bordet f8086dc7c2 Refactored the send of the SETTINGS frame from the client.
It's now sent after a call to onPreface(), which has been moved to
the common interface Session.Listener (from ServerSession.Listener),
so that client applications can customize the SETTINGS to send to the
server.
2014-08-08 23:52:20 +02:00
Simone Bordet ab96bf775f Removed unneeded casting to DataFrame. 2014-08-08 18:19:02 +02:00
Greg Wilkins 5da39140df remove old TODOs 2014-08-08 18:30:56 +10:00
Simone Bordet 6b9a069d9d Waiting for all the frames to arrive before stopping. 2014-08-08 01:11:59 +02:00
Simone Bordet 466d8db8d8 Sending a SETTINGS frame after the preface, as required by the spec. 2014-08-08 01:11:59 +02:00
Simone Bordet 69927b935e Don't send a window update if the length is zero. 2014-08-08 01:11:59 +02:00
Greg Wilkins 287e86b7aa decomposed https,http2 and spdy modules to share ServerConnector 2014-08-07 12:58:12 +10:00
Greg Wilkins 64e49a1fe5 work around classloaders for field preencoders 2014-08-07 09:10:35 +10:00
Simone Bordet 55dec378fc Merged branch 'jetty-http2' into 'http2_flow_control' 2014-08-06 15:43:56 +02:00
Simone Bordet abd139cc1b Reworked flow control implementation. Splitted HTTP2Flusher out of HTTP2Session.
Flow control window updates are now processed by the flusher, so that
it is the only component that handles window updates.
In the process of this refactoring, HTTP2Flusher was refactored out
of HTTP2Session.
2014-08-06 15:42:36 +02:00
Simone Bordet 2cd53831c0 Refactored onReadTimeout() to parent class. 2014-08-06 15:39:29 +02:00
Greg Wilkins 17f46665df preencoded httpfield optimisation 2014-08-06 21:09:26 +10:00
Greg Wilkins b5971484a5 Basic push mechanism skeleton 2014-08-06 10:50:55 +10:00
Simone Bordet 22cdca9131 Merge branch 'jetty-http2' into http2_flow_control 2014-08-05 10:01:30 +02:00
Greg Wilkins 6b3c8d06a9 partial 100 continues support in http2 2014-08-05 16:14:53 +10:00
Greg Wilkins d7f2c42e2d misc optimisation of http2 field creation 2014-08-05 12:55:37 +10:00
Simone Bordet 636c7eaeae Fixed handling of max concurrent streams.
There is a difference between the value set via configuration, that
always refer to remote streams (streams initiated by remote peers),
and the value received via SETTINGS frame, that always refer to local
streams (streams initiated locally).
2014-08-05 02:01:34 +02:00
Greg Wilkins 48d68a4916 handle http/1 host header in http/2 2014-08-05 09:21:27 +10:00
Simone Bordet ac7aa4decc Flow control needs improvements. 2014-08-05 00:28:06 +02:00
Simone Bordet 20925ded97 Fixed insertion of frame header buffer at the right index.
In case the lease is not empty, the frame header buffer must not be
inserted at index 0, but just before the frame body buffer.
2014-08-04 12:15:14 +02:00
Simone Bordet a2faa030cc Improved logging. 2014-08-04 12:09:35 +02:00
Simone Bordet 17c03385d6 Fixed send() by properly handling all cases. 2014-08-04 12:09:10 +02:00
Simone Bordet 35f0103add Added HTTP2 tests for multiple requests. 2014-08-03 00:27:28 +02:00
Simone Bordet 8d554b54a8 Fixed checks for headers too big. 2014-08-03 00:27:28 +02:00
Simone Bordet e332aa9c43 Improved logging. 2014-08-03 00:27:28 +02:00
Greg Wilkins 1fb07644a1 Use HttpHeader enum for :path and similar h2 fields 2014-08-02 16:37:43 +10:00
Greg Wilkins cd59d0085e improve known header handling in hpack encoding 2014-08-02 15:40:15 +10:00
Greg Wilkins 1873b306b3 Improved hpack encoder handling of custom fields 2014-08-02 12:56:12 +10:00
Simone Bordet dcc8bfcd10 Fixed a reentrancy issue that caused a stack overflow.
The case was that shutdown was called, ShutdownFlusherEntry called
flusher.close(), which called super.close(), which called
onCompleteFailure(), which looped over the active items to fail them,
calling again ShutdownFlusherEntry, which called again flusher.close(),
etc.
2014-08-02 00:38:24 +02:00
Simone Bordet 87c4c5efd3 Updated to point to webtide.com, now HTTP/2 enabled. 2014-08-02 00:02:25 +02:00
Simone Bordet 51e4885911 Made HTTP2Client support SSL so that it can be used to test websites that serve HTTP2. 2014-08-01 19:03:29 +02:00
Simone Bordet 7004d71996 Reporting FRAME_SIZE_ERROR in case wrong frame lengths. 2014-08-01 16:22:36 +02:00
Simone Bordet cddfa033f0 Implemented handling of SETTINGS_HEADER_TABLE_SIZE configuration property. 2014-08-01 16:20:20 +02:00
Simone Bordet 346b726c47 Taking into account the padding bytes in flow control length. 2014-08-01 15:54:12 +02:00
Simone Bordet 89a045855c Moved http2.frames.Flag to http2.Flags. 2014-08-01 15:04:14 +02:00
Simone Bordet 67fd213263 Moved http2.parser.ErrorCode to http2.ErrorCodes. 2014-08-01 15:03:49 +02:00
Simone Bordet 168a8f7dbf Reporting FRAME_SIZE_ERROR in case wrong frame lengths. 2014-08-01 15:01:03 +02:00
Simone Bordet 3283232f02 Added initial support for parsing CONTINUATION frames, and nothing more. 2014-08-01 14:02:11 +02:00
Simone Bordet 6b6267ed31 Updated implementation to draft-14. 2014-08-01 13:32:56 +02:00
Greg Wilkins 9c3eedfea8 Updates to hpack for hpack-09 draft 2014-07-31 13:26:23 +10:00
Greg Wilkins a14b2be0e6 Merge branch 'jetty-http2' into refset 2014-07-31 11:58:30 +10:00
Greg Wilkins 70dafa8eb3 simplified HttpTransport API 2014-07-31 11:53:51 +10:00
Greg Wilkins 5d8780cb4e Record some TODOs 2014-07-28 15:27:40 +10:00
Greg Wilkins a1696c0139 updates for hpack huffman and examples 2014-07-25 19:38:16 +10:00
Greg Wilkins c13be6d932 Merge branch 'jetty-http2' into refset
Conflicts:
	jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackEncoderTest.java
2014-07-25 18:33:10 +10:00
Greg Wilkins 30123607c6 Major refactor of metadata and HttpURI
This refactor strives to remove duplication between the Metadata class and the HttpURI class.

Both classes have been made mutable (as they partially were anyway so best not to pretend).

HttpURI now holds the decomposed strings rather than a single string with indexes. This allows it to be rebuilt after changing just parts of the URI. It is now a lot more similar to the
JVM URI class and we could consider replacing it (after checking peformance).

Next step is to refactor the Request class to prevent it duplicating these fields.
2014-07-24 15:49:52 +10:00
Greg Wilkins d6f841bb87 fixed refactor uri issue 2014-07-23 09:03:52 +10:00
Greg Wilkins 7f62f2600b refactored URI handling 2014-07-20 10:23:47 +10:00
Greg Wilkins a639359a7b do not index content-length 2014-07-18 17:23:44 +10:00