/// <summary> /// Default incoming call constructor. /// </summary> /// <param name="ua">Owner UA.</param> /// <param name="invite">INVITE server transaction.</param> /// <exception cref="ArgumentNullException">Is riased when <b>ua</b> or <b>invite</b> is null reference.</exception> internal SIP_UA_Call(SIP_UA ua, SIP_ServerTransaction invite) { if (ua == null) { throw new ArgumentNullException("ua"); } if (invite == null) { throw new ArgumentNullException("invite"); } m_pUA = ua; m_pInitialInviteTransaction = invite; m_pLocalUri = invite.Request.To.Address.Uri; m_pRemoteUri = invite.Request.From.Address.Uri; m_pInitialInviteTransaction.Canceled += new EventHandler(delegate(object sender, EventArgs e){ // If transaction canceled, terminate call. SetState(SIP_UA_CallState.Terminated); }); // Parse SDP if INVITE contains SDP. // RFC 3261 13.2.1. INVITE may be offerless, we must thne send offer and remote party sends sdp in ACK. if (invite.Request.ContentType != null && invite.Request.ContentType.ToLower().IndexOf("application/sdp") > -1) { m_pRemoteSDP = SDP_Message.Parse(Encoding.UTF8.GetString(invite.Request.Data)); } m_pTags = new Dictionary <string, object>(); m_State = SIP_UA_CallState.WaitingToAccept; }
/// <summary> /// Default outgoing call constructor. /// </summary> /// <param name="ua">Owner UA.</param> /// <param name="invite">INVITE request.</param> /// <exception cref="ArgumentNullException">Is riased when <b>ua</b> or <b>invite</b> is null reference.</exception> /// <exception cref="ArgumentException">Is raised when any of the argumnets has invalid value.</exception> internal SIP_UA_Call(SIP_UA ua, SIP_Request invite) { if (ua == null) { throw new ArgumentNullException("ua"); } if (invite == null) { throw new ArgumentNullException("invite"); } if (invite.RequestLine.Method != SIP_Methods.INVITE) { throw new ArgumentException("Argument 'invite' is not INVITE request."); } m_pUA = ua; m_pInvite = invite; m_pLocalUri = invite.From.Address.Uri; m_pRemoteUri = invite.To.Address.Uri; m_State = SIP_UA_CallState.WaitingForStart; m_pEarlyDialogs = new List <SIP_Dialog_Invite>(); m_pTags = new Dictionary <string, object>(); }