mod_skinny: implement per device setting of ext- extensions

This commit is contained in:
Nathan Neulinger 2013-08-02 13:53:29 -05:00
parent d9905fa72b
commit e20dd10b59
3 changed files with 34 additions and 6 deletions

View File

@ -2,8 +2,11 @@
<user id="SEP001120AABBCC"> <user id="SEP001120AABBCC">
<params> <params>
<!-- for devices requesting firmware via SCCP, like ATA186 <!-- for devices requesting firmware via SCCP, like ATA186
<param name="skinny-firmware-version" value="ATA030101SCCP04" <param name="skinny-firmware-version" value="ATA030101SCCP04">
<param name="skinny-soft-key-set-set" value="default" <param name="skinny-soft-key-set-set" value="default">
<param name="ext-voicemail" value="voicemail">
<param name="ext-redial" value="redial">
<param name="ext-meetme" value="conference">
--> -->
<param name="foo" value="bar"/> <param name="foo" value="bar"/>
</params> </params>

View File

@ -35,6 +35,12 @@
#include <switch.h> #include <switch.h>
/*****************************************************************************/
/* UTILITY MACROS */
/*****************************************************************************/
#define empty_null(a) ((a)?(a):NULL)
#define empty_null2(a,b) ((a)?(a):empty_null(b))
/*****************************************************************************/ /*****************************************************************************/
/* LOGGING FUNCTIONS */ /* LOGGING FUNCTIONS */
/*****************************************************************************/ /*****************************************************************************/
@ -183,6 +189,9 @@ struct listener {
uint32_t flags; uint32_t flags;
time_t expire_time; time_t expire_time;
struct listener *next; struct listener *next;
char *ext_voicemail;
char *ext_redial;
char *ext_meetme;
}; };
typedef struct listener listener_t; typedef struct listener listener_t;

View File

@ -1034,6 +1034,18 @@ switch_status_t skinny_handle_register(listener_t *listener, skinny_message_t *r
strncpy(listener->firmware_version, value, 16); strncpy(listener->firmware_version, value, 16);
} else if (!strcasecmp(name, "skinny-soft-key-set-set")) { } else if (!strcasecmp(name, "skinny-soft-key-set-set")) {
listener->soft_key_set_set = switch_core_strdup(profile->pool, value); listener->soft_key_set_set = switch_core_strdup(profile->pool, value);
} else if (!strcasecmp(name, "ext-voicemail")) {
if (!listener->ext_voicemail || strcmp(value,listener->ext_voicemail)) {
listener->ext_voicemail = switch_core_strdup(profile->pool, value);
}
} else if (!strcasecmp(name, "ext-redial")) {
if (!listener->ext_redial || strcmp(value,listener->ext_redial)) {
listener->ext_redial = switch_core_strdup(profile->pool, value);
}
} else if (!strcasecmp(name, "ext-meetme")) {
if (!listener->ext_meetme || strcmp(value,listener->ext_meetme)) {
listener->ext_meetme = switch_core_strdup(profile->pool, value);
}
} }
} }
} }
@ -1267,7 +1279,8 @@ switch_status_t skinny_handle_stimulus_message(listener_t *listener, skinny_mess
switch(request->data.stimulus.instance_type) { switch(request->data.stimulus.instance_type) {
case SKINNY_BUTTON_LAST_NUMBER_REDIAL: case SKINNY_BUTTON_LAST_NUMBER_REDIAL:
skinny_create_incoming_session(listener, &line_instance, &session); skinny_create_incoming_session(listener, &line_instance, &session);
skinny_session_process_dest(session, listener, line_instance, listener->profile->ext_redial, '\0', 0); skinny_session_process_dest(session, listener, line_instance,
empty_null2(listener->ext_redial,listener->profile->ext_redial), '\0', 0);
break; break;
case SKINNY_BUTTON_SPEED_DIAL: case SKINNY_BUTTON_SPEED_DIAL:
skinny_speed_dial_get(listener, request->data.stimulus.instance, &button_speed_dial); skinny_speed_dial_get(listener, request->data.stimulus.instance, &button_speed_dial);
@ -1296,7 +1309,8 @@ switch_status_t skinny_handle_stimulus_message(listener_t *listener, skinny_mess
break; break;
case SKINNY_BUTTON_VOICEMAIL: case SKINNY_BUTTON_VOICEMAIL:
skinny_create_incoming_session(listener, &line_instance, &session); skinny_create_incoming_session(listener, &line_instance, &session);
skinny_session_process_dest(session, listener, line_instance, listener->profile->ext_voicemail, '\0', 0); skinny_session_process_dest(session, listener, line_instance,
empty_null2(listener->ext_voicemail, listener->profile->ext_voicemail), '\0', 0);
break; break;
case SKINNY_BUTTON_LINE: case SKINNY_BUTTON_LINE:
@ -1870,7 +1884,8 @@ switch_status_t skinny_handle_soft_key_event_message(listener_t *listener, skinn
switch(request->data.soft_key_event.event) { switch(request->data.soft_key_event.event) {
case SOFTKEY_REDIAL: case SOFTKEY_REDIAL:
status = skinny_create_incoming_session(listener, &line_instance, &session); status = skinny_create_incoming_session(listener, &line_instance, &session);
skinny_session_process_dest(session, listener, line_instance, listener->profile->ext_redial, '\0', 0); skinny_session_process_dest(session, listener, line_instance,
empty_null2(listener->ext_redial,listener->profile->ext_redial), '\0', 0);
break; break;
case SOFTKEY_NEWCALL: case SOFTKEY_NEWCALL:
status = skinny_create_incoming_session(listener, &line_instance, &session); status = skinny_create_incoming_session(listener, &line_instance, &session);
@ -1930,7 +1945,8 @@ switch_status_t skinny_handle_soft_key_event_message(listener_t *listener, skinn
break; break;
case SOFTKEY_MEETME: case SOFTKEY_MEETME:
skinny_create_incoming_session(listener, &line_instance, &session); skinny_create_incoming_session(listener, &line_instance, &session);
skinny_session_process_dest(session, listener, line_instance, listener->profile->ext_meetme, '\0', 0); skinny_session_process_dest(session, listener, line_instance,
empty_null2(listener->ext_meetme, listener->profile->ext_meetme), '\0', 0);
break; break;
default: default:
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING,