/// <summary>
/// Sends or resends the transaction request.
/// </summary>
/// <param name="transaction">The transaction to resend the request for.</param>
/// <returns>The result of the send attempt.</returns>
private Task <SocketError> SendTransactionRequest(SIPTransaction transaction)
{
Task <SocketError> result = null;
transaction.Retransmits = transaction.Retransmits + 1;
transaction.LastTransmit = DateTime.Now;
if (transaction.InitialTransmit == DateTime.MinValue)
{
transaction.InitialTransmit = transaction.LastTransmit;
}
// INVITE-UAC and no-INVITE transaction types, send request reliably.
if (transaction.Retransmits > 1)
{
SIPRequestRetransmitTraceEvent?.Invoke(transaction, transaction.TransactionRequest, transaction.Retransmits);
transaction.RequestRetransmit();
}
// If there is no tx request then it must be a PRack request we're being asked to send reliably.
SIPRequest req = transaction.TransactionRequest ?? transaction.PRackRequest;
if (transaction.OutboundProxy != null)
{
result = m_sipTransport.SendRequestAsync(transaction.OutboundProxy, req);
}
else
{
result = m_sipTransport.SendRequestAsync(req);
}
return(result);
}