Class: Protocol::HTTP2::Settings

Inherits:
Object
  • Object
show all
Defined in:
lib/protocol/http2/settings_frame.rb

Constant Summary collapse

HEADER_TABLE_SIZE =
0x1
ENABLE_PUSH =
0x2
MAXIMUM_CONCURRENT_STREAMS =
0x3
INITIAL_WINDOW_SIZE =
0x4
MAXIMUM_FRAME_SIZE =
0x5
MAXIMUM_HEADER_LIST_SIZE =
0x6
ENABLE_CONNECT_PROTOCOL =
0x8
ASSIGN =
[
	nil,
	:header_table_size=,
	:enable_push=,
	:maximum_concurrent_streams=,
	:initial_window_size=,
	:maximum_frame_size=,
	:maximum_header_list_size=,
	nil, nil,
	:enable_connect_protocol=,
]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSettings

Returns a new instance of Settings.



97
98
99
100
101
102
103
104
105
106
107
# File 'lib/protocol/http2/settings_frame.rb', line 97

def initialize
	# These limits are taken from the RFC:
	# https://tools.ietf.org/html/rfc7540#section-6.5.2
	@header_table_size = 4096
	@enable_push = 1
	@maximum_concurrent_streams = 0xFFFFFFFF
	@initial_window_size = 0xFFFF # 2**16 - 1
	@maximum_frame_size = 0x4000 # 2**14
	@maximum_header_list_size = 0xFFFFFFFF
	@enable_connect_protocol = 0
end

Instance Attribute Details

#enable_connect_protocolObject

Returns the value of attribute enable_connect_protocol.



83
84
85
# File 'lib/protocol/http2/settings_frame.rb', line 83

def enable_connect_protocol
  @enable_connect_protocol
end

#enable_pushObject

This setting can be used to disable server push. An endpoint MUST NOT send a PUSH_PROMISE frame if it receives this parameter set to a value of 0.



38
39
40
# File 'lib/protocol/http2/settings_frame.rb', line 38

def enable_push
  @enable_push
end

#header_table_sizeObject

Allows the sender to inform the remote endpoint of the maximum size of the header compression table used to decode header blocks, in octets.



35
36
37
# File 'lib/protocol/http2/settings_frame.rb', line 35

def header_table_size
  @header_table_size
end

#initial_window_sizeObject

Indicates the sender’s initial window size (in octets) for stream-level flow control.



56
57
58
# File 'lib/protocol/http2/settings_frame.rb', line 56

def initial_window_size
  @initial_window_size
end

#maximum_concurrent_streamsObject

Indicates the maximum number of concurrent streams that the sender will allow.



53
54
55
# File 'lib/protocol/http2/settings_frame.rb', line 53

def maximum_concurrent_streams
  @maximum_concurrent_streams
end

#maximum_frame_sizeObject

Indicates the size of the largest frame payload that the sender is willing to receive, in octets.



68
69
70
# File 'lib/protocol/http2/settings_frame.rb', line 68

def maximum_frame_size
  @maximum_frame_size
end

#maximum_header_list_sizeObject

This advisory setting informs a peer of the maximum size of header list that the sender is prepared to accept, in octets.



81
82
83
# File 'lib/protocol/http2/settings_frame.rb', line 81

def maximum_header_list_size
  @maximum_header_list_size
end

Instance Method Details

#difference(other) ⇒ Object



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'lib/protocol/http2/settings_frame.rb', line 129

def difference(other)
	changes = []
	
	if @header_table_size != other.header_table_size
		changes << [HEADER_TABLE_SIZE, @header_table_size]
	end
	
	if @enable_push != other.enable_push
		changes << [ENABLE_PUSH, @enable_push ? 1 : 0]
	end
	
	if @maximum_concurrent_streams != other.maximum_concurrent_streams
		changes << [MAXIMUM_CONCURRENT_STREAMS, @maximum_concurrent_streams]
	end
	
	if @initial_window_size != other.initial_window_size
		changes << [INITIAL_WINDOW_SIZE, @initial_window_size]
	end
	
	if @maximum_frame_size != other.maximum_frame_size
		changes << [MAXIMUM_FRAME_SIZE, @maximum_frame_size]
	end
	
	if @maximum_header_list_size != other.maximum_header_list_size
		changes << [MAXIMUM_HEADER_LIST_SIZE, @maximum_header_list_size]
	end
	
	if @enable_connect_protocol != other.enable_connect_protocol
		changes << [ENABLE_CONNECT_PROTOCOL, @enable_connect_protocol]
	end
	
	return changes
end

#enable_connect_protocol?Boolean

Returns:

  • (Boolean)


93
94
95
# File 'lib/protocol/http2/settings_frame.rb', line 93

def enable_connect_protocol?
	@enable_connect_protocol == 1
end

#enable_push?Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/protocol/http2/settings_frame.rb', line 48

def enable_push?
	@enable_push == 1
end

#update(changes) ⇒ Object



121
122
123
124
125
126
127
# File 'lib/protocol/http2/settings_frame.rb', line 121

def update(changes)
	changes.each do |key, value|
		if name = ASSIGN[key]
			self.send(name, value)
		end
	end
end