aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authorfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2008-03-05 22:32:10 +0000
committerfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2008-03-05 22:32:10 +0000
commit277beb94a0f5aa85eeb0603f6d11319cce02c3cd (patch)
tree32a4e75de52a4d00eb32bb5917c271f775d0743e /channels
parent1de0d5b8308435068cf5a04314bfd98cc712c8ee (diff)
Add a control frame to indicate the source of media has changed. Depending on the underlying technology it may need to change some things.
(closes issue #12148) Reported by: jcomellas git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@106235 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_alsa.c54
-rw-r--r--channels/chan_h323.c4
-rw-r--r--channels/chan_mgcp.c3
-rw-r--r--channels/chan_oss.c47
-rw-r--r--channels/chan_phone.c27
-rw-r--r--channels/chan_sip.c4
-rw-r--r--channels/chan_skinny.c3
-rw-r--r--channels/chan_zap.c3
8 files changed, 83 insertions, 62 deletions
diff --git a/channels/chan_alsa.c b/channels/chan_alsa.c
index 79bc313cd..9a416837b 100644
--- a/channels/chan_alsa.c
+++ b/channels/chan_alsa.c
@@ -743,32 +743,34 @@ static int alsa_indicate(struct ast_channel *chan, int cond, const void *data, s
ast_mutex_lock(&alsalock);
switch (cond) {
- case AST_CONTROL_BUSY:
- res = 1;
- break;
- case AST_CONTROL_CONGESTION:
- res = 2;
- break;
- case AST_CONTROL_RINGING:
- case AST_CONTROL_PROGRESS:
- break;
- case -1:
- res = -1;
- break;
- case AST_CONTROL_VIDUPDATE:
- res = -1;
- break;
- case AST_CONTROL_HOLD:
- ast_verbose(" << Console Has Been Placed on Hold >> \n");
- ast_moh_start(chan, data, mohinterpret);
- break;
- case AST_CONTROL_UNHOLD:
- ast_verbose(" << Console Has Been Retrieved from Hold >> \n");
- ast_moh_stop(chan);
- break;
- default:
- ast_log(LOG_WARNING, "Don't know how to display condition %d on %s\n", cond, chan->name);
- res = -1;
+ case AST_CONTROL_BUSY:
+ res = 1;
+ break;
+ case AST_CONTROL_CONGESTION:
+ res = 2;
+ break;
+ case AST_CONTROL_RINGING:
+ case AST_CONTROL_PROGRESS:
+ break;
+ case -1:
+ res = -1;
+ break;
+ case AST_CONTROL_VIDUPDATE:
+ res = -1;
+ break;
+ case AST_CONTROL_HOLD:
+ ast_verbose(" << Console Has Been Placed on Hold >> \n");
+ ast_moh_start(chan, data, mohinterpret);
+ break;
+ case AST_CONTROL_UNHOLD:
+ ast_verbose(" << Console Has Been Retrieved from Hold >> \n");
+ ast_moh_stop(chan);
+ break;
+ case AST_CONTROL_SRCUPDATE:
+ break;
+ default:
+ ast_log(LOG_WARNING, "Don't know how to display condition %d on %s\n", cond, chan->name);
+ res = -1;
}
if (res > -1)
diff --git a/channels/chan_h323.c b/channels/chan_h323.c
index fb0d8315f..57dbf8065 100644
--- a/channels/chan_h323.c
+++ b/channels/chan_h323.c
@@ -915,6 +915,10 @@ static int oh323_indicate(struct ast_channel *c, int condition, const void *data
ast_moh_stop(c);
res = 0;
break;
+ case AST_CONTROL_SRCUPDATE:
+ ast_rtp_new_source(pvt->rtp);
+ res = 0;
+ break;
case AST_CONTROL_PROCEEDING:
case -1:
break;
diff --git a/channels/chan_mgcp.c b/channels/chan_mgcp.c
index 353877285..bd57e54f3 100644
--- a/channels/chan_mgcp.c
+++ b/channels/chan_mgcp.c
@@ -1445,6 +1445,9 @@ static int mgcp_indicate(struct ast_channel *ast, int ind, const void *data, siz
case AST_CONTROL_UNHOLD:
ast_moh_stop(ast);
break;
+ case AST_CONTROL_SRCUPDATE:
+ ast_rtp_new_source(sub->rtp);
+ break;
case -1:
transmit_notify_request(sub, "");
break;
diff --git a/channels/chan_oss.c b/channels/chan_oss.c
index 7b3c88751..0820c4b7f 100644
--- a/channels/chan_oss.c
+++ b/channels/chan_oss.c
@@ -951,32 +951,33 @@ static int oss_indicate(struct ast_channel *c, int cond, const void *data, size_
int res = -1;
switch (cond) {
- case AST_CONTROL_BUSY:
- case AST_CONTROL_CONGESTION:
- case AST_CONTROL_RINGING:
+ case AST_CONTROL_BUSY:
+ case AST_CONTROL_CONGESTION:
+ case AST_CONTROL_RINGING:
res = cond;
break;
-
- case -1:
- o->cursound = -1;
- o->nosound = 0; /* when cursound is -1 nosound must be 0 */
- return 0;
-
- case AST_CONTROL_VIDUPDATE:
- res = -1;
- break;
- case AST_CONTROL_HOLD:
- ast_verbose(" << Console Has Been Placed on Hold >> \n");
- ast_moh_start(c, data, o->mohinterpret);
- break;
- case AST_CONTROL_UNHOLD:
- ast_verbose(" << Console Has Been Retrieved from Hold >> \n");
- ast_moh_stop(c);
+
+ case -1:
+ o->cursound = -1;
+ o->nosound = 0; /* when cursound is -1 nosound must be 0 */
+ return 0;
+
+ case AST_CONTROL_VIDUPDATE:
+ res = -1;
+ break;
+ case AST_CONTROL_HOLD:
+ ast_verbose(" << Console Has Been Placed on Hold >> \n");
+ ast_moh_start(c, data, o->mohinterpret);
break;
-
- default:
- ast_log(LOG_WARNING, "Don't know how to display condition %d on %s\n", cond, c->name);
- return -1;
+ case AST_CONTROL_UNHOLD:
+ ast_verbose(" << Console Has Been Retrieved from Hold >> \n");
+ ast_moh_stop(c);
+ break;
+ case AST_CONTROL_SRCUPDATE:
+ break;
+ default:
+ ast_log(LOG_WARNING, "Don't know how to display condition %d on %s\n", cond, c->name);
+ return -1;
}
if (res > -1)
diff --git a/channels/chan_phone.c b/channels/chan_phone.c
index ad34d2329..b551b1cba 100644
--- a/channels/chan_phone.c
+++ b/channels/chan_phone.c
@@ -213,21 +213,24 @@ static int phone_indicate(struct ast_channel *chan, int condition, const void *d
int res=-1;
ast_log(LOG_DEBUG, "Requested indication %d on channel %s\n", condition, chan->name);
switch(condition) {
- case AST_CONTROL_FLASH:
- ioctl(p->fd, IXJCTL_PSTN_SET_STATE, PSTN_ON_HOOK);
- usleep(320000);
- ioctl(p->fd, IXJCTL_PSTN_SET_STATE, PSTN_OFF_HOOK);
+ case AST_CONTROL_FLASH:
+ ioctl(p->fd, IXJCTL_PSTN_SET_STATE, PSTN_ON_HOOK);
+ usleep(320000);
+ ioctl(p->fd, IXJCTL_PSTN_SET_STATE, PSTN_OFF_HOOK);
p->lastformat = -1;
res = 0;
break;
- case AST_CONTROL_HOLD:
- ast_moh_start(chan, data, NULL);
- break;
- case AST_CONTROL_UNHOLD:
- ast_moh_stop(chan);
- break;
- default:
- ast_log(LOG_WARNING, "Condition %d is not supported on channel %s\n", condition, chan->name);
+ case AST_CONTROL_HOLD:
+ ast_moh_start(chan, data, NULL);
+ break;
+ case AST_CONTROL_UNHOLD:
+ ast_moh_stop(chan);
+ break;
+ case AST_CONTROL_SRCUPDATE:
+ res = 0;
+ break;
+ default:
+ ast_log(LOG_WARNING, "Condition %d is not supported on channel %s\n", condition, chan->name);
}
return res;
}
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 48dc39e4a..fe1f4bc3b 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -3663,7 +3663,6 @@ static int sip_answer(struct ast_channel *ast)
ast_log(LOG_DEBUG,"T38State change to %d on channel %s\n", p->t38.state, ast->name);
res = transmit_response_with_t38_sdp(p, "200 OK", &p->initreq, XMIT_CRITICAL);
} else {
- ast_rtp_new_source(p->rtp);
res = transmit_response_with_sdp(p, "200 OK", &p->initreq, XMIT_CRITICAL);
}
}
@@ -3938,6 +3937,9 @@ static int sip_indicate(struct ast_channel *ast, int condition, const void *data
} else
res = -1;
break;
+ case AST_CONTROL_SRCUPDATE:
+ ast_rtp_new_source(p->rtp);
+ break;
case -1:
res = -1;
break;
diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c
index c712e3d94..2e160c865 100644
--- a/channels/chan_skinny.c
+++ b/channels/chan_skinny.c
@@ -2794,6 +2794,9 @@ static int skinny_indicate(struct ast_channel *ast, int ind, const void *data, s
break;
case AST_CONTROL_PROCEEDING:
break;
+ case AST_CONTROL_SRCUPDATE:
+ ast_rtp_new_source(sub->rtp);
+ break;
default:
ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", ind);
return -1;
diff --git a/channels/chan_zap.c b/channels/chan_zap.c
index 42757fb5c..0c33f6286 100644
--- a/channels/chan_zap.c
+++ b/channels/chan_zap.c
@@ -5186,6 +5186,9 @@ static int zt_indicate(struct ast_channel *chan, int condition, const void *data
} else
res = 0;
break;
+ case AST_CONTROL_SRCUPDATE:
+ res = 0;
+ break;
case -1:
res = tone_zone_play_tone(p->subs[index].zfd, -1);
break;