diff --git a/src/sip/sipaccount.cpp b/src/sip/sipaccount.cpp index a052d02f74f9867a3b4003a767995446fa5b0833..7bcfb18e740b21742415392e7ea11dc56e30ca2d 100644 --- a/src/sip/sipaccount.cpp +++ b/src/sip/sipaccount.cpp @@ -348,9 +348,8 @@ SIPAccount::SIPStartCall(std::shared_ptr<SIPCall>& call) } pj_str_t pjContact = getContactHeader(transport->get()); - const std::string debugContactHeader(pj_strbuf(&pjContact), pj_strlen(&pjContact)); - RING_DBG("contact header: %s / %s -> %s", - debugContactHeader.c_str(), from.c_str(), toUri.c_str()); + RING_DBG("contact header: %.*s / %s -> %s", + pjContact.slen, pjContact.ptr, from.c_str(), toUri.c_str()); pjsip_dialog *dialog = NULL; @@ -1479,10 +1478,6 @@ SIPAccount::getContactHeader(pjsip_transport* t) } } - // UDP does not require the transport specification - std::string scheme; - std::string transport; - #if HAVE_IPV6 /* Enclose IPv6 address in square brackets */ if (IpAddr::isIpv6(address)) { @@ -1490,22 +1485,23 @@ SIPAccount::getContactHeader(pjsip_transport* t) } #endif - if (transportType != PJSIP_TRANSPORT_UDP and transportType != PJSIP_TRANSPORT_UDP6) { - scheme = "sips:"; - transport = ";transport=" + std::string(pjsip_transport_get_type_name(transportType)); - } else - scheme = "sip:"; + const char* scheme = "sip"; + const char* transport = ""; + if (PJSIP_TRANSPORT_IS_SECURE(t)) { + scheme = "sips"; + transport = ";transport=tls"; + } contact_.slen = pj_ansi_snprintf(contact_.ptr, PJSIP_MAX_URL_SIZE, - "%s%s<%s%s%s%s:%d%s>", + "%s%s<%s:%s%s%s:%d%s>", displayName_.c_str(), (displayName_.empty() ? "" : " "), - scheme.c_str(), + scheme, username_.c_str(), (username_.empty() ? "" : "@"), address.c_str(), port, - transport.c_str()); + transport); return contact_; } @@ -2026,24 +2022,17 @@ SIPAccount::checkNATAddress(pjsip_regc_cbparam *param, pj_pool_t *pool) * Build new Contact header */ { - char *tmp; - char transport_param[32]; - int len; - - /* Don't add transport parameter if it's UDP */ - if (tp->key.type != PJSIP_TRANSPORT_UDP and - tp->key.type != PJSIP_TRANSPORT_UDP6) { - pj_ansi_snprintf(transport_param, sizeof(transport_param), - ";transport=%s", - pjsip_transport_get_type_name( - (pjsip_transport_type_e)tp->key.type)); - } else { - transport_param[0] = '\0'; + const char* scheme = "sip"; + const char* transport_param = ""; + if (PJSIP_TRANSPORT_IS_SECURE(tp)) { + scheme = "sips"; + transport_param = ";transport=tls"; } - tmp = (char*) pj_pool_alloc(pool, PJSIP_MAX_URL_SIZE); - len = pj_ansi_snprintf(tmp, PJSIP_MAX_URL_SIZE, - "<sip:%s%s%s:%d%s>", + char* tmp = (char*) pj_pool_alloc(pool, PJSIP_MAX_URL_SIZE); + int len = pj_ansi_snprintf(tmp, PJSIP_MAX_URL_SIZE, + "<%s:%s%s%s:%d%s>", + scheme, username_.c_str(), (not username_.empty() ? "@" : ""), via_addrstr.c_str(),