Skip to content
Snippets Groups Projects
Commit bc04bcd6 authored by Adrien Béraud's avatar Adrien Béraud
Browse files

sip utils: add as_view

Change-Id: I6b19b1897b5e69909ce8a5efd41d0b182ab84aa2
parent d82fd211
Branches
No related tags found
No related merge requests found
......@@ -131,6 +131,12 @@ CONST_PJ_STR(const std::string_view& str) noexcept
return {const_cast<char*>(str.data()), (pj_ssize_t) str.size()};
}
inline constexpr std::string_view
as_view(const pj_str_t& str) noexcept
{
return {str.ptr, (size_t) str.slen};
}
// PJSIP dialog locking in RAII way
// Usage: declare local variable like this: sip_utils::PJDialogLock lock {dialog};
// The lock is kept until the local variable is deleted
......
......@@ -1434,7 +1434,9 @@ SIPAccount::getFromUri() const
{
std::string scheme;
std::string transport;
std::string username(username_);
// Get login name if username is not specified
std::string username(username_.empty() ? getLoginName() : username_);
std::string hostname(hostname_);
// UDP does not require the transport specification
......@@ -1444,18 +1446,15 @@ SIPAccount::getFromUri() const
} else
scheme = "sip:";
// Get login name if username is not specified
if (username_.empty())
username = getLoginName();
// Get machine hostname if not provided
if (hostname_.empty())
hostname = std::string(pj_gethostname()->ptr, pj_gethostname()->slen);
if (hostname_.empty()) {
hostname = sip_utils::as_view(*pj_gethostname());
}
if (IpAddr::isIpv6(hostname))
hostname = IpAddr(hostname).toString(false, true);
const std::string uri = "<" + scheme + username + "@" + hostname + transport + ">";
std::string uri = "<" + scheme + username + "@" + hostname + transport + ">";
if (not displayName_.empty())
return "\"" + displayName_ + "\" " + uri;
return uri;
......
......@@ -1412,8 +1412,7 @@ SIPVoIPLink::findLocalAddressFromTransport(pjsip_transport* transport,
port = pjsip_transport_get_default_port_for_type(transportType);
// Initialize the sip address with the hostname
const auto pjMachineName = pj_gethostname();
addr = std::string(pjMachineName->ptr, pjMachineName->slen);
addr = sip_utils::as_view(*pj_gethostname());
// Update address and port with active transport
RETURN_IF_NULL(transport,
......@@ -1441,7 +1440,7 @@ SIPVoIPLink::findLocalAddressFromTransport(pjsip_transport* transport,
}
// Update local address based on the transport type
addr = std::string(param.ret_addr.ptr, param.ret_addr.slen);
addr = sip_utils::as_view(param.ret_addr);
// Determine the local port based on transport information
port = param.ret_port;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment