--- q931.c.rev347 2006-06-26 10:51:19.000000000 +0200 +++ q931.c 2006-07-05 14:12:18.000000000 +0200 @@ -2642,17 +2642,17 @@ c->progressmask = PRI_PROG_CALLED_NOT_ISDN; } else c->progressmask = 0; - if (pri->localtype == PRI_CPE) - c->ourcallstate = Q931_CALL_STATE_CONNECT_REQUEST; - else + if(pri->localtype == PRI_NETWORK || pri->switchtype == PRI_SWITCH_QSIG) c->ourcallstate = Q931_CALL_STATE_ACTIVE; + else + c->ourcallstate = 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); } @@ -3370,7 +3370,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; }