private void commitHeaders(
final int streamId, final List<? extends Header> headers, final boolean endStream) throws IOException {
if (streamListener != null) {
streamListener.onHeaderOutput(this, streamId, headers);
}
final ByteArrayBuffer buf = new ByteArrayBuffer(512);
hPackEncoder.encodeHeaders(buf, headers);
int off = 0;
int remaining = buf.length();
boolean continuation = false;
while (remaining > 0) {
final int chunk = Math.min(remoteConfig.getMaxFrameSize(), remaining);
final ByteBuffer payload = ByteBuffer.wrap(buf.array(), off, chunk);
remaining -= chunk;
off += chunk;
final boolean endHeaders = remaining == 0;
final RawFrame frame;
if (!continuation) {
frame = frameFactory.createHeaders(streamId, payload, endHeaders, endStream);
continuation = true;
} else {
frame = frameFactory.createContinuation(streamId, payload, endHeaders);
}
commitFrameInternal(frame);
}
}