-
-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathpriority_update_frame.rb
41 lines (33 loc) · 1.31 KB
/
priority_update_frame.rb
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
# frozen_string_literal: true
# Released under the MIT License.
# Copyright, 2019-2024, by Samuel Williams.
require_relative "frame"
require_relative "padded"
require_relative "continuation_frame"
module Protocol
module HTTP2
# The PRIORITY_UPDATE frame is used by clients to signal the initial priority of a response, or to reprioritize a response or push stream. It carries the stream ID of the response and the priority in ASCII text, using the same representation as the Priority header field value.
#
# +-+-------------+-----------------------------------------------+
# |R| Prioritized Stream ID (31) |
# +-+-----------------------------+-------------------------------+
# | Priority Field Value (*) ...
# +---------------------------------------------------------------+
#
class PriorityUpdateFrame < Frame
TYPE = 0x10
FORMAT = "N".freeze
def unpack
data = super
prioritized_stream_id = data.unpack1(FORMAT)
return prioritized_stream_id, data.byteslice(4, data.bytesize - 4)
end
def pack(prioritized_stream_id, data, **options)
super([prioritized_stream_id].pack(FORMAT) + data, **options)
end
def apply(connection)
connection.receive_priority_update(self)
end
end
end
end