Search in sources :

Example 1 with Http2HeadersFrame

use of com.generallycloud.baseio.codec.http2.future.Http2HeadersFrame in project baseio by generallycloud.

the class Http2ProtocolEncoder method encode.

@Override
public void encode(SocketChannel channel, ChannelFuture future) throws IOException {
    ByteBufAllocator allocator = channel.getByteBufAllocator();
    Http2Frame frame = (Http2Frame) future;
    Http2FrameType frameType = frame.getHttp2FrameType();
    byte[] payload = null;
    switch(frameType) {
        case FRAME_TYPE_CONTINUATION:
            break;
        case FRAME_TYPE_DATA:
            break;
        case FRAME_TYPE_FRAME_HEADER:
            break;
        case FRAME_TYPE_GOAWAY:
            break;
        case FRAME_TYPE_HEADERS:
            Http2HeadersFrame hf = (Http2HeadersFrame) frame;
            break;
        case FRAME_TYPE_PING:
            break;
        case FRAME_TYPE_PREFACE:
            break;
        case FRAME_TYPE_PRIORITY:
            break;
        case FRAME_TYPE_PUSH_PROMISE:
            break;
        case FRAME_TYPE_RST_STREAM:
            break;
        case FRAME_TYPE_SETTINGS:
            Http2SettingsFrame sf = (Http2SettingsFrame) frame;
            long[] settings = sf.getSettings();
            payload = new byte[6 * 6];
            for (int i = 0; i < 6; i++) {
                int realI = i + 1;
                int offset = i * 6;
                MathUtil.unsignedShort2Byte(payload, realI, offset);
                MathUtil.unsignedInt2Byte(payload, settings[realI], offset + 2);
            }
            break;
        case FRAME_TYPE_WINDOW_UPDATE:
            break;
        default:
            break;
    }
    int length = payload.length;
    ByteBuf buf = allocator.allocate(length + Http2ProtocolDecoder.PROTOCOL_HEADER);
    byte b2 = (byte) ((length & 0xff));
    byte b1 = (byte) ((length >> 8 * 1) & 0xff);
    byte b0 = (byte) ((length >> 8 * 2) & 0xff);
    byte b3 = frameType.getByteValue();
    buf.putByte(b0);
    buf.putByte(b1);
    buf.putByte(b2);
    buf.putByte(b3);
    buf.putByte((byte) 0);
    buf.putInt(frame.getHeader().getStreamIdentifier());
    buf.put(payload);
    future.setByteBuf(buf.flip());
}
Also used : ByteBufAllocator(com.generallycloud.baseio.buffer.ByteBufAllocator) Http2SettingsFrame(com.generallycloud.baseio.codec.http2.future.Http2SettingsFrame) Http2HeadersFrame(com.generallycloud.baseio.codec.http2.future.Http2HeadersFrame) Http2FrameType(com.generallycloud.baseio.codec.http2.future.Http2FrameType) ByteBuf(com.generallycloud.baseio.buffer.ByteBuf) Http2Frame(com.generallycloud.baseio.codec.http2.future.Http2Frame)

Aggregations

ByteBuf (com.generallycloud.baseio.buffer.ByteBuf)1 ByteBufAllocator (com.generallycloud.baseio.buffer.ByteBufAllocator)1 Http2Frame (com.generallycloud.baseio.codec.http2.future.Http2Frame)1 Http2FrameType (com.generallycloud.baseio.codec.http2.future.Http2FrameType)1 Http2HeadersFrame (com.generallycloud.baseio.codec.http2.future.Http2HeadersFrame)1 Http2SettingsFrame (com.generallycloud.baseio.codec.http2.future.Http2SettingsFrame)1