From 3b58ebc5f309708bde0ad26eef73e606144792f6 Mon Sep 17 00:00:00 2001 From: junction1153b Date: Mon, 20 Jan 2025 16:57:25 -0500 Subject: [PATCH] [mod_sofia] Update Polycom UA to recognize new Poly phones We observed that the new Poly phones (formerly known as Polycom) were not getting sent a SIP UPDATE in certain circumstances (example: retrieving a parked call, and therefore, Caller ID would not show the parked caller). I renamed Polycom to Poly which will catch all Poly AND Polycom UA's. I also added Acrobits, and Ringotel to extend such functionality to those UA's. There were also other minor compatibility issues with the new Poly phones which have been resolved with tweaking the UA recognition on the code. Co-authored-by: Joseph --- src/mod/endpoints/mod_sofia/mod_sofia.c | 8 +++++--- src/mod/endpoints/mod_sofia/sofia.c | 2 +- src/mod/endpoints/mod_sofia/sofia_presence.c | 2 +- src/mod/endpoints/mod_sofia/sofia_reg.c | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index c41ed9b2e3..086d6dd088 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -254,7 +254,7 @@ char *generate_pai_str(private_object_t *tech_pvt) callee_number = switch_sanitize_number(switch_core_session_strdup(session, callee_number)); callee_name = switch_sanitize_number(switch_core_session_strdup(session, callee_name)); - if (!zstr(callee_number) && (zstr(ua) || !switch_stristr("polycom", ua))) { + if (!zstr(callee_number) && (zstr(ua) || !switch_stristr("poly", ua))) { callee_number = switch_core_session_sprintf(session, "sip:%s@%s", callee_number, host); } @@ -2075,13 +2075,15 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi nua_info(tech_pvt->nh, SIPTAG_CONTENT_TYPE_STR("message/sipfrag"), TAG_IF(!zstr(tech_pvt->user_via), SIPTAG_VIA_STR(tech_pvt->user_via)), SIPTAG_PAYLOAD_STR(message), TAG_END()); } else if (update_allowed && ua && (switch_channel_var_true(tech_pvt->channel, "update_ignore_ua") || - switch_stristr("polycom", ua) || + switch_stristr("poly", ua) || (switch_stristr("aastra", ua) && !switch_stristr("Intelligate", ua)) || (switch_stristr("cisco/spa50", ua) || switch_stristr("cisco/spa525", ua)) || switch_stristr("cisco/spa30", ua) || switch_stristr("Fanvil", ua) || switch_stristr("Grandstream", ua) || + switch_stristr("Ringotel", ua) || + switch_stristr("Groundwire", ua) || switch_stristr("Yealink", ua) || switch_stristr("Mitel", ua) || switch_stristr("Panasonic", ua))) { @@ -2152,7 +2154,7 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi SIPTAG_PAYLOAD_STR(message), TAG_IF(!zstr(session_id_header), SIPTAG_HEADER_STR(session_id_header)), TAG_END()); - } else if (ua && switch_stristr("polycom", ua)) { + } else if (ua && switch_stristr("poly", ua)) { snprintf(message, sizeof(message), "P-Asserted-Identity: \"%s\" <%s>", msg->string_arg, tech_pvt->caller_profile->destination_number); nua_update(tech_pvt->nh, NUTAG_SESSION_TIMER(tech_pvt->session_timeout), diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index a370b52442..77e4750812 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -10476,7 +10476,7 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia (!is_tcp && !is_tls && (zstr(network_ip) || !switch_check_network_list_ip(network_ip, profile->local_network)) && profile->server_rport_level >= 2 && sip->sip_user_agent && sip->sip_user_agent->g_string && - (!strncasecmp(sip->sip_user_agent->g_string, "Polycom", 7) || !strncasecmp(sip->sip_user_agent->g_string, "KIRK Wireless Server", 20))) + (!strncasecmp(sip->sip_user_agent->g_string, "Poly", 4) || !strncasecmp(sip->sip_user_agent->g_string, "KIRK Wireless Server", 20))) ) { if (sip->sip_via) { const char *port = sip->sip_via->v_port; diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index 48ad579411..151d6ec634 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -2501,7 +2501,7 @@ static char *gen_pidf(char *user_agent, char *id, char *url, char *open, char *r { char *ret = NULL; - if (switch_stristr("polycom", user_agent)) { + if (switch_stristr("poly", user_agent)) { *ct = "application/xpidf+xml"; /* If unknown/none prpid is provided, just show the user as online. */ diff --git a/src/mod/endpoints/mod_sofia/sofia_reg.c b/src/mod/endpoints/mod_sofia/sofia_reg.c index d9e04528a8..ccd42bf6ab 100644 --- a/src/mod/endpoints/mod_sofia/sofia_reg.c +++ b/src/mod/endpoints/mod_sofia/sofia_reg.c @@ -1661,7 +1661,7 @@ uint8_t sofia_reg_handle_register_token(nua_t *nua, sofia_profile_t *profile, nu if (!is_tcp && !is_tls && (zstr(network_ip) || !switch_check_network_list_ip(network_ip, profile->local_network)) && profile->server_rport_level >= 2 && sip->sip_user_agent && sip->sip_user_agent->g_string && - ( !strncasecmp(sip->sip_user_agent->g_string, "Polycom", 7) || + ( !strncasecmp(sip->sip_user_agent->g_string, "Poly", 4) || !strncasecmp(sip->sip_user_agent->g_string, "KIRK Wireless Server", 20) || !strncasecmp(sip->sip_user_agent->g_string, "ADTRAN_Total_Access", 19) )) { if (sip->sip_via) {