📄 cmctrl.c
字号:
/* See if we need to stop the control at all - it might have been closed already by an
outgoing endSessionCommand message */
if (m_callget(call, control))
{
/* First update the status so we don't get into stopControl() twice from 2 different
threads: one on the incoming endSessionCommand and one for an outgoing one */
m_callset(call, control, RV_FALSE);
stopControl((HCONTROL)ctrl);
}
return RV_TRUE;
}
typedef enum
{
h245Request=1,
h245Response,
h245Command,
h245Indication
}h245MsgType;
typedef enum
{
h245nonStandard=1 ,
h245masterSlaveDetermination ,
h245terminalCapabilitySet ,
h245openLogicalChannel ,
h245closeLogicalChannel ,
h245requestChannelClose ,
h245multiplexEntrySend ,
h245requestMultiplexEntry ,
h245requestMode ,
h245roundTripDelayRequest ,
h245maintenanceLoopRequest ,
h245communicationModeRequest ,
h245conferenceRequest ,
h245multilinkRequest ,
h245logicalChannelRateRequest
}h245MsgRequestType;
typedef enum
{
/*h245nonStandard=1 ,*/
h245masterSlaveDeterminationAck=2 ,
h245masterSlaveDeterminationReject ,
h245terminalCapabilitySetAck ,
h245terminalCapabilitySetReject ,
h245openLogicalChannelAck ,
h245openLogicalChannelReject ,
h245closeLogicalChannelAck ,
h245requestChannelCloseAck ,
h245requestChannelCloseReject ,
h245multiplexEntrySendAck ,
h245multiplexEntrySendReject ,
h245requestMultiplexEntryAck ,
h245requestMultiplexEntryReject ,
h245requestModeAck ,
h245requestModeReject ,
h245roundTripDelayResponse ,
h245maintenanceLoopAck ,
h245maintenanceLoopReject ,
h245communicationModeResponse ,
h245conferenceResponse ,
h245multilinkResponse ,
h245logicalChannelRateAcknowledge ,
h245logicalChannelRateReject
}h245MsgResponseType;
typedef enum
{
/*h245nonStandard=1 ,*/
h245maintenanceLoopOffCommand=2,
h245sendTerminalCapabilitySet,
h245encryptionCommand,
h245flowControlCommand,
h245endSessionCommand,
h245miscellaneousCommand,
h245communicationModeCommand,
h245conferenceCommand,
h245h223MultiplexReconfiguration,
h245newATMVCCommand
}h245MsgCommandType;
typedef enum
{
/*h245nonStandard=1 ,*/
h245functionNotUnderstood=2,
h245masterSlaveDeterminationRelease,
h245terminalCapabilitySetRelease,
h245openLogicalChannelConfirm,
h245requestChannelCloseRelease,
h245multiplexEntrySendRelease,
h245requestMultiplexEntryRelease,
h245requestModeRelease,
h245miscellaneousIndication,
h245jitterIndication,
h245h223SkewIndication,
h245newATMVCIndication,
h245userInput,
h245h2250MaximumSkewIndication,
h245mcLocationIndication,
h245conferenceIndication,
h245vendorIdentification,
h245functionNotSupported,
h245multilinkIndication,
h245logicalChannelRateRelease,
h245flowControlIndication
}h245MsgIndicationType;
typedef enum
{
h245equaliseDelay=1 ,
h245zeroDelay ,
h245multipointModeCommand,
h245cancelMultipointModeCommand ,
h245videoFreezePicture ,
h245videoFastUpdatePicture ,
h245videoFastUpdateGOB ,
h245videoTemporalSpatialTradeOff ,
h245videoSendSyncEveryGOB ,
h245videoSendSyncEveryGOBCancel ,
h245videoFastUpdateMB ,
h245maxH223MUXPDUsize ,
h245encryptionUpdate ,
h245encryptionUpdateRequest ,
h245switchReceiveMediaOff ,
h245switchReceiveMediaOn ,
h245progressiveRefinementStart ,
h245progressiveRefinementAbortOne,
h245progressiveRefinementAbortContinuous,
h245videoBadMBs,
h245lostPicture,
h245lostPartialPicture,
h245recoveryReferencePicture
}h245MsgMiscType;
typedef enum
{
h245logicalChannelActive=1,
h245logicalChannelInactive,
h245multipointConference,
h245cancelMultipointConference,
h245multipointZeroComm,
h245cancelMultipointZeroComm,
h245multipointSecondaryStatus,
h245cancelMultipointSecondaryStatus,
h245videoIndicateReadyToActivate,
h245videoTemporalSpatialTradeOffInd,
h245videoNotDecodedMBs,
h245transportCapability
}h245MsgMiscIndType;
void h245ProcessIncomingMessage(HCONTROL ctrl, int message)
{
H245Control*ctrlE=(H245Control*)ctrl;
cmElem* app=(cmElem*)emaGetInstance((EMAElement)cmiGetByControl(ctrl));
HPVT hVal=app->hVal;
int child=pvtChild(hVal,message);
int grandchild=pvtChild(hVal,child);
int type=pvtGetSyntaxIndex(hVal,child);
int messageId=pvtGetSyntaxIndex(hVal,grandchild);
switch(type)
{
case h245Request:
switch(messageId)
{
case h245nonStandard :break;
case h245masterSlaveDetermination : masterSlaveDetermination(ctrlE,grandchild); break;
case h245terminalCapabilitySet : terminalCapabilitySet(ctrlE,grandchild); break;
case h245openLogicalChannel : openLogicalChannel(ctrlE,grandchild); break;
case h245closeLogicalChannel : closeLogicalChannel(ctrlE,grandchild); break;
case h245requestChannelClose : requestChannelClose(ctrlE,grandchild); break;
case h245multiplexEntrySend :break;
case h245requestMultiplexEntry :break;
case h245requestMode : requestMode(ctrlE,grandchild); break;
case h245roundTripDelayRequest : roundTripDelayRequest(ctrlE,grandchild); break;
case h245maintenanceLoopRequest : maintenanceLoopRequest(ctrlE,grandchild); break;
case h245communicationModeRequest :break;
case h245conferenceRequest : conferenceMessage(ctrlE,0,grandchild,h245rqConferenceRequest); break;
case h245multilinkRequest :break;
case h245logicalChannelRateRequest :break;
}
break;
case h245Response:
switch(messageId)
{
case h245nonStandard :break;
case h245masterSlaveDeterminationAck : masterSlaveDeterminationAck(ctrlE,grandchild); break;
case h245masterSlaveDeterminationReject : masterSlaveDeterminationReject(ctrlE,grandchild); break;
case h245terminalCapabilitySetAck : terminalCapabilitySetAck(ctrlE,grandchild); break;
case h245terminalCapabilitySetReject : terminalCapabilitySetReject(ctrlE,grandchild); break;
case h245openLogicalChannelAck : openLogicalChannelAck(ctrlE,grandchild); break;
case h245openLogicalChannelReject : openLogicalChannelReject(ctrlE,grandchild); break;
case h245closeLogicalChannelAck : closeLogicalChannelAck(ctrlE,grandchild); break;
case h245requestChannelCloseAck : requestChannelCloseAck(ctrlE,grandchild); break;
case h245requestChannelCloseReject : requestChannelCloseReject(ctrlE,grandchild); break;
case h245multiplexEntrySendAck :break;
case h245multiplexEntrySendReject :break;
case h245requestMultiplexEntryAck :break;
case h245requestMultiplexEntryReject :break;
case h245requestModeAck : requestModeAck(ctrlE,grandchild); break;
case h245requestModeReject : requestModeReject(ctrlE,grandchild); break;
case h245roundTripDelayResponse : roundTripDelayResponse(ctrlE,grandchild); break;
case h245maintenanceLoopAck : maintenanceLoopAck(ctrlE,grandchild); break;
case h245maintenanceLoopReject : maintenanceLoopReject(ctrlE,grandchild); break;
case h245communicationModeResponse :break;
case h245conferenceResponse : conferenceMessage (ctrlE,0,grandchild,h245reConferenceResponse); break;
case h245multilinkResponse :break;
case h245logicalChannelRateAcknowledge :break;
case h245logicalChannelRateReject :break;
}
break;
case h245Command:
switch(messageId)
{
case h245nonStandard: break;
case h245maintenanceLoopOffCommand: maintenanceLoopOffCommand(ctrlE,grandchild); break;
case h245sendTerminalCapabilitySet: break;
case h245encryptionCommand: break;
case h245flowControlCommand: flowControlCommand(ctrlE,grandchild); break;
case h245endSessionCommand: endSessionCommand(ctrlE,grandchild); break;
case h245miscellaneousCommand :
{
int lcn;
int grandgrandchild=pvtChild(hVal,pvtGetChild(hVal,grandchild,__h245(type),NULL));
int mctype=pvtGetSyntaxIndex(hVal,grandgrandchild);
pvtGetChildValue(hVal,grandchild,__h245(logicalChannelNumber),&lcn,NULL);
switch(mctype)
{
case h245equaliseDelay : miscellaneousCommand(ctrlE,lcn,grandchild); break;
case h245zeroDelay : miscellaneousCommand(ctrlE,lcn,grandchild); break;
case h245multipointModeCommand : multipointModeCommand(ctrlE,lcn); break;
case h245cancelMultipointModeCommand : cancelMultipointModeCommand(ctrlE,lcn); break;
case h245videoFreezePicture : videoFreezePicture(ctrlE,lcn); break;
case h245videoFastUpdatePicture : videoFastUpdatePicture(ctrlE, lcn); break;
case h245videoFastUpdateGOB : videoFastUpdateGOB(ctrlE,grandgrandchild, lcn); break;
case h245videoTemporalSpatialTradeOff : videoTemporalSpatialTradeOff(ctrlE,grandgrandchild,lcn,1);break;
case h245videoSendSyncEveryGOB : videoSendSyncEveryGOB(ctrlE,lcn); break;
case h245videoSendSyncEveryGOBCancel : videoSendSyncEveryGOBCancel(ctrlE,lcn); break;
case h245videoFastUpdateMB : videoFastUpdateMB(ctrlE,grandgrandchild,lcn); break;
case h245maxH223MUXPDUsize : miscellaneousCommand(ctrlE,lcn,grandchild); break;
case h245encryptionUpdate : miscellaneousCommand(ctrlE,lcn,grandchild); break;
case h245encryptionUpdateRequest : miscellaneousCommand(ctrlE,lcn,grandchild); break;
case h245switchReceiveMediaOff : switchReceiveMediaOff(ctrlE, lcn); break;
case h245switchReceiveMediaOn : switchReceiveMediaOn(ctrlE,lcn); break;
case h245progressiveRefinementStart :break;
case h245progressiveRefinementAbortOne :break;
case h245progressiveRefinementAbortContinuous:break;
case h245videoBadMBs :break;
case h245lostPicture :break;
case h245lostPartialPicture :break;
case h245recoveryReferencePicture :break;
}
}
break;
case h245communicationModeCommand : communicationModeCommand(ctrlE,grandchild); break;
case h245conferenceCommand : conferenceCommand(ctrlE,grandchild); break;
case h245h223MultiplexReconfiguration:break;
case h245newATMVCCommand:break;
}
break;
case h245Indication:
switch(messageId)
{
case h245nonStandard:break;
case h245functionNotUnderstood:break;
case h245masterSlaveDeterminationRelease : masterSlaveDeterminationRelease(ctrlE,grandchild); break;
case h245terminalCapabilitySetRelease:break;
case h245openLogicalChannelConfirm : openLogicalChannelConfirm(ctrlE,grandchild); break;
case h245requestChannelCloseRelease:break;
case h245multiplexEntrySendRelease:break;
case h245requestMultiplexEntryRelease:break;
case h245requestModeRelease:break;
case h245miscellaneousIndication:
{
int lcn;
int grandgrandchild=pvtChild(hVal,pvtGetChild(hVal,grandchild,__h245(type),NULL));
int mctype=pvtGetSyntaxIndex(hVal,grandgrandchild);
pvtGetChildValue(hVal,grandchild,__h245(logicalChannelNumber),&lcn,NULL);
switch(mctype)
{
case h245logicalChannelActive :logicalChannelActive(ctrlE,lcn);break;
case h245logicalChannelInactive :logicalChannelInactive(ctrlE,lcn);break;
case h245multipointConference :multipointConference(ctrlE,lcn); break;
case h245cancelMultipointConference :cancelMultipointConference(ctrlE,lcn); break;
case h245multipointZeroComm :break;
case h245cancelMultipointZeroComm :break;
case h245multipointSecondaryStatus :break;
case h245cancelMultipointSecondaryStatus:break;
case h245videoIndicateReadyToActivate :break;
case h245videoTemporalSpatialTradeOffInd:videoTemporalSpatialTradeOff(ctrlE,grandgrandchild,lcn,0); break;
case h245videoNotDecodedMBs :break;
case h245transportCapability :transportCapability(ctrlE,grandgrandchild,lcn); break;
}
}
break;
case h245jitterIndication : indication(ctrlE,0,grandchild); break;
case h245h223SkewIndication : indication(ctrlE,0,grandchild); break;
case h245newATMVCIndication:break;
case h245userInput : userInput(ctrlE,grandchild); break;
case h245h2250MaximumSkewIndication : h2250MaximumSkewIndication(ctrlE,grandchild); break;
case h245mcLocationIndication : mcLocationIndication(ctrlE,grandchild); break;
case h245conferenceIndication : conferenceIndication(ctrlE,grandchild); break;
case h245vendorIdentification:break;
case h245functionNotSupported : indication(ctrlE,0,grandchild); break;
case h245multilinkIndication:break;
case h245logicalChannelRateRelease:break;
case h245flowControlIndication : indication(ctrlE,0,grandchild); break;
}
break;
}
}
void h245DecodingFailed(HCONTROL ctrl,void*buff,int len)
{
cmElem* app=(cmElem*)emaGetInstance((EMAElement)cmiGetByControl(ctrl));
HPVT hVal=app->hVal;
int message=pvtAddRoot(hVal,app->synProtH245,0,NULL);
int nodeId=pvtAddBranch2(hVal,message, __h245(indication), __h245(functionNotSupported));
pvtAddBranch2(hVal,nodeId, __h245(cause), __h245(syntaxError));
pvtAdd(hVal,nodeId,__h245(returnedFunction),len,(const char *)buff,NULL);
sendMessageH245(ctrl, message);
pvtDelete(hVal,message);
}
#ifdef __cplusplus
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -