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