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

📄 transpcap.c

📁 基于h323协议的软phone
💻 C
📖 第 1 页 / 共 2 页
字号:
        atmParam = &qosCapability->cmAtmParameters;
    result =  addQosCapability( hApp,capTransport,rsvpParam,atmParam, nonStandard);
    cmiAPIExit(hApp, "cmAddQosCapability: result=%d",result);
    return result  ;
}



RVAPI int RVCALLCONV
cmAddMediaChannelCap( IN     HAPP            hApp,
                        IN int capTransport,
                        IN  cmMediaChannelCapability * mediaCap
                       )
{
  int result;
  if (!hApp) return RV_ERROR_UNKNOWN;
  cmiAPIEnter(hApp, "cmAddMediaChannelCap: hApp=0x%p,TransportCapabilityId=%d",
    hApp,capTransport);

  result = addMediaChannelCap( hApp,capTransport,mediaCap);
  cmiAPIExit(hApp, "cmAddMediaChannelCap: result=%d",result);
  return result;

}






/* ================================================== */


int createTranspCapability( IN   HAPP            hApp,
                            IN  cmNonStandardIdentifier *identifier,
                            /* non standard param is optional may be equal NULL */
                                  IN  char *data,
                                  IN  int dataLength /* in bytes */
)
{
  int nodeId,nonStandardId,ret=0;
  HPVT hVal;
  if (!hApp) return RV_ERROR_UNKNOWN;

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

  hVal = ((cmElem *)hApp)->hVal;

  nodeId = pvtAddRoot(hVal, ((cmElem*)hApp)->h245TransCap, 0, NULL);
  if (nodeId<0)
  {
    cmiAPIExit(hApp, "createTranspCapability: [%d].", nodeId);
    return nodeId;
  }
  if (identifier!=NULL)
  {
    nonStandardId=pvtAdd(hVal, nodeId, __h245(nonStandard), 0, NULL, NULL);
    ret=cmNonStandardParameterCreate(hVal,nonStandardId,identifier,data,dataLength);


  }
  cmiAPIExit(hApp, "createTranspCapability: [%d].", ret);
  if (ret<0)
      return ret;
  return nodeId;

}



int addMediaChannelCap( IN   HAPP            hApp,
                        IN int capTransport,
                        IN  cmMediaChannelCapability * mediaCap
                       )
{
    int nodeId,mediaId=-1,ret=1;
    HPVT hVal;

    if (!hApp) return RV_ERROR_UNKNOWN;

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

    hVal = ((cmElem *)hApp)->hVal;

    nodeId = pvtGetChild(hVal,capTransport,__h245(mediaChannelCapabilities),NULL);
    /* check if node is already exist*/
    if (nodeId<0)
    nodeId  = pvtAdd(hVal, capTransport, __h245(mediaChannelCapabilities), 0, NULL, NULL);
    mediaId = pvtAdd(hVal, nodeId, -800, 0, NULL, NULL);
    mediaId = pvtAdd(hVal,mediaId,__h245(mediaTransport), 0 , NULL, NULL);

    switch(mediaCap->cmTransportType)
    {
    case cmIP_UDP:
        ret=pvtAdd(hVal, mediaId, __h245(ip_UDP), 0, NULL,NULL);
        break;
    case cmIP_TCP:
        ret=pvtAdd(hVal, mediaId, __h245(ip_TCP), 0, NULL, NULL);
        break;
    case cmAtm_AAL5_UNIDIR:
        ret=pvtAdd(hVal, mediaId, __h245(atm_AAL5_UNIDIR), 0, NULL, NULL);
        break;
    case cmAtm_AAL5_BIDIR:
        ret=pvtAdd(hVal, mediaId, __h245(atm_AAL5_BIDIR), 0, NULL, NULL);
        break;
    }
    cmiAPIExit(hApp, "addMediaChannelCap: [%d].", ret);
    if(ret<0)
        return ret;
    return mediaId;
}


RVAPI int RVCALLCONV
cmGetTransportCapabilities(             IN  HCALL       hsCall)
{
    HAPP hApp=(HAPP)emaGetInstance((EMAElement)hsCall);
    HPVT hVal;
    int capId=RV_ERROR_UNKNOWN,transpId=RV_ERROR_UNKNOWN;
    if (!hsCall) return RV_ERROR_UNKNOWN;

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

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

        capId = cmCallGetRemoteCapabilities(hsCall);/*terminalCapabilitySet */
        __pvtGetNodeIdByFieldIds(transpId, hVal,capId,
                               {_h245(multiplexCapability)
                                _h245(h2250Capability)
                                _h245(transportCapability)
                                LAST_TOKEN});
        emaUnlock((EMAElement)hsCall);
    }

    cmiAPIExit(hApp, "cmGetTransportCapabilities: capId =[%d] transpId = [%d].", capId,transpId);
    return transpId;
}


RVAPI int RVCALLCONV
cmGetTransportCapNonStandard(   IN   HAPP            hApp,
                              IN int transpId,
                              OUT cmNonStandardParam *nonStandard   )



