/// <summary> /// Handles responses to our re-INVITE requests. /// </summary> /// <param name="localSIPEndPoint">The local end point the response was received on.</param> /// <param name="remoteEndPoint">The remote end point the response came from.</param> /// <param name="sipTransaction">The UAS transaction the response is part of.</param> /// <param name="sipResponse">The SIP response.</param> private Task <SocketError> ReinviteRequestFinalResponseReceived(SIPEndPoint localSIPEndPoint, SIPEndPoint remoteEndPoint, SIPTransaction sipTransaction, SIPResponse sipResponse) { if (sipResponse.Status == SIPResponseStatusCodesEnum.Ok) { // Update the remote party's SDP. Dialogue.RemoteSDP = sipResponse.Body; _ = MediaSession.OfferAnswered(sipResponse.Body); } else { logger.LogWarning($"Re-INVITE request failed with response {sipResponse.ShortDescription}."); } return(Task.FromResult(SocketError.Success)); }
/// <summary> /// Event handler for a client call (one initiated by us) being answered. /// </summary> /// <param name="uac">The client user agent used to initiate the call.</param> /// <param name="sipResponse">The INVITE success response.</param> private async Task ClientCallAnsweredHandlerAsync(ISIPClientUserAgent uac, SIPResponse sipResponse) { if (sipResponse.StatusCode >= 200 && sipResponse.StatusCode <= 299) { // Only set the remote RTP end point if there hasn't already been a packet received on it. await MediaSession.OfferAnswered(sipResponse.Body).ConfigureAwait(false); Dialogue.DialogueState = SIPDialogueStateEnum.Confirmed; logger.LogInformation($"Call attempt to {m_uac.CallDescriptor.Uri} was answered."); ClientCallAnswered?.Invoke(uac, sipResponse); } else { logger.LogDebug($"Call attempt was answered with failure response {sipResponse.ShortDescription}."); ClientCallFailed?.Invoke(uac, sipResponse.ReasonPhrase); CallEnded(); } }