Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 39B98200AC5 for ; Sun, 5 Jun 2016 12:50:46 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 3827A160A28; Sun, 5 Jun 2016 10:50:46 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id ACF98160968 for ; Sun, 5 Jun 2016 12:50:44 +0200 (CEST) Received: (qmail 96862 invoked by uid 500); 5 Jun 2016 10:50:43 -0000 Mailing-List: contact commits-help@hc.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "HttpComponents Project" Delivered-To: mailing list commits@hc.apache.org Received: (qmail 96853 invoked by uid 99); 5 Jun 2016 10:50:43 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 05 Jun 2016 10:50:43 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id 3020EC1428 for ; Sun, 5 Jun 2016 10:50:43 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 0.374 X-Spam-Level: X-Spam-Status: No, score=0.374 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RP_MATCHES_RCVD=-1.426] autolearn=disabled Received: from mx2-lw-us.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id NGsyqZgx-7Zx for ; Sun, 5 Jun 2016 10:50:38 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx2-lw-us.apache.org (ASF Mail Server at mx2-lw-us.apache.org) with ESMTP id 8698D5F487 for ; Sun, 5 Jun 2016 10:50:38 +0000 (UTC) Received: from svn01-us-west.apache.org (svn.apache.org [10.41.0.6]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id 9A22DE0290 for ; Sun, 5 Jun 2016 10:50:37 +0000 (UTC) Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id 9BB1D3A0287 for ; Sun, 5 Jun 2016 10:50:37 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1746896 - in /httpcomponents/httpcore/trunk/httpcore5-h2/src: main/java/org/apache/hc/core5/http2/frame/ main/java/org/apache/hc/core5/http2/impl/io/ main/java/org/apache/hc/core5/http2/impl/nio/ test/java/org/apache/hc/core5/http2/impl/io... Date: Sun, 05 Jun 2016 10:50:37 -0000 To: commits@hc.apache.org From: olegk@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20160605105037.9BB1D3A0287@svn01-us-west.apache.org> archived-at: Sun, 05 Jun 2016 10:50:46 -0000 Author: olegk Date: Sun Jun 5 10:50:37 2016 New Revision: 1746896 URL: http://svn.apache.org/viewvc?rev=1746896&view=rev Log: RFC 7540: do not strip padding (required for flow control) Added: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/RawFrame.java (contents, props changed) - copied, changed from r1742949, httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/ByteBufferFrame.java Removed: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/ByteBufferFrame.java Modified: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/DefaultFrameFactory.java httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/FrameFactory.java httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/io/FrameInputBuffer.java httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/io/FrameOutputBuffer.java httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/FrameInputBuffer.java httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/FrameOutputBuffer.java httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestFrameInOutBuffers.java httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/nio/TestFrameInOutBuffers.java Modified: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/DefaultFrameFactory.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/DefaultFrameFactory.java?rev=1746896&r1=1746895&r2=1746896&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/DefaultFrameFactory.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/DefaultFrameFactory.java Sun Jun 5 10:50:37 2016 @@ -35,22 +35,22 @@ public class DefaultFrameFactory extends public static final FrameFactory INSTANCE = new DefaultFrameFactory(); - public Frame createHeaders(final int streamId, final ByteBuffer payload, final boolean endHeaders, final boolean endStream) { + public RawFrame createHeaders(final int streamId, final ByteBuffer payload, final boolean endHeaders, final boolean endStream) { Args.positive(streamId, "Stream id"); final int flags = (endHeaders ? FrameFlag.END_HEADERS.value : 0) | (endStream ? FrameFlag.END_STREAM.value : 0); - return new ByteBufferFrame(FrameType.HEADERS.getValue(), flags, streamId, payload); + return new RawFrame(FrameType.HEADERS.getValue(), flags, streamId, payload); } - public Frame createContinuation(final int streamId, final ByteBuffer payload, final boolean endHeaders) { + public RawFrame createContinuation(final int streamId, final ByteBuffer payload, final boolean endHeaders) { Args.positive(streamId, "Stream id"); final int flags = (endHeaders ? FrameFlag.END_HEADERS.value : 0); - return new ByteBufferFrame(FrameType.CONTINUATION.getValue(), flags, streamId, payload); + return new RawFrame(FrameType.CONTINUATION.getValue(), flags, streamId, payload); } - public Frame createData(final int streamId, final ByteBuffer payload, final boolean endStream) { + public RawFrame createData(final int streamId, final ByteBuffer payload, final boolean endStream) { Args.positive(streamId, "Stream id"); final int flags = (endStream ? FrameFlag.END_STREAM.value : 0); - return new ByteBufferFrame(FrameType.DATA.getValue(), flags, streamId, payload); + return new RawFrame(FrameType.DATA.getValue(), flags, streamId, payload); } } Modified: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/FrameFactory.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/FrameFactory.java?rev=1746896&r1=1746895&r2=1746896&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/FrameFactory.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/FrameFactory.java Sun Jun 5 10:50:37 2016 @@ -45,42 +45,42 @@ public abstract class FrameFactory { return PREFACE; } - public Frame createSettings(final H2Setting... settings) { + public RawFrame createSettings(final H2Setting... settings) { final ByteBuffer payload = ByteBuffer.allocate(settings.length * 12); for (H2Setting setting: settings) { payload.putShort((short) setting.getCode()); payload.putInt(setting.getValue()); } payload.flip(); - return new ByteBufferFrame(FrameType.SETTINGS.getValue(), 0, 0, payload); + return new RawFrame(FrameType.SETTINGS.getValue(), 0, 0, payload); } - public Frame createSettingsAck() { - return new ByteBufferFrame(FrameType.SETTINGS.getValue(), FrameFlag.ACK.getValue(), 0, null); + public RawFrame createSettingsAck() { + return new RawFrame(FrameType.SETTINGS.getValue(), FrameFlag.ACK.getValue(), 0, null); } - public Frame createResetStream(final int streamId, final H2Error error) { + public RawFrame createResetStream(final int streamId, final H2Error error) { Args.positive(streamId, "Stream id"); Args.notNull(error, "Error"); final ByteBuffer payload = ByteBuffer.allocate(4); payload.putInt(error.getCode()); payload.flip(); - return new ByteBufferFrame(FrameType.RST_STREAM.getValue(), 0, streamId, payload); + return new RawFrame(FrameType.RST_STREAM.getValue(), 0, streamId, payload); } - public Frame createPing(final ByteBuffer opaqueData) { + public RawFrame createPing(final ByteBuffer opaqueData) { Args.notNull(opaqueData, "Opaque data"); Args.check(opaqueData.remaining() == 8, "Opaque data length must be equal 8"); - return new ByteBufferFrame(FrameType.PING.getValue(), 0, 0, opaqueData); + return new RawFrame(FrameType.PING.getValue(), 0, 0, opaqueData); } - public Frame createPingAck(final ByteBuffer opaqueData) { + public RawFrame createPingAck(final ByteBuffer opaqueData) { Args.notNull(opaqueData, "Opaque data"); Args.check(opaqueData.remaining() == 8, "Opaque data length must be equal 8"); - return new ByteBufferFrame(FrameType.PING.getValue(), FrameFlag.ACK.value, 0, opaqueData); + return new RawFrame(FrameType.PING.getValue(), FrameFlag.ACK.value, 0, opaqueData); } - public Frame createGoAway(final int lastStream, final H2Error error, final String message) { + public RawFrame createGoAway(final int lastStream, final H2Error error, final String message) { Args.positive(lastStream, "Last stream id"); final byte[] debugData = message != null ? message.getBytes(StandardCharsets.US_ASCII) : null; final ByteBuffer payload = ByteBuffer.allocate(8 + (debugData != null ? debugData.length : 0)); @@ -88,13 +88,13 @@ public abstract class FrameFactory { payload.putInt(error.getCode()); payload.put(debugData); payload.flip(); - return new ByteBufferFrame(FrameType.GOAWAY.getValue(), 0, 0, payload); + return new RawFrame(FrameType.GOAWAY.getValue(), 0, 0, payload); } - public abstract Frame createHeaders(int streamId, ByteBuffer payload, boolean endHeaders, boolean endStream); + public abstract RawFrame createHeaders(int streamId, ByteBuffer payload, boolean endHeaders, boolean endStream); - public abstract Frame createContinuation(int streamId, ByteBuffer payload, boolean endHeaders); + public abstract RawFrame createContinuation(int streamId, ByteBuffer payload, boolean endHeaders); - public abstract Frame createData(int streamId, ByteBuffer payload, boolean endStream); + public abstract RawFrame createData(int streamId, ByteBuffer payload, boolean endStream); } Copied: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/RawFrame.java (from r1742949, httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/ByteBufferFrame.java) URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/RawFrame.java?p2=httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/RawFrame.java&p1=httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/ByteBufferFrame.java&r1=1742949&r2=1746896&rev=1746896&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/ByteBufferFrame.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/RawFrame.java Sun Jun 5 10:50:37 2016 @@ -28,18 +28,47 @@ package org.apache.hc.core5.http2.frame; import java.nio.ByteBuffer; -public final class ByteBufferFrame extends Frame { +public final class RawFrame extends Frame { private final ByteBuffer payload; - public ByteBufferFrame(final int type, final int flags, final int streamId, final ByteBuffer payload) { + public RawFrame(final int type, final int flags, final int streamId, final ByteBuffer payload) { super(type, flags, streamId); this.payload = payload; } + public boolean isPadded() { + return isFlagSet(FrameFlag.PADDED); + } + + public int getLength() { + return payload != null ? payload.remaining() : 0; + } + + public ByteBuffer getPayloadContent() { + if (payload != null) { + if (isPadded()) { + final ByteBuffer dup = payload.duplicate(); + if (dup.remaining() == 0) { + return null; + } + final int padding = dup.get() & 0xff; + if (padding > dup.remaining()) { + return null; + } + dup.limit(dup.limit() - padding); + return dup.asReadOnlyBuffer(); + } else { + return payload.asReadOnlyBuffer(); + } + } else { + return null; + } + } + @Override public ByteBuffer getPayload() { - return payload; + return payload != null ? payload.asReadOnlyBuffer() : null; } } Propchange: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/RawFrame.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/RawFrame.java ------------------------------------------------------------------------------ svn:keywords = Date Revision Propchange: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/frame/RawFrame.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/io/FrameInputBuffer.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/io/FrameInputBuffer.java?rev=1746896&r1=1746895&r2=1746896&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/io/FrameInputBuffer.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/io/FrameInputBuffer.java Sun Jun 5 10:50:37 2016 @@ -36,10 +36,9 @@ import org.apache.hc.core5.http.Connecti import org.apache.hc.core5.http2.H2ConnectionException; import org.apache.hc.core5.http2.H2CorruptFrameException; import org.apache.hc.core5.http2.H2Error; -import org.apache.hc.core5.http2.frame.ByteBufferFrame; -import org.apache.hc.core5.http2.frame.Frame; import org.apache.hc.core5.http2.frame.FrameConsts; import org.apache.hc.core5.http2.frame.FrameFlag; +import org.apache.hc.core5.http2.frame.RawFrame; import org.apache.hc.core5.http2.impl.BasicHttp2TransportMetrics; import org.apache.hc.core5.http2.io.Http2TransportMetrics; import org.apache.hc.core5.util.Args; @@ -100,7 +99,7 @@ public final class FrameInputBuffer { } } - public Frame read(final InputStream instream) throws IOException { + public RawFrame read(final InputStream instream) throws IOException { fillBuffer(instream, FrameConsts.HEAD_LEN); final int payloadOff = FrameConsts.HEAD_LEN; @@ -116,26 +115,18 @@ public final class FrameInputBuffer { final int frameLen = payloadOff + payloadLen; fillBuffer(instream, frameLen); - final ByteBuffer payload; - if (payloadLen > 0) { - if ((flags & FrameFlag.PADDED.getValue()) == 0) { - payload = ByteBuffer.wrap(buffer, off + payloadOff, payloadLen); - } else { - if (payloadLen == 0) { - throw new H2ConnectionException(H2Error.PROTOCOL_ERROR, "Inconsistent padding"); - } - final int padding = buffer[off + FrameConsts.HEAD_LEN] & 0xff; - if (payloadLen < padding + 1) { - throw new H2ConnectionException(H2Error.PROTOCOL_ERROR, "Inconsistent padding"); - } - payload = ByteBuffer.wrap(buffer, off + payloadOff + 1, payloadLen - padding - 1); + if ((flags & FrameFlag.PADDED.getValue()) > 0) { + if (payloadLen == 0) { + throw new H2ConnectionException(H2Error.PROTOCOL_ERROR, "Inconsistent padding"); + } + final int padding = buffer[off + FrameConsts.HEAD_LEN] & 0xff; + if (payloadLen < padding + 1) { + throw new H2ConnectionException(H2Error.PROTOCOL_ERROR, "Inconsistent padding"); } - } else { - payload = null; } - final ByteBufferFrame frame = new ByteBufferFrame(type, flags & ~FrameFlag.PADDED.getValue(), streamId, - payload != null ? payload.asReadOnlyBuffer() : null); + final ByteBuffer payload = payloadLen > 0 ? ByteBuffer.wrap(buffer, off + payloadOff, payloadLen) : null; + final RawFrame frame = new RawFrame(type, flags, streamId, payload); off += frameLen; dataLen -= frameLen; Modified: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/io/FrameOutputBuffer.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/io/FrameOutputBuffer.java?rev=1746896&r1=1746895&r2=1746896&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/io/FrameOutputBuffer.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/io/FrameOutputBuffer.java Sun Jun 5 10:50:37 2016 @@ -34,9 +34,9 @@ import java.nio.ByteBuffer; import org.apache.hc.core5.annotation.NotThreadSafe; import org.apache.hc.core5.http2.H2ConnectionException; import org.apache.hc.core5.http2.H2Error; -import org.apache.hc.core5.http2.frame.Frame; import org.apache.hc.core5.http2.frame.FrameConsts; import org.apache.hc.core5.http2.frame.FrameFlag; +import org.apache.hc.core5.http2.frame.RawFrame; import org.apache.hc.core5.http2.impl.BasicHttp2TransportMetrics; import org.apache.hc.core5.http2.io.Http2TransportMetrics; import org.apache.hc.core5.util.Args; @@ -66,7 +66,7 @@ public final class FrameOutputBuffer { this(new BasicHttp2TransportMetrics(), maxFramePayloadSize); } - public void write(final Frame frame, final OutputStream outstream) throws IOException { + public void write(final RawFrame frame, final OutputStream outstream) throws IOException { if (frame == null) { return; } Modified: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/FrameInputBuffer.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/FrameInputBuffer.java?rev=1746896&r1=1746895&r2=1746896&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/FrameInputBuffer.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/FrameInputBuffer.java Sun Jun 5 10:50:37 2016 @@ -35,10 +35,9 @@ import org.apache.hc.core5.http.Connecti import org.apache.hc.core5.http2.H2ConnectionException; import org.apache.hc.core5.http2.H2CorruptFrameException; import org.apache.hc.core5.http2.H2Error; -import org.apache.hc.core5.http2.frame.ByteBufferFrame; -import org.apache.hc.core5.http2.frame.Frame; import org.apache.hc.core5.http2.frame.FrameConsts; import org.apache.hc.core5.http2.frame.FrameFlag; +import org.apache.hc.core5.http2.frame.RawFrame; import org.apache.hc.core5.http2.impl.BasicHttp2TransportMetrics; import org.apache.hc.core5.http2.io.Http2TransportMetrics; import org.apache.hc.core5.util.Args; @@ -83,7 +82,7 @@ public final class FrameInputBuffer { this(new BasicHttp2TransportMetrics(), maxFramePayloadSize); } - public Frame read(final ReadableByteChannel channel) throws IOException { + public RawFrame read(final ReadableByteChannel channel) throws IOException { for (;;) { switch (state) { case HEAD_EXPECTED: @@ -102,31 +101,22 @@ public final class FrameInputBuffer { } case PAYLOAD_EXPECTED: if (buffer.remaining() >= payloadLen) { - final ByteBuffer payload; - if ((flags & FrameFlag.PADDED.getValue()) == 0) { - if (payloadLen > 0) { - payload = ByteBuffer.wrap(bytes, buffer.position(), payloadLen); - buffer.position(buffer.position() + payloadLen); - } else { - payload = null; - } - } else { + if ((flags & FrameFlag.PADDED.getValue()) > 0) { if (payloadLen == 0) { throw new H2ConnectionException(H2Error.PROTOCOL_ERROR, "Inconsistent padding"); } + buffer.mark(); final int padding = buffer.get(); if (payloadLen < padding + 1) { throw new H2ConnectionException(H2Error.PROTOCOL_ERROR, "Inconsistent padding"); } - final int off = buffer.position(); - final int len = payloadLen - padding - 1; - payload = ByteBuffer.wrap(bytes, off, len); - buffer.position(buffer.position() - 1 + payloadLen); + buffer.reset(); } + final ByteBuffer payload = payloadLen > 0 ? ByteBuffer.wrap(bytes, buffer.position(), payloadLen) : null; + buffer.position(buffer.position() + payloadLen); state = State.HEAD_EXPECTED; metrics.incrementFramesTransferred(); - return new ByteBufferFrame(type, flags & ~FrameFlag.PADDED.getValue(), streamId, - payload != null ? payload.asReadOnlyBuffer() : null); + return new RawFrame(type, flags, streamId, payload); } } if (buffer.hasRemaining()) { Modified: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/FrameOutputBuffer.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/FrameOutputBuffer.java?rev=1746896&r1=1746895&r2=1746896&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/FrameOutputBuffer.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/FrameOutputBuffer.java Sun Jun 5 10:50:37 2016 @@ -34,8 +34,8 @@ import java.nio.channels.WritableByteCha import org.apache.hc.core5.annotation.NotThreadSafe; import org.apache.hc.core5.http2.H2ConnectionException; import org.apache.hc.core5.http2.H2Error; -import org.apache.hc.core5.http2.frame.Frame; import org.apache.hc.core5.http2.frame.FrameConsts; +import org.apache.hc.core5.http2.frame.RawFrame; import org.apache.hc.core5.http2.impl.BasicHttp2TransportMetrics; import org.apache.hc.core5.http2.io.Http2TransportMetrics; import org.apache.hc.core5.util.Args; @@ -71,7 +71,7 @@ public final class FrameOutputBuffer { } } - public void write(final Frame frame, final WritableByteChannel channel) throws IOException { + public void write(final RawFrame frame, final WritableByteChannel channel) throws IOException { Args.notNull(frame, "Frame"); final ByteBuffer payload = frame.getPayload(); Modified: httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestFrameInOutBuffers.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestFrameInOutBuffers.java?rev=1746896&r1=1746895&r2=1746896&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestFrameInOutBuffers.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestFrameInOutBuffers.java Sun Jun 5 10:50:37 2016 @@ -34,11 +34,10 @@ import java.nio.ByteBuffer; import org.apache.hc.core5.http.ConnectionClosedException; import org.apache.hc.core5.http2.H2ConnectionException; import org.apache.hc.core5.http2.H2CorruptFrameException; -import org.apache.hc.core5.http2.frame.ByteBufferFrame; -import org.apache.hc.core5.http2.frame.Frame; import org.apache.hc.core5.http2.frame.FrameConsts; import org.apache.hc.core5.http2.frame.FrameFlag; import org.apache.hc.core5.http2.frame.FrameType; +import org.apache.hc.core5.http2.frame.RawFrame; import org.apache.hc.core5.http2.impl.BasicHttp2TransportMetrics; import org.junit.Assert; import org.junit.Test; @@ -50,7 +49,7 @@ public class TestFrameInOutBuffers { final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); final FrameOutputBuffer outbuffer = new FrameOutputBuffer(16 * 1024); - final ByteBufferFrame frame = new ByteBufferFrame(FrameType.DATA.getValue(), 0, 1, + final RawFrame frame = new RawFrame(FrameType.DATA.getValue(), 0, 1, ByteBuffer.wrap(new byte[]{1,2,3,4,5})); outbuffer.write(frame, outputStream); @@ -62,11 +61,11 @@ public class TestFrameInOutBuffers { Assert.assertEquals(1, outbuffer.getMetrics().getFramesTransferred()); Assert.assertEquals(bytes.length, outbuffer.getMetrics().getBytesTransferred()); - final Frame frame2 = inbuffer.read(inputStream); + final RawFrame frame2 = inbuffer.read(inputStream); Assert.assertEquals(FrameType.DATA.getValue(), frame2.getType()); Assert.assertEquals(0, frame2.getFlags()); Assert.assertEquals(1L, frame2.getStreamId()); - final ByteBuffer payload2 = frame2.getPayload(); + final ByteBuffer payload2 = frame2.getPayloadContent(); Assert.assertNotNull(payload2); Assert.assertEquals(5, payload2.remaining()); Assert.assertEquals(1, payload2.get()); @@ -89,11 +88,11 @@ public class TestFrameInOutBuffers { 0,0,10,0,9,0,0,0,8,4,5,6,7,8,9,0,0,0,0 }); - final Frame frame1 = inbuffer.read(inputStream); + final RawFrame frame1 = inbuffer.read(inputStream); Assert.assertEquals(FrameType.DATA, FrameType.valueOf(frame1.getType())); - Assert.assertEquals(0, frame1.getFlags()); + Assert.assertEquals(8, frame1.getFlags()); Assert.assertEquals(8, frame1.getStreamId()); - final ByteBuffer payload1 = frame1.getPayload(); + final ByteBuffer payload1 = frame1.getPayloadContent(); Assert.assertNotNull(payload1); Assert.assertEquals(5, payload1.remaining()); Assert.assertEquals(0, payload1.get()); @@ -102,11 +101,11 @@ public class TestFrameInOutBuffers { Assert.assertEquals(3, payload1.get()); Assert.assertEquals(4, payload1.get()); - final Frame frame2 = inbuffer.read(inputStream); + final RawFrame frame2 = inbuffer.read(inputStream); Assert.assertEquals(FrameType.DATA, FrameType.valueOf(frame2.getType())); - Assert.assertEquals(FrameFlag.of(FrameFlag.END_STREAM), frame2.getFlags()); + Assert.assertEquals(FrameFlag.of(FrameFlag.END_STREAM, FrameFlag.PADDED), frame2.getFlags()); Assert.assertEquals(8, frame2.getStreamId()); - final ByteBuffer payload2 = frame2.getPayload(); + final ByteBuffer payload2 = frame2.getPayloadContent(); Assert.assertNotNull(payload2); Assert.assertEquals(5, payload2.remaining()); Assert.assertEquals(5, payload2.get()); @@ -128,11 +127,11 @@ public class TestFrameInOutBuffers { 0,0,10,0,9,0,0,0,8,4,3,3,3,3,3,0,0,0,0 }); - final Frame frame1 = inbuffer.read(inputStream); + final RawFrame frame1 = inbuffer.read(inputStream); Assert.assertEquals(FrameType.DATA, FrameType.valueOf(frame1.getType())); - Assert.assertEquals(0, frame1.getFlags()); + Assert.assertEquals(8, frame1.getFlags()); Assert.assertEquals(8, frame1.getStreamId()); - final ByteBuffer payload1 = frame1.getPayload(); + final ByteBuffer payload1 = frame1.getPayloadContent(); Assert.assertNotNull(payload1); Assert.assertEquals(5, payload1.remaining()); Assert.assertEquals(1, payload1.get()); @@ -141,11 +140,11 @@ public class TestFrameInOutBuffers { Assert.assertEquals(1, payload1.get()); Assert.assertEquals(1, payload1.get()); - final Frame frame2 = inbuffer.read(inputStream); + final RawFrame frame2 = inbuffer.read(inputStream); Assert.assertEquals(FrameType.DATA, FrameType.valueOf(frame2.getType())); Assert.assertEquals(0, frame2.getFlags()); Assert.assertEquals(8, frame2.getStreamId()); - final ByteBuffer payload2 = frame2.getPayload(); + final ByteBuffer payload2 = frame2.getPayloadContent(); Assert.assertNotNull(payload2); Assert.assertEquals(5, payload2.remaining()); Assert.assertEquals(2, payload2.get()); @@ -154,11 +153,11 @@ public class TestFrameInOutBuffers { Assert.assertEquals(2, payload2.get()); Assert.assertEquals(2, payload2.get()); - final Frame frame3 = inbuffer.read(inputStream); + final RawFrame frame3 = inbuffer.read(inputStream); Assert.assertEquals(FrameType.DATA, FrameType.valueOf(frame3.getType())); - Assert.assertEquals(FrameFlag.of(FrameFlag.END_STREAM), frame3.getFlags()); + Assert.assertEquals(FrameFlag.of(FrameFlag.END_STREAM, FrameFlag.PADDED), frame3.getFlags()); Assert.assertEquals(8, frame3.getStreamId()); - final ByteBuffer payload3 = frame3.getPayload(); + final ByteBuffer payload3 = frame3.getPayloadContent(); Assert.assertNotNull(payload3); Assert.assertEquals(5, payload3.remaining()); Assert.assertEquals(3, payload3.get()); @@ -182,11 +181,11 @@ public class TestFrameInOutBuffers { new byte[] {5,0}, new byte[] {0,0,0}); - final Frame frame = inbuffer.read(inputStream); + final RawFrame frame = inbuffer.read(inputStream); Assert.assertEquals(FrameType.DATA, FrameType.valueOf(frame.getType())); - Assert.assertEquals(FrameFlag.of(FrameFlag.END_STREAM), frame.getFlags()); + Assert.assertEquals(FrameFlag.of(FrameFlag.END_STREAM, FrameFlag.PADDED), frame.getFlags()); Assert.assertEquals(8, frame.getStreamId()); - final ByteBuffer payload = frame.getPayload(); + final ByteBuffer payload = frame.getPayloadContent(); Assert.assertNotNull(payload); Assert.assertEquals(5, payload.remaining()); Assert.assertEquals(1, payload.get()); @@ -202,11 +201,11 @@ public class TestFrameInOutBuffers { final FrameInputBuffer inbuffer = new FrameInputBuffer(16 * 1024); final ByteArrayInputStream inputStream = new ByteArrayInputStream(new byte[] {0,0,0,0,0,0,0,0,0}); - final Frame frame = inbuffer.read(inputStream); + final RawFrame frame = inbuffer.read(inputStream); Assert.assertEquals(FrameType.DATA, FrameType.valueOf(frame.getType())); Assert.assertEquals(0, frame.getFlags()); Assert.assertEquals(0, frame.getStreamId()); - final ByteBuffer payload = frame.getPayload(); + final ByteBuffer payload = frame.getPayloadContent(); Assert.assertNull(payload); } @@ -231,7 +230,7 @@ public class TestFrameInOutBuffers { final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); final FrameOutputBuffer outbuffer = new FrameOutputBuffer(1024); - final ByteBufferFrame frame = new ByteBufferFrame(FrameType.DATA.getValue(), 0, 1, + final RawFrame frame = new RawFrame(FrameType.DATA.getValue(), 0, 1, ByteBuffer.wrap(new byte[2048])); outbuffer.write(frame, outputStream); } Modified: httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/nio/TestFrameInOutBuffers.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/nio/TestFrameInOutBuffers.java?rev=1746896&r1=1746895&r2=1746896&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/nio/TestFrameInOutBuffers.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/nio/TestFrameInOutBuffers.java Sun Jun 5 10:50:37 2016 @@ -32,11 +32,10 @@ import java.nio.ByteBuffer; import org.apache.hc.core5.http.ConnectionClosedException; import org.apache.hc.core5.http2.H2ConnectionException; import org.apache.hc.core5.http2.H2CorruptFrameException; -import org.apache.hc.core5.http2.frame.ByteBufferFrame; -import org.apache.hc.core5.http2.frame.Frame; import org.apache.hc.core5.http2.frame.FrameConsts; import org.apache.hc.core5.http2.frame.FrameFlag; import org.apache.hc.core5.http2.frame.FrameType; +import org.apache.hc.core5.http2.frame.RawFrame; import org.apache.hc.core5.http2.impl.BasicHttp2TransportMetrics; import org.junit.Assert; import org.junit.Test; @@ -48,7 +47,7 @@ public class TestFrameInOutBuffers { final WritableByteChannelMock writableChannel = new WritableByteChannelMock(1024); final FrameOutputBuffer outbuffer = new FrameOutputBuffer(16 * 1024); - final ByteBufferFrame frame = new ByteBufferFrame(FrameType.DATA.getValue(), 0, 1, + final RawFrame frame = new RawFrame(FrameType.DATA.getValue(), 0, 1, ByteBuffer.wrap(new byte[]{1,2,3,4,5})); outbuffer.write(frame, writableChannel); @@ -60,11 +59,11 @@ public class TestFrameInOutBuffers { Assert.assertEquals(bytes.length, outbuffer.getMetrics().getBytesTransferred()); final ReadableByteChannelMock readableChannel = new ReadableByteChannelMock(bytes); - final Frame frame2 = inbuffer.read(readableChannel); + final RawFrame frame2 = inbuffer.read(readableChannel); Assert.assertEquals(FrameType.DATA.getValue(), frame2.getType()); Assert.assertEquals(0, frame2.getFlags()); Assert.assertEquals(1L, frame2.getStreamId()); - final ByteBuffer payload2 = frame2.getPayload(); + final ByteBuffer payload2 = frame2.getPayloadContent(); Assert.assertNotNull(payload2); Assert.assertEquals(5, payload2.remaining()); Assert.assertEquals(1, payload2.get()); @@ -82,7 +81,7 @@ public class TestFrameInOutBuffers { public void testPartialFrameWrite() throws Exception { final WritableByteChannelMock writableChannel = new WritableByteChannelMock(1024, FrameConsts.HEAD_LEN + 10); final FrameOutputBuffer outbuffer = new FrameOutputBuffer(16 * 1024); - final ByteBufferFrame frame = new ByteBufferFrame(FrameType.DATA.getValue(), FrameFlag.END_STREAM.getValue(), 5, + final RawFrame frame = new RawFrame(FrameType.DATA.getValue(), FrameFlag.END_STREAM.getValue(), 5, ByteBuffer.wrap(new byte[]{'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'})); outbuffer.write(frame, writableChannel); @@ -109,11 +108,11 @@ public class TestFrameInOutBuffers { 0,0,10,0,9,0,0,0,8,4,5,6,7,8,9,0,0,0,0 }); - final Frame frame1 = inbuffer.read(readableChannel); + final RawFrame frame1 = inbuffer.read(readableChannel); Assert.assertEquals(FrameType.DATA, FrameType.valueOf(frame1.getType())); - Assert.assertEquals(0, frame1.getFlags()); + Assert.assertEquals(8, frame1.getFlags()); Assert.assertEquals(8, frame1.getStreamId()); - final ByteBuffer payload1 = frame1.getPayload(); + final ByteBuffer payload1 = frame1.getPayloadContent(); Assert.assertNotNull(payload1); Assert.assertEquals(5, payload1.remaining()); Assert.assertEquals(0, payload1.get()); @@ -122,11 +121,11 @@ public class TestFrameInOutBuffers { Assert.assertEquals(3, payload1.get()); Assert.assertEquals(4, payload1.get()); - final Frame frame2 = inbuffer.read(readableChannel); + final RawFrame frame2 = inbuffer.read(readableChannel); Assert.assertEquals(FrameType.DATA, FrameType.valueOf(frame2.getType())); - Assert.assertEquals(FrameFlag.of(FrameFlag.END_STREAM), frame2.getFlags()); + Assert.assertEquals(FrameFlag.of(FrameFlag.END_STREAM, FrameFlag.PADDED), frame2.getFlags()); Assert.assertEquals(8, frame2.getStreamId()); - final ByteBuffer payload2 = frame2.getPayload(); + final ByteBuffer payload2 = frame2.getPayloadContent(); Assert.assertNotNull(payload2); Assert.assertEquals(5, payload2.remaining()); Assert.assertEquals(5, payload2.get()); @@ -148,11 +147,11 @@ public class TestFrameInOutBuffers { 0,0,10,0,9,0,0,0,8,4,3,3,3,3,3,0,0,0,0 }); - final Frame frame1 = inbuffer.read(readableChannel); + final RawFrame frame1 = inbuffer.read(readableChannel); Assert.assertEquals(FrameType.DATA, FrameType.valueOf(frame1.getType())); - Assert.assertEquals(0, frame1.getFlags()); + Assert.assertEquals(8, frame1.getFlags()); Assert.assertEquals(8, frame1.getStreamId()); - final ByteBuffer payload1 = frame1.getPayload(); + final ByteBuffer payload1 = frame1.getPayloadContent(); Assert.assertNotNull(payload1); Assert.assertEquals(5, payload1.remaining()); Assert.assertEquals(1, payload1.get()); @@ -161,11 +160,11 @@ public class TestFrameInOutBuffers { Assert.assertEquals(1, payload1.get()); Assert.assertEquals(1, payload1.get()); - final Frame frame2 = inbuffer.read(readableChannel); + final RawFrame frame2 = inbuffer.read(readableChannel); Assert.assertEquals(FrameType.DATA, FrameType.valueOf(frame2.getType())); Assert.assertEquals(0, frame2.getFlags()); Assert.assertEquals(8, frame2.getStreamId()); - final ByteBuffer payload2 = frame2.getPayload(); + final ByteBuffer payload2 = frame2.getPayloadContent(); Assert.assertNotNull(payload2); Assert.assertEquals(5, payload2.remaining()); Assert.assertEquals(2, payload2.get()); @@ -174,11 +173,11 @@ public class TestFrameInOutBuffers { Assert.assertEquals(2, payload2.get()); Assert.assertEquals(2, payload2.get()); - final Frame frame3 = inbuffer.read(readableChannel); + final RawFrame frame3 = inbuffer.read(readableChannel); Assert.assertEquals(FrameType.DATA, FrameType.valueOf(frame3.getType())); - Assert.assertEquals(FrameFlag.of(FrameFlag.END_STREAM), frame3.getFlags()); + Assert.assertEquals(FrameFlag.of(FrameFlag.END_STREAM, FrameFlag.PADDED), frame3.getFlags()); Assert.assertEquals(8, frame3.getStreamId()); - final ByteBuffer payload3 = frame3.getPayload(); + final ByteBuffer payload3 = frame3.getPayloadContent(); Assert.assertNotNull(payload3); Assert.assertEquals(5, payload3.remaining()); Assert.assertEquals(3, payload3.get()); @@ -202,11 +201,11 @@ public class TestFrameInOutBuffers { new byte[] {5,0}, new byte[] {0,0,0}); - final Frame frame = inbuffer.read(readableChannel); + final RawFrame frame = inbuffer.read(readableChannel); Assert.assertEquals(FrameType.DATA, FrameType.valueOf(frame.getType())); - Assert.assertEquals(FrameFlag.of(FrameFlag.END_STREAM), frame.getFlags()); + Assert.assertEquals(FrameFlag.of(FrameFlag.END_STREAM, FrameFlag.PADDED), frame.getFlags()); Assert.assertEquals(8, frame.getStreamId()); - final ByteBuffer payload = frame.getPayload(); + final ByteBuffer payload = frame.getPayloadContent(); Assert.assertNotNull(payload); Assert.assertEquals(5, payload.remaining()); Assert.assertEquals(1, payload.get()); @@ -224,11 +223,11 @@ public class TestFrameInOutBuffers { final ReadableByteChannelMock readableChannel = new ReadableByteChannelMock( new byte[] {0,0,0,0,0,0,0,0,0}); - final Frame frame = inbuffer.read(readableChannel); + final RawFrame frame = inbuffer.read(readableChannel); Assert.assertEquals(FrameType.DATA, FrameType.valueOf(frame.getType())); Assert.assertEquals(0, frame.getFlags()); Assert.assertEquals(0, frame.getStreamId()); - final ByteBuffer payload = frame.getPayload(); + final ByteBuffer payload = frame.getPayloadContent(); Assert.assertNull(payload); } @@ -255,7 +254,7 @@ public class TestFrameInOutBuffers { final WritableByteChannelMock writableChannel = new WritableByteChannelMock(1024); final FrameOutputBuffer outbuffer = new FrameOutputBuffer(1024); - final ByteBufferFrame frame = new ByteBufferFrame(FrameType.DATA.getValue(), 0, 1, + final RawFrame frame = new RawFrame(FrameType.DATA.getValue(), 0, 1, ByteBuffer.wrap(new byte[2048])); outbuffer.write(frame, writableChannel); }