class WebSocket::Frame::Handler::Handler07
def close_code?(frame)
def close_code?(frame) frame && frame.type == :close && !frame.data.empty? end
def decode_frame
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
def encode_frame
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
def opcode_to_type(opcode)
-
(WebSocket::Error)
- if frame type name is not known
Returns:
-
(Symbol)
- Frame type name or nil
Parameters:
-
opcode
(Integer
) -- Opcode
def opcode_to_type(opcode) FRAME_TYPES_INVERSE[opcode] || raise(WebSocket::Error::Frame::UnknownOpcode) end
def type_to_opcode(frame_type)
-
(WebSocket::Error)
- if frame opcode is not known
Returns:
-
(Integer)
- opcode or nil
Parameters:
-
frame_type
(Symbol
) -- Frame type name
def type_to_opcode(frame_type) FRAME_TYPES[frame_type] || raise(WebSocket::Error::Frame::UnknownFrameType) end
def valid_code?(code)
def valid_code?(code) [1000, 1001, 1002, 1003, 1007, 1008, 1009, 1010, 1011].include?(code) || (3000..4999).cover?(code) end
def valid_encoding?(data)
def valid_encoding?(data) return true if data.nil? data.encode('UTF-8') true rescue StandardError false end