internal UASInviteTransaction(
SIPTransport sipTransport,
SIPRequest sipRequest,
SIPEndPoint dstEndPoint,
SIPEndPoint localSIPEndPoint,
SIPEndPoint outboundProxy,
IPAddress contactIPAddress,
bool noCDR = false)
: base(sipTransport, sipRequest, dstEndPoint, localSIPEndPoint, outboundProxy)
{
TransactionType = SIPTransactionTypesEnum.Invite;
m_remoteTag = sipRequest.Header.From.FromTag;
m_contactIPAddress = contactIPAddress;
if (sipRequest.Header.To.ToTag == null)
{
// This UAS needs to set the To Tag.
m_localTag = CallProperties.CreateNewTag();
}
else
{
// This is a re-INVITE.
m_localTag = sipRequest.Header.To.ToTag;
}
//logger.Debug("New UASTransaction (" + TransactionId + ") for " + TransactionRequest.URI.ToString() + " to " + RemoteEndPoint + ".");
SIPEndPoint localEP = SIPEndPoint.TryParse(sipRequest.Header.ProxyReceivedOn) ?? localSIPEndPoint;
SIPEndPoint remoteEP = SIPEndPoint.TryParse(sipRequest.Header.ProxyReceivedFrom) ?? dstEndPoint;
if (!noCDR)
{
CDR = new SIPCDR(SIPCallDirection.In, sipRequest.URI, sipRequest.Header.From, sipRequest.Header.CallId, localEP, remoteEP);
}
//UpdateTransactionState(SIPTransactionStatesEnum.Proceeding);
TransactionRequestReceived += UASInviteTransaction_TransactionRequestReceived;
TransactionInformationResponseReceived += UASInviteTransaction_TransactionResponseReceived;
TransactionFinalResponseReceived += UASInviteTransaction_TransactionResponseReceived;
TransactionTimedOut += UASInviteTransaction_TransactionTimedOut;
TransactionRemoved += UASInviteTransaction_TransactionRemoved;
}