RequestRetransmit() public method

public RequestRetransmit ( ) : void
return void
        /// <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);
        }
Example #2
0
        /// <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 && !DisableRetransmitSending)
            {
                SIPRequestRetransmitTraceEvent?.Invoke(transaction, transaction.TransactionRequest, transaction.Retransmits);
                transaction.RequestRetransmit();
            }

            if (transaction.Retransmits > 1 && DisableRetransmitSending)
            {
                return(Task.FromResult(SocketError.Success));
            }
            else
            {
                // If there is no transaction 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
                {
                    // If retransmits are disabled we must wait for DNS when sending. By default the DNS lookup mechanism
                    // will silently do nothing if the lookup result is not in the cache and relies on the result
                    // being ready for a subsequent SIP retransmit. This mechanism won't work if SIP retransmits are disabled.
                    bool waitForDns = DisableRetransmitSending;

                    result = m_sipTransport.SendRequestAsync(req, waitForDns);
                }

                return(result);
            }
        }