Allow servers to specify ENABLE_PUSH to 0 explicitly

Motivation:

If server sends SETTINGS with ENABLE_PUSH, its handled as
PROTOCOL_ERROR in spite of the value. But the value specified to
0 may be allowed in RFC7540.

Modifications:

Check whether ENABLE_PUSH sent from a server is 0 or not.

Result:

When server specifies ENABLE_PUSH to 0 explicitly, client doesn't
handle it as PROTOCOL_ERROR.
This commit is contained in:
Ryo Okubo 2015-07-08 01:06:32 +09:00 committed by nmittler
parent 0f95b85ec2
commit ba84a596e2

View File

@ -77,8 +77,9 @@ public class DefaultHttp2ConnectionEncoder implements Http2ConnectionEncoder {
Http2HeaderTable outboundHeaderTable = config.headerTable(); Http2HeaderTable outboundHeaderTable = config.headerTable();
Http2FrameSizePolicy outboundFrameSizePolicy = config.frameSizePolicy(); Http2FrameSizePolicy outboundFrameSizePolicy = config.frameSizePolicy();
if (pushEnabled != null) { if (pushEnabled != null) {
if (!connection.isServer()) { if (!connection.isServer() && pushEnabled) {
throw connectionError(PROTOCOL_ERROR, "Client received SETTINGS frame with ENABLE_PUSH specified"); throw connectionError(PROTOCOL_ERROR,
"Client received a value of ENABLE_PUSH specified to other than 0");
} }
connection.remote().allowPushTo(pushEnabled); connection.remote().allowPushTo(pushEnabled);
} }