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

📄 cmparam.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 "q931asn1.h"
#include "cmintr.h"
#include "cmCall.h"
#include "cmdebprn.h"
#include "cmutils.h"
#include "stkutils.h"
#include "cm.h"

#ifdef __cplusplus
extern "C" {
#endif


void getGoodAddressForCall(HCALL hCall, cmTransportAddress* ta);

typedef enum
{
    placeQ931,
    placePER_Gen,
    placePER_Specific
} paramPlace;

static  fieldNames rejectReasonNames[]=
{
    {/*cmRASReasonResourceUnavailable*/     __q931(resourceUnavailable)},
    {/*cmRASReasonInsufficientResources*/   __q931(insufficientResources)},

    {/*cmRASReasonInvalidRevision*/         __q931(invalidRevision)},
    {/*cmRASReasonInvalidCallSignalAddress*/__q931(invalidCallSignalAddress)},
    {/*cmRASReasonInvalidRASAddress*/       __q931(invalidRASAddress)},
    {/*cmRASReasonInvalidTerminalType*/     __q931(invalidTerminalType)},
    {/*cmRASReasonInvalidPermission*/       __q931(invalidPermission)},
    {/*cmRASReasonInvalidConferenceID*/     __q931(invalidConferenceID)},
    {/*cmRASReasonInvalidEndpointID*/       __q931(invalidEndpointIdentifier)},

    {/*cmRASReasonCallerNotRegistered*/     __q931(callerNotRegistered)},
    {/*cmRASReasonCalledPartyNotRegistered*/__q931(calledPartyNotRegistered)},
    {/*cmRASReasonDiscoveryRequired*/       __q931(discoveryRequired)},

    {/*cmRASReasonDuplicateAlias*/          __q931(duplicateAlias)},
    {/*cmRASReasonTransportNotSupported*/   __q931(transportNotSupported)},

    {/*cmRASReasonCallInProgress*/          __q931(callInProgress)},

    {/*cmRASReasonRouteCallToGatekeeper*/   __q931(routeCallToGatekeeper)},

    {/*cmRASReasonRequestToDropOther*/      __q931(requestToDropOther)},
    {/*cmRASReasonNotRegistered*/           __q931(notRegistered)},

    {/*cmRASReasonUndefined*/               __q931(undefinedReason)},
    {/*cmRASReasonTerminalExcluded*/        __q931(terminalExcluded)},

    {/*cmRASReasonNotBound*/                __q931(notBound)},
    {/*cmRASReasonNotCurrentlyRegistered*/  __q931(notCurrentlyRegistered)},
    {/*cmRASReasonRequestDenied*/           __q931(requestDenied)},

    {/*cmRASReasonLocationNotFound*/        __q931(requestDenied)},
    {/*cmRASReasonSecurityDenial*/          __q931(securityDenial)},

    {/*cmRASTransportQOSNotSupported*/      __q931(transportQOSNotSupported)},
    {/*cmRASResourceUnavailable*/           __q931(resourceUnavailable)},
    {/*cmRASInvalidAlias*/                  __q931(invalidAlias)},
    {/*cmRASPermissionDenied*/              __q931(permissionDenied)},
    {/*cmRASQOSControlNotSupported*/        __q931(qosControlNotSupported)},
    {/*cmRASIncompleteAddress*/             __q931(incompleteAddress)},
    {/*cmRASFullRegistrationRequired*/      __q931(fullRegistrationRequired)},
    {/*cmRASRouteCallToSCN*/                __q931(routeCallToSCN)},
    {/*cmRASAliasesInconsistent*/           __q931(aliasesInconsistent)},
    {LAST_TOKEN}
};

static  fieldNames callModelNames[]=
{
    {/*cmCallModelTypeDirect*/              __q931(direct)},
    {/*cmCallModelTypeGKRouted*/            __q931(gatekeeperRouted)},
    {LAST_TOKEN}
};

static  fieldNames transportQOSNames[]=
{
    {/*cmTransportQOSEndpointControlled*/   __q931(endpointControlled)},
    {/*cmTransportQOSGatekeeperControlled*/ __q931(gatekeeperControlled)},
    {/*cmTransportQOSNoControl*/            __q931(noControl)},
    {LAST_TOKEN}
};

static  fieldNames callTypeNames[]=
{
    {/*cmCallTypeP2P*/              __q931(pointToPoint)},
    {/*cmCallTypeOne2N*/            __q931(oneToN)},
    {/*cmCallTypeN2One*/            __q931(nToOne)},
    {/*cmCallTypeN2Nw*/             __q931(nToN)},
    {LAST_TOKEN}
};

static  fieldNames endpointTypeNames[]=
{
    {/*cmEndpointTypeTerminal*/         __q931(terminal)},
    {/*cmEndpointTypeGateway*/          __q931(gateway)},
    {/*cmEndpointTypeMCU*/          __q931(mcu)},
    {/*cmEndpointTypeGK*/           __q931(gatekeeper)},
    {/*cmEndpointTypeSET*/          __q931(set)},
    {LAST_TOKEN}
};

static  fieldNames disengageReasonNames[]=
{
    {/*cmRASDisengageReasonForcedDrop*/     __q931(forcedDrop)},
    {/*cmRASDisengageReasonNormalDrop*/     __q931(normalDrop)},
    {/*cmRASDisengageReasonUndefinedReason*/__q931(undefinedReason)},
    {LAST_TOKEN}
};

static  fieldNames conferenceGoalNames[]=
{
    {/*cmCreate*/                       __q931(create)},
    {/*cmJoin*/                         __q931(join)},
    {/*cmInvite*/                       __q931(invite)},
    {/*cmCapabilityNegotiation*/        __q931(capability_negotiation)},
    {/*cmCallIndependentSupplementaryService*/__q931(callIndependentSupplementaryService)},
    {LAST_TOKEN}
};

static  fieldNames reasonNames[]=
{
    {/*cmReasonTypeNoBandwidth*/            __q931(noBandwidth)},
    {/*cmReasonTypeGatekeeperResource*/     __q931(gatekeeperResources)},
    {/*cmReasonTypeUnreachableDestination*/ __q931(unreachableDestination)},
    {/*cmReasonTypeDestinationRejection*/   __q931(destinationRejection)},
    {/*cmReasonTypeInvalidRevision*/        __q931(invalidRevision)},
    {/*cmReasonTypeNoPermision*/            __q931(noPermission)},
    {/*cmReasonTypeUnreachableGatekeeper*/  __q931(unreachableGatekeeper)},
    {/*cmReasonTypeGatewayResource*/        __q931(gatewayResources)},
    {/*cmReasonTypeBadFormatAddress*/       __q931(badFormatAddress)},
    {/*cmReasonTypeAdaptiveBusy*/           __q931(adaptiveBusy)},
    {/*cmReasonTypeInConf*/                 __q931(inConf)},
    {/*cmReasonTypeUndefinedReason*/        __q931(undefinedReason)},
    {/*cmReasonTypeRouteCallToGatekeeper*/  __q931(routeCallToGatekeeper)},
    {/*cmReasonTypeCallForwarded*/          __q931(callForwarded)},
    {/*cmReasonTypeRouteCallToMC*/          __q931(routeCallToMC)},
    {/*cmReasonTypeFacilityCallDeflection*/ __q931(facilityCallDeflection)},
    {/*cmReasonTypeSecurityDenied*/     __q931(securityDenied)},
    {/*cmReasonTypeCalledPartyNotRegistered*/__q931(calledPartyNotRegistered)},
    {/*cmReasonTypeCallerNotregistered*/    __q931(callerNotRegistered)},
    {/*cmReasonTypeConferenceListChoice*/   __q931(conferenceListChoice)},
    {/*cmReasonTypeStartH245*/              __q931(startH245)},
    {/*cmReasonTypeNewConnectionNeeded*/    __q931(newConnectionNeeded)},
    {/*cmReasonTypeNoH245*/                 __q931(noH245)},
    {/*cmReasonTypeNewTokens*/              __q931(newTokens)},
    {/*cmReasonTypeFeatureSetUpdate*/       __q931(featureSetUpdate)},
    {/*cmReasonTypeForwardedElements*/      __q931(forwardedElements)},
    {/*cmReasonTypeTransportedInformation*/ __q931(transportedInformation)},
    {LAST_TOKEN}
};

fieldNames* getParamFieldName(
           IN  cmRASParam       param)
{
    switch(param)
    {
    case cmParamSourceInfo          :
    case cmParamDestinationInfo     :

    case cmRASParamTerminalType     :
    case cmRASParamEndpointType     :return endpointTypeNames;

    case cmParamCallType            :
    case cmRASParamCallType         :return callTypeNames;
    case cmRASParamCallModel        :return callModelNames;

    case cmRASParamDisengageReason      :return disengageReasonNames;
    case cmRASParamRejectReason     :return rejectReasonNames;
    case cmParamConferenceGoal      :return conferenceGoalNames;
    case cmParamReleaseCompleteReason   :
    case cmParamFacilityReason      :return reasonNames;
    case cmRASParamTransportQOS     :return transportQOSNames;
    default                 :return NULL;
    }
}

int getParamFieldNameSize(
           IN  cmRASParam       param)
{
    switch(param)
    {
    case cmParamSourceInfo          :
    case cmParamDestinationInfo     :

    case cmRASParamTerminalType     :
    case cmRASParamEndpointType     :return sizeof(endpointTypeNames);

    case cmParamCallType            :
    case cmRASParamCallType         :return sizeof(callTypeNames);
    case cmRASParamCallModel        :return sizeof(callModelNames);

    case cmRASParamDisengageReason      :return sizeof(disengageReasonNames);
    case cmRASParamRejectReason     :return sizeof(rejectReasonNames);
    case cmParamConferenceGoal      :return sizeof(conferenceGoalNames);
    case cmParamReleaseCompleteReason   :
    case cmParamFacilityReason      :return sizeof(reasonNames);
    case cmRASParamTransportQOS     :return sizeof(transportQOSNames);
    default                 :return RV_ERROR_UNKNOWN;
    }
}



/************************************************************************
 * initParamSyntax
 * purpose: Initialize any information related to PST that is needed to
 *          hold parameters without a properties database.
 * input  : app         - Stack instance handle
 * output : none
 * return : non-negative value on success
 *          negative value on failure
 ************************************************************************/
int initParamSyntax(IN cmElem*  app)
{
    int i;
    static const char* synNames[] = {
        "Endpoint.aliasAddress",
        "AliasAddress",
        "CalledPartyNumber",
        "CalledPartySubaddress",
        "CallingPartyNumber",
        "CallingPartySubaddress",
        "EndpointType",
        "Setup-UUIE.conferenceGoal",
        "CallType",
        "H323-UserInformation.user-data",
        "NonStandardParameter",
        "ReleaseCompleteReason",
        "FacilityReason"
    };

    for (i = 0; i < cmParamSynLast; i++)
    {
        app->synParams[i] = pstConstruct(cmEmGetQ931Syntax(), (char *)synNames[i]);
        if (app->synParams[i] == NULL)
            return RV_ERROR_UNKNOWN;
    }
    return 0;
}


/************************************************************************
 * endParamSyntax
 * purpose: Deinitialize any information related to PST that is needed to

⌨️ 快捷键说明

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