Class: OverSIP::SIP::ClientTransaction
- Inherits:
-
Object
- Object
- OverSIP::SIP::ClientTransaction
- Includes:
- Logger
- Defined in:
- lib/oversip/sip/client_transaction.rb
Direct Known Subclasses
Ack2xxForwarder, InviteClientTransaction, NonInviteClientTransaction
Instance Attribute Summary collapse
-
#connection ⇒ Object
readonly
Returns the value of attribute connection.
-
#core ⇒ Object
readonly
Returns the value of attribute core.
-
#request ⇒ Object
readonly
Returns the value of attribute request.
-
#state ⇒ Object
readonly
Returns the value of attribute state.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(core, request, transaction_conf, transport, ip = nil, ip_type = nil, port = nil) ⇒ ClientTransaction
constructor
In case transport is a String, it’s an Outbound flow token.
Methods included from Logger
fg_system_msg2str, load_methods, #log_id
Constructor Details
#initialize(core, request, transaction_conf, transport, ip = nil, ip_type = nil, port = nil) ⇒ ClientTransaction
In case transport is a String, it’s an Outbound flow token.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/oversip/sip/client_transaction.rb', line 18 def initialize core, request, transaction_conf, transport, ip=nil, ip_type=nil, port=nil @core = core @request = request @transaction_conf = transaction_conf || {} @transaction_id = ::SecureRandom.hex(4) << @request.antiloop_id # A client transaction for using an existing Outbound connection. if transport.is_a? ::String @connection, @ip, @port = ::OverSIP::SIP::TransportManager.get_outbound_connection transport if @connection @server_klass = @connection.class @transport = @server_klass.transport end # A client transaction based on procedures of RFC 3263. The connection could exist (so reuse it) # or not (so try to create it). else @transport = transport @ip = ip @ip_type = ip_type @port = port @server_klass = case @transport when :udp case @ip_type when :ipv4 ; ::OverSIP::SIP::IPv4UdpServer when :ipv6 ; ::OverSIP::SIP::IPv6UdpServer end when :tcp case @ip_type when :ipv4 ; ::OverSIP::SIP::IPv4TcpServer when :ipv6 ; ::OverSIP::SIP::IPv6TcpServer end when :tls case @ip_type when :ipv4 ; ::OverSIP::SIP::IPv4TlsServer when :ipv6 ; ::OverSIP::SIP::IPv6TlsServer end end @connection = ::OverSIP::SIP::TransportManager.get_connection @server_klass, @ip, @port, self, transaction_conf[:callback_on_server_tls_handshake] end # Ensure the request has Content-Length. Add it otherwise. # NOTE: Don't do this for UAcRequest instances! if @request.is_a? ::OverSIP::SIP::Request if @request.body @request.headers["Content-Length"] = [ @request.body.bytesize.to_s ] else @request.headers["Content-Length"] = HDR_ARRAY_CONTENT_LENGTH_0 end end end |
Instance Attribute Details
#connection ⇒ Object (readonly)
Returns the value of attribute connection.
15 16 17 |
# File 'lib/oversip/sip/client_transaction.rb', line 15 def connection @connection end |
#core ⇒ Object (readonly)
Returns the value of attribute core.
15 16 17 |
# File 'lib/oversip/sip/client_transaction.rb', line 15 def core @core end |
#request ⇒ Object (readonly)
Returns the value of attribute request.
15 16 17 |
# File 'lib/oversip/sip/client_transaction.rb', line 15 def request @request end |
#state ⇒ Object (readonly)
Returns the value of attribute state.
15 16 17 |
# File 'lib/oversip/sip/client_transaction.rb', line 15 def state @state end |
Class Method Details
.get_class(request) ⇒ Object
7 8 9 10 11 12 13 |
# File 'lib/oversip/sip/client_transaction.rb', line 7 def self.get_class request case request.sip_method when :INVITE ; ::OverSIP::SIP::InviteClientTransaction when :ACK ; ::OverSIP::SIP::Ack2xxForwarder else ; ::OverSIP::SIP::NonInviteClientTransaction end end |