Sha256: e0c51581050b60a7f0fdefe0b5db2168f2453dc952f8415b67c4c3932d91f694

Contents?: true

Size: 1.36 KB

Versions: 1

Compression:

Stored size: 1.36 KB

Contents

module WebSocket
  module Handshake
    class Server < Base

      def initialize(args = {})
        super
        @secure = !!args[:secure]
      end

      def <<(data)
        @data << data
        if parse_data
          set_version
        end
      end

      def should_respond?
        true
      end

      private

      def set_version
        @version = @headers['sec-websocket-version'].to_i if @headers['sec-websocket-version']
        @version ||= @headers['sec-websocket-draft'].to_i if @headers['sec-websocket-draft']
        @version ||= 76 if @leftovers != ""
        @version ||= 75
        include_version
      end

      def include_version
        case @version
          when 75 then extend Handler::Server75
          when 76, 0..3 then extend Handler::Server76
          when 4..13 then extend Handler::Server04
          else set_error(:unknown_protocol_version) and return false
        end
        return true
      end

      PATH = /^(\w+) (\/[^\s]*) HTTP\/1\.1$/

      def parse_first_line(line)
        line_parts = line.match(PATH)
        set_error(:invalid_header) and return unless line_parts
        method = line_parts[1].strip
        set_error(:get_request_required) and return unless method == "GET"

        resource_name = line_parts[2].strip
        @path, @query = resource_name.split('?', 2)

        return true
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
websocket-1.0.1 lib/websocket/handshake/server.rb