@Override public int generate(ByteBufferPool.Lease lease, Frame frame) { GoAwayFrame goAwayFrame = (GoAwayFrame)frame; return generateGoAway(lease, goAwayFrame.getLastStreamId(), goAwayFrame.getError(), goAwayFrame.getPayload()); }
public int generateGoAway(ByteBufferPool.Lease lease, int lastStreamId, int error, byte[] payload) { if (lastStreamId < 0) lastStreamId = 0; // The last streamId + the error code. int fixedLength = 4 + 4; // Make sure we don't exceed the default frame max length. int maxPayloadLength = Frame.DEFAULT_MAX_LENGTH - fixedLength; if (payload != null && payload.length > maxPayloadLength) payload = Arrays.copyOfRange(payload, 0, maxPayloadLength); int length = fixedLength + (payload != null ? payload.length : 0); ByteBuffer header = generateHeader(lease, FrameType.GO_AWAY, length, Flags.NONE, 0); header.putInt(lastStreamId); header.putInt(error); if (payload != null) header.put(payload); BufferUtil.flipToFlush(header, 0); lease.append(header, true); return Frame.HEADER_LENGTH + length; } }
public Generator(ByteBufferPool byteBufferPool, int maxDynamicTableSize, int maxHeaderBlockFragment) { this.byteBufferPool = byteBufferPool; headerGenerator = new HeaderGenerator(); hpackEncoder = new HpackEncoder(maxDynamicTableSize); this.generators = new FrameGenerator[FrameType.values().length]; this.generators[FrameType.HEADERS.getType()] = new HeadersGenerator(headerGenerator, hpackEncoder, maxHeaderBlockFragment); this.generators[FrameType.PRIORITY.getType()] = new PriorityGenerator(headerGenerator); this.generators[FrameType.RST_STREAM.getType()] = new ResetGenerator(headerGenerator); this.generators[FrameType.SETTINGS.getType()] = new SettingsGenerator(headerGenerator); this.generators[FrameType.PUSH_PROMISE.getType()] = new PushPromiseGenerator(headerGenerator, hpackEncoder); this.generators[FrameType.PING.getType()] = new PingGenerator(headerGenerator); this.generators[FrameType.GO_AWAY.getType()] = new GoAwayGenerator(headerGenerator); this.generators[FrameType.WINDOW_UPDATE.getType()] = new WindowUpdateGenerator(headerGenerator); this.generators[FrameType.CONTINUATION.getType()] = null; // Never generated explicitly. this.generators[FrameType.PREFACE.getType()] = new PrefaceGenerator(); this.generators[FrameType.DISCONNECT.getType()] = new DisconnectGenerator(); this.dataGenerator = new DataGenerator(headerGenerator); }
public Generator(ByteBufferPool byteBufferPool, int maxDynamicTableSize, int maxHeaderBlockFragment) { this.byteBufferPool = byteBufferPool; headerGenerator = new HeaderGenerator(); hpackEncoder = new HpackEncoder(maxDynamicTableSize); this.generators = new FrameGenerator[FrameType.values().length]; this.generators[FrameType.HEADERS.getType()] = new HeadersGenerator(headerGenerator, hpackEncoder, maxHeaderBlockFragment); this.generators[FrameType.PRIORITY.getType()] = new PriorityGenerator(headerGenerator); this.generators[FrameType.RST_STREAM.getType()] = new ResetGenerator(headerGenerator); this.generators[FrameType.SETTINGS.getType()] = new SettingsGenerator(headerGenerator); this.generators[FrameType.PUSH_PROMISE.getType()] = new PushPromiseGenerator(headerGenerator, hpackEncoder); this.generators[FrameType.PING.getType()] = new PingGenerator(headerGenerator); this.generators[FrameType.GO_AWAY.getType()] = new GoAwayGenerator(headerGenerator); this.generators[FrameType.WINDOW_UPDATE.getType()] = new WindowUpdateGenerator(headerGenerator); this.generators[FrameType.CONTINUATION.getType()] = null; // Never generated explicitly. this.generators[FrameType.PREFACE.getType()] = new PrefaceGenerator(); this.generators[FrameType.DISCONNECT.getType()] = new DisconnectGenerator(); this.dataGenerator = new DataGenerator(headerGenerator); }
@Override public int generate(ByteBufferPool.Lease lease, Frame frame) { GoAwayFrame goAwayFrame = (GoAwayFrame)frame; return generateGoAway(lease, goAwayFrame.getLastStreamId(), goAwayFrame.getError(), goAwayFrame.getPayload()); }
public int generateGoAway(ByteBufferPool.Lease lease, int lastStreamId, int error, byte[] payload) { if (lastStreamId < 0) lastStreamId = 0; // The last streamId + the error code. int fixedLength = 4 + 4; // Make sure we don't exceed the default frame max length. int maxPayloadLength = Frame.DEFAULT_MAX_LENGTH - fixedLength; if (payload != null && payload.length > maxPayloadLength) payload = Arrays.copyOfRange(payload, 0, maxPayloadLength); int length = fixedLength + (payload != null ? payload.length : 0); ByteBuffer header = generateHeader(lease, FrameType.GO_AWAY, length, Flags.NONE, 0); header.putInt(lastStreamId); header.putInt(error); if (payload != null) header.put(payload); BufferUtil.flipToFlush(header, 0); lease.append(header, true); return Frame.HEADER_LENGTH + length; } }