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);
}
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);
}
}
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;
/* Octet 4 */
pie->Value = IBuf[Octet+Off] & 0x7f;
+ Octet++;
Q931IESizeTest(Q931E_CAUSE);
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;
{
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)
#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);
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);
}