Sha256: e6bcbcdec1ad124c4963c267eb40ff57a6a8e74c81acf9e4aca6a087cb034604

Contents?: true

Size: 1.85 KB

Versions: 2

Compression:

Stored size: 1.85 KB

Contents

module OverSIP::SIP

  class TlsTunnelServer < TlsTunnelReactor

    attr_reader :outbound_flow_token

    def post_connection
      begin
        # Temporal @remote_ip and @remote_port until the HAProxy protocol line is parsed.
        @remote_port, @remote_ip = ::Socket.unpack_sockaddr_in(get_peername)
      rescue => e
        log_system_error "error obtaining remote IP/port (#{e.class}: #{e.message}), closing connection"
        close_connection
        @state = :ignore
        return
      end

      log_system_debug ("connection from the TLS tunnel " << remote_desc)  if $oversip_debug

      # Create an Outbound (RFC 5626) flow token for this connection.
      @outbound_flow_token = ::OverSIP::SIP::TransportManager.add_outbound_connection self

      # Initialize @cvars.
      @cvars = {}
    end

    def remote_desc force=nil
      if force
        @remote_desc = case @remote_ip_type
          when :ipv4  ; "#{@remote_ip}:#{@remote_port.to_s}"
          when :ipv6  ; "[#{@remote_ip}]:#{@remote_port.to_s}"
          end
      else
        @remote_desc ||= case self.class.ip_type
          when :ipv4  ; "#{@remote_ip}:#{@remote_port.to_s}"
          when :ipv6  ; "[#{@remote_ip}]:#{@remote_port.to_s}"
          end
      end
    end


    def unbind cause=nil
      @state = :ignore

      # Remove the connection.
      self.class.connections.delete @connection_id  if @connection_id

      # Remove the Outbound token flow.
      ::OverSIP::SIP::TransportManager.delete_outbound_connection @outbound_flow_token

      @local_closed = true  if cause == ::Errno::ETIMEDOUT

      if $oversip_debug
        log_msg = "connection from the TLS tunnel #{remote_desc} "
        log_msg << ( @local_closed ? "locally closed" : "remotely closed" )
        log_msg << " (cause: #{cause.inspect})"  if cause
        log_system_debug log_msg
      end unless $!
    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
oversip-1.1.0.beta5 lib/oversip/sip/listeners/tls_tunnel_server.rb
oversip-1.1.0.beta4 lib/oversip/sip/listeners/tls_tunnel_server.rb