class WebSocketRb::Protocol::Handshake
Constants
- MAGIC_KEY
Public Class Methods
new(conn)
click to toggle source
# File lib/web_socket_rb/protocol/handshake.rb, line 10 def initialize(conn) @conn = conn end
Public Instance Methods
run()
click to toggle source
Generate a proper handshake response based on request
# File lib/web_socket_rb/protocol/handshake.rb, line 15 def run validate_request generate_proper_response @conn end
Private Instance Methods
calculate_key(key)
click to toggle source
Calculate handshake key
# File lib/web_socket_rb/protocol/handshake.rb, line 52 def calculate_key(key) raise ArgumentError, 'Key must be a String' unless key.is_a?(String) ::Digest::SHA1.base64digest(key.strip + MAGIC_KEY) end
generate_proper_response()
click to toggle source
Generate a proper response based on request
# File lib/web_socket_rb/protocol/handshake.rb, line 41 def generate_proper_response App.logger.info('Handshake') { 'Send accept response' } @conn.puts('HTTP/1.1 101 Switching Protocols') @conn.puts('Upgrade: websocket') @conn.puts('Connection: Upgrade') @conn.puts("Sec-WebSocket-Accept: #{calculate_key(request.key)}") @conn.puts('') App.logger.info('Handshake') { 'Finished sending accept response' } end
request()
click to toggle source
Read incoming data from socket and convert it to handshake request
# File lib/web_socket_rb/protocol/handshake.rb, line 24 def request @request ||= Wrapper::HandshakeRequest.new(@conn) end
validate_request()
click to toggle source
Validate incoming request - is it a WebSocket upgrade request?
# File lib/web_socket_rb/protocol/handshake.rb, line 29 def validate_request App.logger.info('Handshake') { 'Verification started' } raise Error::HandshakeError, 'It is not an upgrade request' unless request.upgrade? App.logger.info('Handshake') { 'Valid upgrade request' } raise Error::HandshakeError, 'Not valid protocol version.' unless request.valid_version? App.logger.info('Handshake') { 'Valid protocol version' } raise Error::HandshakeError, 'Not valid sub-protocol. Only JSON available.' unless request.valid_protocol? App.logger.info('Handshake') { 'Valid sub-protocol request' } App.logger.info('Handshake') { 'Verification passed' } end