git-svn-id: http://svn.openzap.org/svn/openzap/trunk@265 a93c3328-9c30-0410-af19-c9cd2b2d52af
This commit is contained in:
Anthony Minessale 2007-06-16 13:46:32 +00:00
parent c1dfe0c0ae
commit 058739eed9
4 changed files with 36 additions and 12 deletions

View File

@ -555,17 +555,25 @@ static switch_status_t channel_receive_message_b(switch_core_session_t *session,
switch (msg->message_id) { switch (msg->message_id) {
case SWITCH_MESSAGE_INDICATE_RINGING: case SWITCH_MESSAGE_INDICATE_RINGING:
{
if (!switch_channel_test_flag(channel, CF_OUTBOUND)) { if (!switch_channel_test_flag(channel, CF_OUTBOUND)) {
zap_set_state_locked(tech_pvt->zchan, ZAP_CHANNEL_STATE_PROGRESS); zap_set_state_locked(tech_pvt->zchan, ZAP_CHANNEL_STATE_PROGRESS);
} }
case SWITCH_MESSAGE_INDICATE_PROGRESS:
if (!switch_channel_test_flag(channel, CF_OUTBOUND)) {
zap_set_state_locked(tech_pvt->zchan, ZAP_CHANNEL_STATE_EARLY_MEDIA);
} }
break;
case SWITCH_MESSAGE_INDICATE_PROGRESS:
{
if (!switch_channel_test_flag(channel, CF_OUTBOUND)) {
zap_set_state_locked(tech_pvt->zchan, ZAP_CHANNEL_STATE_PROGRESS_MEDIA);
}
}
break;
case SWITCH_MESSAGE_INDICATE_ANSWER: case SWITCH_MESSAGE_INDICATE_ANSWER:
{
if (!switch_channel_test_flag(channel, CF_OUTBOUND)) { if (!switch_channel_test_flag(channel, CF_OUTBOUND)) {
zap_set_state_locked(tech_pvt->zchan, ZAP_CHANNEL_STATE_UP); zap_set_state_locked(tech_pvt->zchan, ZAP_CHANNEL_STATE_UP);
} }
}
break; break;
default: default:
break; break;
@ -877,7 +885,7 @@ static ZIO_SIGNAL_CB_FUNCTION(on_fxo_signal)
switch_channel_t *channel = NULL; switch_channel_t *channel = NULL;
zap_status_t status; zap_status_t status;
zap_log(ZAP_LOG_DEBUG, "got fxo sig [%s]\n", zap_signal_event2str(sigmsg->event_id)); zap_log(ZAP_LOG_DEBUG, "got FXO sig [%s]\n", zap_signal_event2str(sigmsg->event_id));
switch(sigmsg->event_id) { switch(sigmsg->event_id) {
case ZAP_SIGEVENT_UP: case ZAP_SIGEVENT_UP:
@ -909,7 +917,7 @@ static ZIO_SIGNAL_CB_FUNCTION(on_fxs_signal)
private_t *tech_pvt = NULL; private_t *tech_pvt = NULL;
zap_status_t status = ZAP_SUCCESS; zap_status_t status = ZAP_SUCCESS;
zap_log(ZAP_LOG_DEBUG, "got fxs sig [%s]\n", zap_signal_event2str(sigmsg->event_id)); zap_log(ZAP_LOG_DEBUG, "got FXS sig [%s]\n", zap_signal_event2str(sigmsg->event_id));
switch(sigmsg->event_id) { switch(sigmsg->event_id) {
case ZAP_SIGEVENT_UP: case ZAP_SIGEVENT_UP:

View File

@ -263,13 +263,13 @@ typedef enum {
ZAP_CHANNEL_STATE_CALLWAITING, ZAP_CHANNEL_STATE_CALLWAITING,
ZAP_CHANNEL_STATE_TERMINATING, ZAP_CHANNEL_STATE_TERMINATING,
ZAP_CHANNEL_STATE_RESTART, ZAP_CHANNEL_STATE_RESTART,
ZAP_CHANNEL_STATE_EARLY_MEDIA, ZAP_CHANNEL_STATE_PROGRESS_MEDIA,
ZAP_CHANNEL_STATE_PROGRESS, ZAP_CHANNEL_STATE_PROGRESS,
ZAP_CHANNEL_STATE_INVALID ZAP_CHANNEL_STATE_INVALID
} zap_channel_state_t; } zap_channel_state_t;
#define CHANNEL_STATE_STRINGS "DOWN", "UP", "HANGUP", "HOLD", "DIALTONE", "COLLECT", \ #define CHANNEL_STATE_STRINGS "DOWN", "UP", "HANGUP", "HOLD", "DIALTONE", "COLLECT", \
"RING", "BUSY", "ATTN", "IDLE", "GENRING", "DIALING", "GET_CALLERID", "CALLWAITING", \ "RING", "BUSY", "ATTN", "IDLE", "GENRING", "DIALING", "GET_CALLERID", "CALLWAITING", \
"TERMINATING", "RESTART", "EARLY_MEDIA", "PROGRESS", "INVALID" "TERMINATING", "RESTART", "PROGRESS_MEDIA", "PROGRESS", "INVALID"
ZAP_STR2ENUM_P(zap_str2zap_channel_state, zap_channel_state2str, zap_channel_state_t) ZAP_STR2ENUM_P(zap_str2zap_channel_state, zap_channel_state2str, zap_channel_state_t)
typedef enum { typedef enum {

View File

@ -516,6 +516,18 @@ zap_status_t zap_channel_set_state(zap_channel_t *zchan, zap_channel_state_t sta
} }
switch(zchan->state) { switch(zchan->state) {
case ZAP_CHANNEL_STATE_UP:
{
switch(state) {
case ZAP_CHANNEL_STATE_PROGRESS:
case ZAP_CHANNEL_STATE_PROGRESS_MEDIA:
ok = 0;
break;
default:
break;
}
}
break;
case ZAP_CHANNEL_STATE_DOWN: case ZAP_CHANNEL_STATE_DOWN:
{ {
switch(state) { switch(state) {
@ -528,6 +540,7 @@ zap_status_t zap_channel_set_state(zap_channel_t *zchan, zap_channel_state_t sta
break; break;
} }
} }
break;
case ZAP_CHANNEL_STATE_BUSY: case ZAP_CHANNEL_STATE_BUSY:
{ {
switch(state) { switch(state) {
@ -538,6 +551,7 @@ zap_status_t zap_channel_set_state(zap_channel_t *zchan, zap_channel_state_t sta
break; break;
} }
} }
break;
default: default:
break; break;
} }
@ -771,8 +785,10 @@ zap_status_t zap_channel_done(zap_channel_t *zchan)
assert(zchan != NULL); assert(zchan != NULL);
memset(&zchan->caller_data, 0, sizeof(zchan->caller_data)); memset(&zchan->caller_data, 0, sizeof(zchan->caller_data));
zap_clear_flag_locked(zchan, ZAP_CHANNEL_INUSE); zap_clear_flag_locked(zchan, ZAP_CHANNEL_INUSE);
zap_clear_flag_locked(zchan, ZAP_CHANNEL_OUTBOUND); zap_clear_flag_locked(zchan, ZAP_CHANNEL_OUTBOUND);
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
if (zchan->fds[i] > -1) { if (zchan->fds[i] > -1) {
close(zchan->fds[i]); close(zchan->fds[i]);

View File

@ -110,7 +110,7 @@ static L3INT zap_isdn_931_34(void *pvt, L2UCHAR *msg, L2INT mlen)
break; break;
case Q931mes_ALERTING: case Q931mes_ALERTING:
{ {
zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_EARLY_MEDIA); zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_PROGRESS_MEDIA);
} }
break; break;
case Q931mes_PROGRESS: case Q931mes_PROGRESS:
@ -248,7 +248,7 @@ static __inline__ void state_advance(zap_channel_t *zchan)
zap_channel_close(&zchan); zap_channel_close(&zchan);
} }
break; break;
case ZAP_CHANNEL_STATE_EARLY_MEDIA: case ZAP_CHANNEL_STATE_PROGRESS_MEDIA:
{ {
if (zap_test_flag(zchan, ZAP_CHANNEL_OUTBOUND)) { if (zap_test_flag(zchan, ZAP_CHANNEL_OUTBOUND)) {
sig.event_id = ZAP_SIGEVENT_PROGRESS_MEDIA; sig.event_id = ZAP_SIGEVENT_PROGRESS_MEDIA;