diff --git a/src/sip/sip_utils.cpp b/src/sip/sip_utils.cpp index 5a80c6c385dc16c1ba67545e19156289e74fc89d..39a8e26b7c2580a0ed0da20baa25c3b3ebc7fd7c 100644 --- a/src/sip/sip_utils.cpp +++ b/src/sip/sip_utils.cpp @@ -174,12 +174,12 @@ getHostFromUri(std::string_view uri) } void -addContactHeader(const pj_str_t* contact_str, pjsip_tx_data* tdata) +addContactHeader(pj_str_t contact_str, pjsip_tx_data* tdata) { pjsip_contact_hdr* contact = pjsip_contact_hdr_create(tdata->pool); contact->uri = pjsip_parse_uri(tdata->pool, - contact_str->ptr, - contact_str->slen, + contact_str.ptr, + contact_str.slen, PJSIP_PARSE_URI_AS_NAMEADDR); // remove old contact header (if present) pjsip_msg_find_remove_hdr(tdata->msg, PJSIP_H_CONTACT, NULL); diff --git a/src/sip/sip_utils.h b/src/sip/sip_utils.h index 3741092b721c38574eab1cb4f9317fdb30605b29..0e8e59da30ee8b622b26c73feb04ae9e025047c3 100644 --- a/src/sip/sip_utils.h +++ b/src/sip/sip_utils.h @@ -96,7 +96,7 @@ std::string parseDisplayName(const pjsip_contact_hdr* header); std::string_view getHostFromUri(std::string_view sipUri); -void addContactHeader(const pj_str_t* contactStr, pjsip_tx_data* tdata); +void addContactHeader(pj_str_t contactStr, pjsip_tx_data* tdata); void addUserAgentHeader(const std::string& userAgent, pjsip_tx_data* tdata); std::string_view getPeerUserAgent(const pjsip_rx_data* rdata); void logMessageHeaders(const pjsip_hdr* hdr_list); diff --git a/src/sip/sipcall.cpp b/src/sip/sipcall.cpp index 90e3230c3506d926d9fdb1d679ee15cdcc1e585c..e60e216d061ec8eb8a701f601d2eef009005002d 100644 --- a/src/sip/sipcall.cpp +++ b/src/sip/sipcall.cpp @@ -1,4 +1,4 @@ -/* +/* * Copyright (C) 2004-2021 Savoir-faire Linux Inc. * * Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> @@ -188,7 +188,7 @@ SIPCall::findRtpStreamIndex(const std::string& label) const const auto iter = std::find_if(rtpStreams_.begin(), rtpStreams_.end(), [&label](const RtpStream& rtp) { - return (label.compare(rtp.mediaAttribute_->label_) == 0); + return label == rtp.mediaAttribute_->label_; }); // Return the index if there is a match. @@ -420,9 +420,9 @@ SIPCall::generateMediaPorts() } void -SIPCall::setContactHeader(pj_str_t* contact) +SIPCall::setContactHeader(pj_str_t contact) { - pj_strcpy(&contactHeader_, contact); + pj_strcpy(&contactHeader_, &contact); } void @@ -696,9 +696,8 @@ SIPCall::terminateSipSession(int status) if (tdata) { auto account = getSIPAccount(); if (account) { - auto contact = account->getContactHeader(transport_ ? transport_->get() - : nullptr); - sip_utils::addContactHeader(&contact, tdata); + sip_utils::addContactHeader(account->getContactHeader(transport_ ? transport_->get() + : nullptr), tdata); // Add user-agent header sip_utils::addUserAgentHeader(account->getUserAgentName(), tdata); } else { @@ -745,8 +744,7 @@ SIPCall::answer() Manager::instance().sipVoIPLink().createSDPOffer(inviteSession_.get()); } - pj_str_t contact(account->getContactHeader(transport_ ? transport_->get() : nullptr)); - setContactHeader(&contact); + setContactHeader(account->getContactHeader(transport_ ? transport_->get() : nullptr)); pjsip_tx_data* tdata; if (!inviteSession_->last_answer) @@ -767,7 +765,7 @@ SIPCall::answer() getCallId().c_str(), (int) contactHeader_.slen, contactHeader_.ptr); - sip_utils::addContactHeader(&contactHeader_, tdata); + sip_utils::addContactHeader(contactHeader_, tdata); } // Add user-agent header @@ -880,8 +878,7 @@ SIPCall::answer(const std::vector<DRing::MediaMap>& mediaList) } } - pj_str_t contact(account->getContactHeader(transport_ ? transport_->get() : nullptr)); - setContactHeader(&contact); + setContactHeader(account->getContactHeader(transport_ ? transport_->get() : nullptr)); if (!inviteSession_->last_answer) throw std::runtime_error("Should only be called for initial answer"); @@ -903,7 +900,7 @@ SIPCall::answer(const std::vector<DRing::MediaMap>& mediaList) getCallId().c_str(), (int) contactHeader_.slen, contactHeader_.ptr); - sip_utils::addContactHeader(&contactHeader_, tdata); + sip_utils::addContactHeader(contactHeader_, tdata); } // Add user-agent header @@ -993,7 +990,7 @@ SIPCall::answerMediaChangeRequest(const std::vector<DRing::MediaMap>& mediaList) } if (contactHeader_.slen) { - sip_utils::addContactHeader(&contactHeader_, tdata); + sip_utils::addContactHeader(contactHeader_, tdata); } // Add user-agent header @@ -2462,8 +2459,7 @@ SIPCall::onReceiveOffer(const pjmedia_sdp_session* offer, const pjsip_rx_data* r } // ContactStr must stay in scope as long as tdata - const pj_str_t contactStr(getSIPAccount()->getContactHeader(getTransport()->get())); - sip_utils::addContactHeader(&contactStr, tdata); + sip_utils::addContactHeader(getSIPAccount()->getContactHeader(getTransport()->get()), tdata); if (pjsip_inv_send_msg(inviteSession_.get(), tdata) != PJ_SUCCESS) { JAMI_ERR("Could not send msg OK"); @@ -2759,8 +2755,8 @@ SIPCall::monitor() const } JAMI_DBG("- Call %s with %s:", getCallId().c_str(), getPeerNumber().c_str()); JAMI_DBG("\t- Duration: %s", dht::print_duration(getCallDuration()).c_str()); - for (auto& mediaAttr : getMediaAttributeList()) - JAMI_DBG("\t- Media: %s", mediaAttr.toString(true).c_str()); + for (const auto& stream : rtpStreams_) + JAMI_DBG("\t- Media: %s", stream.mediaAttribute_->toString(true).c_str()); #ifdef ENABLE_VIDEO if (auto codec = getVideoCodec()) JAMI_DBG("\t- Video codec: %s", codec->systemCodecInfo.name.c_str()); diff --git a/src/sip/sipcall.h b/src/sip/sipcall.h index 3dc3952088ed4337a2660dd46da318bc67da1228..d2d13b996e17379c620c25b598b9343c3ed0d9d8 100644 --- a/src/sip/sipcall.h +++ b/src/sip/sipcall.h @@ -214,7 +214,7 @@ public: void onMediaNegotiationComplete(); // End fo SiPVoipLink events - void setContactHeader(pj_str_t* contact); + void setContactHeader(pj_str_t contact); void setTransport(const std::shared_ptr<SipTransport>& t); diff --git a/src/sip/sipvoiplink.cpp b/src/sip/sipvoiplink.cpp index 430fa465814e75e2452249f079dcde936f5a0de0..8e0b738320d2c30a2ed9ad31852678d1df173942 100644 --- a/src/sip/sipvoiplink.cpp +++ b/src/sip/sipvoiplink.cpp @@ -561,10 +561,7 @@ transaction_request_cb(pjsip_rx_data* rdata) return PJ_FALSE; } - // contactStr must stay in scope as long as tdata - const pj_str_t contactStr(account->getContactHeader(transport->get())); - sip_utils::addContactHeader(&contactStr, tdata); - + sip_utils::addContactHeader(account->getContactHeader(transport->get()), tdata); if (pjsip_inv_send_msg(call->inviteSession_.get(), tdata) != PJ_SUCCESS) { JAMI_ERR("Could not send msg RINGING"); return PJ_FALSE;