--- q931.c.rev356 2006-07-07 09:16:00.000000000 +0200 +++ q931.c 2006-07-07 09:30:28.000000000 +0200 @@ -2693,18 +2693,17 @@ c->progressmask = PRI_PROG_CALLED_NOT_ISDN; } else c->progressmask = 0; - if (pri->localtype == PRI_CPE) { - UPDATE_OURCALLSTATE(pri, c, Q931_CALL_STATE_CONNECT_REQUEST); - } else { + if(pri->localtype == PRI_NETWORK || pri->switchtype == PRI_SWITCH_QSIG) UPDATE_OURCALLSTATE(pri, c, Q931_CALL_STATE_ACTIVE); - } + else + UPDATE_OURCALLSTATE(pri, c, Q931_CALL_STATE_CONNECT_REQUEST); c->peercallstate = Q931_CALL_STATE_ACTIVE; c->alive = 1; - /* Setup timer */ + /* Connect request timer */ if (c->retranstimer) pri_schedule_del(pri, c->retranstimer); c->retranstimer = 0; - if ((pri->localtype == PRI_CPE) && (!pri->subchannel)) + if ((c->ourcallstate == Q931_CALL_STATE_CONNECT_REQUEST) && (!pri->subchannel)) c->retranstimer = pri_schedule_event(pri, pri->timers[PRI_TIMER_T313], pri_connect_timeout, c); return send_message(pri, c, Q931_CONNECT, connect_ies); } @@ -3422,7 +3421,9 @@ q931_release_complete(pri,c,PRI_CAUSE_INVALID_CALL_REFERENCE); break; } - if (c->ourcallstate != Q931_CALL_STATE_CONNECT_REQUEST) { + if (!(c->ourcallstate == Q931_CALL_STATE_CONNECT_REQUEST) && + !(c->ourcallstate == Q931_CALL_STATE_ACTIVE && + (pri->localtype == PRI_NETWORK || pri->switchtype == PRI_SWITCH_QSIG))) { q931_status(pri,c,PRI_CAUSE_WRONG_MESSAGE); break; }