/// <summary> /// Default constructor. /// </summary> /// <param name="owner">Owner proxy context.</param> /// <param name="flow">Data flow to use for sending. Value null means system will choose it.</param> /// <param name="targetUri">Target URI where to send request.</param> /// <param name="addRecordRoute">If true, handler will add Record-Route header to forwarded message.</param> /// <param name="isRecursed">If true then this target is redirected by proxy context.</param> /// <exception cref="ArgumentNullException">Is raised when <b>owner</b> or <b>targetURI</b> is null reference.</exception> public TargetHandler(SIP_ProxyContext owner,SIP_Flow flow,SIP_Uri targetUri,bool addRecordRoute,bool isRecursed) { if(owner == null){ throw new ArgumentNullException("owner"); } if(targetUri == null){ throw new ArgumentNullException("targetUri"); } m_pOwner = owner; m_pFlow = flow; m_pTargetUri = targetUri; m_AddRecordRoute = addRecordRoute; m_IsRecursed = isRecursed; m_pHops = new Queue<SIP_Hop>(); }
/// <summary> /// Cleans up any resources being used. /// </summary> public void Dispose() { lock(m_pLock){ if(m_IsDisposed){ return; } m_IsDisposed = true; m_pOwner.TargetHandler_Disposed(this); m_pOwner = null; m_pRequest = null; m_pTargetUri = null; m_pHops = null; if(m_pTransaction != null){ m_pTransaction.Dispose(); m_pTransaction = null; } if(m_pTimerC != null){ m_pTimerC.Dispose(); m_pTimerC = null; } } }
internal SIP_ProxyContext CreateProxyContext(SIP_RequestContext requestContext,SIP_ServerTransaction transaction,SIP_Request request,bool addRecordRoute) { // Create proxy context that will be responsible for forwarding request. SIP_ProxyContext proxyContext = new SIP_ProxyContext( this, transaction, request, addRecordRoute, m_ForkingMode, (this.ProxyMode & SIP_ProxyMode.B2BUA) != 0, false, false, requestContext.Targets.ToArray() ); m_pProxyContexts.Add(proxyContext); return proxyContext; }