/// <summary> /// Default constructor. /// </summary> /// <param name="proxy">Owner proxy.</param> internal SIP_Registrar(SIP_ProxyCore proxy) { m_pProxy = proxy; m_pSipStack = m_pProxy.Stack; m_pRegistrations = new SIP_RegistrationCollection(); m_pTimer = new Timer(15000); m_pTimer.Elapsed += new ElapsedEventHandler(m_pTimer_Elapsed); m_pTimer.Enabled = true; }
/// <summary> /// Default constructor. /// </summary> /// <param name="proxy">Owner proxy.</param> /// <exception cref="ArgumentNullException">Is raised when <b>proxy</b> is null reference.</exception> internal SIP_Registrar(SIP_ProxyCore proxy) { if(proxy == null){ throw new ArgumentNullException("proxy"); } m_pProxy = proxy; m_pStack = m_pProxy.Stack; m_pRegistrations = new SIP_RegistrationCollection(); m_pTimer = new Timer(15000); m_pTimer.Elapsed += new ElapsedEventHandler(m_pTimer_Elapsed); m_pTimer.Enabled = true; }
/// <summary> /// Default constructor. /// </summary> /// <param name="proxy">Owner proxy.</param> /// <exception cref="ArgumentNullException">Is raised when <b>proxy</b> is null reference.</exception> internal SIP_Registrar(SIP_ProxyCore proxy) { if (proxy == null) { throw new ArgumentNullException("proxy"); } m_pProxy = proxy; m_pStack = m_pProxy.Stack; m_pRegistrations = new SIP_RegistrationCollection(); m_pTimer = new Timer(15000); m_pTimer.Elapsed += new ElapsedEventHandler(m_pTimer_Elapsed); m_pTimer.Enabled = true; }
/// <summary> /// Cleans up any resources being used. /// </summary> internal void Dispose() { if (m_IsDisposed) { return; } m_IsDisposed = true; this.CanRegister = null; this.AorRegistered = null; this.AorUnregistered = null; this.AorUpdated = null; m_pProxy = null; m_pStack = null; m_pRegistrations = null; if (m_pTimer != null) { m_pTimer.Dispose(); m_pTimer = null; } }
/// <summary> /// Default constructor. /// </summary> /// <param name="owner">Onwer SIP proxy.</param> internal SIP_B2BUA(SIP_ProxyCore owner) { m_pProxy = owner; m_pCalls = new List <SIP_B2BUA_Call>(); }
/// <summary> /// Default constructor. /// </summary> /// <param name="proxy">Owner proxy.</param> /// <param name="transaction">Server transaction what is used to send SIP responses back to caller.</param> /// <param name="request">Request to forward.</param> /// <param name="addRecordRoute">If true, Record-Route header field will be added.</param> /// <param name="forkingMode">Specifies how proxy context must handle forking.</param> /// <param name="isB2BUA">Specifies if proxy context is in B2BUA or just transaction satefull mode.</param> /// <param name="noCancel">Specifies if proxy should not send Cancel to forked requests.</param> /// <param name="noRecurse">Specifies what proxy server does when it gets 3xx response. If true proxy will forward /// request to new specified address if false, proxy will return 3xx response to caller.</param> /// <param name="targets">Possible remote targets. NOTE: These values must be in priority order !</param> /// <param name="credentials">Target set credentials.</param> /// <exception cref="ArgumentNullException">Is raised when any of the reference type prameters is null.</exception> /// <exception cref="ArgumentException">Is raised when any of the arguments has invalid value.</exception> internal SIP_ProxyContext(SIP_ProxyCore proxy,SIP_ServerTransaction transaction,SIP_Request request,bool addRecordRoute,SIP_ForkingMode forkingMode,bool isB2BUA,bool noCancel,bool noRecurse,SIP_ProxyTarget[] targets,NetworkCredential[] credentials) { if(proxy == null){ throw new ArgumentNullException("proxy"); } if(transaction == null){ throw new ArgumentNullException("transaction"); } if(request == null){ throw new ArgumentNullException("request"); } if(targets == null){ throw new ArgumentNullException("targets"); } if(targets.Length == 0){ throw new ArgumentException("Argumnet 'targets' must contain at least 1 value."); } m_pProxy = proxy; m_pServerTransaction = transaction; m_pServerTransaction.Canceled += new EventHandler(m_pServerTransaction_Canceled); m_pServerTransaction.Disposed += new EventHandler(m_pServerTransaction_Disposed); m_pRequest = request; m_AddRecordRoute = addRecordRoute; m_ForkingMode = forkingMode; m_IsB2BUA = isB2BUA; m_NoCancel = noCancel; m_NoRecurse = noRecurse; m_pTargetsHandlers = new List<TargetHandler>(); m_pResponses = new List<SIP_Response>(); m_ID = Guid.NewGuid().ToString(); m_CreateTime = DateTime.Now; // Queue targets up, higest to lowest. m_pTargets = new Queue<TargetHandler>(); foreach(SIP_ProxyTarget target in targets){ m_pTargets.Enqueue(new TargetHandler(this,target.Flow,target.TargetUri,m_AddRecordRoute,false)); } m_pCredentials = new List<NetworkCredential>(); m_pCredentials.AddRange(credentials); /* RFC 3841 9.1. The Request-Disposition header field specifies caller preferences for how a server should process a request. Override SIP proxy default value. */ foreach(SIP_t_Directive directive in request.RequestDisposition.GetAllValues()){ if(directive.Directive == SIP_t_Directive.DirectiveType.NoFork){ m_ForkingMode = SIP_ForkingMode.None; } else if(directive.Directive == SIP_t_Directive.DirectiveType.Parallel){ m_ForkingMode = SIP_ForkingMode.Parallel; } else if(directive.Directive == SIP_t_Directive.DirectiveType.Sequential){ m_ForkingMode = SIP_ForkingMode.Sequential; } else if(directive.Directive == SIP_t_Directive.DirectiveType.NoCancel){ m_NoCancel = true; } else if(directive.Directive == SIP_t_Directive.DirectiveType.NoRecurse){ m_NoRecurse = true; } } m_pProxy.Stack.Logger.AddText("ProxyContext(id='" + m_ID + "') created."); }
/// <summary> /// Cleans up any resources being used. /// </summary> public void Dispose() { lock(m_pLock){ if(m_IsDisposed){ return; } m_IsDisposed = true; m_pProxy.Stack.Logger.AddText("ProxyContext(id='" + m_ID + "') disposed."); m_pProxy.m_pProxyContexts.Remove(this); m_pProxy = null; m_pServerTransaction = null; m_pTargetsHandlers = null; m_pResponses = null; m_pTargets = null; } }
/// <summary> /// Default constructor. /// </summary> /// <param name="owner">Onwer SIP proxy.</param> internal SIP_B2BUA(SIP_ProxyCore owner) { m_pProxy = owner; m_pCalls = new List<SIP_B2BUA_Call>(); }