diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 6724aa3d67..1b58333fce 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -1497,6 +1497,7 @@ SWITCH_STANDARD_API(sofia_contact_function) char *p; sofia_profile_t *profile = NULL; const char *exclude_contact = NULL; + char *reply = ""; if (!cmd) { stream->write_function(stream, "%s", ""); @@ -1543,11 +1544,13 @@ SWITCH_STANDARD_API(sofia_contact_function) if (profile) { struct cb_helper cb; switch_stream_handle_t mystream = { 0 }; + if (!domain || !strchr(domain, '.')) { domain = profile->name; } SWITCH_STANDARD_STREAM(mystream); + switch_assert(mystream.data); cb.profile = profile; cb.stream = &mystream; @@ -1561,19 +1564,20 @@ SWITCH_STANDARD_API(sofia_contact_function) switch_assert(sql); sofia_glue_execute_sql_callback(profile, SWITCH_FALSE, profile->ireg_mutex, sql, contact_callback, &cb); switch_safe_free(sql); - if (mystream.data) { - char *str = mystream.data; - *(str + (strlen(str) - 1)) = '\0'; + reply = (char *) mystream.data; + if (!switch_strlen_zero(reply) && end_of(reply) == ',') { + end_of(reply) = '\0'; } - stream->write_function(stream, "%s", mystream.data); + stream->write_function(stream, "%s", reply); + reply = NULL; switch_safe_free(mystream.data); - goto end; } } - stream->write_function(stream, "%s", ""); + if (reply) { + stream->write_function(stream, "%s", reply); + } -end: switch_safe_free(data); if (profile) { diff --git a/src/mod/endpoints/mod_sofia/sofia_reg.c b/src/mod/endpoints/mod_sofia/sofia_reg.c index b4c5ff7773..97d61355fa 100644 --- a/src/mod/endpoints/mod_sofia/sofia_reg.c +++ b/src/mod/endpoints/mod_sofia/sofia_reg.c @@ -704,9 +704,14 @@ uint8_t sofia_reg_handle_register(nua_t * nua, sofia_profile_t *profile, nua_han if (regtype == REG_REGISTER) { char *new_contact = NULL; + char *p; + + if ((p = strstr(contact_str, ";nat"))) { + *p = '\0'; + } if (exptime) { - if (nat_hack) { + if (is_nat || nat_hack) { new_contact = switch_mprintf("%s;expires=%ld;received=\"%s:%d\"", contact_str, (long)exptime, network_ip, network_port); } else { new_contact = switch_mprintf("%s;expires=%ld", contact_str, (long)exptime);