lib/oversip/sip/proxy.rb in oversip-1.1.0.beta2 vs lib/oversip/sip/proxy.rb in oversip-1.1.0.beta3

- old
+ new

@@ -2,31 +2,17 @@ class Proxy include ::OverSIP::Logger - def initialize request, proxy_conf - @request = request - @proxy_conf = proxy_conf - @log_id = "Proxy #{proxy_conf[:name]} #{request.via_branch_id}" + def initialize proxy_name=:default_proxy + unless (@proxy_conf = ::OverSIP.proxies[proxy_name.to_sym]) + raise ::OverSIP::RuntimeError, "proxy '#{proxy_name}' is not defined in Proxies Configuration file" + end + end - # Create the server transaction if it doesn't exist yet. - @server_transaction = @request.server_transaction or case @request.sip_method - # Here it can arrive an INVITE, ACK-for-2XX and any method but CANCEL. - when :INVITE - InviteServerTransaction.new @request - when :ACK - else - NonInviteServerTransaction.new @request - end - @request.server_transaction ||= @server_transaction - # Set this core layer to the server transaction. - @request.server_transaction.core = self if @request.server_transaction - end # initialize - - def on_provisional_response &block @on_provisional_response_block = block end def on_success_response &block @@ -53,11 +39,31 @@ def drop_response @drop_response = true end - def route dst_host=nil, dst_port=nil, dst_transport=nil + def route request, dst_host=nil, dst_port=nil, dst_transport=nil + unless (@request = request).is_a? ::OverSIP::SIP::Request + raise ::OverSIP::RuntimeError, "request must be a OverSIP::SIP::Request instance" + end + + @log_id = "Proxy #{@proxy_conf[:name]} #{@request.via_branch_id}" + + # Create the server transaction if it doesn't exist yet. + @server_transaction = @request.server_transaction or case @request.sip_method + # Here it can arrive an INVITE, ACK-for-2XX and any method but CANCEL. + when :INVITE + InviteServerTransaction.new @request + when :ACK + else + NonInviteServerTransaction.new @request + end + @request.server_transaction ||= @server_transaction + + # Set this core layer to the server transaction. + @request.server_transaction.core = self if @request.server_transaction + # NOTE: Routing can be based on incoming request for an Outbound (RFC 5626) connection # or based on normal RFC 3263 procedures. # If it's an incoming Outbound connection get the associated connection (but if dst_host is # set then don't honor the Outbound connection). @@ -177,10 +183,10 @@ end # def route def receive_response response - log_system_debug "received response #{response.status_code}" + log_system_debug "received response #{response.status_code}" if $oversip_debug response.delete_header_top "Via" if @request.server_transaction.valid_response? response.status_code if response.status_code < 200 && ! @canceled \ No newline at end of file