Sha256: d17a96b4aec9761b13f472552430469a63e543ec5bec171dd298809c5276dc97

Contents?: true

Size: 913 Bytes

Versions: 7

Compression:

Stored size: 913 Bytes

Contents

module EventMachine
  module WebSocket
    module Handshake75
      def self.handshake(headers, path, secure)
        scheme = (secure ? "wss" : "ws")
        location = "#{scheme}://#{headers['host']}#{path}"

        upgrade =  "HTTP/1.1 101 Web Socket Protocol Handshake\r\n"
        upgrade << "Upgrade: WebSocket\r\n"
        upgrade << "Connection: Upgrade\r\n"
        upgrade << "WebSocket-Origin: #{headers['origin']}\r\n"
        upgrade << "WebSocket-Location: #{location}\r\n"
        if protocol = headers['sec-websocket-protocol']
          validate_protocol!(protocol)
          upgrade << "Sec-WebSocket-Protocol: #{protocol}\r\n"
        end
        upgrade << "\r\n"

        return upgrade
      end

      def self.validate_protocol!(protocol)
        raise HandshakeError, "Invalid WebSocket-Protocol: empty" if protocol.empty?
        # TODO: Validate characters
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
em-websocket-0.5.3 lib/em-websocket/handshake75.rb
em-websocket-0.5.2 lib/em-websocket/handshake75.rb
sonixlabs-em-websocket-0.5.1.5 lib/em-websocket/handshake75.rb
sonixlabs-em-websocket-0.5.1.4 lib/em-websocket/handshake75.rb
sonixlabs-em-websocket-0.5.1.3 lib/em-websocket/handshake75.rb
sonixlabs-em-websocket-0.5.1.2 lib/em-websocket/handshake75.rb
sonixlabs-em-websocket-0.5.1.1 lib/em-websocket/handshake75.rb