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,
	:enable_connect_protocol=,
]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSettings

Returns a new instance of Settings.



93
94
95
96
97
98
99
100
101
102
103
# File 'lib/protocol/http2/settings_frame.rb', line 93

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.



79
80
81
# File 'lib/protocol/http2/settings_frame.rb', line 79

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.



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

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.



32
33
34
# File 'lib/protocol/http2/settings_frame.rb', line 32

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.



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

def initial_window_size
  @initial_window_size
end

#maximum_concurrent_streamsObject

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



50
51
52
# File 'lib/protocol/http2/settings_frame.rb', line 50

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.



64
65
66
# File 'lib/protocol/http2/settings_frame.rb', line 64

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.



77
78
79
# File 'lib/protocol/http2/settings_frame.rb', line 77

def maximum_header_list_size
  @maximum_header_list_size
end

Instance Method Details

#difference(other) ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/protocol/http2/settings_frame.rb', line 113

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]
	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)


89
90
91
# File 'lib/protocol/http2/settings_frame.rb', line 89

def enable_connect_protocol?
	@enable_connect_protocol == 1
end

#enable_push?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/protocol/http2/settings_frame.rb', line 45

def enable_push?
	@enable_push == 1
end

#update(changes) ⇒ Object



105
106
107
108
109
110
111
# File 'lib/protocol/http2/settings_frame.rb', line 105

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