Compare commits

...

7 Commits

Author SHA1 Message Date
wmasilva 145456e700
Merge 73e826d993 into 3b58ebc5f3 2025-01-21 00:15:14 +00:00
junction1153b 3b58ebc5f3
[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 <junction1153@gmail.com>
2025-01-21 00:57:25 +03:00
Antonio Silva 73e826d993 fix coding stylte 2023-04-19 11:46:11 +01:00
wmasilva fc09cbd484
Merge branch 'signalwire:master' into mod_verto-cmd-profile 2023-04-19 11:37:01 +01:00
wmasilva 92c7ff89e2
Merge branch 'signalwire:master' into mod_verto-cmd-profile 2021-10-28 10:42:20 +01:00
António Silva b8ce15549f mod_verto: fix missing init function for cmd_profile 2021-10-28 11:40:45 +02:00
António Silva 26c8a0de39 mod_verto: add cmd profile restart all 2021-10-26 16:39:43 +01:00
6 changed files with 62 additions and 6 deletions

View File

@ -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),

View File

@ -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;

View File

@ -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. */

View File

@ -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) {

View File

@ -1362,6 +1362,23 @@ static void drop_detached(void)
switch_thread_rwlock_unlock(verto_globals.tech_rwlock);
}
static void drop_calls(void)
{
verto_pvt_t *tech_pvt;
switch_thread_rwlock_rdlock(verto_globals.tech_rwlock);
for(tech_pvt = verto_globals.tech_head; tech_pvt; tech_pvt = tech_pvt->next) {
if (!switch_channel_up_nosig(tech_pvt->channel)) {
continue;
}
switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
}
switch_thread_rwlock_unlock(verto_globals.tech_rwlock);
}
static void attach_calls(jsock_t *jsock)
{
verto_pvt_t *tech_pvt;
@ -1422,6 +1439,36 @@ static void detach_calls(jsock_t *jsock)
if (wake) attach_wake();
}
static switch_status_t cmd_profile(char **argv, int argc, switch_stream_handle_t *stream)
{
const char *err;
if (argc < 2) {
stream->write_function(stream, "Invalid Args!\n");
return SWITCH_STATUS_SUCCESS;
}
if (argv[1] && !strcasecmp(argv[0], "restart") && !strcasecmp(argv[1], "all")) {
switch_xml_reload(&err);
stream->write_function(stream, "Restart all profiles\n");
/* hangup all calls */
drop_calls();
/* stop all profiles */
kill_profiles();
/* reload config: init ssl, load profiles, start profiles */
init();
run_profiles();
return SWITCH_STATUS_SUCCESS;
}
stream->write_function(stream, "-ERR Unknown command!\n");
return SWITCH_STATUS_SUCCESS;
}
static void process_jrpc_response(jsock_t *jsock, cJSON *json)
{
}
@ -5709,6 +5756,7 @@ SWITCH_STANDARD_API(verto_function)
"verto debug [0-10]\n"
"verto perm <sessid> <type> <value>\n"
"verto noperm <sessid> <type> <value>\n"
"verto profile restart all \n"
"--------------------------------------------------------------------------------\n";
if (zstr(cmd)) {
@ -5771,6 +5819,8 @@ SWITCH_STANDARD_API(verto_function)
}
stream->write_function(stream, "Debug Level: %s\n", switch_log_level2str(verto_globals.debug_level));
goto done;
} else if (!strcasecmp(argv[0], "profile")) {
func = cmd_profile;
}
if (func) {
@ -6880,6 +6930,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_verto_load)
switch_console_set_complete("add verto debug-level");
switch_console_set_complete("add verto status");
switch_console_set_complete("add verto xmlstatus");
switch_console_set_complete("add verto profile restart all");
SWITCH_ADD_JSON_API(json_api_interface, "store", "JSON store", json_store_function, "");

View File

@ -345,6 +345,9 @@ typedef switch_bool_t (*jrpc_func_t)(const char *method, cJSON *params, jsock_t
void set_log_path(const char *path);
static void kill_profiles(void);
static void run_profiles(void);
static int init(void);
/** @} */
#endif