# File lib/em-websocket/handler_factory.rb, line 7
      def self.build(connection, data, secure = false, debug = false)
        (header, remains) = data.split("\r\n\r\n", 2)
        unless remains
          # The whole header has not been received yet.
          return nil
        end

        request = {}

        lines = header.split("\r\n")

        raise HandshakeError, "Empty HTTP header" unless lines.size > 0

        # extract request path
        first_line = lines.shift.match(PATH)
        raise HandshakeError, "Invalid HTTP header" unless first_line
        request['method'] = first_line[1].strip
        request['path'] = first_line[2].strip

        unless request["method"] == "GET"
          raise HandshakeError, "Must be GET request"
        end

        # extract query string values
        request['query'] = Addressable::URI.parse(request['path']).query_values ||= {}
        # extract remaining headers
        lines.each do |line|
          h = HEADER.match(line)
          request[h[1].strip.downcase] = h[2].strip if h
        end

        build_with_request(connection, request, remains, secure, debug)
      end