Sha256: 6aac51d7b73d6c4247ba9efd2fc895b8d12dbe5ce7a6772b348061f346033316

Contents?: true

Size: 985 Bytes

Versions: 1

Compression:

Stored size: 985 Bytes

Contents

require 'digest/sha1'
require 'base64'

module EventMachine
  module WebSocket
    module Handshake04
      def self.handshake(headers, _, __)
        # Required
        unless key = headers['sec-websocket-key']
          raise HandshakeError, "sec-websocket-key header is required"
        end

        # Optional
        origin = headers['sec-websocket-origin']
        protocols = headers['sec-websocket-protocol']
        extensions = headers['sec-websocket-extensions']

        string_to_sign = "#{key}258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
        signature = Base64.encode64(Digest::SHA1.digest(string_to_sign)).chomp

        upgrade = ["HTTP/1.1 101 Switching Protocols"]
        upgrade << "Upgrade: websocket"
        upgrade << "Connection: Upgrade"
        upgrade << "Sec-WebSocket-Accept: #{signature}"

        # TODO: Support sec-websocket-protocol
        # TODO: sec-websocket-extensions

        return upgrade.join("\r\n") + "\r\n\r\n"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
em-websocket-0.4.0 lib/em-websocket/handshake04.rb