⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmctrl.c

📁 基于h323协议的软phone
💻 C
📖 第 1 页 / 共 2 页
字号:
    /* 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 + -