Data Structures | Typedefs | Enumerations | Functions | Variables

HTTP2.h File Reference

Fundamental HTTP/2 protocol definitions and parsers. More...

#include "ink_defs.h"
#include "ink_memory.h"
Include dependency graph for HTTP2.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  Http2FrameHeader
struct  Http2SettingsParameter
struct  Http2Goaway

Typedefs

typedef unsigned Http2StreamId
typedef int32_t Http2WindowSize

Enumerations

enum  Http2ErrorCode {
  HTTP2_ERROR_NO_ERROR = 0, HTTP2_ERROR_PROTOCOL_ERROR = 1, HTTP2_ERROR_INTERNAL_ERROR = 2, HTTP2_ERROR_FLOW_CONTROL_ERROR = 3,
  HTTP2_ERROR_SETTINGS_TIMEOUT = 4, HTTP2_ERROR_STREAM_CLOSED = 5, HTTP2_ERROR_FRAME_SIZE_ERROR = 6, HTTP2_ERROR_REFUSED_STREAM = 7,
  HTTP2_ERROR_CANCEL = 8, HTTP2_ERROR_COMPRESSION_ERROR = 9, HTTP2_ERROR_CONNECT_ERROR = 10, HTTP2_ERROR_ENHANCE_YOUR_CALM = 11,
  HTTP2_ERROR_INADEQUATE_SECURITY = 12, HTTP2_ERROR_MAX
}
enum  Http2FrameType {
  HTTP2_FRAME_TYPE_DATA = 0, HTTP2_FRAME_TYPE_HEADERS = 1, HTTP2_FRAME_TYPE_PRIORITY = 2, HTTP2_FRAME_TYPE_RST_STREAM = 3,
  HTTP2_FRAME_TYPE_SETTINGS = 4, HTTP2_FRAME_TYPE_PUSH_PROMISE = 5, HTTP2_FRAME_TYPE_PING = 6, HTTP2_FRAME_TYPE_GOAWAY = 7,
  HTTP2_FRAME_TYPE_WINDOW_UPDATE = 8, HTTP2_FRAME_TYPE_CONTINUATION = 9, HTTP2_FRAME_TYPE_ALTSVC = 10, HTTP2_FRAME_TYPE_BLOCKED = 11,
  HTTP2_FRAME_TYPE_MAX
}
enum  Http2FrameFlagsData {
  HTTP2_FLAGS_DATA_END_STREAM = 0x01, HTTP2_FLAGS_DATA_END_SEGMENT = 0x02, HTTP2_FLAGS_DATA_PAD_LOW = 0x08, HTTP2_FLAGS_DATA_PAD_HIGH = 0x10,
  HTTP2_FLAGS_DATA_COMPRESSESD = 0x20, HTTP2_FLAGS_DATA_MASK = 0x2B
}
enum  Http2FrameFlagsHeaders {
  HTTP2_FLAGS_HEADERS_END_STREAM = 0x01, HTTP2_FLAGS_HEADERS_END_SEGMENT = 0x02, HTTP2_FLAGS_HEADERS_PAD_LOW = 0x08, HTTP2_FLAGS_HEADERS_PAD_HIGH = 0x10,
  HTTP2_FLAGS_HEADERS_PRIORITY = 0x20, HTTP2_FLAGS_HEADERS_MASK = 0x2B
}
enum  Http2FrameFlagsPriority { HTTP2_FLAGS_PRIORITY_MASK = 0x00 }
enum  Http2FrameFlagsRstStream { HTTP2_FLAGS_RST_STREAM_MASK = 0x00 }
enum  Http2FrameFlagsSettings { HTTP2_FLAGS_SETTINGS_ACK = 0x01, HTTP2_FLAGS_SETTINGS_MASK = 0x01 }
enum  Http2FrameFlagsPushPromise { HTTP2_FLAGS_PUSH_PROMISE_END_HEADERS = 0x04, HTTP2_FLAGS_PUSH_PROMISE_PAD_LOW = 0x08, HTTP2_FLAGS_PUSH_PROMISE_PAD_HIGH = 0x10, HTTP2_FLAGS_PUSH_PROMISE_MASK = 0x1C }
enum  Http2FrameFlagsPing { HTTP2_FLAGS_PING_ACK = 0x01, HTTP2_FLAGS_PING_MASK = 0x01 }
enum  Http2FrameFlagsGoaway { HTTP2_FLAGS_GOAWAY_MASK = 0x00 }
enum  Http2FrameFlagsWindowUpdate { HTTP2_FLAGS_WINDOW_UPDATE_MASK = 0x00 }
enum  Http2FrameFlagsContinuation { HTTP2_FLAGS_CONTINUATION_END_HEADERS = 0x04, HTTP2_FLAGS_CONTINUATION_PAD_LOW = 0x08, HTTP2_FLAGS_CONTINUATION_PAD_HIGH = 0x10, HTTP2_FLAGS_CONTINUATION_MASK = 0x1C }
enum  Http2FrameFlagsAltsvc { HTTP2_FLAGS_ALTSVC_MASK = 0x00 }
enum  Http2FrameFlagsBlocked { HTTP2_FLAGS_BLOCKED_MASK = 0x00 }
enum  Http2SettingsIdentifier {
  HTTP2_SETTINGS_HEADER_TABLE_SIZE = 1, HTTP2_SETTINGS_ENABLE_PUSH = 2, HTTP2_SETTINGS_MAX_CONCURRENT_STREAMS = 3, HTTP2_SETTINGS_INITIAL_WINDOW_SIZE = 4,
  HTTP2_SETTINGS_COMPRESS_DATA = 5, HTTP2_SETTINGS_MAX
}

Functions

static bool http2_is_client_streamid (Http2StreamId streamid)
static bool http2_is_server_streamid (Http2StreamId streamid)
bool http2_parse_frame_header (IOVec, Http2FrameHeader &)
bool http2_write_frame_header (const Http2FrameHeader &, IOVec)
bool http2_write_goaway (const Http2Goaway &, IOVec)
bool http2_frame_header_is_valid (const Http2FrameHeader &)
bool http2_settings_parameter_is_valid (const Http2SettingsParameter &)
bool http2_parse_settings_parameter (IOVec, Http2SettingsParameter &)

Variables

const char *const HTTP2_CONNECTION_PREFACE
const size_t HTTP2_CONNECTION_PREFACE_LEN = 24
const size_t HTTP2_FRAME_HEADER_LEN = 8
const size_t HTTP2_GOAWAY_LEN = 8
const size_t HTTP2_SETTINGS_PARAMETER_LEN = 5
const size_t HTTP2_MAX_FRAME_PAYLOAD = 16383
static const Http2WindowSize HTTP2_MAX_WINDOW_SIZE = 0x7FFFFFFF
static const Http2WindowSize HTTP2_INITIAL_WINDOW_SIZE = 0x0000FFFF

Detailed Description

Fundamental HTTP/2 protocol definitions and parsers.

License

Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Definition in file HTTP2.h.


Typedef Documentation

typedef unsigned Http2StreamId

Definition at line 30 of file HTTP2.h.

typedef int32_t Http2WindowSize

Definition at line 34 of file HTTP2.h.


Enumeration Type Documentation

Enumerator:
HTTP2_ERROR_NO_ERROR 
HTTP2_ERROR_PROTOCOL_ERROR 
HTTP2_ERROR_INTERNAL_ERROR 
HTTP2_ERROR_FLOW_CONTROL_ERROR 
HTTP2_ERROR_SETTINGS_TIMEOUT 
HTTP2_ERROR_STREAM_CLOSED 
HTTP2_ERROR_FRAME_SIZE_ERROR 
HTTP2_ERROR_REFUSED_STREAM 
HTTP2_ERROR_CANCEL 
HTTP2_ERROR_COMPRESSION_ERROR 
HTTP2_ERROR_CONNECT_ERROR 
HTTP2_ERROR_ENHANCE_YOUR_CALM 
HTTP2_ERROR_INADEQUATE_SECURITY 
HTTP2_ERROR_MAX 

Definition at line 46 of file HTTP2.h.

Enumerator:
HTTP2_FLAGS_ALTSVC_MASK 

Definition at line 168 of file HTTP2.h.

Enumerator:
HTTP2_FLAGS_BLOCKED_MASK 

Definition at line 174 of file HTTP2.h.

Enumerator:
HTTP2_FLAGS_CONTINUATION_END_HEADERS 
HTTP2_FLAGS_CONTINUATION_PAD_LOW 
HTTP2_FLAGS_CONTINUATION_PAD_HIGH 
HTTP2_FLAGS_CONTINUATION_MASK 

Definition at line 158 of file HTTP2.h.

Enumerator:
HTTP2_FLAGS_DATA_END_STREAM 
HTTP2_FLAGS_DATA_END_SEGMENT 
HTTP2_FLAGS_DATA_PAD_LOW 
HTTP2_FLAGS_DATA_PAD_HIGH 
HTTP2_FLAGS_DATA_COMPRESSESD 
HTTP2_FLAGS_DATA_MASK 

Definition at line 84 of file HTTP2.h.

Enumerator:
HTTP2_FLAGS_GOAWAY_MASK 

Definition at line 146 of file HTTP2.h.

Enumerator:
HTTP2_FLAGS_HEADERS_END_STREAM 
HTTP2_FLAGS_HEADERS_END_SEGMENT 
HTTP2_FLAGS_HEADERS_PAD_LOW 
HTTP2_FLAGS_HEADERS_PAD_HIGH 
HTTP2_FLAGS_HEADERS_PRIORITY 
HTTP2_FLAGS_HEADERS_MASK 

Definition at line 96 of file HTTP2.h.

Enumerator:
HTTP2_FLAGS_PING_ACK 
HTTP2_FLAGS_PING_MASK 

Definition at line 138 of file HTTP2.h.

Enumerator:
HTTP2_FLAGS_PRIORITY_MASK 

Definition at line 108 of file HTTP2.h.

Enumerator:
HTTP2_FLAGS_PUSH_PROMISE_END_HEADERS 
HTTP2_FLAGS_PUSH_PROMISE_PAD_LOW 
HTTP2_FLAGS_PUSH_PROMISE_PAD_HIGH 
HTTP2_FLAGS_PUSH_PROMISE_MASK 

Definition at line 128 of file HTTP2.h.

Enumerator:
HTTP2_FLAGS_RST_STREAM_MASK 

Definition at line 114 of file HTTP2.h.

Enumerator:
HTTP2_FLAGS_SETTINGS_ACK 
HTTP2_FLAGS_SETTINGS_MASK 

Definition at line 120 of file HTTP2.h.

Enumerator:
HTTP2_FLAGS_WINDOW_UPDATE_MASK 

Definition at line 152 of file HTTP2.h.

Enumerator:
HTTP2_FRAME_TYPE_DATA 
HTTP2_FRAME_TYPE_HEADERS 
HTTP2_FRAME_TYPE_PRIORITY 
HTTP2_FRAME_TYPE_RST_STREAM 
HTTP2_FRAME_TYPE_SETTINGS 
HTTP2_FRAME_TYPE_PUSH_PROMISE 
HTTP2_FRAME_TYPE_PING 
HTTP2_FRAME_TYPE_GOAWAY 
HTTP2_FRAME_TYPE_WINDOW_UPDATE 
HTTP2_FRAME_TYPE_CONTINUATION 
HTTP2_FRAME_TYPE_ALTSVC 
HTTP2_FRAME_TYPE_BLOCKED 
HTTP2_FRAME_TYPE_MAX 

Definition at line 65 of file HTTP2.h.

Enumerator:
HTTP2_SETTINGS_HEADER_TABLE_SIZE 
HTTP2_SETTINGS_ENABLE_PUSH 
HTTP2_SETTINGS_MAX_CONCURRENT_STREAMS 
HTTP2_SETTINGS_INITIAL_WINDOW_SIZE 
HTTP2_SETTINGS_COMPRESS_DATA 
HTTP2_SETTINGS_MAX 

Definition at line 180 of file HTTP2.h.


Function Documentation

bool http2_frame_header_is_valid ( const Http2FrameHeader  ) 
static bool http2_is_client_streamid ( Http2StreamId  streamid  )  [inline, static]

Definition at line 225 of file HTTP2.h.

static bool http2_is_server_streamid ( Http2StreamId  streamid  )  [inline, static]

Definition at line 230 of file HTTP2.h.

bool http2_parse_frame_header ( IOVec  ,
Http2FrameHeader  
)
bool http2_parse_settings_parameter ( IOVec  ,
Http2SettingsParameter  
)
bool http2_settings_parameter_is_valid ( const Http2SettingsParameter  ) 
bool http2_write_frame_header ( const Http2FrameHeader ,
IOVec   
)
bool http2_write_goaway ( const Http2Goaway ,
IOVec   
)

Variable Documentation

const char* const HTTP2_CONNECTION_PREFACE

Definition at line 27 of file HTTP2.cc.

Referenced by proto_is_http2().

const size_t HTTP2_CONNECTION_PREFACE_LEN = 24

Definition at line 37 of file HTTP2.h.

Referenced by proto_is_http2().

const size_t HTTP2_FRAME_HEADER_LEN = 8
const size_t HTTP2_GOAWAY_LEN = 8

Definition at line 40 of file HTTP2.h.

Referenced by http2_write_goaway(), and Http2ConnectionState::main_event_handler().

const Http2WindowSize HTTP2_INITIAL_WINDOW_SIZE = 0x0000FFFF [static]

Definition at line 222 of file HTTP2.h.

const size_t HTTP2_MAX_FRAME_PAYLOAD = 16383

Definition at line 44 of file HTTP2.h.

Referenced by http2_frame_header_is_valid().

const Http2WindowSize HTTP2_MAX_WINDOW_SIZE = 0x7FFFFFFF [static]

Definition at line 219 of file HTTP2.h.

Referenced by http2_settings_parameter_is_valid().

const size_t HTTP2_SETTINGS_PARAMETER_LEN = 5

Definition at line 41 of file HTTP2.h.

Referenced by http2_parse_settings_parameter(), and rcv_settings_frame().