class Faye::Transport::Http

Public Class Methods

usable?(dispatcher, endpoint, &callback) click to toggle source
# File lib/faye/transport/http.rb, line 4
def self.usable?(dispatcher, endpoint, &callback)
  callback.call(URI === endpoint)
end

Public Instance Methods

encode(messages) click to toggle source
# File lib/faye/transport/http.rb, line 8
def encode(messages)
  Faye.to_json(messages)
end
request(messages) click to toggle source
# File lib/faye/transport/http.rb, line 12
def request(messages)
  content = encode(messages)
  params  = build_params(content)
  request = create_request(params)

  request.callback do
    handle_response(messages, request.response)
    store_cookies(request.response_header['SET_COOKIE'])
  end

  request.errback do
    handle_error(messages)
  end

  request
end

Private Instance Methods

build_params(content) click to toggle source
# File lib/faye/transport/http.rb, line 31
def build_params(content)
  params = {
    :head => {
      'Content-Length' => content.bytesize,
      'Content-Type'   => 'application/json',
      'Host'           => @endpoint.host + (@endpoint.port ? ":#{@endpoint.port}" : '')
    }.merge(@dispatcher.headers),

    :body    => content,
    :timeout => -1  # for em-http-request < 1.0
  }

  cookie = get_cookies
  params[:head]['Cookie'] = cookie unless cookie == ''

  params
end
create_request(params) click to toggle source
# File lib/faye/transport/http.rb, line 49
def create_request(params)
  version = EventMachine::HttpRequest::VERSION.split('.')[0].to_i
  options = {
    :inactivity_timeout => 0,
    :tls => {:sni_hostname => @endpoint.hostname}
  }

  if @proxy[:origin]
    uri = URI(@proxy[:origin])
    options[:proxy] = {:host => uri.host, :port => uri.port}
    if uri.user
      options[:proxy][:authorization] = [uri.user, uri.password]
    end
  end

  if version >= 1
    client = EventMachine::HttpRequest.new(@endpoint.to_s, options)
  else
    client = EventMachine::HttpRequest.new(@endpoint.to_s)
  end

  client.post(params)
end
handle_response(messages, response) click to toggle source
# File lib/faye/transport/http.rb, line 73
def handle_response(messages, response)
  replies = MultiJson.load(response) rescue nil
  if replies
    receive(replies)
  else
    handle_error(messages)
  end
end