diff --git a/src/mod/endpoints/mod_skinny/conf/directory/default/skinny-example.xml b/src/mod/endpoints/mod_skinny/conf/directory/default/skinny-example.xml
index 8b8fad5812..c51b5ce9cf 100644
--- a/src/mod/endpoints/mod_skinny/conf/directory/default/skinny-example.xml
+++ b/src/mod/endpoints/mod_skinny/conf/directory/default/skinny-example.xml
@@ -8,6 +8,14 @@
-->
+
+
+
+
diff --git a/src/mod/endpoints/mod_skinny/mod_skinny.c b/src/mod/endpoints/mod_skinny/mod_skinny.c
index 18b0f3c3f5..ab4398a898 100644
--- a/src/mod/endpoints/mod_skinny/mod_skinny.c
+++ b/src/mod/endpoints/mod_skinny/mod_skinny.c
@@ -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-Redial \t%s\n", profile->ext_redial);
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);
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)) {
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 {
return SWITCH_STATUS_FALSE;
}
@@ -1965,6 +1970,10 @@ static switch_status_t load_skinny_config(void)
skinny_profile_set(profile, "ext-meetme", "conference");
}
+ if (!profile->ext_pickup) {
+ skinny_profile_set(profile, "ext-pickup", "pickup");
+ }
+
if (profile->port == 0) {
profile->port = 2000;
}
diff --git a/src/mod/endpoints/mod_skinny/mod_skinny.h b/src/mod/endpoints/mod_skinny/mod_skinny.h
index 7c9dcdb314..df876d0894 100644
--- a/src/mod/endpoints/mod_skinny/mod_skinny.h
+++ b/src/mod/endpoints/mod_skinny/mod_skinny.h
@@ -124,6 +124,7 @@ struct skinny_profile {
char *ext_voicemail;
char *ext_redial;
char *ext_meetme;
+ char *ext_pickup;
/* db */
char *dbname;
char *odbc_dsn;
@@ -192,6 +193,7 @@ struct listener {
char *ext_voicemail;
char *ext_redial;
char *ext_meetme;
+ char *ext_pickup;
};
typedef struct listener listener_t;
diff --git a/src/mod/endpoints/mod_skinny/skinny_api.c b/src/mod/endpoints/mod_skinny/skinny_api.c
index 94318c8de0..db9338b000 100644
--- a/src/mod/endpoints/mod_skinny/skinny_api.c
+++ b/src/mod/endpoints/mod_skinny/skinny_api.c
@@ -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-redial");
switch_console_push_match(&my_matches, "ext-meetme");
+ switch_console_push_match(&my_matches, "ext-pickup");
if (my_matches) {
*matches = my_matches;
diff --git a/src/mod/endpoints/mod_skinny/skinny_server.c b/src/mod/endpoints/mod_skinny/skinny_server.c
index b6aea308cd..a1189b87f3 100644
--- a/src/mod/endpoints/mod_skinny/skinny_server.c
+++ b/src/mod/endpoints/mod_skinny/skinny_server.c
@@ -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)) {
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);
+ }
}
}
}
@@ -1948,6 +1952,12 @@ switch_status_t skinny_handle_soft_key_event_message(listener_t *listener, skinn
skinny_session_process_dest(session, listener, line_instance,
empty_null2(listener->ext_meetme, listener->profile->ext_meetme), '\0', 0);
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:
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING,
"Unknown SoftKeyEvent type: %d.\n", request->data.soft_key_event.event);