aboutsummaryrefslogtreecommitdiffstats
path: root/lib/plum/frame_factory.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/plum/frame_factory.rb')
-rw-r--r--lib/plum/frame_factory.rb97
1 files changed, 0 insertions, 97 deletions
diff --git a/lib/plum/frame_factory.rb b/lib/plum/frame_factory.rb
deleted file mode 100644
index 514d99d..0000000
--- a/lib/plum/frame_factory.rb
+++ /dev/null
@@ -1,97 +0,0 @@
-# frozen-string-literal: true
-
-using Plum::BinaryString
-
-module Plum
- module FrameFactory
- # Creates a RST_STREAM frame.
- # @param stream_id [Integer] The stream ID.
- # @param error_type [Symbol] The error type defined in RFC 7540 Section 7.
- def rst_stream(stream_id, error_type)
- payload = String.new.push_uint32(HTTPError::ERROR_CODES[error_type])
- Frame.new(type: :rst_stream, stream_id: stream_id, payload: payload)
- end
-
- # Creates a GOAWAY frame.
- # @param last_id [Integer] The biggest processed stream ID.
- # @param error_type [Symbol] The error type defined in RFC 7540 Section 7.
- # @param message [String] Additional debug data.
- # @see RFC 7540 Section 6.8
- def goaway(last_id, error_type, message = "")
- payload = String.new.push_uint32(last_id)
- .push_uint32(HTTPError::ERROR_CODES[error_type])
- .push(message)
- Frame.new(type: :goaway, stream_id: 0, payload: payload)
- end
-
- # Creates a SETTINGS frame.
- # @param ack [Symbol] Pass :ack to create an ACK frame.
- # @param args [Hash<Symbol, Integer>] The settings values to send.
- def settings(ack = nil, **args)
- payload = String.new
- args.each { |key, value|
- id = Frame::SETTINGS_TYPE[key] or raise ArgumentError.new("invalid settings type")
- payload.push_uint16(id)
- payload.push_uint32(value)
- }
- Frame.new(type: :settings, stream_id: 0, flags: [ack], payload: payload)
- end
-
- # Creates a PING frame.
- # @overload ping(ack, payload)
- # @param ack [Symbol] Pass :ack to create an ACK frame.
- # @param payload [String] 8 bytes length data to send.
- # @overload ping(payload = "plum\x00\x00\x00\x00")
- # @param payload [String] 8 bytes length data to send.
- def ping(arg1 = "plum\x00\x00\x00\x00".b, arg2 = nil)
- if !arg2
- raise ArgumentError.new("data must be 8 octets") if arg1.bytesize != 8
- arg1 = arg1.b if arg1.encoding != Encoding::BINARY
- Frame.new(type: :ping, stream_id: 0, payload: arg1)
- else
- Frame.new(type: :ping, stream_id: 0, flags: [:ack], payload: arg2)
- end
- end
-
- # Creates a DATA frame.
- # @param stream_id [Integer] The stream ID.
- # @param payload [String] Payload.
- # @param end_stream [Boolean] add END_STREAM flag
- def data(stream_id, payload = "", end_stream: false)
- payload = payload.b if payload&.encoding != Encoding::BINARY
- fval = end_stream ? 1 : 0
- Frame.new(type_value: 0, stream_id: stream_id, flags_value: fval, payload: payload)
- end
-
- # Creates a HEADERS frame.
- # @param stream_id [Integer] The stream ID.
- # @param encoded [String] Headers.
- # @param end_stream [Boolean] add END_STREAM flag
- # @param end_headers [Boolean] add END_HEADERS flag
- def headers(stream_id, encoded, end_stream: false, end_headers: false)
- fval = end_stream ? 1 : 0
- fval += 4 if end_headers
- Frame.new(type_value: 1, stream_id: stream_id, flags_value: fval, payload: encoded)
- end
-
- # Creates a PUSH_PROMISE frame.
- # @param stream_id [Integer] The stream ID.
- # @param new_id [Integer] The stream ID to create.
- # @param encoded [String] Request headers.
- # @param end_headers [Boolean] add END_HEADERS flag
- def push_promise(stream_id, new_id, encoded, end_headers: false)
- payload = String.new.push_uint32(new_id)
- .push(encoded)
- fval = end_headers ? 4 : 0
- Frame.new(type: :push_promise, stream_id: stream_id, flags_value: fval, payload: payload)
- end
-
- # Creates a CONTINUATION frame.
- # @param stream_id [Integer] The stream ID.
- # @param payload [String] Payload.
- # @param end_headers [Boolean] add END_HEADERS flag
- def continuation(stream_id, payload, end_headers: false)
- Frame.new(type: :continuation, stream_id: stream_id, flags_value: (end_headers ? 4 : 0), payload: payload)
- end
- end
-end