blob: a9c609f611fd1422327d5a6de72c422883aced6d [file] [log] [blame]
//
// ========================================================================
// Copyright (c) 1995-2015 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
//
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
//
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
//
package org.eclipse.jetty.http2.parser;
import java.nio.ByteBuffer;
import org.eclipse.jetty.http2.frames.PriorityFrame;
public class HeaderBlockFragments
{
private PriorityFrame priorityFrame;
private boolean endStream;
private int streamId;
private ByteBuffer storage;
public void storeFragment(ByteBuffer fragment, int length, boolean last)
{
if (storage == null)
{
int space = last ? length : length * 2;
storage = ByteBuffer.allocate(space);
}
// Grow the storage if necessary.
if (storage.remaining() < length)
{
int space = last ? length : length * 2;
int capacity = storage.position() + space;
ByteBuffer newStorage = ByteBuffer.allocate(capacity);
storage.flip();
newStorage.put(storage);
storage = newStorage;
}
// Copy the fragment into the storage.
int limit = fragment.limit();
fragment.limit(fragment.position() + length);
storage.put(fragment);
fragment.limit(limit);
}
public PriorityFrame getPriorityFrame()
{
return priorityFrame;
}
public void setPriorityFrame(PriorityFrame priorityFrame)
{
this.priorityFrame = priorityFrame;
}
public boolean isEndStream()
{
return endStream;
}
public void setEndStream(boolean endStream)
{
this.endStream = endStream;
}
public ByteBuffer complete()
{
ByteBuffer result = storage;
storage = null;
result.flip();
return result;
}
public int getStreamId()
{
return streamId;
}
public void setStreamId(int streamId)
{
this.streamId = streamId;
}
}