baf273aea8
Motivation: Previously client Http2ConnectionHandler trigger a user event immediately when the HTTP/2 connection preface is sent. Any attempt to immediately send a new request could cause the server to terminate the connection, as it might not have received the SETTINGS frame from the client. Per RFC7540 Section 3.5, the preface "MUST be followed by a SETTINGS frame (Section 6.5), which MAY be empty." (https://tools.ietf.org/html/rfc7540#section-3.5) This event could be made more meaningful if it also indicates that the initial client SETTINGS frame has been sent to signal that the channel is ready to send new requests. Modification: - Renamed event to Http2ConnectionPrefaceAndSettingsFrameWrittenEvent. - Modified Http2ConnectionHandler to trigger the user event only if it is a client and it has sent both the preface and SETTINGS frame. Result: It is now safe to use the event as an indicator that the HTTP/2 connection is ready to send new requests.
32 lines
1.3 KiB
Java
32 lines
1.3 KiB
Java
/*
|
|
* Copyright 2017 The Netty Project
|
|
*
|
|
* The Netty Project licenses this file to you under the Apache License, version 2.0 (the
|
|
* "License"); you may not use this file except in compliance with the License. You may obtain a
|
|
* copy of the License at:
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
* or implied. See the License for the specific language governing permissions and limitations under
|
|
* the License.
|
|
*/
|
|
package io.netty.handler.codec.http2;
|
|
|
|
import io.netty.util.internal.UnstableApi;
|
|
|
|
/**
|
|
* Signifies that the <a href="https://tools.ietf.org/html/rfc7540#section-3.5">connection preface</a> and
|
|
* the initial SETTINGS frame have been sent. The client sends the preface, and the server receives the preface.
|
|
* The client shouldn't write any data until this event has been processed.
|
|
*/
|
|
@UnstableApi
|
|
public final class Http2ConnectionPrefaceAndSettingsFrameWrittenEvent {
|
|
static final Http2ConnectionPrefaceAndSettingsFrameWrittenEvent INSTANCE =
|
|
new Http2ConnectionPrefaceAndSettingsFrameWrittenEvent();
|
|
|
|
private Http2ConnectionPrefaceAndSettingsFrameWrittenEvent() {
|
|
}
|
|
}
|