diff options
author | file <file@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-03-05 22:32:10 +0000 |
---|---|---|
committer | file <file@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-03-05 22:32:10 +0000 |
commit | 277beb94a0f5aa85eeb0603f6d11319cce02c3cd (patch) | |
tree | 32a4e75de52a4d00eb32bb5917c271f775d0743e /channels | |
parent | 1de0d5b8308435068cf5a04314bfd98cc712c8ee (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.c | 54 | ||||
-rw-r--r-- | channels/chan_h323.c | 4 | ||||
-rw-r--r-- | channels/chan_mgcp.c | 3 | ||||
-rw-r--r-- | channels/chan_oss.c | 47 | ||||
-rw-r--r-- | channels/chan_phone.c | 27 | ||||
-rw-r--r-- | channels/chan_sip.c | 4 | ||||
-rw-r--r-- | channels/chan_skinny.c | 3 | ||||
-rw-r--r-- | channels/chan_zap.c | 3 |
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; |