public void AckRecognitionUnitTest()
{
SIPTransport clientTransport = null;
SIPTransport serverTransport = null;
try
{
SIPTransactionEngine clientEngine = new SIPTransactionEngine(); // Client side of the INVITE.
SIPEndPoint clientEndPoint = new SIPEndPoint(SIPProtocolsEnum.udp, new IPEndPoint(IPAddress.Loopback, 12013));
clientTransport = new SIPTransport(MockSIPDNSManager.Resolve, clientEngine, new SIPUDPChannel(clientEndPoint.GetIPEndPoint()), false);
SetTransportTraceEvents(clientTransport);
SIPTransactionEngine serverEngine = new SIPTransactionEngine(); // Server side of the INVITE.
UASInviteTransaction serverTransaction = null;
SIPEndPoint serverEndPoint = new SIPEndPoint(new IPEndPoint(IPAddress.Loopback, 12014));
serverTransport = new SIPTransport(MockSIPDNSManager.Resolve, serverEngine, new SIPUDPChannel(serverEndPoint.GetIPEndPoint()), false);
SetTransportTraceEvents(serverTransport);
serverTransport.SIPTransportRequestReceived += (localEndPoint, remoteEndPoint, sipRequest) =>
{
Console.WriteLine("Server Transport Request In: " + sipRequest.Method + ".");
serverTransaction = serverTransport.CreateUASTransaction(sipRequest, remoteEndPoint, localEndPoint, null);
SetTransactionTraceEvents(serverTransaction);
serverTransaction.GotRequest(localEndPoint, remoteEndPoint, sipRequest);
};
SIPURI dummyURI = SIPURI.ParseSIPURI("sip:dummy@" + serverEndPoint);
SIPRequest inviteRequest = GetDummyINVITERequest(dummyURI);
inviteRequest.LocalSIPEndPoint = clientTransport.GetDefaultTransportContact(SIPProtocolsEnum.udp);
// Send the invite to the server side.
UACInviteTransaction clientTransaction = new UACInviteTransaction(clientTransport, inviteRequest, serverEndPoint, clientEndPoint, null);
SetTransactionTraceEvents(clientTransaction);
clientEngine.AddTransaction(clientTransaction);
clientTransaction.SendInviteRequest(serverEndPoint, inviteRequest);
Thread.Sleep(500);
Assert.IsTrue(clientTransaction.TransactionState == SIPTransactionStatesEnum.Completed, "Client transaction in incorrect state.");
Assert.IsTrue(serverTransaction.TransactionState == SIPTransactionStatesEnum.Confirmed, "Server transaction in incorrect state.");
}
finally
{
if (clientTransport != null)
{
clientTransport.Shutdown();
}
if (serverTransport != null)
{
serverTransport.Shutdown();
}
}
}