pretty damn close to being operational
git-svn-id: http://svn.openzap.org/svn/openzap/trunk@266 a93c3328-9c30-0410-af19-c9cd2b2d52af
This commit is contained in:
parent
058739eed9
commit
aa53cf7997
|
@ -318,7 +318,7 @@ static switch_status_t channel_on_hangup(switch_core_session_t *session)
|
|||
break;
|
||||
case ZAP_CHAN_TYPE_B:
|
||||
{
|
||||
if (tech_pvt->zchan->state != ZAP_CHANNEL_STATE_DOWN) {
|
||||
if (tech_pvt->zchan->state != ZAP_CHANNEL_STATE_DOWN && tech_pvt->zchan->state != ZAP_CHANNEL_STATE_TERMINATING) {
|
||||
tech_pvt->zchan->caller_data.hangup_cause = switch_channel_get_cause(channel);
|
||||
zap_set_state_locked(tech_pvt->zchan, ZAP_CHANNEL_STATE_HANGUP);
|
||||
}
|
||||
|
@ -977,7 +977,7 @@ static ZIO_SIGNAL_CB_FUNCTION(on_isdn_signal)
|
|||
while((session = zap_channel_get_session(sigmsg->channel, 0))) {
|
||||
zap_channel_clear_token(sigmsg->channel, 0);
|
||||
channel = switch_core_session_get_channel(session);
|
||||
switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING);
|
||||
switch_channel_hangup(channel, sigmsg->channel->caller_data.hangup_cause);
|
||||
switch_core_session_rwunlock(session);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1018,7 +1018,7 @@ L3INT Q931Uie_Cause(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * I
|
|||
pie->Location = IBuf[Octet+Off] & 0x0f;
|
||||
|
||||
/* Octet 3a */
|
||||
if((IBuf[Octet+Off] & 0x80) != 0)
|
||||
if((IBuf[Octet+Off] & 0x80) == 0)
|
||||
{
|
||||
Off++;
|
||||
pie->Recom = IBuf[Octet+Off] & 0x7f;
|
||||
|
@ -1027,6 +1027,7 @@ L3INT Q931Uie_Cause(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * I
|
|||
|
||||
/* Octet 4 */
|
||||
pie->Value = IBuf[Octet+Off] & 0x7f;
|
||||
Octet++;
|
||||
|
||||
Q931IESizeTest(Q931E_CAUSE);
|
||||
|
||||
|
|
|
@ -516,6 +516,19 @@ zap_status_t zap_channel_set_state(zap_channel_t *zchan, zap_channel_state_t sta
|
|||
}
|
||||
|
||||
switch(zchan->state) {
|
||||
case ZAP_CHANNEL_STATE_HANGUP:
|
||||
case ZAP_CHANNEL_STATE_TERMINATING:
|
||||
{
|
||||
ok = 0;
|
||||
switch(state) {
|
||||
case ZAP_CHANNEL_STATE_DOWN:
|
||||
ok = 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ZAP_CHANNEL_STATE_UP:
|
||||
{
|
||||
switch(state) {
|
||||
|
|
|
@ -105,6 +105,8 @@ static L3INT zap_isdn_931_34(void *pvt, L2UCHAR *msg, L2INT mlen)
|
|||
break;
|
||||
case Q931mes_DISCONNECT:
|
||||
{
|
||||
Q931ie_Cause *cause = Q931GetIEPtr(gen->Cause, gen->buf);
|
||||
zchan->caller_data.hangup_cause = cause->Value;
|
||||
zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_TERMINATING);
|
||||
}
|
||||
break;
|
||||
|
@ -172,8 +174,8 @@ static int zap_isdn_921_23(void *pvt, L2UCHAR *msg, L2INT mlen)
|
|||
{
|
||||
int ret;
|
||||
char bb[4096] = "";
|
||||
print_hex_bytes(msg, mlen, bb, sizeof(bb));
|
||||
zap_log(ZAP_LOG_DEBUG, "READ %d\n%s\n%s\n\n", (int)mlen, LINE, bb);
|
||||
print_hex_bytes(msg+4, mlen-2, bb, sizeof(bb));
|
||||
zap_log(ZAP_LOG_DEBUG, "READ %d\n%s\n%s\n\n", (int)mlen-2, LINE, bb);
|
||||
|
||||
ret = Q931Rx23(pvt, msg, mlen);
|
||||
if (ret != 0)
|
||||
|
@ -342,7 +344,6 @@ static __inline__ void state_advance(zap_channel_t *zchan)
|
|||
#endif
|
||||
CalledNum.TypNum = 2;
|
||||
CalledNum.NumPlanID = 1;
|
||||
printf("WTF: [%s]\n", zchan->caller_data.ani);
|
||||
CalledNum.Size += strlen(zchan->caller_data.ani);
|
||||
gen->CalledNum = Q931AppendIE((L3UCHAR *) gen, (L3UCHAR *) &CalledNum);
|
||||
ptrCalledNum = Q931GetIEPtr(gen->CalledNum, gen->buf);
|
||||
|
@ -370,6 +371,8 @@ static __inline__ void state_advance(zap_channel_t *zchan)
|
|||
break;
|
||||
case ZAP_CHANNEL_STATE_TERMINATING:
|
||||
{
|
||||
sig.event_id = ZAP_SIGEVENT_STOP;
|
||||
status = data->sig_cb(&sig);
|
||||
gen->MesType = Q931mes_RELEASE;
|
||||
Q931Rx43(&data->q931, (void *)gen, gen->Size);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue