亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cmctrlmpoint.c

?? 基于h323協議的軟phone
?? C
?? 第 1 頁 / 共 5 頁
字號:
/***********************************************************************
        Copyright (c) 2002 RADVISION Ltd.
************************************************************************
NOTICE:
This document contains information that is confidential and proprietary
to RADVISION Ltd.. No part of this document may be reproduced in any
form whatsoever without written prior approval by RADVISION Ltd..

RADVISION Ltd. reserve the right to revise this publication and make
changes without obligation to notify any person of such revisions or
changes.
***********************************************************************/

#include "rvinternal.h"
#include "cmictrl.h"
#include "pvaltreeStackApi.h"
#include "cmConf.h"
#include "caputils.h"
#include "strutils.h"
#include "cmutils.h"
#include "oidutils.h"
#include "stkutils.h"
#include "copybits.h"
#include "h245.h"
#include "cmChanGetByXXX.h"
#include "cmdebprn.h"
#include "cmchan.h"
#include "cmCall.h"
#include "cmCtrlMPoint.h"

#ifdef __cplusplus
extern "C" {
#endif

int notifyChannelState(
        IN H245Channel*         channel,
        IN cmChannelState_e     state,
        IN cmChannelStateMode_e stateMode);

/* Multipoint __________________________________________________________________________________*/



/************************************************************************
 * conferenceMessage
 * purpose: Deal with various incoming H245 conference messages
 *          This function uses the callback to the application to handle
 *          the message
 * input  : ctrl        - H245 control object of the call
 *          lcn         - Logical channel of this message.
 *                        0 if no channel is related to this call
 *          message     - root node ID of the message to handle
 *          messaheType - Type of message
 * output : none
 * return : Non-negative value on success
 *          Negative value on failure
 ************************************************************************/
int conferenceMessage(
    IN H245Control*         ctrl,
    IN int                  lcn,
    IN int                  message,
    IN cmH245MessageType    messageType)
{
    HCALL call=(HCALL)cmiGetByControl((HCONTROL)ctrl);
    cmElem* app=(cmElem*)emaGetInstance((EMAElement)cmiGetByControl((HCONTROL)ctrl));
    H245Channel* channel=NULL;

    if(lcn>0)
        channel=getOutChanByLCN((HCONTROL)ctrl,lcn);

    if(app->cmMySessionEvent.cmEvCallControlMessage)
    {
        cmiCBEnter((HAPP)app, "cmEvCallControlMessage(hsCall=0x%p, hsChan=0x%p, message=%d, messageType=%d)", call, channel, message, messageType);
        app->cmMySessionEvent.cmEvCallControlMessage(
            (HAPPCALL)emaGetApplicationHandle((EMAElement)call),    call,
            (HAPPCHAN)emaGetApplicationHandle((EMAElement)channel), (HCHAN)channel,
            message, messageType);
        cmiCBExit((HAPP)app, "cmEvCallControlMessage");
    }

    return RV_TRUE;
}


int multipointConference(H245Control* ctrl,int lcn)
{
    if (lcn);

    ctrl->eState=ctrlConference;

    cmiReportControl(cmiGetByControl((HCONTROL)ctrl),cmControlStateConference,(cmControlStateMode)0);
    return RV_TRUE;
}

int cancelMultipointConference(H245Control* ctrl,int lcn)
{
    if (lcn);

    ctrl->eState=ctrlConnected;

    cmiReportControl(cmiGetByControl((HCONTROL)ctrl),cmControlStateConnected,(cmControlStateMode)0);
    return RV_TRUE;
}

RVAPI int RVCALLCONV
cmCallStartConference(
              /* enter call conference mode */
              IN      HCALL               hsCall
              )
{
    HAPP hApp=(HAPP)emaGetInstance((EMAElement)hsCall);
    int nodeId, message, res = RV_ERROR_UNKNOWN;
    H245Control* ctrl=(H245Control*)cmiGetControl(hsCall);
    if (!hsCall || !hApp) return RV_ERROR_UNKNOWN;

    if (cmCallMasterSlaveStatus(hsCall) != cmMSMaster) return RV_ERROR_UNKNOWN; /* master only operation */

    cmiAPIEnter(hApp, "cmCallStartConference: hsCall=0x%p", hsCall);

    if (emaLock((EMAElement)hsCall))
    {
        HPVT hVal = ((cmElem *)hApp)->hVal;

        message=pvtAddRoot(hVal,((cmElem*)hApp)->synProtH245,0,NULL);
        nodeId=pvtAddBranch2(hVal,message, __h245(indication), __h245(miscellaneousIndication));
        pvtAddBranch2(hVal,nodeId, __h245(type), __h245(multipointConference));
        pvtAdd(hVal,nodeId,__h245(logicalChannelNumber),1,NULL,NULL);

        res = sendMessageH245((HCONTROL)ctrl, message);
        pvtDelete(hVal,message);

        if (res >= 0)
        {
            ctrl->eState=ctrlConference;
            cmiReportControl(cmiGetByControl((HCONTROL)ctrl),cmControlStateConference,(cmControlStateMode)0);
        }
        emaUnlock((EMAElement)hsCall);
    }

    cmiAPIExit(hApp, "cmCallStartConference=%d", res);
    return res;
}




RVAPI int RVCALLCONV
cmCallCancelConference(
               /* cancel the call conference mode */
               IN      HCALL               hsCall
               )
{
    HAPP hApp=(HAPP)emaGetInstance((EMAElement)hsCall);
    H245Control* ctrl=(H245Control*)cmiGetControl(hsCall);
    int nodeId, message, res = RV_ERROR_UNKNOWN;

    if (!hsCall || !hApp) return RV_ERROR_UNKNOWN;


    if (cmCallMasterSlaveStatus(hsCall) != cmMSMaster)
        return RV_ERROR_UNKNOWN; /* only master can cancel conference mode */

    cmiAPIEnter(hApp, "cmCallCancelConference: hsCall=0x%p", hsCall);

    if (emaLock((EMAElement)hsCall))
    {
        HPVT hVal = ((cmElem *)hApp)->hVal;

        if (ctrl->eState!=ctrlConference)
        {
            emaUnlock((EMAElement)hsCall);
            cmiAPIExit(hApp, "cmCallCancelConference: [-1]. (Wrong state)");
            return RV_ERROR_UNKNOWN;
        }

        message=pvtAddRoot(hVal,((cmElem*)hApp)->synProtH245,0,NULL);
        nodeId=pvtAddBranch2(hVal,message, __h245(indication), __h245(miscellaneousIndication));
        pvtAddBranch2(hVal,nodeId, __h245(type), __h245(cancelMultipointConference));
        pvtAdd(hVal,nodeId,__h245(logicalChannelNumber),1,NULL,NULL);

        res = sendMessageH245((HCONTROL)ctrl, message);
        pvtDelete(hVal,message);

        if (res >= 0)
        {
            ctrl->eState=ctrlConnected;
            cmiReportControl(cmiGetByControl((HCONTROL)ctrl),cmControlStateConnected,(cmControlStateMode)0);
        }
        emaUnlock((EMAElement)hsCall);
    }

    cmiAPIExit(hApp, "cmCallCancelConference=%d", res);
    return res;
}





/* When the conference becomes active, the master (MC) terminal shall call cmCallDeclareMC() to
   indicate the new conference status. */
RVAPI int RVCALLCONV
cmCallDeclareMC(
        /* declare this terminal to be the MC of the call */
        IN      HCALL               hsCall
        )
{
    HAPP hApp=(HAPP)emaGetInstance((EMAElement)hsCall);
    H245Control* ctrl=(H245Control*)cmiGetControl(hsCall);
    int nodeId, message, res = RV_ERROR_UNKNOWN;
    cmTransportAddress ta;

    if (!hsCall || !hApp) return RV_ERROR_UNKNOWN;

    if (cmCallMasterSlaveStatus(hsCall) != cmMSMaster)
        return RV_ERROR_UNKNOWN; /* only master can be active MC */

    cmiAPIEnter(hApp, "cmCallDeclareMC: hsCall=0x%p", hsCall);

    if (emaLock((EMAElement)hsCall))
    {
        HPVT hVal = ((cmElem *)hApp)->hVal;

        cmGetLocalCallSignalAddress(hApp,&ta);
        message=pvtAddRoot(hVal,((cmElem*)hApp)->synProtH245,0,NULL);
        __pvtBuildByFieldIds(nodeId,hVal,message, {_h245(indication) _h245(mcLocationIndication)
                                               _h245(signalAddress) LAST_TOKEN}, 0, NULL);

        cmTAToVt_H245(hVal, nodeId, &ta);

        res = sendMessageH245((HCONTROL)ctrl, message);
        pvtDelete(hVal,message);

        if (res >= 0)
        {
            ctrl->eState=ctrlConference;
            cmiReportControl(cmiGetByControl((HCONTROL)ctrl),cmControlStateConference,(cmControlStateMode)0);
        }
        emaUnlock((EMAElement)hsCall);
    }

    cmiAPIExit(hApp, "cmCallDeclareMC=%d", res);
    return res;
}



int mcLocationIndication(H245Control* ctrl, int message)
{
    HAPP hApp=(HAPP)emaGetInstance((EMAElement)cmiGetByControl((HCONTROL)ctrl));
    HPVT hVal = ((cmElem *)hApp)->hVal;
    cmVtToTA_H245(hVal,pvtGetChild(hVal,message,__h245(signalAddress),NULL), &(ctrl->mcLocationTA));
    cmiReportControl(cmiGetByControl((HCONTROL)ctrl),cmControlStateConference,(cmControlStateMode)0);
    ctrl->eState=ctrlConference;
    return RV_TRUE;
}

/* When the conference becomes active, this function provides the address of the Active MC. */
RVAPI
int RVCALLCONV cmCallGetMCAddress(
                /* get active MC address */
                IN      HCALL               hsCall,
                OUT     RvUint32*           ip,
                OUT     RvUint16*           port
                )
{
    HAPP hApp=(HAPP)emaGetInstance((EMAElement)hsCall);
    H245Control* ctrl=(H245Control*)cmiGetControl(hsCall);
    if (!hsCall || !hApp) return RV_ERROR_UNKNOWN;

    if (ctrl->mcLocationTA.distribution<0) return RV_ERROR_UNKNOWN;

    cmiAPIEnter(hApp, "cmCallGetMCAddress: hsCall=0x%p, &ip=0x%p, &port=0x%p", hsCall, ip, port);

    if (emaLock((EMAElement)hsCall))
    {
        if (ip) *ip = ctrl->mcLocationTA.ip;
        if (port) *port = (RvUint16)ctrl->mcLocationTA.port;
        emaUnlock((EMAElement)hsCall);
    }

    cmiAPIExit(hApp, "cmCallGetMCAddress: ip=0x%x, port=%d [%d].", 0, (ip)?*ip:0, (port)?*port:-1);
    return 0;
}


/* This enumeration is used as the CHOICE values of the ConferenceIndication
   type in the H.245 ASN.1. The order of this enumeration should not be different
   than that of the choices in this type and should begin from 1. */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一级二级三级| 亚洲一区二区不卡免费| 欧美在线短视频| 国产乱码精品一区二区三区忘忧草| 成人欧美一区二区三区视频网页| 欧美一卡二卡三卡四卡| 色综合久久精品| 国产麻豆日韩欧美久久| 亚洲综合自拍偷拍| 日本一区二区不卡视频| 欧美成人精精品一区二区频| 一本大道综合伊人精品热热| 国产91色综合久久免费分享| 欧美aa在线视频| 亚洲一区二区五区| 亚洲欧洲av另类| 国产欧美日韩不卡免费| 精品入口麻豆88视频| 欧美精品日日鲁夜夜添| 在线观看视频一区| 不卡一区二区中文字幕| 国产风韵犹存在线视精品| 麻豆91在线播放| 亚洲国产精品视频| 亚洲精品国产品国语在线app| 久久久精品中文字幕麻豆发布| 欧美一级在线免费| 欧美日韩一区高清| 欧美在线播放高清精品| 99精品在线免费| av成人免费在线观看| 国产成a人亚洲精品| 久久99这里只有精品| 午夜不卡av在线| 偷拍日韩校园综合在线| 亚洲图片欧美综合| 亚洲伊人伊色伊影伊综合网| 最新国产精品久久精品| 中文乱码免费一区二区| 国产欧美日本一区视频| 欧美国产一区二区在线观看| 久久精品这里都是精品| 国产欧美久久久精品影院| 国产欧美日韩中文久久| 中文av一区二区| 国产精品久久毛片a| 国产精品成人免费在线| 亚洲欧洲综合另类在线| 亚洲人精品午夜| 亚洲精品菠萝久久久久久久| 亚洲第一福利一区| 日韩精品电影在线| 奇米影视在线99精品| 麻豆视频一区二区| 国产精品538一区二区在线| 国产精品99久久久久久宅男| 国产福利一区在线观看| 99综合影院在线| 色老头久久综合| 欧美日韩国产中文| 精品久久久久一区二区国产| 久久伊人中文字幕| 国产精品国产三级国产aⅴ中文| 亚洲欧美偷拍另类a∨色屁股| 自拍偷拍国产亚洲| 国产精品一区二区视频| av高清久久久| 欧美日本免费一区二区三区| 日韩精品一区二区三区中文精品| 国产无遮挡一区二区三区毛片日本| 18欧美亚洲精品| 亚洲图片欧美视频| 国产麻豆精品在线观看| 91蝌蚪porny| 欧美一级在线免费| 国产精品久久久久久久久免费丝袜 | 国产精品一区一区| 久久精品国产精品亚洲精品| 国产乱子伦视频一区二区三区 | 国产激情精品久久久第一区二区 | 欧美亚洲图片小说| 日韩美女主播在线视频一区二区三区 | 国产精品你懂的| 亚洲国产美国国产综合一区二区| 麻豆国产精品一区二区三区| 成人av电影在线网| 欧美一区二区福利在线| 中文字幕一区二区日韩精品绯色| 亚洲bt欧美bt精品| 岛国av在线一区| 91精品国产综合久久久久久久 | 日韩欧美中文一区| 1区2区3区精品视频| 麻豆精品在线视频| 91污在线观看| 久久青草欧美一区二区三区| 亚洲黄色录像片| 国产精品1区2区3区在线观看| 欧美视频自拍偷拍| 国产精品欧美一区喷水| 蜜臀99久久精品久久久久久软件 | 日韩三级中文字幕| 亚洲欧美色综合| 国产麻豆日韩欧美久久| 欧美日韩久久久一区| 国产精品灌醉下药二区| 狠狠色丁香婷婷综合久久片| 欧美日韩久久一区| 亚洲精品国产a| 成人丝袜视频网| 2023国产精品视频| 亚洲成av人片一区二区三区| 94色蜜桃网一区二区三区| 欧美精品一区二区久久婷婷| 亚洲18影院在线观看| 一本高清dvd不卡在线观看| 国产欧美1区2区3区| 另类综合日韩欧美亚洲| 欧美精品三级日韩久久| 亚洲综合免费观看高清完整版在线| 国产成都精品91一区二区三| 久久综合色鬼综合色| 青青草91视频| 91.com视频| 丝袜美腿亚洲综合| 欧美日韩亚洲国产综合| 亚洲一区二区三区激情| 在线看国产一区二区| 亚洲三级小视频| 91美女片黄在线观看91美女| 国产精品天干天干在观线| 国产精品一区二区在线观看网站 | 欧美精品一区二区三区久久久| 五月激情综合婷婷| 欧美无砖砖区免费| 亚洲综合成人在线| 欧美三级一区二区| 亚洲成av人在线观看| 在线不卡一区二区| 性做久久久久久免费观看欧美| 欧美三电影在线| 三级成人在线视频| 欧美日韩国产首页| 日韩国产欧美三级| 日韩一区二区三区四区五区六区| 蜜臀久久久久久久| 欧美刺激脚交jootjob| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美在线视频你懂得| 一区二区在线看| 欧美日韩成人一区二区| 天天综合天天做天天综合| 337p亚洲精品色噜噜| 日本不卡视频一二三区| 精品免费国产二区三区| 国产精品 欧美精品| 中文字幕av一区 二区| 北条麻妃一区二区三区| 亚洲制服欧美中文字幕中文字幕| 欧美在线免费观看视频| 日本不卡一区二区| 久久婷婷一区二区三区| gogo大胆日本视频一区| 亚洲一二三专区| 日韩精品中文字幕在线一区| 国产福利电影一区二区三区| 亚洲区小说区图片区qvod| 欧美精品一卡两卡| 国产伦精品一区二区三区视频青涩 | 久久久久久97三级| 99亚偷拍自图区亚洲| 成人黄色一级视频| 亚洲大尺度视频在线观看| 日韩三级中文字幕| 成人免费看视频| 三级在线观看一区二区| 久久精品亚洲精品国产欧美kt∨| 91理论电影在线观看| 久久精品国产精品亚洲红杏| 国产精品热久久久久夜色精品三区| 欧美性三三影院| 国产成人在线电影| 性久久久久久久久| 国产日产欧美精品一区二区三区| 欧美中文字幕一区二区三区亚洲| 久久精品国产久精国产| 亚洲欧美日韩成人高清在线一区| 欧美一区二区三区播放老司机| 99久久久久久99| 美国十次了思思久久精品导航| 亚洲男人天堂av网| www国产精品av| 欧美人与禽zozo性伦| 高清不卡一区二区在线| 免费看日韩精品| 伊人婷婷欧美激情| 国产蜜臀av在线一区二区三区| 制服丝袜亚洲色图| 色呦呦网站一区| 风间由美一区二区三区在线观看|