diff --git addons/ooh323c/src/ooCalls.c addons/ooh323c/src/ooCalls.c index 350befd..891ad61 100644 --- addons/ooh323c/src/ooCalls.c +++ addons/ooh323c/src/ooCalls.c @@ -233,18 +233,25 @@ int ooEndCall(OOH323CallData *call) return OO_OK; } - if(call->logicalChans) - { - OOTRACEINFO3("Clearing all logical channels. (%s, %s)\n", call->callType, - call->callToken); - ooClearAllLogicalChannels(call); + if(OO_TESTFLAG(call->flags, OO_M_ENDSESSION_BUILT)) { + if(call->h245SessionState == OO_H245SESSION_ACTIVE || + call->h245SessionState == OO_H245SESSION_ENDRECVD || call->h245SessionState == OO_H245SESSION_ENDSENT) { + return OO_OK; // h.245 close pending + } } if(!OO_TESTFLAG(call->flags, OO_M_ENDSESSION_BUILT)) { + OOTRACEINFO4("Closing H.245 sessions. %d (%s, %s)\n", call->h245SessionState, call->callType, call->callToken); if(call->h245SessionState == OO_H245SESSION_ACTIVE || call->h245SessionState == OO_H245SESSION_ENDRECVD) { + if(call->logicalChans) { + OOTRACEINFO3("Clearing all logical channels. (%s, %s)\n", call->callType, + call->callToken); + ooCloseAllLogicalChannels(call, NULL); + } + ooSendEndSessionCommand(call); OO_SETFLAG(call->flags, OO_M_ENDSESSION_BUILT); } diff --git addons/ooh323c/src/oochannels.c addons/ooh323c/src/oochannels.c index f7dd7c5..619cf70 100644 --- addons/ooh323c/src/oochannels.c +++ addons/ooh323c/src/oochannels.c @@ -225,9 +225,9 @@ int ooSendH225Msg(OOH323CallData *call, Q931Message *msg) if(encodebuf[0] == OOReleaseComplete || (encodebuf[0]==OOFacility && encodebuf[1]==OOEndSessionCommand)) { - dListFreeAll(call->pctxt, &call->pH225Channel->outQueue); + // dListFreeAll(call->pctxt, &call->pH225Channel->outQueue); dListAppend (call->pctxt, &call->pH225Channel->outQueue, encodebuf); - // ooSendMsg(call, OOQ931MSG); + ooSendMsg(call, OOQ931MSG); } else{ dListAppend (call->pctxt, &call->pH225Channel->outQueue, encodebuf); diff --git addons/ooh323c/src/ooh323.c addons/ooh323c/src/ooh323.c index be02f8f..0c8b182 100644 --- addons/ooh323c/src/ooh323.c +++ addons/ooh323c/src/ooh323.c @@ -366,7 +366,7 @@ int ooOnReceivedReleaseComplete(OOH323CallData *call, Q931Message *q931Msg) } } } - call->callState = OO_CALL_CLEARED; + call->callState = OO_CALL_CLEAR; return ret; }