{
    HPVT hVal;
    int nonStandardId;

    if (!hApp) return RV_ERROR_UNKNOWN;

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

    hVal = ((cmElem *)hApp)->hVal;

    nonStandardId = pvtGetChild(hVal,transpId,__h245(nonStandardData),NULL);
    if (nonStandardId >=0)
    cmNonStandardParameterGet(hVal,nonStandardId,&nonStandard->info,
        nonStandard->data,&(nonStandard->length));

    cmiAPIExit(hApp, "cmGetTransportCapNonStandard:  transpId = [%d],nonStandardId = [%d].",
                transpId,nonStandardId);
    return nonStandardId;
}







RVAPI int RVCALLCONV
cmGetTransportCapQosParameters(IN    HAPP            hApp,
                              IN int transpId,
                              INOUT  cmQosCapability * cmQOSCapability,
                              INOUT int  * cmQOSCapabilitySize)
{
    HPVT hVal;
    int qosId,ii,qosElemId,childs;

    if (!hApp) return RV_ERROR_UNKNOWN;

    cmiAPIEnter(hApp, "cmGetTransportCapQosParameters: hApp=0x%p transpId [%d]",hApp,transpId);

    hVal = ((cmElem *)hApp)->hVal;

    qosId = pvtGetChild(hVal, transpId, __h245(qOSCapabilities), NULL);

    if (qosId >=0)
    {
        childs = pvtNumChilds(hVal,qosId);
        if (childs< *cmQOSCapabilitySize)
            *cmQOSCapabilitySize = childs;
        if (cmQOSCapability==NULL)
        {
            cmiAPIExit(hApp, "cmGetTransportCapQosParameters:  transpId = [%d], childs [%d]", transpId,childs);
            return childs;
        }
        for (ii=1; ii<= *cmQOSCapabilitySize ;ii++)
        {
            pvtGetByIndex(hVal,qosId,ii,&qosElemId);
            if (qosElemId >= 0)
                 getQosParameters(hVal,qosElemId,&cmQOSCapability[ii-1]);
        }
    }
    else
        *cmQOSCapabilitySize = 0;

    cmiAPIExit(hApp, "cmGetTransportCapQosParameters:  transpId = [%d], cmQOSCapabilitySize [%d]", transpId, *cmQOSCapabilitySize);
    return (*cmQOSCapabilitySize);
}





/*
  mediaChannelCapability is array,allocated by user .Max size is 256
  mediaChannelCapabilitySize as IN param passes the size of allocated array
  as OUT param passes the result size ,according to the h245 message.
*/
RVAPI int RVCALLCONV
cmGetTransportCapMedia(
    IN    HAPP                          hApp,
    IN    int                           transpId,
    INOUT cmMediaChannelCapability *    mediaChannelCapability ,
    INOUT int *                         mediaChannelCapabilitySize)
{
    HPVT hVal;
    int mediaId,ii,mediaElemId,nodeId,mediaTranspId,childs;
    if (!hApp) return RV_ERROR_UNKNOWN;

    cmiAPIEnter(hApp, "cmGetTransportCapMedia: hApp=0x%p transpId [%d]",hApp,transpId);

    hVal = ((cmElem *)hApp)->hVal;

    mediaId = pvtGetChild(hVal, transpId, __h245(mediaChannelCapabilities), NULL);

    if (mediaId >=0)
    {
        childs = pvtNumChilds(hVal,mediaId);;
        if (childs< *mediaChannelCapabilitySize)
            *mediaChannelCapabilitySize = childs;
        for (ii=1;ii<=*mediaChannelCapabilitySize;ii++)
        {
            pvtGetByIndex(hVal,mediaId,ii,&mediaElemId);
            mediaTranspId = pvtGetChild(hVal, mediaElemId, __h245(mediaTransport), NULL);
            if (mediaTranspId>=0)
            {
                nodeId = pvtGetChild(hVal, mediaTranspId, __h245(ip_UDP), NULL);
                if (nodeId>=0)
                    mediaChannelCapability[ii-1].cmTransportType = cmIP_UDP;
                nodeId = pvtGetChild(hVal, mediaTranspId, __h245(ip_TCP), NULL);
                if (nodeId>=0)
                    mediaChannelCapability[ii-1].cmTransportType = cmIP_TCP;
                nodeId = pvtGetChild(hVal, mediaTranspId, __h245(atm_AAL5_UNIDIR), NULL);
                if (nodeId>=0)
                    mediaChannelCapability[ii-1].cmTransportType = cmAtm_AAL5_UNIDIR;
                nodeId = pvtGetChild(hVal, mediaTranspId, __h245(atm_AAL5_BIDIR), NULL);
                if (nodeId>=0)
                    mediaChannelCapability[ii-1].cmTransportType = cmAtm_AAL5_BIDIR;
            }
        }
    }
    else
    *mediaChannelCapabilitySize=0;

    cmiAPIExit(hApp, "cmGetTransportCapMedia:  transpId = [%d], mediaChannelCapabilitySize [%d]", transpId,
                                                                mediaChannelCapabilitySize);
    return (*mediaChannelCapabilitySize);
}

#ifdef __cplusplus
}
#endif



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -