1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
module HTTP2
VERSION: String
DEFAULT_FLOW_WINDOW: Integer
DEFAULT_HEADER_SIZE: Integer
DEFAULT_MAX_CONCURRENT_STREAMS: Integer
EMPTY: []
type connection_opts = Hash[Symbol, untyped]
type settings_hash = {
settings_header_table_size: Integer,
settings_enable_push: Integer,
settings_max_concurrent_streams: Integer,
settings_initial_window_size: Integer,
settings_max_frame_size: Integer,
settings_max_header_list_size: Integer
}
type settings_ary = Array[settings_enum]
type settings_enum = Enumerable[[Symbol, Integer]]
SPEC_DEFAULT_CONNECTION_SETTINGS: settings_hash
DEFAULT_CONNECTION_SETTINGS: settings_hash
DEFAULT_WEIGHT: Integer
CONNECTION_PREFACE_MAGIC: String
REQUEST_MANDATORY_HEADERS: Array[String]
RESPONSE_MANDATORY_HEADERS: Array[String]
type header_pair = [string, string]
# # FRAMES
type frame_control_flags = Array[:end_headers | :end_stream]
type common_frame = { stream: Integer }
# # HEADERS
type headers_frame = common_frame & {
type: :headers, flags: frame_control_flags, payload: Enumerable[header_pair] | String,
?method: Symbol, ?trailer: Array[String], ?content_length: Integer, ?padding: Integer
}
# # DATA
type data_frame = { type: :data, flags: frame_control_flags, ?length: Integer, payload: String, ?padding: Integer }
# # PUSH_PROMISE
type push_promise_frame = { type: :push_promise, promise_stream: Integer, flags: frame_control_flags, ?method: Symbol, ?trailer: Array[String], ?content_length: Integer, payload: Enumerable[header_pair], ?padding: Integer }
# # SETTINGS
type settings_frame = { type: :settings, payload: Array[[Symbol | Integer, Integer]] }
# # WINDOW_UPDATE
type window_update_frame = { type: :window_update, increment: Integer }
# # PRIORITY
type priority_frame = { dependency: Integer, exclusive: bool, weight: Integer }
# # ALTSVC
type altsvc_frame = { type: :altsvc, max_age: Integer, port: Integer, proto: "String", host: String }
# # ORIGIN
type origin_frame = { type: :origin, origin: Array[String] }
# # PING
type ping_frame = { type: :ping, payload: String, length: Integer }
# # GOAWAY
type goaway_frame = { type: :goaway, last_stream: Integer, error: Symbol? }
# type frame = common_frame & (headers_frame | data_frame | push_promise_frame |
# settings_frame | window_update_frame | priority_frame | altsvc_frame |
# origin_frame | ping_frame | goaway_frame)
type frame_key = :type | :flags | :stream | :padding | :ignore |
# headers
:method | :trailer | :content_length | :status |
# data, settings, ping
:payload | :length |
# promise
:promise_stream |
# window_update
:increment |
# priority
:dependency | :exclusive | :weight |
# altsvc
:max_age | :port | :proto | :host |
# origin
:origin |
# goaway
:last_stream | :error
type frame_value = Integer |
Symbol | # type (:data, :headers)
Array[Symbol] |
String |
bool |
Array[String] |
Array[[Symbol | Integer, Integer]] |
Enumerable[header_pair] |
nil
type frame = Hash[frame_key, frame_value]
end
|