@Override protected void handleData(ByteBuffer resource, Http2FrameHeaderParser header) throws IOException { boolean continuationFramesComing = Bits.anyAreClear(header.flags, Http2Channel.HEADERS_FLAG_END_HEADERS); if (frameRemaining == -1) { frameRemaining = header.length; } final boolean moreDataThisFrame = resource.remaining() < frameRemaining; final int pos = resource.position(); try { if (!beforeHeadersHandled) { if (!handleBeforeHeader(resource, header)) { return; } } beforeHeadersHandled = true; decoder.setHeaderEmitter(this); try { decoder.decode(resource, moreDataThisFrame); } catch (HpackException e) { throw new ConnectionErrorException(Http2Channel.ERROR_COMPRESSION_ERROR, e); } } finally { int used = resource.position() - pos; frameRemaining -= used; } }