class WebSocket::Frame::Handler::Handler07
Constants
- FRAME_TYPES
Hash of frame names and it's opcodes
- FRAME_TYPES_INVERSE
Hash of frame opcodes and it's names
Public Instance Methods
decode_frame()
click to toggle source
Calls superclass method
WebSocket::Frame::Handler::Handler03#decode_frame
# File lib/websocket/frame/handler/handler07.rb, line 31 def decode_frame result = super if close_code?(result) code = result.data.slice!(0..1) result.code = code.unpack('n').first raise WebSocket::Error::Frame::UnknownCloseCode unless valid_code?(result.code) raise WebSocket::Error::Frame::InvalidPayloadEncoding unless valid_encoding?(result.data) end result end
encode_frame()
click to toggle source
Calls superclass method
WebSocket::Frame::Handler::Handler03#encode_frame
# File lib/websocket/frame/handler/handler07.rb, line 21 def encode_frame if @frame.type == :close code = @frame.code || 1000 raise WebSocket::Error::Frame::UnknownCloseCode unless valid_code?(code) @frame.data = Data.new([code].pack('n') + @frame.data.to_s) @frame.code = nil end super end
Private Instance Methods
close_code?(frame)
click to toggle source
# File lib/websocket/frame/handler/handler07.rb, line 56 def close_code?(frame) frame && frame.type == :close && !frame.data.empty? end
opcode_to_type(opcode)
click to toggle source
Convert frame opcode to type name @param [Integer] opcode Opcode @return [Symbol] Frame
type name or nil @raise [WebSocket::Error] if frame type name is not known
# File lib/websocket/frame/handler/handler07.rb, line 72 def opcode_to_type(opcode) FRAME_TYPES_INVERSE[opcode] || raise(WebSocket::Error::Frame::UnknownOpcode) end
type_to_opcode(frame_type)
click to toggle source
Convert frame type name to opcode @param [Symbol] frame_type Frame
type name @return [Integer] opcode or nil @raise [WebSocket::Error] if frame opcode is not known
# File lib/websocket/frame/handler/handler07.rb, line 64 def type_to_opcode(frame_type) FRAME_TYPES[frame_type] || raise(WebSocket::Error::Frame::UnknownFrameType) end
valid_code?(code)
click to toggle source
# File lib/websocket/frame/handler/handler07.rb, line 44 def valid_code?(code) [1000, 1001, 1002, 1003, 1007, 1008, 1009, 1010, 1011].include?(code) || (3000..4999).cover?(code) end
valid_encoding?(data)
click to toggle source
# File lib/websocket/frame/handler/handler07.rb, line 48 def valid_encoding?(data) return true if data.nil? data.encode('UTF-8') true rescue StandardError false end