ooh245.c
来自「一个非常美妙的proxy。功能强大。基于sip的协议。如果还要的话」· C语言 代码 · 共 1,743 行 · 第 1/5 页
C
1,743 行
call->masterSlaveState = OO_MasterSlave_Master; OOTRACEINFO3("MasterSlaveDetermination done - Master(%s, %s)\n", call->callType, call->callToken); return OO_OK; } if(masterSlave->terminalType > gH323ep.termType) { ooSendMasterSlaveDeterminationAck(call, "master"); call->masterSlaveState = OO_MasterSlave_Slave; OOTRACEINFO3("MasterSlaveDetermination done - Slave(%s, %s)\n", call->callType, call->callToken); return OO_OK; } /* Since term types are same, master slave determination will be done based on statusdetermination number */ OOTRACEDBGA3("Determining master-slave based on StatusDetermination" "Number (%s, %s)\n", call->callType, call->callToken); if(call->masterSlaveState == OO_MasterSlave_DetermineSent) statusDeterminationNumber = call->statusDeterminationNumber; else statusDeterminationNumber = ooGenerateStatusDeterminationNumber(); if(masterSlave->statusDeterminationNumber < statusDeterminationNumber) { ooSendMasterSlaveDeterminationAck(call, "slave"); call->masterSlaveState = OO_MasterSlave_Master; OOTRACEINFO3("MasterSlaveDetermination done - Master(%s, %s)\n", call->callType, call->callToken); return OO_OK; } if(masterSlave->statusDeterminationNumber > statusDeterminationNumber) { ooSendMasterSlaveDeterminationAck(call, "master"); call->masterSlaveState = OO_MasterSlave_Slave; OOTRACEINFO3("MasterSlaveDetermination done - Slave(%s, %s)\n", call->callType, call->callToken); return OO_OK; } if(masterSlave->statusDeterminationNumber == statusDeterminationNumber) { ooSendMasterSlaveDeterminationReject (call); OOTRACEERR3("ERROR:MasterSlaveDetermination failed- identical " "numbers (%s, %s)\n", call->callType, call->callToken); } break; case OOMasterSlaveAck: masterSlaveAck = (H245MasterSlaveDeterminationAck*)pmsg; if(call->masterSlaveState == OO_MasterSlave_DetermineSent) { if(masterSlaveAck->decision.t == T_H245MasterSlaveDeterminationAck_decision_master) { ooSendMasterSlaveDeterminationAck(call, "slave"); call->masterSlaveState = OO_MasterSlave_Master; OOTRACEINFO3("MasterSlaveDetermination done - Master(%s, %s)\n", call->callType, call->callToken); } else { ooSendMasterSlaveDeterminationAck(call, "master"); call->masterSlaveState = OO_MasterSlave_Slave; OOTRACEINFO3("MasterSlaveDetermination done - Slave(%s, %s)\n", call->callType, call->callToken); } } if(call->localTermCapState == OO_LocalTermCapSetAckRecvd && call->remoteTermCapState == OO_RemoteTermCapSetAckSent) { /*Since Cap exchange and MasterSlave Procedures are done */ if(gH323ep.h323Callbacks.openLogicalChannels) gH323ep.h323Callbacks.openLogicalChannels(call); else{ if(!call->logicalChans) ooOpenLogicalChannels(call); }#if 0 if(!call->logicalChans){ if(!gH323ep.h323Callbacks.openLogicalChannels) ooOpenLogicalChannels(call); else gH323ep.h323Callbacks.openLogicalChannels(call); }#endif } else OOTRACEDBGC1("Not opening logical channels as Cap exchange " "remaining\n"); break; default: OOTRACEWARN3("Warn:Unhandled Master Slave message received - %s - " "%s\n", call->callType, call->callToken); } return OO_OK; }int ooSendMasterSlaveDetermination(OOH323CallData *call){ int ret; H245Message* ph245msg=NULL; H245RequestMessage *request; OOCTXT *pctxt=&gH323ep.msgctxt; H245MasterSlaveDetermination* pMasterSlave; /* Check whether Master Slave Determination already in progress */ if(call->masterSlaveState != OO_MasterSlave_Idle) { OOTRACEINFO3("MasterSlave determination already in progress (%s, %s)\n", call->callType, call->callToken); return OO_OK; } ret = ooCreateH245Message(&ph245msg, T_H245MultimediaSystemControlMessage_request); if(ret != OO_OK) { OOTRACEERR3("Error: creating H245 message - MasterSlave Determination " "(%s, %s)\n", call->callType, call->callToken); return OO_FAILED; } ph245msg->msgType = OOMasterSlaveDetermination; request = ph245msg->h245Msg.u.request; request->t = T_H245RequestMessage_masterSlaveDetermination; request->u.masterSlaveDetermination = (H245MasterSlaveDetermination*) ASN1MALLOC(pctxt, sizeof(H245MasterSlaveDetermination)); pMasterSlave = request->u.masterSlaveDetermination; memset(pMasterSlave, 0, sizeof(H245MasterSlaveDetermination)); pMasterSlave->terminalType = gH323ep.termType; pMasterSlave->statusDeterminationNumber = ooGenerateStatusDeterminationNumber(); call->statusDeterminationNumber = pMasterSlave->statusDeterminationNumber; OOTRACEDBGA3("Built MasterSlave Determination (%s, %s)\n", call->callType, call->callToken); ret = ooSendH245Msg(call, ph245msg); if(ret != OO_OK) { OOTRACEERR3("Error:Failed to enqueue MasterSlaveDetermination message to" " outbound queue. (%s, %s)\n", call->callType, call->callToken); }else call->masterSlaveState = OO_MasterSlave_DetermineSent; ooFreeH245Message(call, ph245msg); return ret;}int ooSendMasterSlaveDeterminationAck(OOH323CallData* call, char * status){ int ret=0; H245ResponseMessage * response=NULL; H245Message *ph245msg=NULL; OOCTXT *pctxt=&gH323ep.msgctxt; ret = ooCreateH245Message(&ph245msg, T_H245MultimediaSystemControlMessage_response); if(ret != OO_OK) { OOTRACEERR3("Error:H245 message creation failed for - MasterSlave " "Determination Ack (%s, %s)\n",call->callType, call->callToken); return OO_FAILED; } ph245msg->msgType = OOMasterSlaveAck; response = ph245msg->h245Msg.u.response; memset(response, 0, sizeof(H245ResponseMessage)); response->t = T_H245ResponseMessage_masterSlaveDeterminationAck; response->u.masterSlaveDeterminationAck = (H245MasterSlaveDeterminationAck*) ASN1MALLOC(pctxt, sizeof(H245MasterSlaveDeterminationAck)); memset(response->u.masterSlaveDeterminationAck, 0, sizeof(H245MasterSlaveDeterminationAck)); if(!strcmp("master", status)) response->u.masterSlaveDeterminationAck->decision.t = T_H245MasterSlaveDeterminationAck_decision_master; else response->u.masterSlaveDeterminationAck->decision.t = T_H245MasterSlaveDeterminationAck_decision_slave; OOTRACEDBGA3("Built MasterSlave determination Ack (%s, %s)\n", call->callType, call->callToken); ret = ooSendH245Msg(call, ph245msg); if(ret != OO_OK) { OOTRACEERR3("Error:Failed to enqueue MasterSlaveDeterminationAck message" " to outbound queue. (%s, %s)\n", call->callType, call->callToken); } ooFreeH245Message(call, ph245msg); return ret;}int ooSendMasterSlaveDeterminationReject (OOH323CallData* call){ int ret=0; H245ResponseMessage* response=NULL; H245Message *ph245msg=NULL; OOCTXT *pctxt=&gH323ep.msgctxt; ret = ooCreateH245Message (&ph245msg, T_H245MultimediaSystemControlMessage_response); if (ret != OO_OK) { OOTRACEERR3("Error:H245 message creation failed for - MasterSlave " "Determination Reject (%s, %s)\n",call->callType, call->callToken); return OO_FAILED; } ph245msg->msgType = OOMasterSlaveReject; response = ph245msg->h245Msg.u.response; response->t = T_H245ResponseMessage_masterSlaveDeterminationReject; response->u.masterSlaveDeterminationReject = (H245MasterSlaveDeterminationReject*) memAlloc (pctxt, sizeof(H245MasterSlaveDeterminationReject)); response->u.masterSlaveDeterminationReject->cause.t = T_H245MasterSlaveDeterminationReject_cause_identicalNumbers; OOTRACEDBGA3 ("Built MasterSlave determination reject (%s, %s)\n", call->callType, call->callToken); ret = ooSendH245Msg (call, ph245msg); if (ret != OO_OK) { OOTRACEERR3 ("Error:Failed to enqueue MasterSlaveDeterminationReject " "message to outbound queue.(%s, %s)\n", call->callType, call->callToken); } ooFreeH245Message (call, ph245msg); return ret;}int ooSendMasterSlaveDeterminationRelease(OOH323CallData * call){ int ret=0; H245IndicationMessage* indication=NULL; H245Message *ph245msg=NULL; OOCTXT *pctxt=&gH323ep.msgctxt; ret = ooCreateH245Message (&ph245msg, T_H245MultimediaSystemControlMessage_indication); if (ret != OO_OK) { OOTRACEERR3("Error:H245 message creation failed for - MasterSlave " "Determination Release (%s, %s)\n",call->callType, call->callToken); return OO_FAILED; } ph245msg->msgType = OOMasterSlaveRelease; indication = ph245msg->h245Msg.u.indication; indication->t = T_H245IndicationMessage_masterSlaveDeterminationRelease; indication->u.masterSlaveDeterminationRelease = (H245MasterSlaveDeterminationRelease*) memAlloc (pctxt, sizeof(H245MasterSlaveDeterminationRelease)); if(!indication->u.masterSlaveDeterminationRelease) { OOTRACEERR3("Error: Failed to allocate memory for MSDRelease message." " (%s, %s)\n", call->callType, call->callToken); ooFreeH245Message(call, ph245msg); return OO_FAILED; } OOTRACEDBGA3 ("Built MasterSlave determination Release (%s, %s)\n", call->callType, call->callToken); ret = ooSendH245Msg (call, ph245msg); if (ret != OO_OK) { OOTRACEERR3 ("Error:Failed to enqueue MasterSlaveDeterminationRelease " "message to outbound queue.(%s, %s)\n", call->callType, call->callToken); } ooFreeH245Message (call, ph245msg); return ret;}int ooHandleMasterSlaveReject (OOH323CallData *call, H245MasterSlaveDeterminationReject* reject){ if(call->msdRetries < DEFAULT_MAX_RETRIES) { call->msdRetries++; OOTRACEDBGA3("Retrying MasterSlaveDetermination. (%s, %s)\n", call->callType, call->callToken); call->masterSlaveState = OO_MasterSlave_Idle; ooSendMasterSlaveDetermination(call); return OO_OK; } OOTRACEERR3("Error:Failed to complete MasterSlaveDetermination - " "Ending call. (%s, %s)\n", call->callType, call->callToken); if(call->callState < OO_CALL_CLEAR) { call->callEndReason = OO_REASON_LOCAL_CLEARED; call->callState = OO_CALL_CLEAR; } return OO_OK;}int ooHandleOpenLogicalChannel(OOH323CallData* call, H245OpenLogicalChannel *olc){ H245OpenLogicalChannel_forwardLogicalChannelParameters *flcp = &(olc->forwardLogicalChannelParameters); #if 0 if(!call->logicalChans) ooOpenLogicalChannels(call);#endif /* Check whether channel type is supported. Only supported channel type for now is g711ulaw audio channel. */ switch(flcp->dataType.t) { case T_H245DataType_nonStandard: OOTRACEWARN3("Warn:Media channel data type " "'T_H245DataType_nonStandard' not supported (%s, %s)\n", call->callType, call->callToken); ooSendOpenLogicalChannelReject(call, olc->forwardLogicalChannelNumber, T_H245OpenLogicalChannelReject_cause_dataTypeNotSupported); break; case T_H245DataType_nullData: OOTRACEWARN3("Warn:Media channel data type " "'T_H245DataType_nullData' not supported (%s, %s)\n", call->callType, call->callToken); ooSendOpenLogicalChannelReject(call, olc->forwardLogicalChannelNumber,
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?