Index: addons/ooh323c/src/ootypes.h =================================================================== --- addons/ooh323c/src/ootypes.h (revision 343442) +++ addons/ooh323c/src/ootypes.h (working copy) @@ -190,8 +190,9 @@ typedef enum OOCallClearReason { #define OORequestMode 133 #define OORequestDelayResponse 134 #define OORequestDelayRequest 135 +#define OOStatus 136 -#define OO_MSGTYPE_MAX 135 +#define OO_MSGTYPE_MAX 136 /* Timer types */ #define OO_CALLESTB_TIMER (1<<0) Index: addons/ooh323c/src/ooh323.c =================================================================== --- addons/ooh323c/src/ooh323.c (revision 343442) +++ addons/ooh323c/src/ooh323.c (working copy) @@ -1792,6 +1792,7 @@ int ooHandleH2250Message(OOH323CallData *call, Q93 case Q931StatusEnquiryMsg: OOTRACEINFO3("H.225 Status Inquiry message Received (%s, %s)\n", call->callType, call->callToken); + ooSendStatus(call); ooFreeQ931Message(call->msgctxt, q931Msg); break; case Q931SetupAckMsg: Index: addons/ooh323c/src/ooh245.c =================================================================== --- addons/ooh323c/src/ooh245.c (revision 343442) +++ addons/ooh323c/src/ooh245.c (working copy) @@ -3069,7 +3069,12 @@ int ooOnReceivedTerminalCapabilitySet(OOH323CallDa we can accept new capability set only. We must remember also that new join caps will be previously joined caps with new cap set. */ - if(call->remoteTermCapSeqNo == tcs->sequenceNumber) + +/* 20111103 */ +/* for addition for previous we must check repeated tcs if it's not first + tcs i.e. SeqNo is not null */ + + if(call->remoteTermCapSeqNo && call->remoteTermCapSeqNo == tcs->sequenceNumber) call->localTermCapState = OO_LocalTermCapExchange_Idle; } Index: addons/ooh323c/src/oochannels.c =================================================================== --- addons/ooh323c/src/oochannels.c (revision 343442) +++ addons/ooh323c/src/oochannels.c (working copy) @@ -1576,6 +1576,10 @@ int ooOnSendMsg /* if(gH323ep.h323Callbacks.onAlerting && call->callState < OO_CALL_CLEAR) gH323ep.h323Callbacks.onAlerting(call); */ break; + case OOStatus: + OOTRACEINFO3("Sent Message - Status (%s, %s) \n", call->callType, + call->callToken); + break; case OOConnect: OOTRACEINFO3("Sent Message - Connect (%s, %s)\n", call->callType, call->callToken); Index: addons/ooh323c/src/ooq931.c =================================================================== --- addons/ooh323c/src/ooq931.c (revision 343442) +++ addons/ooh323c/src/ooq931.c (working copy) @@ -681,6 +681,10 @@ int ooEncodeH225Message(OOH323CallData *call, Q931 else if(pq931Msg->messageType == Q931InformationMsg){ msgbuf[i++] = OOInformationMessage; } + else if(pq931Msg->messageType == Q931StatusMsg || + pq931Msg->messageType == Q931StatusEnquiryMsg){ + msgbuf[i++] = OOStatus; + } else if(pq931Msg->messageType == Q931FacilityMsg){ msgbuf[i++] = OOFacility; msgbuf[i++] = pq931Msg->tunneledMsgType; @@ -1703,6 +1707,72 @@ int ooSendStartH245Facility(OOH323CallData *call) return ret; } +/* + +*/ + +int ooSendStatus(OOH323CallData *call) +{ + int ret; + H225Status_UUIE *status; + Q931Message *q931msg=NULL; + /* OOCTXT *pctxt = &gH323ep.msgctxt; */ + OOCTXT *pctxt = call->msgctxt; + + OOTRACEDBGC3("Building StatusMsg (%s, %s)\n", call->callType, + call->callToken); + ret = ooCreateQ931Message(pctxt, &q931msg, Q931StatusMsg); + if(ret != OO_OK) + { + OOTRACEERR1("Error: In allocating memory for - H225 Status " + "message\n"); + return OO_FAILED; + } + + q931msg->callReference = call->callReference; + + q931msg->userInfo = (H225H323_UserInformation*)memAllocZ(pctxt, + sizeof(H225H323_UserInformation)); + if(!q931msg->userInfo) + { + OOTRACEERR1("ERROR:Memory - ooSendStatus - userInfo\n"); + return OO_FAILED; + } + q931msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent=1; + q931msg->userInfo->h323_uu_pdu.h245Tunneling = + OO_TESTFLAG(call->flags, OO_M_TUNNELING); + q931msg->userInfo->h323_uu_pdu.h323_message_body.t = + T_H225H323_UU_PDU_h323_message_body_status; + + status = (H225Status_UUIE*)memAllocZ(pctxt, + sizeof(H225Status_UUIE)); + if(!status) + { + OOTRACEERR1("ERROR:Memory - ooSendStatus \n"); + return OO_FAILED; + } + q931msg->userInfo->h323_uu_pdu.h323_message_body.u.status = status; + + status->callIdentifier.guid.numocts = + call->callIdentifier.guid.numocts; + memcpy(status->callIdentifier.guid.data, + call->callIdentifier.guid.data, + call->callIdentifier.guid.numocts); + status->protocolIdentifier = gProtocolID; + + OOTRACEDBGA3("Built Status (%s, %s)\n", call->callType, + call->callToken); + ret = ooSendH225Msg(call, q931msg); + if(ret != OO_OK) + { + OOTRACEERR3("Error:Failed to enqueue Status message to outbound queue.(%s, %s)\n", call->callType, call->callToken); + } + + /* memReset(&gH323ep.msgctxt); */ + memReset(call->msgctxt); + + return ret; +} int ooSendReleaseComplete(OOH323CallData *call) { int ret; Index: addons/ooh323c/src/ooq931.h =================================================================== --- addons/ooh323c/src/ooq931.h (revision 343442) +++ addons/ooh323c/src/ooq931.h (working copy) @@ -469,6 +469,8 @@ EXTERN int ooSendAlerting(struct OOH323CallData *c EXTERN int ooSendProgress(struct OOH323CallData *call); +EXTERN int ooSendStatus(struct OOH323CallData *call); + /** * This function is invoked to send Facility message. *