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:
Anthony Minessale 2007-06-16 15:52:49 +00:00
parent a91ce4a518
commit cae2014e76
4 changed files with 23 additions and 6 deletions

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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) {

View File

@ -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);
}