int ooOnReceivedAlerting(OOH323CallData *call, Q931Message *q931Msg);
int ooOnReceivedProgress(OOH323CallData *call, Q931Message *q931Msg);
int ooHandleDisplayIE(OOH323CallData *call, Q931Message *q931Msg);
+int ooHandleH2250ID (OOH323CallData *call, H225ProtocolIdentifier protocolIdentifier);
int ooHandleDisplayIE(OOH323CallData *call, Q931Message *q931Msg) {
Q931InformationElement* pDisplayIE;
return OO_OK;
}
+int ooHandleH2250ID (OOH323CallData *call, H225ProtocolIdentifier protocolIdentifier) {
+ if (!call->h225version && (protocolIdentifier.numids >= 6) &&
+ (protocolIdentifier.subid[3] == 2250)) {
+ call->h225version = protocolIdentifier.subid[5];
+ OOTRACEDBGC4("Extract H.225 remote version, it's %d, (%s, %s)\n", call->h225version,
+ call->callType, call->callToken);
+
+ }
+ return OO_OK;
+}
+
int ooHandleFastStart(OOH323CallData *call, H225Facility_UUIE *facility)
{
H245OpenLogicalChannel* olc;
}
}
} else if (OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
- ret =ooSendTCSandMSD(call);
+ if (call->h225version >= 4) {
+ ret =ooSendTCSandMSD(call);
+ }
if (ret != OO_OK)
return ret;
}
"%s\n", call->callType, call->callToken);
return OO_FAILED;
}
+ ooHandleH2250ID(call, setup->protocolIdentifier);
memcpy(call->callIdentifier.guid.data, setup->callIdentifier.guid.data,
setup->callIdentifier.guid.numocts);
call->callIdentifier.guid.numocts = setup->callIdentifier.guid.numocts;
pDisplayIE = ooQ931GetIE(q931Msg, Q931DisplayIE);
if(pDisplayIE)
{
- call->remoteDisplayName = (char *) memAlloc(call->pctxt,
+ call->remoteDisplayName = (char *) memAllocZ(call->pctxt,
pDisplayIE->length*sizeof(ASN1OCTET)+1);
- strcpy(call->remoteDisplayName, (char *)pDisplayIE->data);
+ strncpy(call->remoteDisplayName, (char *)pDisplayIE->data, pDisplayIE->length*sizeof(ASN1OCTET));
}
/*Extract Remote Aliases, if present*/
if(setup->m.sourceAddressPresent)
return OO_FAILED;
}
+ ooHandleH2250ID(call, callProceeding->protocolIdentifier);
/* Handle fast-start */
if(OO_TESTFLAG (call->flags, OO_M_FASTSTART))
{
}
return OO_FAILED;
}
+ ooHandleH2250ID(call, alerting->protocolIdentifier);
/*Handle fast-start */
if(OO_TESTFLAG (call->flags, OO_M_FASTSTART) &&
!OO_TESTFLAG(call->flags, OO_M_FASTSTARTANSWERED))
OOTRACEINFO3("Tunneling and h245address provided."
"Giving preference to Tunneling (%s, %s)\n",
call->callType, call->callToken);
- ret =ooSendTCSandMSD(call);
+ if (call->h225version >= 4) {
+ ret =ooSendTCSandMSD(call);
+ }
if (ret != OO_OK)
return ret;
call->callState = OO_CALL_CLEAR;
}
return OO_FAILED;
+ } else {
+ if (call->h225version >= 4) {
+ ret =ooSendTCSandMSD(call);
+ }
}
}
}
}
return OO_FAILED;
}
+ ooHandleH2250ID(call, progress->protocolIdentifier);
/*Handle fast-start */
if(OO_TESTFLAG (call->flags, OO_M_FASTSTART) &&
!OO_TESTFLAG(call->flags, OO_M_FASTSTARTANSWERED))
OOTRACEINFO3("Tunneling and h245address provided."
"Giving preference to Tunneling (%s, %s)\n",
call->callType, call->callToken);
- ret =ooSendTCSandMSD(call);
+ if (call->h225version >= 4) {
+ ret =ooSendTCSandMSD(call);
+ }
if (ret != OO_OK)
return ret;
} else if(progress->m.h245AddressPresent) {
call->callState = OO_CALL_CLEAR;
}
return OO_FAILED;
+ } else {
+ if (call->h225version >= 4) {
+ ret =ooSendTCSandMSD(call);
+ }
}
}
}
}
return OO_FAILED;
}
-
+ ooHandleH2250ID(call, connect->protocolIdentifier);
/*Handle fast-start */
if(OO_TESTFLAG (call->flags, OO_M_FASTSTART) &&
!OO_TESTFLAG (call->flags, OO_M_FASTSTARTANSWERED))
OOTRACEDBGB3("Finished tunneled messages in Connect. (%s, %s)\n",
call->callType, call->callToken);
- /*
+ }
+ /*
Send TCS as call established and no capability exchange has yet
started. This will be true only when separate h245 connection is not
established and tunneling is being used.
- */
- if(call->localTermCapState == OO_LocalTermCapExchange_Idle)
- {
- /*Start terminal capability exchange and master slave determination */
- ret = ooSendTermCapMsg(call);
- if(ret != OO_OK)
- {
- OOTRACEERR3("ERROR:Sending Terminal capability message (%s, %s)\n",
- call->callType, call->callToken);
- return ret;
- }
- }
-
+ */
+ if(call->localTermCapState == OO_LocalTermCapExchange_Idle)
+ {
+ /*Start terminal capability exchange and master slave determination */
+ ret = ooSendTermCapMsg(call);
+ if(ret != OO_OK)
+ {
+ OOTRACEERR3("ERROR:Sending Terminal capability message (%s, %s)\n",
+ call->callType, call->callToken);
+ return ret;
+ }
}
+
call->callState = OO_CALL_CONNECTED;
if (call->rtdrCount > 0 && call->rtdrInterval > 0) {
return ooSendRoundTripDelayRequest(call);
H225TransportAddress_ipAddress_ip *ip = NULL;
OOTRACEDBGC3("Received Facility Message.(%s, %s)\n", call->callType,
call->callToken);
+
+ ooHandleDisplayIE(call, pQ931Msg);
+
/* Get Reference to H323_UU_PDU */
if(!pQ931Msg->userInfo)
{
facility = pH323UUPdu->h323_message_body.u.facility;
if(facility)
{
+ ooHandleH2250ID(call, facility->protocolIdentifier);
/* Depending on the reason of facility message handle the message */
if(facility->reason.t == T_H225FacilityReason_transportedInformation)
{
OOTRACEINFO3("INFO: H.245 connection already established with remote"
" endpoint (%s, %s)\n", call->callType, call->callToken);
}
+ ooSendTCSandMSD(call);
return OO_OK;
}
int offset, x;
int rv = ASN_OK;
char number[128];
+ char *display = NULL;
/* OOCTXT *pctxt = &gH323ep.msgctxt; */
OOCTXT *pctxt = call->msgctxt;
}
if(ie->discriminator == Q931DisplayIE)
{
- OOTRACEDBGB1(" Display IE = {\n");
- OOTRACEDBGB2(" %s\n", ie->data);
- OOTRACEDBGB1(" }\n");
+ if (!(display = memAllocZ(pctxt, ie->length + 1))) {
+ OOTRACEERR4("Can't alloc DisplayIE buffer for %n bytes, (%s, %s)\n", ie->length,
+ call->callType, call->callToken);
+ } else {
+ memcpy(display, ie->data,ie->length);
+ OOTRACEDBGB1(" Display IE = {\n");
+ OOTRACEDBGB2(" %s\n", display);
+ OOTRACEDBGB1(" }\n");
+ }
}
if(ie->discriminator == Q931KeypadIE)
OOTRACEERR3("Error: Failed to enqueue Alerting message to outbound queue. (%s, %s)\n", call->callType, call->callToken);
}
- ooSendTCSandMSD(call);
+ if (call->h225version >= 4) {
+ ooSendTCSandMSD(call);
+ }
memReset (call->msgctxt);
return ret;
if (!OO_TESTFLAG(call->flags, OO_M_TUNNELING) && call->h245listener)
ooSendStartH245Facility(call);
- ooSendTCSandMSD(call);
+ if (call->h225version >= 4) {
+ ooSendTCSandMSD(call);
+ }
memReset (call->msgctxt);
return ret;
}
- /* Add h245 listener address. Do not add H245 listener address in case
- of fast-start. */
+ /* Add h245 listener address. */
+ /* Do not add H245 listener address in case
+ of fast-start. why? */
+ /* May 20110205 */
+ /* Send h245 listener addr any case if H245 connection isn't established */
if (/* (!OO_TESTFLAG(call->flags, OO_M_FASTSTART) ||
call->remoteFastStartOLCs.count == 0) && */
!OO_TESTFLAG (call->flags, OO_M_TUNNELING) &&
- !call->h245listener && ooCreateH245Listener(call) == OO_OK)
+ ( (!call->h245listener && ooCreateH245Listener(call) == OO_OK) ||
+ !call->pH245Channel))
{
connect->m.h245AddressPresent = TRUE;
connect->h245Address.t = T_H225TransportAddress_ipAddress;
return OO_FAILED;
}
/* memReset(&gH323ep.msgctxt); */
+ ooSendTCSandMSD(call);
memReset(call->msgctxt);
call->callState = OO_CALL_CONNECTED;
/* For H.323 version 4 and higher, if fast connect, tunneling should be
supported.
+ why?
*/
- if(OO_TESTFLAG(call->flags, OO_M_FASTSTART)) {
- q931msg->userInfo->h323_uu_pdu.h245Tunneling = TRUE;
- OO_SETFLAG(call->flags, OO_M_TUNNELING);
- }
OOTRACEDBGA3("Built SETUP message (%s, %s)\n", call->callType,
call->callToken);