Class: HTTP::Protocol::HTTP2::Settings

Inherits:
Object
  • Object
show all
Defined in:
lib/http/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
ASSIGN =
[
	nil,
	:header_table_size=,
	:enable_push=,
	:maximum_concurrent_streams=,
	:initial_window_size=,
	:maximum_frame_size=,
	:maximum_header_list_size=,
]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSettings

Returns a new instance of Settings.



80
81
82
83
84
85
86
87
88
89
# File 'lib/http/protocol/http2/settings_frame.rb', line 80

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
end

Instance Attribute Details

#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/http/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/http/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/http/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/http/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.



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

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.



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

def maximum_header_list_size
  @maximum_header_list_size
end

Instance Method Details

#difference(other) ⇒ Object



109
110
111
112
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
# File 'lib/http/protocol/http2/settings_frame.rb', line 109

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
	
	return changes
end

#enable_push?Boolean

Returns:

  • (Boolean)


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

def enable_push?
	@enable_push != 0
end

#update(changes) ⇒ Object



101
102
103
104
105
106
107
# File 'lib/http/protocol/http2/settings_frame.rb', line 101

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