aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_skinny.c
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2006-07-19 20:44:39 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2006-07-19 20:44:39 +0000
commit6049bb6539153c2f400f1f2dbc763c74d796204b (patch)
tree3c36781db3a5a7a08967cbe8d83acb5d82e581cb /channels/chan_skinny.c
parent28df168d0f9fd12f5914263015dc26898e834146 (diff)
merge Russell's 'hold_handling' branch, finally implementing music-on-hold handling the way it was decided at AstriDevCon Europe 2006 (and the way people really want it to be)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@37988 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_skinny.c')
-rw-r--r--channels/chan_skinny.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c
index c74c090a9..e925b2e3c 100644
--- a/channels/chan_skinny.c
+++ b/channels/chan_skinny.c
@@ -733,7 +733,7 @@ static pthread_t tcp_thread;
static pthread_t accept_t;
static char context[AST_MAX_CONTEXT] = "default";
static char language[MAX_LANGUAGE] = "";
-static char musicclass[MAX_MUSICCLASS] = "";
+static char mohinterpret[MAX_MUSICCLASS] = "default";
static char cid_num[AST_MAX_EXTENSION] = "";
static char cid_name[AST_MAX_EXTENSION] = "";
static char linelabel[AST_MAX_EXTENSION] ="";
@@ -911,7 +911,7 @@ struct skinny_line {
char lastcallerid[AST_MAX_EXTENSION]; /* Last Caller*ID */
char call_forward[AST_MAX_EXTENSION];
char mailbox[AST_MAX_EXTENSION];
- char musicclass[MAX_MUSICCLASS];
+ char mohinterpret[MAX_MUSICCLASS];
char lastnumberdialed[AST_MAX_EXTENSION]; /* Last number that was dialed - used for redial */
int curtone; /* Current tone being played */
ast_group_t callgroup;
@@ -1847,8 +1847,8 @@ static struct skinny_device *build_device(const char *cat, struct ast_variable *
} else {
amaflags = y;
}
- } else if (!strcasecmp(v->name, "musiconhold")) {
- ast_copy_string(musicclass, v->value, sizeof(musicclass));
+ } else if (!strcasecmp(v->name, "mohinterpret") || !strcasecmp(v->name, "musiconhold")) {
+ ast_copy_string(mohinterpret, v->value, sizeof(mohinterpret));
} else if (!strcasecmp(v->name, "callgroup")) {
cur_callergroup = ast_get_group(v->value);
} else if (!strcasecmp(v->name, "pickupgroup")) {
@@ -1913,7 +1913,7 @@ static struct skinny_device *build_device(const char *cat, struct ast_variable *
ast_copy_string(l->cid_name, cid_name, sizeof(l->cid_name));
ast_copy_string(l->label, linelabel, sizeof(l->label));
ast_copy_string(l->language, language, sizeof(l->language));
- ast_copy_string(l->musicclass, musicclass, sizeof(l->musicclass));
+ ast_copy_string(l->mohinterpret, mohinterpret, sizeof(l->mohinterpret));
ast_copy_string(l->mailbox, mailbox, sizeof(l->mailbox));
ast_copy_string(l->mailbox, mailbox, sizeof(l->mailbox));
if (!ast_strlen_zero(mailbox)) {
@@ -2502,6 +2502,12 @@ static int skinny_indicate(struct ast_channel *ast, int ind, const void *data, s
case -1:
transmit_tone(s, SKINNY_SILENCE);
break;
+ case AST_CONTROL_HOLD:
+ ast_moh_start(ast, data, l->mohinterpret);
+ break;
+ case AST_CONTROL_UNHOLD:
+ ast_moh_stop(ast);
+ break;
case AST_CONTROL_PROCEEDING:
break;
default: