Commit Graph

1421 Commits

Author SHA1 Message Date
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
Greg Wilkins d4e7c0a279 update encoding strategy for no ref-set 2014-07-18 15:59:41 +10:00
Greg Wilkins 89a816843f removed refset from hpack 2014-07-18 15:59:41 +10:00
Greg Wilkins f9ffefbe13 refactored to avoid copying MetaData.Request instances 2014-07-11 16:35:25 +10:00
Greg Wilkins ca1a9ceb7c fixed merge issues 2014-07-04 23:22:40 +10:00
Simone Bordet 603985dcd2 Implemented gentler shutdown in case of reading -1.
This allows big responses to be sent even if the request half closes
the connection.
2014-06-27 17:06:07 +02:00
Simone Bordet 58b1ec9935 Improved logging. 2014-06-27 12:55:38 +02:00
Simone Bordet 2608af8f0d Merged branch 'origin/master' into 'jetty-http2'. 2014-06-26 11:54:50 +02:00
Simone Bordet 4c2c7e8352 Guarded calls to LOG.debug() with if (LOG.isDebugEnabled()) to reduce allocation of varargs Object[]. 2014-06-25 12:37:05 +02:00
Simone Bordet 02454ec8de Improved handling of errors for streams. 2014-06-24 13:52:03 +02:00
Simone Bordet 05616d1e9d Cosmetics. 2014-06-24 13:50:52 +02:00
Simone Bordet e94b8745f2 PING frames are now processed as soon as possible. 2014-06-24 12:35:06 +02:00
Simone Bordet 7625844dff Closing the connection if frames that carry headers don't have the
END_HEADERS flag.
2014-06-24 12:35:06 +02:00
Simone Bordet 8016fb6d0f Strengthened the checks to avoid to exceed the max frame length. 2014-06-24 12:35:06 +02:00
Simone Bordet f09b81835e Improved handling of RST_STREAM frames. 2014-06-24 12:35:06 +02:00
Simone Bordet 86b0d77338 Improved the server transport implementation, and fixed a case where
the end stream flag was erroneously sent with more content to send.
2014-06-23 21:23:17 +02:00
Simone Bordet 72e0d800ac Made ALPN API dependency provided. 2014-06-23 21:23:17 +02:00
Greg Wilkins 0938e1701a Merge branch 'jetty-http2' of ssh://git.eclipse.org/gitroot/jetty/org.eclipse.jetty.project into jetty-http2 2014-06-19 15:32:49 +02:00
Greg Wilkins c0629b6e04 encoding debug 2014-06-19 15:32:27 +02:00
Simone Bordet 4211653095 Fixed tests. 2014-06-18 16:09:52 +02:00
Simone Bordet 14dba64164 Fixed handling of zero-length hpacked headers. 2014-06-18 16:09:52 +02:00
Greg Wilkins 9acf971cc1 cache path URI in table 2014-06-18 15:26:33 +02:00
Greg Wilkins beb5918c3c fixed client 2014-06-18 13:59:02 +02:00
Simone Bordet 9d9260e634 Implemented idle timeout functionality for streams. 2014-06-18 13:57:37 +02:00
Simone Bordet 4dca6a71d3 Update Parser constructor to take additional parameters needed by
HpackDecoder.
2014-06-18 11:40:11 +02:00
Simone Bordet 9c95e29088 Implemented idle timeout functionality for both client and server. 2014-06-18 11:18:48 +02:00
Simone Bordet 690cd01933 Made sure that exceptions thrown by the generator are caught and the
connection closed.
2014-06-18 11:18:48 +02:00
Simone Bordet c0e0b802d9 Made sure that exceptions thrown by the parser are caught and the
connection closed.
2014-06-18 11:18:48 +02:00
Greg Wilkins 30affa57c7 HpackDecoder implements 413 limit 2014-06-18 11:11:23 +02:00
Greg Wilkins 140e7ed0c5 encoder headers as lowercase 2014-06-18 10:22:23 +02:00
Greg Wilkins e115dee62f improved static encoding strategy 2014-06-17 19:54:21 +02:00
Greg Wilkins 7fa4f1e9f8 cleaned up authority handling 2014-06-17 19:40:09 +02:00
Simone Bordet 82a2dfd03a Fixed infinite loop when receiving a SETTINGS frame. 2014-06-17 18:51:09 +02:00
Simone Bordet 2b494fde0e Miscellaneous refactorings. 2014-06-17 16:23:06 +02:00
Simone Bordet 6d1e5c9a07 Fixed tests to make the generator and the parser have the same scope. 2014-06-17 11:04:32 +02:00
Greg Wilkins 4c2a3dfbe6 better hpack debug 2014-06-17 11:04:10 +02:00
Simone Bordet 31b7f0a592 Fixed references to MetaData, that has been moved to the jetty-http module. 2014-06-17 09:28:50 +02:00
Greg Wilkins 25295456ae renamed HTTP/2.0 to HTTP/2 2014-06-17 00:12:57 +02:00
Greg Wilkins 272e1d8da5 Refactored HttpChannel to not have direct HttpParser dependency 2014-06-17 00:02:50 +02:00
Simone Bordet 334db9fe72 Updated version to 9.3.0-SNAPSHOT. 2014-06-16 21:33:03 +02:00
Simone Bordet 1d2690ed11 Removed unneeded reference to jetty-ssl.xml, implicitly referenced
transitively by the dependency on the ssl module.
2014-06-16 21:21:43 +02:00
Simone Bordet a6329451a1 Updated HTTP2 modules to be included in the distribution. 2014-06-16 18:15:13 +02:00
Simone Bordet e6e68c5557 Added license header. 2014-06-16 16:09:47 +02:00
Simone Bordet 9af8eb9fa7 Replying to SETTINGS frame as requested by the specification. 2014-06-16 15:45:10 +02:00
Simone Bordet 849360717e Implemented PUSH_PROMISE generator/parser. 2014-06-16 15:35:48 +02:00
Simone Bordet 907d303774 Added checks on the validity of the streamId. 2014-06-16 12:46:26 +02:00
Simone Bordet 7613385578 Moved NPN[Client|Server]Connection[Factory] classes to their own
modules, akin for the ALPN classes, and refactored all code that was
referencing them.
2014-06-16 12:46:26 +02:00
Simone Bordet a500701bda Fixed notification of Session's promise upon connect: it must be
notified only after we have successfully sent the preface bytes.
2014-06-15 16:39:23 +02:00
Simone Bordet 75b0a7088b Fixed onPing() method: replaced call to ping() with control() since
ping() should not be called to reply to a ping.
2014-06-13 23:13:26 +02:00
Simone Bordet 18c3e395df More flow control tests. 2014-06-13 23:03:49 +02:00
Simone Bordet 363c18a29e Improved logging. 2014-06-13 23:03:37 +02:00
Simone Bordet 2b86d34d5a Properly closing the stream and eventually removing it when receiving data frames. 2014-06-13 23:03:17 +02:00
Simone Bordet d4783369bc Fixed generation of sliced data frames, setting the end stream flag
only when all the content has been generated.
2014-06-13 22:59:48 +02:00
Simone Bordet a58a5f8268 Fixed handling of zero length body, that must be HPACK decoded. 2014-06-13 22:57:40 +02:00
Simone Bordet b3aa67e0a9 Implemented PING functionality. 2014-06-13 17:59:17 +02:00
Simone Bordet 8681511f08 Wrapping debug log statements with LOG.isDebugEnabled(). 2014-06-13 17:10:38 +02:00
Simone Bordet 388262227e Split the generation of frames into 2: flow-controlled and
non-flow-controlled.
This gives better code separation and proper removal of streams when
flow controlled frames complete.
2014-06-13 16:28:54 +02:00
Simone Bordet fb93973c9d Improved flow control logging. 2014-06-13 15:22:03 +02:00
Simone Bordet b30152df27 Removed generation of padding bytes, which simplified the code a lot.
Implemented slicing of flow controlled data to never exceed the flow
control window.
2014-06-13 14:08:56 +02:00
Simone Bordet 5ed4f312cd Implemented flow control. 2014-06-13 13:51:42 +02:00
Greg Wilkins 116d654426 cleaned up debug 2014-06-12 15:08:46 +02:00
Simone Bordet 22c42151bd Implemented logic to handle a GO_AWAY frame. 2014-06-11 22:43:08 +02:00
Simone Bordet 5a7f954262 Fixed generation of frames via Session API methods. 2014-06-11 21:21:49 +02:00
Simone Bordet 8e4c6b7fdd Put some more flesh on the HTTP2 implementation. 2014-06-11 18:26:48 +02:00
Simone Bordet 78cbed1236 Added headerTableSize parameter. 2014-06-11 18:24:02 +02:00
Greg Wilkins 1666f54b50 revert httpfields 2014-06-11 17:41:52 +02:00
Greg Wilkins f258ff1565 improved debug 2014-06-11 17:05:39 +02:00
Greg Wilkins c319c19125 convert MetaData to HttpField as a list 2014-06-11 16:53:17 +02:00
Greg Wilkins bbd61f8e19 Multiple mixed in changes and improvements
Simplified HttpParser as per rfc7230
implemented local/remote hpack max table sizes
2014-06-11 15:16:40 +02:00
Greg Wilkins 70223cbda9 add status 200 and method GET to ref set 2014-06-11 10:23:29 +02:00
Simone Bordet 347324b71b Improved logging. 2014-06-11 08:56:39 +02:00
Simone Bordet 7c5492acad Properly linking stream object with HEADERS frame. 2014-06-11 08:56:23 +02:00
Simone Bordet 3c6663ff21 Fixed parsing in case of zero-length header block and zero-length data. 2014-06-10 22:54:32 +02:00
Simone Bordet 13b0b90aa9 Fixed logging. 2014-06-10 22:54:32 +02:00
Greg Wilkins 6b77226517 improved debug 2014-06-10 20:28:52 +02:00
Greg Wilkins d024a46327 debug 2014-06-10 19:05:43 +02:00
Simone Bordet 630bee5887 Implemented HTTP2 connection preface. 2014-06-10 18:33:13 +02:00
Greg Wilkins 29f8158b51 Merge branch 'jetty-http2' of ssh://git.eclipse.org/gitroot/jetty/org.eclipse.jetty.project into jetty-http2
Conflicts:
	jetty-http2/http2-server/src/test/resources/jetty-logging.properties
2014-06-10 16:42:15 +02:00
Greg Wilkins 24cda18114 http2 test server 2014-06-10 16:38:54 +02:00
Simone Bordet 36e7c41b2f Improved logging. 2014-06-10 16:02:24 +02:00
Greg Wilkins c8184077c7 added logging to hpack 2014-06-10 15:26:54 +02:00
Greg Wilkins 073ad924b0 improve value handling on known literal fields 2014-06-10 14:05:41 +02:00
Simone Bordet f2e8edca9c First working test for end-to-end request/response processing on
server side.
2014-06-10 13:29:50 +02:00
Greg Wilkins b55dba82a5 use scheme cache 2014-06-10 13:13:38 +02:00
Greg Wilkins 19c4939ede flip encode buffer 2014-06-10 13:05:28 +02:00
Greg Wilkins ab5461d73e fixed hpack literal encoding bug 2014-06-10 12:56:20 +02:00
Simone Bordet ad034f4d54 Reworked generation of frames (split into different generators) and
sketched server-side handling and linking with channel.
2014-06-10 12:02:54 +02:00
Simone Bordet e0474108d0 Updated Frame inheritance. 2014-06-10 12:01:16 +02:00
Greg Wilkins 3c321e9b8f split authority field and hold results in header table 2014-06-09 15:34:09 +02:00
Greg Wilkins b2296cc2d4 simplified startRequest 2014-06-09 14:12:46 +02:00
Simone Bordet c1247ff677 Reorganized HTTP2 modules. 2014-06-09 14:01:16 +02:00
Simone Bordet 1da95c974d Implemented parser and generator for HEADERS frame. 2014-06-06 16:32:31 +02:00
Simone Bordet 9c13b300f0 Improved signature for generating DATA frames, with explicit padding
bytes.
2014-06-06 12:30:39 +02:00
Simone Bordet 6481bb926d Strengthened frame body length checks. 2014-06-06 12:09:11 +02:00
Simone Bordet 2a485be6c1 Implemented parser and generator for SETTINGS frame. 2014-06-06 11:23:50 +02:00
Simone Bordet 54577057bb Implemented parser and generator for WINDOW_UPDATE frame. 2014-06-06 09:21:47 +02:00
Simone Bordet 7a347e267f Implemented parser and generator for GO_AWAY frame. 2014-06-05 22:28:39 +02:00
Simone Bordet 81538c9b59 Implemented parser and generator for PING frame. 2014-06-05 21:04:26 +02:00
Simone Bordet 6f3f7f5334 Implemented parser and generator for RST_STREAM frame. 2014-06-05 20:30:11 +02:00
Simone Bordet 21d8435541 Implemented parser and generator for PRIORITY frame. 2014-06-05 19:26:53 +02:00
Simone Bordet a7e5963dfa Implemented parser and generator for DATA frame. 2014-06-05 18:11:22 +02:00
Greg Wilkins 8f4aeeeb8d updated version to 10.0.0-SNAPSHOT 2014-06-04 15:08:54 +02:00
Greg Wilkins df152d5905 implementations of hpack integers and huffman decoding 2014-06-02 00:58:04 +02:00