diff --git a/src/sip/sdp.cpp b/src/sip/sdp.cpp index 21d14b85d49dbcf8f5aedbbac79a5ea498ad54c2..0674634d11c910066bac3dcd907a9741715266ac 100644 --- a/src/sip/sdp.cpp +++ b/src/sip/sdp.cpp @@ -582,7 +582,9 @@ Sdp::processIncomingOffer(const std::vector<MediaAttribute>& mediaList) { assert(remoteSession_); - JAMI_DBG("Processing received offer for [%s] with %lu", sessionName_.c_str(), mediaList.size()); + JAMI_DBG("Processing received offer for [%s] with %lu media", + sessionName_.c_str(), + mediaList.size()); printSession(remoteSession_, "Remote session:", SdpDirection::REMOTE_OFFER); diff --git a/src/sip/sipcall.cpp b/src/sip/sipcall.cpp index 70e904a8a1c7992571cc9bb0af09cae1ddec862d..21b7360b787162793ec593146e4b1f22cd3a7b13 100644 --- a/src/sip/sipcall.cpp +++ b/src/sip/sipcall.cpp @@ -103,6 +103,13 @@ SIPCall::SIPCall(const std::shared_ptr<SIPAccountBase>& account, auto mediaAttrList = getSIPAccount()->createDefaultMediaList(getSIPAccount()->isVideoEnabled() and not isAudioOnly(), getState() == CallState::HOLD); + JAMI_DBG("[call:%s] Create a new [%s] SIP call with %lu media", + getCallId().c_str(), + type == Call::CallType::INCOMING + ? "INCOMING" + : (type == Call::CallType::OUTGOING ? "OUTGOING" : "MISSED"), + mediaAttrList.size()); + initMediaStreams(mediaAttrList); } @@ -131,7 +138,8 @@ SIPCall::SIPCall(const std::shared_ptr<SIPAccountBase>& account, mediaList = mediaAttrList; } else if (type_ == Call::CallType::INCOMING) { // Handle incoming call without media offer. - JAMI_WARN("[call:%s] No media offered in the incoming invite. Will answer with audio-only", + JAMI_WARN("[call:%s] No media offered in the incoming invite. Will provide an offer in the " + "answer", getCallId().c_str()); mediaList = getSIPAccount()->createDefaultMediaList(getSIPAccount()->isVideoEnabled(), getState() == CallState::HOLD); @@ -140,8 +148,11 @@ SIPCall::SIPCall(const std::shared_ptr<SIPAccountBase>& account, return; } - JAMI_DBG("[call:%s] Create a new SIP call with %lu medias", + JAMI_DBG("[call:%s] Create a new [%s] SIP call with %lu media", getCallId().c_str(), + type == Call::CallType::INCOMING + ? "INCOMING" + : (type == Call::CallType::OUTGOING ? "OUTGOING" : "MISSED"), mediaList.size()); initMediaStreams(mediaList); @@ -2008,8 +2019,10 @@ SIPCall::onMediaNegotiationComplete() // to a negotiated transport. runOnMainThread([w = weak()] { if (auto this_ = w.lock()) { + // Notify using the parent Id if it's a subcall. + auto callId = this_->isSubcall() ? this_->parent_->getCallId() : this_->getCallId(); emitSignal<DRing::CallSignal::MediaNegotiationStatus>( - this_->getCallId(), MediaNegotiationStatusEvents::NEGOTIATION_SUCCESS); + callId, MediaNegotiationStatusEvents::NEGOTIATION_SUCCESS); std::lock_guard<std::recursive_mutex> lk {this_->callMutex_}; JAMI_WARN("[call:%s] media changed", this_->getCallId().c_str()); @@ -2162,16 +2175,10 @@ SIPCall::onReceiveOffer(const pjmedia_sdp_session* offer, const pjsip_rx_data* r JAMI_DBG("[call:%s] Received a new offer (re-invite)", getCallId().c_str()); - // This list should be provided by the client. Kept for backward compatibility. - auto mediaList = acc->createDefaultMediaList(acc->isVideoEnabled(), - getState() == CallState::HOLD); - - if (upnp_) { - openPortsUPnP(); - } - sdp_->setReceivedOffer(offer); - sdp_->processIncomingOffer(mediaList); + + // Use current media list. + sdp_->processIncomingOffer(getMediaAttributeList()); if (offer) setupLocalIce();