lib/websocket/handshake/base.rb in websocket-1.0.7 vs lib/websocket/handshake/base.rb in websocket-1.1.0
- old
+ new
@@ -1,16 +1,18 @@
module WebSocket
module Handshake
# @abstract Subclass and override to implement custom handshakes
class Base
+ include ExceptionHandler
attr_reader :host, :port, :path, :query,
- :error, :state, :version, :secure
+ :state, :version, :secure, :headers
# Initialize new WebSocket Handshake and set it's state to :new
def initialize(args = {})
@state = :new
+ @handler = nil
@data = ""
@headers = {}
end
@@ -20,12 +22,13 @@
end
# Return textual representation of handshake request or response
# @return [String] text of response
def to_s
- ""
+ @handler ? @handler.to_s : ""
end
+ rescue_method :to_s, :return => ""
# Recreate inspect as #to_s was overwritten
def inspect
vars = self.instance_variables.map{|v| "#{v}=#{instance_variable_get(v).inspect}"}.join(", ")
insp = "#{self.class}:0x%08x" % (self.__id__ * 2)
@@ -39,12 +42,13 @@
end
# Is parsed data valid?
# @return [Boolean] False if some errors occured. Reason for error could be found in error method
def valid?
- finished? && @error == nil
+ finished? && @error == nil && @handler && @handler.valid?
end
+ rescue_method :valid?, :return => false
# @abstract Should send data after parsing is finished?
def should_respond?
raise NotImplementedError
end
@@ -78,11 +82,11 @@
# Changes state to error and sets error message
# @param [String] message Error message to set
def set_error(message)
@state = :error
- @error = message
+ super
end
HEADER = /^([^:]+):\s*(.+)$/
# Parse data imported to handshake and sets state to finished if necessary.
@@ -92,10 +96,10 @@
return false unless @leftovers # The whole header has not been received yet.
lines = header.split("\r\n")
first_line = lines.shift
- return false unless parse_first_line(first_line)
+ parse_first_line(first_line)
lines.each do |line|
h = HEADER.match(line)
@headers[h[1].strip.downcase] = h[2].strip if h
end