diff --git a/main/channel.c b/main/channel.c index 3612866665..0e29191046 100644 --- a/main/channel.c +++ b/main/channel.c @@ -714,7 +714,7 @@ struct ast_channel *ast_channel_alloc(int needqueue, int state, const char *cid_ int flags; struct varshead *headp; va_list ap1, ap2; - char *tech = ""; + char *tech = "", *tech2 = NULL; /* If shutting down, don't allocate any new channels */ if (shutting_down) { @@ -815,7 +815,7 @@ alertpipe_failed: tmp->cid.cid_num = ast_strdup(cid_num); if (!ast_strlen_zero(name_fmt)) { - char *slash; + char *slash, *slash2; /* Almost every channel is calling this function, and setting the name via the ast_string_field_build() call. * And they all use slightly different formats for their name string. * This means, to set the name here, we have to accept variable args, and call the string_field_build from here. @@ -830,6 +830,10 @@ alertpipe_failed: va_end(ap2); tech = ast_strdupa(tmp->name); if ((slash = strchr(tech, '/'))) { + if ((slash2 = strchr(slash + 1, '/'))) { + tech2 = slash + 1; + *slash2 = '\0'; + } *slash = '\0'; } } @@ -886,7 +890,7 @@ alertpipe_failed: * proper and correct place to make this call, but you sure do have to pass * a lot of data into this func to do it here! */ - if (ast_get_channel_tech(tech)) { + if (ast_get_channel_tech(tech) || (tech2 && ast_get_channel_tech(tech2))) { manager_event(EVENT_FLAG_CALL, "Newchannel", "Channel: %s\r\n" "State: %s\r\n"