FS-5662 --resolve implement call pickup group functionality in mod_skinny. Currently treats callPickup and grpCallPickup identically, may revisit when I find out more about what's different between the two
This commit is contained in:
parent
c2d5d47078
commit
7dbf80ed8b
|
@ -8,6 +8,14 @@
|
||||||
<param name="ext-redial" value="redial">
|
<param name="ext-redial" value="redial">
|
||||||
<param name="ext-meetme" value="conference">
|
<param name="ext-meetme" value="conference">
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
<!-- if you define an extension that runs 'pickup' application with 'key' as the data
|
||||||
|
this will cause the PickUp softkey to route to that extension. Combine with adding ",pickup/key"
|
||||||
|
to bridge call to implement PickUp groups -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<param name="ext-pickup" value="pickup-key">
|
||||||
|
-->
|
||||||
<param name="foo" value="bar"/>
|
<param name="foo" value="bar"/>
|
||||||
</params>
|
</params>
|
||||||
<skinny>
|
<skinny>
|
||||||
|
|
|
@ -172,6 +172,7 @@ switch_status_t skinny_profile_dump(const skinny_profile_t *profile, switch_stre
|
||||||
stream->write_function(stream, "Ext-Voicemail \t%s\n", profile->ext_voicemail);
|
stream->write_function(stream, "Ext-Voicemail \t%s\n", profile->ext_voicemail);
|
||||||
stream->write_function(stream, "Ext-Redial \t%s\n", profile->ext_redial);
|
stream->write_function(stream, "Ext-Redial \t%s\n", profile->ext_redial);
|
||||||
stream->write_function(stream, "Ext-MeetMe \t%s\n", profile->ext_meetme);
|
stream->write_function(stream, "Ext-MeetMe \t%s\n", profile->ext_meetme);
|
||||||
|
stream->write_function(stream, "Ext-PickUp \t%s\n", profile->ext_pickup);
|
||||||
stream->write_function(stream, "%s\n", line);
|
stream->write_function(stream, "%s\n", line);
|
||||||
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
return SWITCH_STATUS_SUCCESS;
|
||||||
|
@ -1869,6 +1870,10 @@ switch_status_t skinny_profile_set(skinny_profile_t *profile, const char *var, c
|
||||||
if (!profile->ext_meetme || strcmp(val, profile->ext_meetme)) {
|
if (!profile->ext_meetme || strcmp(val, profile->ext_meetme)) {
|
||||||
profile->ext_meetme = switch_core_strdup(profile->pool, val);
|
profile->ext_meetme = switch_core_strdup(profile->pool, val);
|
||||||
}
|
}
|
||||||
|
} else if (!strcasecmp(var, "ext-pickup")) {
|
||||||
|
if (!profile->ext_pickup || strcmp(val, profile->ext_pickup)) {
|
||||||
|
profile->ext_pickup = switch_core_strdup(profile->pool, val);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return SWITCH_STATUS_FALSE;
|
return SWITCH_STATUS_FALSE;
|
||||||
}
|
}
|
||||||
|
@ -1965,6 +1970,10 @@ static switch_status_t load_skinny_config(void)
|
||||||
skinny_profile_set(profile, "ext-meetme", "conference");
|
skinny_profile_set(profile, "ext-meetme", "conference");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!profile->ext_pickup) {
|
||||||
|
skinny_profile_set(profile, "ext-pickup", "pickup");
|
||||||
|
}
|
||||||
|
|
||||||
if (profile->port == 0) {
|
if (profile->port == 0) {
|
||||||
profile->port = 2000;
|
profile->port = 2000;
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,6 +124,7 @@ struct skinny_profile {
|
||||||
char *ext_voicemail;
|
char *ext_voicemail;
|
||||||
char *ext_redial;
|
char *ext_redial;
|
||||||
char *ext_meetme;
|
char *ext_meetme;
|
||||||
|
char *ext_pickup;
|
||||||
/* db */
|
/* db */
|
||||||
char *dbname;
|
char *dbname;
|
||||||
char *odbc_dsn;
|
char *odbc_dsn;
|
||||||
|
@ -192,6 +193,7 @@ struct listener {
|
||||||
char *ext_voicemail;
|
char *ext_voicemail;
|
||||||
char *ext_redial;
|
char *ext_redial;
|
||||||
char *ext_meetme;
|
char *ext_meetme;
|
||||||
|
char *ext_pickup;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct listener listener_t;
|
typedef struct listener listener_t;
|
||||||
|
|
|
@ -234,6 +234,7 @@ static switch_status_t skinny_api_list_settings(const char *line, const char *cu
|
||||||
switch_console_push_match(&my_matches, "ext-voicemail");
|
switch_console_push_match(&my_matches, "ext-voicemail");
|
||||||
switch_console_push_match(&my_matches, "ext-redial");
|
switch_console_push_match(&my_matches, "ext-redial");
|
||||||
switch_console_push_match(&my_matches, "ext-meetme");
|
switch_console_push_match(&my_matches, "ext-meetme");
|
||||||
|
switch_console_push_match(&my_matches, "ext-pickup");
|
||||||
|
|
||||||
if (my_matches) {
|
if (my_matches) {
|
||||||
*matches = my_matches;
|
*matches = my_matches;
|
||||||
|
|
|
@ -1046,6 +1046,10 @@ switch_status_t skinny_handle_register(listener_t *listener, skinny_message_t *r
|
||||||
if (!listener->ext_meetme || strcmp(value,listener->ext_meetme)) {
|
if (!listener->ext_meetme || strcmp(value,listener->ext_meetme)) {
|
||||||
listener->ext_meetme = switch_core_strdup(profile->pool, value);
|
listener->ext_meetme = switch_core_strdup(profile->pool, value);
|
||||||
}
|
}
|
||||||
|
} else if (!strcasecmp(name, "ext-pickup")) {
|
||||||
|
if (!listener->ext_pickup || strcmp(value,listener->ext_pickup)) {
|
||||||
|
listener->ext_pickup = switch_core_strdup(profile->pool, value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1949,6 +1953,12 @@ switch_status_t skinny_handle_soft_key_event_message(listener_t *listener, skinn
|
||||||
skinny_session_process_dest(session, listener, line_instance,
|
skinny_session_process_dest(session, listener, line_instance,
|
||||||
empty_null2(listener->ext_meetme, listener->profile->ext_meetme), '\0', 0);
|
empty_null2(listener->ext_meetme, listener->profile->ext_meetme), '\0', 0);
|
||||||
break;
|
break;
|
||||||
|
case SOFTKEY_CALLPICKUP:
|
||||||
|
case SOFTKEY_GRPCALLPICKUP:
|
||||||
|
skinny_create_incoming_session(listener, &line_instance, &session);
|
||||||
|
skinny_session_process_dest(session, listener, line_instance,
|
||||||
|
empty_null2(listener->ext_pickup, listener->profile->ext_pickup), '\0', 0);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING,
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING,
|
||||||
"Unknown SoftKeyEvent type: %d.\n", request->data.soft_key_event.event);
|
"Unknown SoftKeyEvent type: %d.\n", request->data.soft_key_event.event);
|
||||||
|
|
Loading…
Reference in New Issue