22597 lines
699 KiB
C
22597 lines
699 KiB
C
/*
|
|
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
|
*
|
|
* This software is furnished under an open source license and may be
|
|
* used and copied only in accordance with the terms of this license.
|
|
* The text of the license may generally be found in the root
|
|
* directory of this installation in the COPYING file. It
|
|
* can also be viewed online at the following URL:
|
|
*
|
|
* http://www.obj-sys.com/open/license.html
|
|
*
|
|
* Any redistributions of this file including modified versions must
|
|
* maintain this copyright notice.
|
|
*
|
|
*****************************************************************************/
|
|
/**
|
|
* This file was generated by the Objective Systems ASN1C Compiler
|
|
* (http://www.obj-sys.com). Version: 5.72, Date: 22-Mar-2005.
|
|
*/
|
|
#include "ooasn1.h"
|
|
#include "H323-MESSAGES.h"
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ScreeningIndicator */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ScreeningIndicator (OOCTXT* pctxt, H225ScreeningIndicator value)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1BOOL extbit;
|
|
|
|
extbit = 0;
|
|
|
|
switch (value) {
|
|
case userProvidedNotScreened: ui = 0; break;
|
|
case userProvidedVerifiedAndPassed: ui = 1; break;
|
|
case userProvidedVerifiedAndFailed: ui = 2; break;
|
|
case networkProvided: ui = 3; break;
|
|
default: ui = value; extbit = 1;
|
|
}
|
|
|
|
/* extension bit */
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (extbit) {
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, ui);
|
|
}
|
|
else {
|
|
stat = encodeConsUnsigned (pctxt, ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NumberDigits */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_NumberDigits_CharSet;
|
|
|
|
EXTERN int asn1PE_H225NumberDigits (OOCTXT* pctxt, H225NumberDigits value)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 128, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, value, gs_H323_MESSAGES_NumberDigits_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TBCD_STRING */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_TBCD_STRING_CharSet;
|
|
|
|
EXTERN int asn1PE_H225TBCD_STRING (OOCTXT* pctxt, H225TBCD_STRING value)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, value, gs_H323_MESSAGES_TBCD_STRING_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GloballyUniqueID */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225GloballyUniqueID (OOCTXT* pctxt, H225GloballyUniqueID* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 16, 16, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ConferenceIdentifier (OOCTXT* pctxt, H225ConferenceIdentifier* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = asn1PE_H225GloballyUniqueID (pctxt, pvalue);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestSeqNum */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225RequestSeqNum (OOCTXT* pctxt, H225RequestSeqNum value)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = encodeConsUnsigned (pctxt, value, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GatekeeperIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225GatekeeperIdentifier (OOCTXT* pctxt, H225GatekeeperIdentifier value)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 128, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeBMPString (pctxt, value, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* BandWidth */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225BandWidth (OOCTXT* pctxt, H225BandWidth value)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = encodeConsUnsigned (pctxt, value, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CallReferenceValue */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CallReferenceValue (OOCTXT* pctxt, H225CallReferenceValue value)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = encodeConsUnsigned (pctxt, value, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EndpointIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225EndpointIdentifier (OOCTXT* pctxt, H225EndpointIdentifier value)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 128, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeBMPString (pctxt, value, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ProtocolIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ProtocolIdentifier (OOCTXT* pctxt, H225ProtocolIdentifier value)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = encodeObjectIdentifier (pctxt, &value);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TimeToLive */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TimeToLive (OOCTXT* pctxt, H225TimeToLive value)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = encodeConsUnsigned (pctxt, value, 1U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H248PackagesDescriptor */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H248PackagesDescriptor (OOCTXT* pctxt, H225H248PackagesDescriptor value)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = encodeOctetString (pctxt, value.numocts, value.data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H248SignalsDescriptor */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H248SignalsDescriptor (OOCTXT* pctxt, H225H248SignalsDescriptor value)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = encodeOctetString (pctxt, value.numocts, value.data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GenericIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225GenericIdentifier (OOCTXT* pctxt, H225GenericIdentifier* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 3);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* standard */
|
|
case 1:
|
|
if ( (pvalue->u.standard >= 0 && pvalue->u.standard <= 16383) ) {
|
|
extbit = 0;
|
|
}
|
|
else extbit = 1;
|
|
|
|
/* extension bit */
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (extbit) {
|
|
stat = encodeUnconsInteger (pctxt, pvalue->u.standard);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
else {
|
|
stat = encodeConsInteger (pctxt, pvalue->u.standard, 0, 16383);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
break;
|
|
|
|
/* oid */
|
|
case 2:
|
|
stat = encodeObjectIdentifier (pctxt, pvalue->u.oid);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* nonStandard */
|
|
case 3:
|
|
stat = asn1PE_H225GloballyUniqueID (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 4);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportAddress_ipAddress_ip */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportAddress_ipAddress_ip (OOCTXT* pctxt, H225TransportAddress_ipAddress_ip* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 4, 4, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportAddress_ipAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportAddress_ipAddress (OOCTXT* pctxt, H225TransportAddress_ipAddress* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* encode ip */
|
|
|
|
stat = asn1PE_H225TransportAddress_ipAddress_ip (pctxt, &pvalue->ip);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode port */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->port, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportAddress_ipSourceRoute_ip */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportAddress_ipSourceRoute_ip (OOCTXT* pctxt, H225TransportAddress_ipSourceRoute_ip* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 4, 4, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportAddress_ipSourceRoute_route_element */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportAddress_ipSourceRoute_route_element (OOCTXT* pctxt, H225TransportAddress_ipSourceRoute_route_element* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 4, 4, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225TransportAddress_ipSourceRoute_route_element */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225TransportAddress_ipSourceRoute_route_element (OOCTXT* pctxt, H225_SeqOfH225TransportAddress_ipSourceRoute_route_element* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = asn1PE_H225TransportAddress_ipSourceRoute_route_element (pctxt, &pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportAddress_ipSourceRoute_routing */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportAddress_ipSourceRoute_routing (OOCTXT* pctxt, H225TransportAddress_ipSourceRoute_routing* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 2);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* strict */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* loose */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportAddress_ipSourceRoute */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportAddress_ipSourceRoute (OOCTXT* pctxt, H225TransportAddress_ipSourceRoute* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode ip */
|
|
|
|
stat = asn1PE_H225TransportAddress_ipSourceRoute_ip (pctxt, &pvalue->ip);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode port */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->port, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode route */
|
|
|
|
stat = asn1PE_H225_SeqOfH225TransportAddress_ipSourceRoute_route_element (pctxt, &pvalue->route);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode routing */
|
|
|
|
stat = asn1PE_H225TransportAddress_ipSourceRoute_routing (pctxt, &pvalue->routing);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportAddress_ipxAddress_node */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportAddress_ipxAddress_node (OOCTXT* pctxt, H225TransportAddress_ipxAddress_node* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 6, 6, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportAddress_ipxAddress_netnum */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportAddress_ipxAddress_netnum (OOCTXT* pctxt, H225TransportAddress_ipxAddress_netnum* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 4, 4, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportAddress_ipxAddress_port */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportAddress_ipxAddress_port (OOCTXT* pctxt, H225TransportAddress_ipxAddress_port* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 2, 2, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportAddress_ipxAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportAddress_ipxAddress (OOCTXT* pctxt, H225TransportAddress_ipxAddress* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* encode node */
|
|
|
|
stat = asn1PE_H225TransportAddress_ipxAddress_node (pctxt, &pvalue->node);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode netnum */
|
|
|
|
stat = asn1PE_H225TransportAddress_ipxAddress_netnum (pctxt, &pvalue->netnum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode port */
|
|
|
|
stat = asn1PE_H225TransportAddress_ipxAddress_port (pctxt, &pvalue->port);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportAddress_ip6Address_ip */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportAddress_ip6Address_ip (OOCTXT* pctxt, H225TransportAddress_ip6Address_ip* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 16, 16, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportAddress_ip6Address */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportAddress_ip6Address (OOCTXT* pctxt, H225TransportAddress_ip6Address* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode ip */
|
|
|
|
stat = asn1PE_H225TransportAddress_ip6Address_ip (pctxt, &pvalue->ip);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode port */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->port, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportAddress_netBios */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportAddress_netBios (OOCTXT* pctxt, H225TransportAddress_netBios* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 16, 16, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportAddress_nsap */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportAddress_nsap (OOCTXT* pctxt, H225TransportAddress_nsap* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 20, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H221NonStandard */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H221NonStandard (OOCTXT* pctxt, H225H221NonStandard* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode t35CountryCode */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t35CountryCode, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode t35Extension */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t35Extension, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode manufacturerCode */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->manufacturerCode, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NonStandardIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225NonStandardIdentifier (OOCTXT* pctxt, H225NonStandardIdentifier* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 2);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* object */
|
|
case 1:
|
|
stat = encodeObjectIdentifier (pctxt, pvalue->u.object);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* h221NonStandard */
|
|
case 2:
|
|
stat = asn1PE_H225H221NonStandard (pctxt, pvalue->u.h221NonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NonStandardParameter */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225NonStandardParameter (OOCTXT* pctxt, H225NonStandardParameter* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* encode nonStandardIdentifier */
|
|
|
|
stat = asn1PE_H225NonStandardIdentifier (pctxt, &pvalue->nonStandardIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode data */
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->data.numocts, pvalue->data.data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportAddress (OOCTXT* pctxt, H225TransportAddress* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 7);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 6);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* ipAddress */
|
|
case 1:
|
|
stat = asn1PE_H225TransportAddress_ipAddress (pctxt, pvalue->u.ipAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* ipSourceRoute */
|
|
case 2:
|
|
stat = asn1PE_H225TransportAddress_ipSourceRoute (pctxt, pvalue->u.ipSourceRoute);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* ipxAddress */
|
|
case 3:
|
|
stat = asn1PE_H225TransportAddress_ipxAddress (pctxt, pvalue->u.ipxAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* ip6Address */
|
|
case 4:
|
|
stat = asn1PE_H225TransportAddress_ip6Address (pctxt, pvalue->u.ip6Address);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* netBios */
|
|
case 5:
|
|
stat = asn1PE_H225TransportAddress_netBios (pctxt, pvalue->u.netBios);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* nsap */
|
|
case 6:
|
|
stat = asn1PE_H225TransportAddress_nsap (pctxt, pvalue->u.nsap);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* nonStandardAddress */
|
|
case 7:
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, pvalue->u.nonStandardAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 8);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* PublicTypeOfNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225PublicTypeOfNumber (OOCTXT* pctxt, H225PublicTypeOfNumber* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 6);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* unknown */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* internationalNumber */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* nationalNumber */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* networkSpecificNumber */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* subscriberNumber */
|
|
case 5:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* abbreviatedNumber */
|
|
case 6:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 7);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* PublicPartyNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225PublicPartyNumber (OOCTXT* pctxt, H225PublicPartyNumber* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* encode publicTypeOfNumber */
|
|
|
|
stat = asn1PE_H225PublicTypeOfNumber (pctxt, &pvalue->publicTypeOfNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode publicNumberDigits */
|
|
|
|
stat = asn1PE_H225NumberDigits (pctxt, pvalue->publicNumberDigits);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* PrivateTypeOfNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225PrivateTypeOfNumber (OOCTXT* pctxt, H225PrivateTypeOfNumber* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 6);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* unknown */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* level2RegionalNumber */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* level1RegionalNumber */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* pISNSpecificNumber */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* localNumber */
|
|
case 5:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* abbreviatedNumber */
|
|
case 6:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 7);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* PrivatePartyNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225PrivatePartyNumber (OOCTXT* pctxt, H225PrivatePartyNumber* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* encode privateTypeOfNumber */
|
|
|
|
stat = asn1PE_H225PrivateTypeOfNumber (pctxt, &pvalue->privateTypeOfNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode privateNumberDigits */
|
|
|
|
stat = asn1PE_H225NumberDigits (pctxt, pvalue->privateNumberDigits);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* PartyNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225PartyNumber (OOCTXT* pctxt, H225PartyNumber* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 5);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* e164Number */
|
|
case 1:
|
|
stat = asn1PE_H225PublicPartyNumber (pctxt, pvalue->u.e164Number);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* dataPartyNumber */
|
|
case 2:
|
|
stat = asn1PE_H225NumberDigits (pctxt, pvalue->u.dataPartyNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* telexPartyNumber */
|
|
case 3:
|
|
stat = asn1PE_H225NumberDigits (pctxt, pvalue->u.telexPartyNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* privateNumber */
|
|
case 4:
|
|
stat = asn1PE_H225PrivatePartyNumber (pctxt, pvalue->u.privateNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* nationalStandardPartyNumber */
|
|
case 5:
|
|
stat = asn1PE_H225NumberDigits (pctxt, pvalue->u.nationalStandardPartyNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 6);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ANSI_41_UIM_system_id */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_ANSI_41_UIM_system_id_sid_CharSet;
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_ANSI_41_UIM_system_id_mid_CharSet;
|
|
|
|
EXTERN int asn1PE_H225ANSI_41_UIM_system_id (OOCTXT* pctxt, H225ANSI_41_UIM_system_id* pvalue)
|
|
{
|
|
static Asn1SizeCnst sid_lsize1 = { 0, 1, 4, 0 };
|
|
static Asn1SizeCnst mid_lsize1 = { 0, 1, 4, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 2);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* sid */
|
|
case 1:
|
|
addSizeConstraint (pctxt, &sid_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->u.sid, gs_H323_MESSAGES_ANSI_41_UIM_system_id_sid_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* mid */
|
|
case 2:
|
|
addSizeConstraint (pctxt, &mid_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->u.mid, gs_H323_MESSAGES_ANSI_41_UIM_system_id_mid_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ANSI_41_UIM_systemMyTypeCode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ANSI_41_UIM_systemMyTypeCode (OOCTXT* pctxt, H225ANSI_41_UIM_systemMyTypeCode* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 1, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ANSI_41_UIM_systemAccessType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ANSI_41_UIM_systemAccessType (OOCTXT* pctxt, H225ANSI_41_UIM_systemAccessType* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 1, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ANSI_41_UIM_qualificationInformationCode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ANSI_41_UIM_qualificationInformationCode (OOCTXT* pctxt, H225ANSI_41_UIM_qualificationInformationCode* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 1, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ANSI_41_UIM */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_ANSI_41_UIM_imsi_CharSet;
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_ANSI_41_UIM_min_CharSet;
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_ANSI_41_UIM_mdn_CharSet;
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_ANSI_41_UIM_msisdn_CharSet;
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_ANSI_41_UIM_esn_CharSet;
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_ANSI_41_UIM_mscid_CharSet;
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_ANSI_41_UIM_sesn_CharSet;
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_ANSI_41_UIM_soc_CharSet;
|
|
|
|
EXTERN int asn1PE_H225ANSI_41_UIM (OOCTXT* pctxt, H225ANSI_41_UIM* pvalue)
|
|
{
|
|
static Asn1SizeCnst imsi_lsize1 = { 0, 3, 16, 0 };
|
|
static Asn1SizeCnst min_lsize1 = { 0, 3, 16, 0 };
|
|
static Asn1SizeCnst mdn_lsize1 = { 0, 3, 16, 0 };
|
|
static Asn1SizeCnst msisdn_lsize1 = { 0, 3, 16, 0 };
|
|
static Asn1SizeCnst esn_lsize1 = { 0, 16, 16, 0 };
|
|
static Asn1SizeCnst mscid_lsize1 = { 0, 3, 16, 0 };
|
|
static Asn1SizeCnst sesn_lsize1 = { 0, 16, 16, 0 };
|
|
static Asn1SizeCnst soc_lsize1 = { 0, 3, 16, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.imsiPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.minPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.mdnPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.msisdnPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.esnPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.mscidPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.systemMyTypeCodePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.systemAccessTypePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.qualificationInformationCodePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.sesnPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.socPresent);
|
|
|
|
/* encode imsi */
|
|
|
|
if (pvalue->m.imsiPresent) {
|
|
addSizeConstraint (pctxt, &imsi_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->imsi, gs_H323_MESSAGES_ANSI_41_UIM_imsi_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode min */
|
|
|
|
if (pvalue->m.minPresent) {
|
|
addSizeConstraint (pctxt, &min_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->min, gs_H323_MESSAGES_ANSI_41_UIM_min_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode mdn */
|
|
|
|
if (pvalue->m.mdnPresent) {
|
|
addSizeConstraint (pctxt, &mdn_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->mdn, gs_H323_MESSAGES_ANSI_41_UIM_mdn_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode msisdn */
|
|
|
|
if (pvalue->m.msisdnPresent) {
|
|
addSizeConstraint (pctxt, &msisdn_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->msisdn, gs_H323_MESSAGES_ANSI_41_UIM_msisdn_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode esn */
|
|
|
|
if (pvalue->m.esnPresent) {
|
|
addSizeConstraint (pctxt, &esn_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->esn, gs_H323_MESSAGES_ANSI_41_UIM_esn_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode mscid */
|
|
|
|
if (pvalue->m.mscidPresent) {
|
|
addSizeConstraint (pctxt, &mscid_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->mscid, gs_H323_MESSAGES_ANSI_41_UIM_mscid_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode system_id */
|
|
|
|
stat = asn1PE_H225ANSI_41_UIM_system_id (pctxt, &pvalue->system_id);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode systemMyTypeCode */
|
|
|
|
if (pvalue->m.systemMyTypeCodePresent) {
|
|
stat = asn1PE_H225ANSI_41_UIM_systemMyTypeCode (pctxt, &pvalue->systemMyTypeCode);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode systemAccessType */
|
|
|
|
if (pvalue->m.systemAccessTypePresent) {
|
|
stat = asn1PE_H225ANSI_41_UIM_systemAccessType (pctxt, &pvalue->systemAccessType);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode qualificationInformationCode */
|
|
|
|
if (pvalue->m.qualificationInformationCodePresent) {
|
|
stat = asn1PE_H225ANSI_41_UIM_qualificationInformationCode (pctxt, &pvalue->qualificationInformationCode);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode sesn */
|
|
|
|
if (pvalue->m.sesnPresent) {
|
|
addSizeConstraint (pctxt, &sesn_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->sesn, gs_H323_MESSAGES_ANSI_41_UIM_sesn_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode soc */
|
|
|
|
if (pvalue->m.socPresent) {
|
|
addSizeConstraint (pctxt, &soc_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->soc, gs_H323_MESSAGES_ANSI_41_UIM_soc_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GSM_UIM_tmsi */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225GSM_UIM_tmsi (OOCTXT* pctxt, H225GSM_UIM_tmsi* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 4, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GSM_UIM */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_GSM_UIM_imsi_CharSet;
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_GSM_UIM_msisdn_CharSet;
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_GSM_UIM_imei_CharSet;
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_GSM_UIM_hplmn_CharSet;
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_GSM_UIM_vplmn_CharSet;
|
|
|
|
EXTERN int asn1PE_H225GSM_UIM (OOCTXT* pctxt, H225GSM_UIM* pvalue)
|
|
{
|
|
static Asn1SizeCnst imsi_lsize1 = { 0, 3, 16, 0 };
|
|
static Asn1SizeCnst msisdn_lsize1 = { 0, 3, 16, 0 };
|
|
static Asn1SizeCnst imei_lsize1 = { 0, 15, 16, 0 };
|
|
static Asn1SizeCnst hplmn_lsize1 = { 0, 1, 4, 0 };
|
|
static Asn1SizeCnst vplmn_lsize1 = { 0, 1, 4, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.imsiPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tmsiPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.msisdnPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.imeiPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.hplmnPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.vplmnPresent);
|
|
|
|
/* encode imsi */
|
|
|
|
if (pvalue->m.imsiPresent) {
|
|
addSizeConstraint (pctxt, &imsi_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->imsi, gs_H323_MESSAGES_GSM_UIM_imsi_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode tmsi */
|
|
|
|
if (pvalue->m.tmsiPresent) {
|
|
stat = asn1PE_H225GSM_UIM_tmsi (pctxt, &pvalue->tmsi);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode msisdn */
|
|
|
|
if (pvalue->m.msisdnPresent) {
|
|
addSizeConstraint (pctxt, &msisdn_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->msisdn, gs_H323_MESSAGES_GSM_UIM_msisdn_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode imei */
|
|
|
|
if (pvalue->m.imeiPresent) {
|
|
addSizeConstraint (pctxt, &imei_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->imei, gs_H323_MESSAGES_GSM_UIM_imei_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode hplmn */
|
|
|
|
if (pvalue->m.hplmnPresent) {
|
|
addSizeConstraint (pctxt, &hplmn_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->hplmn, gs_H323_MESSAGES_GSM_UIM_hplmn_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode vplmn */
|
|
|
|
if (pvalue->m.vplmnPresent) {
|
|
addSizeConstraint (pctxt, &vplmn_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->vplmn, gs_H323_MESSAGES_GSM_UIM_vplmn_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MobileUIM */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225MobileUIM (OOCTXT* pctxt, H225MobileUIM* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 2);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* ansi_41_uim */
|
|
case 1:
|
|
stat = asn1PE_H225ANSI_41_UIM (pctxt, pvalue->u.ansi_41_uim);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* gsm_uim */
|
|
case 2:
|
|
stat = asn1PE_H225GSM_UIM (pctxt, pvalue->u.gsm_uim);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AliasAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
extern EXTERN const char* gs_H323_MESSAGES_AliasAddress_dialedDigits_CharSet;
|
|
|
|
EXTERN int asn1PE_H225AliasAddress (OOCTXT* pctxt, H225AliasAddress* pvalue)
|
|
{
|
|
static Asn1SizeCnst dialedDigits_lsize1 = { 0, 1, 128, 0 };
|
|
static Asn1SizeCnst h323_ID_lsize1 = { 0, 1, 256, 0 };
|
|
static Asn1SizeCnst url_ID_lsize1 = { 0, 1, 512, 0 };
|
|
static Asn1SizeCnst email_ID_lsize1 = { 0, 1, 512, 0 };
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 2);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* dialedDigits */
|
|
case 1:
|
|
addSizeConstraint (pctxt, &dialedDigits_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->u.dialedDigits, gs_H323_MESSAGES_AliasAddress_dialedDigits_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* h323_ID */
|
|
case 2:
|
|
addSizeConstraint (pctxt, &h323_ID_lsize1);
|
|
|
|
stat = encodeBMPString (pctxt, pvalue->u.h323_ID, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* url_ID */
|
|
case 3:
|
|
addSizeConstraint (&lctxt, &url_ID_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (&lctxt, pvalue->u.url_ID, 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* transportID */
|
|
case 4:
|
|
stat = asn1PE_H225TransportAddress (&lctxt, pvalue->u.transportID);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* email_ID */
|
|
case 5:
|
|
addSizeConstraint (&lctxt, &email_ID_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (&lctxt, pvalue->u.email_ID, 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* partyNumber */
|
|
case 6:
|
|
stat = asn1PE_H225PartyNumber (&lctxt, pvalue->u.partyNumber);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* mobileUIM */
|
|
case 7:
|
|
stat = asn1PE_H225MobileUIM (&lctxt, pvalue->u.mobileUIM);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Content_compound */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Content_compound (OOCTXT* pctxt, H225Content_compound* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 512, 0 };
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeLength (pctxt, pvalue->count);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
pnode = pvalue->head;
|
|
|
|
for (xx1 = 0; xx1 < pvalue->count; xx1++) {
|
|
stat = asn1PE_H225EnumeratedParameter (pctxt, (H225EnumeratedParameter*)((H225EnumeratedParameter*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Content_nested */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Content_nested (OOCTXT* pctxt, H225Content_nested* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 16, 0 };
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeLength (pctxt, pvalue->count);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
pnode = pvalue->head;
|
|
|
|
for (xx1 = 0; xx1 < pvalue->count; xx1++) {
|
|
stat = asn1PE_H225GenericData (pctxt, (H225GenericData*)((H225GenericData*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Content */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Content (OOCTXT* pctxt, H225Content* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 12);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 11);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* raw */
|
|
case 1:
|
|
stat = encodeOctetString (pctxt, pvalue->u.raw->numocts, pvalue->u.raw->data);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* text */
|
|
case 2:
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->u.text, 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* unicode */
|
|
case 3:
|
|
stat = encodeBMPString (pctxt, pvalue->u.unicode, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* bool_ */
|
|
case 4:
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->u.bool_);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* number8 */
|
|
case 5:
|
|
stat = encodeConsUnsigned (pctxt, pvalue->u.number8, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
break;
|
|
|
|
/* number16 */
|
|
case 6:
|
|
stat = encodeConsUnsigned (pctxt, pvalue->u.number16, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
break;
|
|
|
|
/* number32 */
|
|
case 7:
|
|
stat = encodeConsUnsigned (pctxt, pvalue->u.number32, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
break;
|
|
|
|
/* id */
|
|
case 8:
|
|
stat = asn1PE_H225GenericIdentifier (pctxt, pvalue->u.id);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* alias */
|
|
case 9:
|
|
stat = asn1PE_H225AliasAddress (pctxt, pvalue->u.alias);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* transport */
|
|
case 10:
|
|
stat = asn1PE_H225TransportAddress (pctxt, pvalue->u.transport);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* compound */
|
|
case 11:
|
|
stat = asn1PE_H225Content_compound (pctxt, pvalue->u.compound);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* nested */
|
|
case 12:
|
|
stat = asn1PE_H225Content_nested (pctxt, pvalue->u.nested);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 13);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EnumeratedParameter */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225EnumeratedParameter (OOCTXT* pctxt, H225EnumeratedParameter* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.contentPresent);
|
|
|
|
/* encode id */
|
|
|
|
stat = asn1PE_H225GenericIdentifier (pctxt, &pvalue->id);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode content */
|
|
|
|
if (pvalue->m.contentPresent) {
|
|
stat = asn1PE_H225Content (pctxt, &pvalue->content);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GenericData_parameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225GenericData_parameters (OOCTXT* pctxt, H225GenericData_parameters* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 512, 0 };
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeLength (pctxt, pvalue->count);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
pnode = pvalue->head;
|
|
|
|
for (xx1 = 0; xx1 < pvalue->count; xx1++) {
|
|
stat = asn1PE_H225EnumeratedParameter (pctxt, ((H225EnumeratedParameter*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GenericData */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225GenericData (OOCTXT* pctxt, H225GenericData* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.parametersPresent);
|
|
|
|
/* encode id */
|
|
|
|
stat = asn1PE_H225GenericIdentifier (pctxt, &pvalue->id);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode parameters */
|
|
|
|
if (pvalue->m.parametersPresent) {
|
|
stat = asn1PE_H225GenericData_parameters (pctxt, &pvalue->parameters);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FeatureDescriptor */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225FeatureDescriptor (OOCTXT* pctxt, H225FeatureDescriptor* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = asn1PE_H225GenericData (pctxt, pvalue);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FastStartToken */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225FastStartToken (OOCTXT* pctxt, H225FastStartToken* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = asn1PE_H235ClearToken (pctxt, pvalue);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EncodedFastStartToken */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225EncodedFastStartToken (OOCTXT* pctxt, H225EncodedFastStartToken value)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = encodeOpenType (pctxt, value.numocts, value.data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H323_UserInformation_user_data_user_information */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H323_UserInformation_user_data_user_information (OOCTXT* pctxt, H225H323_UserInformation_user_data_user_information* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 131, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EndpointType_set */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225EndpointType_set (OOCTXT* pctxt, H225EndpointType_set* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 32, 32, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeBitString (pctxt, pvalue->numbits, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VendorIdentifier_productId */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225VendorIdentifier_productId (OOCTXT* pctxt, H225VendorIdentifier_productId* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VendorIdentifier_versionId */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225VendorIdentifier_versionId (OOCTXT* pctxt, H225VendorIdentifier_versionId* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CicInfo_cic_element */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CicInfo_cic_element (OOCTXT* pctxt, H225CicInfo_cic_element* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 2, 4, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CicInfo_pointCode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CicInfo_pointCode (OOCTXT* pctxt, H225CicInfo_pointCode* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 2, 5, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CarrierInfo_carrierIdentificationCode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CarrierInfo_carrierIdentificationCode (OOCTXT* pctxt, H225CarrierInfo_carrierIdentificationCode* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 3, 4, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CallTerminationCause_releaseCompleteCauseIE */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CallTerminationCause_releaseCompleteCauseIE (OOCTXT* pctxt, H225CallTerminationCause_releaseCompleteCauseIE* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 2, 32, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225AliasAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225AliasAddress (OOCTXT* pctxt, H225_SeqOfH225AliasAddress* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225AliasAddress (pctxt, ((H225AliasAddress*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VendorIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225VendorIdentifier (OOCTXT* pctxt, H225VendorIdentifier* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.enterpriseNumberPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.productIdPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.versionIdPresent);
|
|
|
|
/* encode vendor */
|
|
|
|
stat = asn1PE_H225H221NonStandard (pctxt, &pvalue->vendor);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode productId */
|
|
|
|
if (pvalue->m.productIdPresent) {
|
|
stat = asn1PE_H225VendorIdentifier_productId (pctxt, &pvalue->productId);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode versionId */
|
|
|
|
if (pvalue->m.versionIdPresent) {
|
|
stat = asn1PE_H225VendorIdentifier_versionId (pctxt, &pvalue->versionId);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.enterpriseNumberPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.enterpriseNumberPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeObjectIdentifier (&lctxt, &pvalue->enterpriseNumber);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GatekeeperInfo */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225GatekeeperInfo (OOCTXT* pctxt, H225GatekeeperInfo* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DataRate */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225DataRate (OOCTXT* pctxt, H225DataRate* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.channelMultiplierPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode channelRate */
|
|
|
|
stat = asn1PE_H225BandWidth (pctxt, pvalue->channelRate);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode channelMultiplier */
|
|
|
|
if (pvalue->m.channelMultiplierPresent) {
|
|
stat = encodeConsUnsigned (pctxt, pvalue->channelMultiplier, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225DataRate */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225DataRate (OOCTXT* pctxt, H225_SeqOfH225DataRate* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225DataRate (pctxt, ((H225DataRate*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* SupportedPrefix */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225SupportedPrefix (OOCTXT* pctxt, H225SupportedPrefix* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode prefix */
|
|
|
|
stat = asn1PE_H225AliasAddress (pctxt, &pvalue->prefix);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225SupportedPrefix */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225SupportedPrefix (OOCTXT* pctxt, H225_SeqOfH225SupportedPrefix* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225SupportedPrefix (pctxt, ((H225SupportedPrefix*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H310Caps */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H310Caps (OOCTXT* pctxt, H225H310Caps* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.dataRatesSupportedPresent ||
|
|
pvalue->m.supportedPrefixesPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.dataRatesSupportedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedPrefixesPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.dataRatesSupportedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225DataRate (&lctxt, &pvalue->dataRatesSupported);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportedPrefixesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedPrefix (&lctxt, &pvalue->supportedPrefixes);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H320Caps */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H320Caps (OOCTXT* pctxt, H225H320Caps* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.dataRatesSupportedPresent ||
|
|
pvalue->m.supportedPrefixesPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.dataRatesSupportedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedPrefixesPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.dataRatesSupportedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225DataRate (&lctxt, &pvalue->dataRatesSupported);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportedPrefixesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedPrefix (&lctxt, &pvalue->supportedPrefixes);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H321Caps */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H321Caps (OOCTXT* pctxt, H225H321Caps* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.dataRatesSupportedPresent ||
|
|
pvalue->m.supportedPrefixesPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.dataRatesSupportedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedPrefixesPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.dataRatesSupportedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225DataRate (&lctxt, &pvalue->dataRatesSupported);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportedPrefixesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedPrefix (&lctxt, &pvalue->supportedPrefixes);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H322Caps */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H322Caps (OOCTXT* pctxt, H225H322Caps* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.dataRatesSupportedPresent ||
|
|
pvalue->m.supportedPrefixesPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.dataRatesSupportedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedPrefixesPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.dataRatesSupportedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225DataRate (&lctxt, &pvalue->dataRatesSupported);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportedPrefixesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedPrefix (&lctxt, &pvalue->supportedPrefixes);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H323Caps */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H323Caps (OOCTXT* pctxt, H225H323Caps* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.dataRatesSupportedPresent ||
|
|
pvalue->m.supportedPrefixesPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.dataRatesSupportedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedPrefixesPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.dataRatesSupportedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225DataRate (&lctxt, &pvalue->dataRatesSupported);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportedPrefixesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedPrefix (&lctxt, &pvalue->supportedPrefixes);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H324Caps */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H324Caps (OOCTXT* pctxt, H225H324Caps* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.dataRatesSupportedPresent ||
|
|
pvalue->m.supportedPrefixesPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.dataRatesSupportedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedPrefixesPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.dataRatesSupportedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225DataRate (&lctxt, &pvalue->dataRatesSupported);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportedPrefixesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedPrefix (&lctxt, &pvalue->supportedPrefixes);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VoiceCaps */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225VoiceCaps (OOCTXT* pctxt, H225VoiceCaps* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.dataRatesSupportedPresent ||
|
|
pvalue->m.supportedPrefixesPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.dataRatesSupportedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedPrefixesPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.dataRatesSupportedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225DataRate (&lctxt, &pvalue->dataRatesSupported);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportedPrefixesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedPrefix (&lctxt, &pvalue->supportedPrefixes);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* T120OnlyCaps */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225T120OnlyCaps (OOCTXT* pctxt, H225T120OnlyCaps* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.dataRatesSupportedPresent ||
|
|
pvalue->m.supportedPrefixesPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.dataRatesSupportedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedPrefixesPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.dataRatesSupportedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225DataRate (&lctxt, &pvalue->dataRatesSupported);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportedPrefixesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedPrefix (&lctxt, &pvalue->supportedPrefixes);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NonStandardProtocol */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225NonStandardProtocol (OOCTXT* pctxt, H225NonStandardProtocol* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.dataRatesSupportedPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode dataRatesSupported */
|
|
|
|
if (pvalue->m.dataRatesSupportedPresent) {
|
|
stat = asn1PE_H225_SeqOfH225DataRate (pctxt, &pvalue->dataRatesSupported);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode supportedPrefixes */
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedPrefix (pctxt, &pvalue->supportedPrefixes);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* T38FaxAnnexbOnlyCaps */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225T38FaxAnnexbOnlyCaps (OOCTXT* pctxt, H225T38FaxAnnexbOnlyCaps* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.dataRatesSupportedPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode dataRatesSupported */
|
|
|
|
if (pvalue->m.dataRatesSupportedPresent) {
|
|
stat = asn1PE_H225_SeqOfH225DataRate (pctxt, &pvalue->dataRatesSupported);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode supportedPrefixes */
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedPrefix (pctxt, &pvalue->supportedPrefixes);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode t38FaxProtocol */
|
|
|
|
stat = asn1PE_H245DataProtocolCapability (pctxt, &pvalue->t38FaxProtocol);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode t38FaxProfile */
|
|
|
|
stat = asn1PE_H245T38FaxProfile (pctxt, &pvalue->t38FaxProfile);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* SIPCaps */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225SIPCaps (OOCTXT* pctxt, H225SIPCaps* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.dataRatesSupportedPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedPrefixesPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode dataRatesSupported */
|
|
|
|
if (pvalue->m.dataRatesSupportedPresent) {
|
|
stat = asn1PE_H225_SeqOfH225DataRate (pctxt, &pvalue->dataRatesSupported);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode supportedPrefixes */
|
|
|
|
if (pvalue->m.supportedPrefixesPresent) {
|
|
stat = asn1PE_H225_SeqOfH225SupportedPrefix (pctxt, &pvalue->supportedPrefixes);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* SupportedProtocols */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225SupportedProtocols (OOCTXT* pctxt, H225SupportedProtocols* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 9);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 8);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* nonStandardData */
|
|
case 1:
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, pvalue->u.nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* h310 */
|
|
case 2:
|
|
stat = asn1PE_H225H310Caps (pctxt, pvalue->u.h310);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* h320 */
|
|
case 3:
|
|
stat = asn1PE_H225H320Caps (pctxt, pvalue->u.h320);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* h321 */
|
|
case 4:
|
|
stat = asn1PE_H225H321Caps (pctxt, pvalue->u.h321);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* h322 */
|
|
case 5:
|
|
stat = asn1PE_H225H322Caps (pctxt, pvalue->u.h322);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* h323 */
|
|
case 6:
|
|
stat = asn1PE_H225H323Caps (pctxt, pvalue->u.h323);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* h324 */
|
|
case 7:
|
|
stat = asn1PE_H225H324Caps (pctxt, pvalue->u.h324);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* voice */
|
|
case 8:
|
|
stat = asn1PE_H225VoiceCaps (pctxt, pvalue->u.voice);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* t120_only */
|
|
case 9:
|
|
stat = asn1PE_H225T120OnlyCaps (pctxt, pvalue->u.t120_only);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 10);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* nonStandardProtocol */
|
|
case 10:
|
|
stat = asn1PE_H225NonStandardProtocol (&lctxt, pvalue->u.nonStandardProtocol);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* t38FaxAnnexbOnly */
|
|
case 11:
|
|
stat = asn1PE_H225T38FaxAnnexbOnlyCaps (&lctxt, pvalue->u.t38FaxAnnexbOnly);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* sip */
|
|
case 12:
|
|
stat = asn1PE_H225SIPCaps (&lctxt, pvalue->u.sip);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225SupportedProtocols */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225SupportedProtocols (OOCTXT* pctxt, H225_SeqOfH225SupportedProtocols* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225SupportedProtocols (pctxt, ((H225SupportedProtocols*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GatewayInfo */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225GatewayInfo (OOCTXT* pctxt, H225GatewayInfo* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.protocolPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode protocol */
|
|
|
|
if (pvalue->m.protocolPresent) {
|
|
stat = asn1PE_H225_SeqOfH225SupportedProtocols (pctxt, &pvalue->protocol);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* McuInfo */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225McuInfo (OOCTXT* pctxt, H225McuInfo* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.protocolPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.protocolPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.protocolPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedProtocols (&lctxt, &pvalue->protocol);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TerminalInfo */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TerminalInfo (OOCTXT* pctxt, H225TerminalInfo* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TunnelledProtocolAlternateIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TunnelledProtocolAlternateIdentifier (OOCTXT* pctxt, H225TunnelledProtocolAlternateIdentifier* pvalue)
|
|
{
|
|
static Asn1SizeCnst protocolType_lsize1 = { 0, 1, 64, 0 };
|
|
static Asn1SizeCnst protocolVariant_lsize1 = { 0, 1, 64, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.protocolVariantPresent);
|
|
|
|
/* encode protocolType */
|
|
|
|
addSizeConstraint (pctxt, &protocolType_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->protocolType, 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode protocolVariant */
|
|
|
|
if (pvalue->m.protocolVariantPresent) {
|
|
addSizeConstraint (pctxt, &protocolVariant_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->protocolVariant, 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TunnelledProtocol_id */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TunnelledProtocol_id (OOCTXT* pctxt, H225TunnelledProtocol_id* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 2);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* tunnelledProtocolObjectID */
|
|
case 1:
|
|
stat = encodeObjectIdentifier (pctxt, pvalue->u.tunnelledProtocolObjectID);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* tunnelledProtocolAlternateID */
|
|
case 2:
|
|
stat = asn1PE_H225TunnelledProtocolAlternateIdentifier (pctxt, pvalue->u.tunnelledProtocolAlternateID);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TunnelledProtocol */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TunnelledProtocol (OOCTXT* pctxt, H225TunnelledProtocol* pvalue)
|
|
{
|
|
static Asn1SizeCnst subIdentifier_lsize1 = { 0, 1, 64, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.subIdentifierPresent);
|
|
|
|
/* encode id */
|
|
|
|
stat = asn1PE_H225TunnelledProtocol_id (pctxt, &pvalue->id);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode subIdentifier */
|
|
|
|
if (pvalue->m.subIdentifierPresent) {
|
|
addSizeConstraint (pctxt, &subIdentifier_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->subIdentifier, 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225TunnelledProtocol */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225TunnelledProtocol (OOCTXT* pctxt, H225_SeqOfH225TunnelledProtocol* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225TunnelledProtocol (pctxt, ((H225TunnelledProtocol*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EndpointType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225EndpointType (OOCTXT* pctxt, H225EndpointType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.setPresent ||
|
|
pvalue->m.supportedTunnelledProtocolsPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.vendorPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.gatekeeperPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.gatewayPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.mcuPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.terminalPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode vendor */
|
|
|
|
if (pvalue->m.vendorPresent) {
|
|
stat = asn1PE_H225VendorIdentifier (pctxt, &pvalue->vendor);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode gatekeeper */
|
|
|
|
if (pvalue->m.gatekeeperPresent) {
|
|
stat = asn1PE_H225GatekeeperInfo (pctxt, &pvalue->gatekeeper);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode gateway */
|
|
|
|
if (pvalue->m.gatewayPresent) {
|
|
stat = asn1PE_H225GatewayInfo (pctxt, &pvalue->gateway);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode mcu */
|
|
|
|
if (pvalue->m.mcuPresent) {
|
|
stat = asn1PE_H225McuInfo (pctxt, &pvalue->mcu);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode terminal */
|
|
|
|
if (pvalue->m.terminalPresent) {
|
|
stat = asn1PE_H225TerminalInfo (pctxt, &pvalue->terminal);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode mc */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->mc);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode undefinedNode */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->undefinedNode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.setPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedTunnelledProtocolsPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.setPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225EndpointType_set (&lctxt, &pvalue->set);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportedTunnelledProtocolsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225TunnelledProtocol (&lctxt, &pvalue->supportedTunnelledProtocols);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225CallReferenceValue */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225CallReferenceValue (OOCTXT* pctxt, H225_SeqOfH225CallReferenceValue* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = asn1PE_H225CallReferenceValue (pctxt, pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Setup_UUIE_conferenceGoal */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Setup_UUIE_conferenceGoal (OOCTXT* pctxt, H225Setup_UUIE_conferenceGoal* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 3);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* create */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* join */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* invite */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 4);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* capability_negotiation */
|
|
case 4:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* callIndependentSupplementaryService */
|
|
case 5:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Q954Details */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Q954Details (OOCTXT* pctxt, H225Q954Details* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode conferenceCalling */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->conferenceCalling);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode threePartyService */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->threePartyService);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* QseriesOptions */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225QseriesOptions (OOCTXT* pctxt, H225QseriesOptions* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode q932Full */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->q932Full);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode q951Full */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->q951Full);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode q952Full */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->q952Full);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode q953Full */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->q953Full);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode q955Full */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->q955Full);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode q956Full */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->q956Full);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode q957Full */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->q957Full);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode q954Info */
|
|
|
|
stat = asn1PE_H225Q954Details (pctxt, &pvalue->q954Info);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CallType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CallType (OOCTXT* pctxt, H225CallType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 4);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* pointToPoint */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* oneToN */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* nToOne */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* nToN */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CallIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CallIdentifier (OOCTXT* pctxt, H225CallIdentifier* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode guid */
|
|
|
|
stat = asn1PE_H225GloballyUniqueID (pctxt, &pvalue->guid);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* SecurityServiceMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225SecurityServiceMode (OOCTXT* pctxt, H225SecurityServiceMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 3);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* nonStandard */
|
|
case 1:
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* none */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* default_ */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 4);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* SecurityCapabilities */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225SecurityCapabilities (OOCTXT* pctxt, H225SecurityCapabilities* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardPresent);
|
|
|
|
/* encode nonStandard */
|
|
|
|
if (pvalue->m.nonStandardPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode encryption */
|
|
|
|
stat = asn1PE_H225SecurityServiceMode (pctxt, &pvalue->encryption);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode authenticaton */
|
|
|
|
stat = asn1PE_H225SecurityServiceMode (pctxt, &pvalue->authenticaton);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode integrity */
|
|
|
|
stat = asn1PE_H225SecurityServiceMode (pctxt, &pvalue->integrity);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H245Security */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H245Security (OOCTXT* pctxt, H225H245Security* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 4);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* nonStandard */
|
|
case 1:
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* noSecurity */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* tls */
|
|
case 3:
|
|
stat = asn1PE_H225SecurityCapabilities (pctxt, pvalue->u.tls);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* ipsec */
|
|
case 4:
|
|
stat = asn1PE_H225SecurityCapabilities (pctxt, pvalue->u.ipsec);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225H245Security */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225H245Security (OOCTXT* pctxt, H225_SeqOfH225H245Security* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225H245Security (pctxt, ((H225H245Security*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225ClearToken */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225ClearToken (OOCTXT* pctxt, H225_SeqOfH225ClearToken* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H235ClearToken (pctxt, ((H235ClearToken*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CryptoH323Token_cryptoEPPwdHash */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CryptoH323Token_cryptoEPPwdHash (OOCTXT* pctxt, H225CryptoH323Token_cryptoEPPwdHash* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* encode alias */
|
|
|
|
stat = asn1PE_H225AliasAddress (pctxt, &pvalue->alias);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode timeStamp */
|
|
|
|
stat = asn1PE_H235TimeStamp (pctxt, pvalue->timeStamp);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode token */
|
|
|
|
stat = asn1PE_H235HASHED (pctxt, &pvalue->token);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CryptoH323Token_cryptoGKPwdHash */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CryptoH323Token_cryptoGKPwdHash (OOCTXT* pctxt, H225CryptoH323Token_cryptoGKPwdHash* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* encode gatekeeperId */
|
|
|
|
stat = asn1PE_H225GatekeeperIdentifier (pctxt, pvalue->gatekeeperId);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode timeStamp */
|
|
|
|
stat = asn1PE_H235TimeStamp (pctxt, pvalue->timeStamp);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode token */
|
|
|
|
stat = asn1PE_H235HASHED (pctxt, &pvalue->token);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CryptoH323Token_cryptoEPCert */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CryptoH323Token_cryptoEPCert (OOCTXT* pctxt, H225CryptoH323Token_cryptoEPCert* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* encode toBeSigned */
|
|
|
|
stat = asn1PE_H235EncodedPwdCertToken (pctxt, pvalue->toBeSigned);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode algorithmOID */
|
|
|
|
stat = encodeObjectIdentifier (pctxt, &pvalue->algorithmOID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode paramS */
|
|
|
|
stat = asn1PE_H235Params (pctxt, &pvalue->paramS);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode signature */
|
|
|
|
stat = encodeBitString (pctxt, pvalue->signature.numbits, pvalue->signature.data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CryptoH323Token_cryptoGKCert */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CryptoH323Token_cryptoGKCert (OOCTXT* pctxt, H225CryptoH323Token_cryptoGKCert* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* encode toBeSigned */
|
|
|
|
stat = asn1PE_H235EncodedPwdCertToken (pctxt, pvalue->toBeSigned);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode algorithmOID */
|
|
|
|
stat = encodeObjectIdentifier (pctxt, &pvalue->algorithmOID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode paramS */
|
|
|
|
stat = asn1PE_H235Params (pctxt, &pvalue->paramS);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode signature */
|
|
|
|
stat = encodeBitString (pctxt, pvalue->signature.numbits, pvalue->signature.data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CryptoH323Token_cryptoFastStart */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CryptoH323Token_cryptoFastStart (OOCTXT* pctxt, H225CryptoH323Token_cryptoFastStart* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* encode toBeSigned */
|
|
|
|
stat = asn1PE_H225EncodedFastStartToken (pctxt, pvalue->toBeSigned);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode algorithmOID */
|
|
|
|
stat = encodeObjectIdentifier (pctxt, &pvalue->algorithmOID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode paramS */
|
|
|
|
stat = asn1PE_H235Params (pctxt, &pvalue->paramS);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode signature */
|
|
|
|
stat = encodeBitString (pctxt, pvalue->signature.numbits, pvalue->signature.data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CryptoH323Token */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CryptoH323Token (OOCTXT* pctxt, H225CryptoH323Token* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 8);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* cryptoEPPwdHash */
|
|
case 1:
|
|
stat = asn1PE_H225CryptoH323Token_cryptoEPPwdHash (pctxt, pvalue->u.cryptoEPPwdHash);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* cryptoGKPwdHash */
|
|
case 2:
|
|
stat = asn1PE_H225CryptoH323Token_cryptoGKPwdHash (pctxt, pvalue->u.cryptoGKPwdHash);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* cryptoEPPwdEncr */
|
|
case 3:
|
|
stat = asn1PE_H235ENCRYPTED (pctxt, pvalue->u.cryptoEPPwdEncr);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* cryptoGKPwdEncr */
|
|
case 4:
|
|
stat = asn1PE_H235ENCRYPTED (pctxt, pvalue->u.cryptoGKPwdEncr);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* cryptoEPCert */
|
|
case 5:
|
|
stat = asn1PE_H225CryptoH323Token_cryptoEPCert (pctxt, pvalue->u.cryptoEPCert);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* cryptoGKCert */
|
|
case 6:
|
|
stat = asn1PE_H225CryptoH323Token_cryptoGKCert (pctxt, pvalue->u.cryptoGKCert);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* cryptoFastStart */
|
|
case 7:
|
|
stat = asn1PE_H225CryptoH323Token_cryptoFastStart (pctxt, pvalue->u.cryptoFastStart);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* nestedcryptoToken */
|
|
case 8:
|
|
stat = asn1PE_H235CryptoToken (pctxt, pvalue->u.nestedcryptoToken);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 9);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225CryptoH323Token */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225CryptoH323Token (OOCTXT* pctxt, H225_SeqOfH225CryptoH323Token* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225CryptoH323Token (pctxt, ((H225CryptoH323Token*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Setup_UUIE_fastStart */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Setup_UUIE_fastStart (OOCTXT* pctxt, H225Setup_UUIE_fastStart* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = encodeOctetString (pctxt, pvalue->elem[xx1].numocts, pvalue->elem[xx1].data);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ScnConnectionType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ScnConnectionType (OOCTXT* pctxt, H225ScnConnectionType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 7);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 6);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* unknown */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* bChannel */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* hybrid2x64 */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* hybrid384 */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* hybrid1536 */
|
|
case 5:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* hybrid1920 */
|
|
case 6:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* multirate */
|
|
case 7:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 8);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ScnConnectionAggregation */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ScnConnectionAggregation (OOCTXT* pctxt, H225ScnConnectionAggregation* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 6);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* auto_ */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* none */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* h221 */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* bonded_mode1 */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* bonded_mode2 */
|
|
case 5:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* bonded_mode3 */
|
|
case 6:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 7);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Setup_UUIE_connectionParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Setup_UUIE_connectionParameters (OOCTXT* pctxt, H225Setup_UUIE_connectionParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode connectionType */
|
|
|
|
stat = asn1PE_H225ScnConnectionType (pctxt, &pvalue->connectionType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode numberOfScnConnections */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->numberOfScnConnections, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode connectionAggregation */
|
|
|
|
stat = asn1PE_H225ScnConnectionAggregation (pctxt, &pvalue->connectionAggregation);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Setup_UUIE_language */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Setup_UUIE_language (OOCTXT* pctxt, H225Setup_UUIE_language* pvalue)
|
|
{
|
|
static Asn1SizeCnst element_lsize1 = { 0, 1, 32, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
addSizeConstraint (pctxt, &element_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->elem[xx1], 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* PresentationIndicator */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225PresentationIndicator (OOCTXT* pctxt, H225PresentationIndicator* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 3);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* presentationAllowed */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* presentationRestricted */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* addressNotAvailable */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 4);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CallCreditServiceControl_billingMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CallCreditServiceControl_billingMode (OOCTXT* pctxt, H225CallCreditServiceControl_billingMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 2);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* credit */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* debit */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CallCreditServiceControl_callStartingPoint */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CallCreditServiceControl_callStartingPoint (OOCTXT* pctxt, H225CallCreditServiceControl_callStartingPoint* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 2);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* alerting */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* connect */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CallCreditServiceControl */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CallCreditServiceControl (OOCTXT* pctxt, H225CallCreditServiceControl* pvalue)
|
|
{
|
|
static Asn1SizeCnst amountString_lsize1 = { 0, 1, 512, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.amountStringPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.billingModePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callDurationLimitPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.enforceCallDurationLimitPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callStartingPointPresent);
|
|
|
|
/* encode amountString */
|
|
|
|
if (pvalue->m.amountStringPresent) {
|
|
addSizeConstraint (pctxt, &amountString_lsize1);
|
|
|
|
stat = encodeBMPString (pctxt, pvalue->amountString, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode billingMode */
|
|
|
|
if (pvalue->m.billingModePresent) {
|
|
stat = asn1PE_H225CallCreditServiceControl_billingMode (pctxt, &pvalue->billingMode);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode callDurationLimit */
|
|
|
|
if (pvalue->m.callDurationLimitPresent) {
|
|
stat = encodeConsUnsigned (pctxt, pvalue->callDurationLimit, 1U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
/* encode enforceCallDurationLimit */
|
|
|
|
if (pvalue->m.enforceCallDurationLimitPresent) {
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->enforceCallDurationLimit);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode callStartingPoint */
|
|
|
|
if (pvalue->m.callStartingPointPresent) {
|
|
stat = asn1PE_H225CallCreditServiceControl_callStartingPoint (pctxt, &pvalue->callStartingPoint);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ServiceControlDescriptor */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ServiceControlDescriptor (OOCTXT* pctxt, H225ServiceControlDescriptor* pvalue)
|
|
{
|
|
static Asn1SizeCnst url_lsize1 = { 0, 0, 512, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 4);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* url */
|
|
case 1:
|
|
addSizeConstraint (pctxt, &url_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->u.url, 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* signal */
|
|
case 2:
|
|
stat = asn1PE_H225H248SignalsDescriptor (pctxt, *pvalue->u.signal);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* nonStandard */
|
|
case 3:
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* callCreditServiceControl */
|
|
case 4:
|
|
stat = asn1PE_H225CallCreditServiceControl (pctxt, pvalue->u.callCreditServiceControl);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ServiceControlSession_reason */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ServiceControlSession_reason (OOCTXT* pctxt, H225ServiceControlSession_reason* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 3);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* open */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* refresh */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* close */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 4);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ServiceControlSession */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ServiceControlSession (OOCTXT* pctxt, H225ServiceControlSession* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.contentsPresent);
|
|
|
|
/* encode sessionId */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->sessionId, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode contents */
|
|
|
|
if (pvalue->m.contentsPresent) {
|
|
stat = asn1PE_H225ServiceControlDescriptor (pctxt, &pvalue->contents);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode reason */
|
|
|
|
stat = asn1PE_H225ServiceControlSession_reason (pctxt, &pvalue->reason);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225ServiceControlSession */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225ServiceControlSession (OOCTXT* pctxt, H225_SeqOfH225ServiceControlSession* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225ServiceControlSession (pctxt, ((H225ServiceControlSession*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CarrierInfo */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CarrierInfo (OOCTXT* pctxt, H225CarrierInfo* pvalue)
|
|
{
|
|
static Asn1SizeCnst carrierName_lsize1 = { 0, 1, 128, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.carrierIdentificationCodePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.carrierNamePresent);
|
|
|
|
/* encode carrierIdentificationCode */
|
|
|
|
if (pvalue->m.carrierIdentificationCodePresent) {
|
|
stat = asn1PE_H225CarrierInfo_carrierIdentificationCode (pctxt, &pvalue->carrierIdentificationCode);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode carrierName */
|
|
|
|
if (pvalue->m.carrierNamePresent) {
|
|
addSizeConstraint (pctxt, &carrierName_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->carrierName, 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CallsAvailable */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CallsAvailable (OOCTXT* pctxt, H225CallsAvailable* pvalue)
|
|
{
|
|
static Asn1SizeCnst group_lsize1 = { 0, 1, 128, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.carrierPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.groupPresent);
|
|
|
|
/* encode calls */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->calls, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode group */
|
|
|
|
if (pvalue->m.groupPresent) {
|
|
addSizeConstraint (pctxt, &group_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->group, 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.carrierPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.carrierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CarrierInfo (&lctxt, &pvalue->carrier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225CallsAvailable */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225CallsAvailable (OOCTXT* pctxt, H225_SeqOfH225CallsAvailable* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225CallsAvailable (pctxt, ((H225CallsAvailable*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CallCapacityInfo */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CallCapacityInfo (OOCTXT* pctxt, H225CallCapacityInfo* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.sipGwCallsAvailablePresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.voiceGwCallsAvailablePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h310GwCallsAvailablePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h320GwCallsAvailablePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h321GwCallsAvailablePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h322GwCallsAvailablePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h323GwCallsAvailablePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h324GwCallsAvailablePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.t120OnlyGwCallsAvailablePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.t38FaxAnnexbOnlyGwCallsAvailablePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.terminalCallsAvailablePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.mcuCallsAvailablePresent);
|
|
|
|
/* encode voiceGwCallsAvailable */
|
|
|
|
if (pvalue->m.voiceGwCallsAvailablePresent) {
|
|
stat = asn1PE_H225_SeqOfH225CallsAvailable (pctxt, &pvalue->voiceGwCallsAvailable);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode h310GwCallsAvailable */
|
|
|
|
if (pvalue->m.h310GwCallsAvailablePresent) {
|
|
stat = asn1PE_H225_SeqOfH225CallsAvailable (pctxt, &pvalue->h310GwCallsAvailable);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode h320GwCallsAvailable */
|
|
|
|
if (pvalue->m.h320GwCallsAvailablePresent) {
|
|
stat = asn1PE_H225_SeqOfH225CallsAvailable (pctxt, &pvalue->h320GwCallsAvailable);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode h321GwCallsAvailable */
|
|
|
|
if (pvalue->m.h321GwCallsAvailablePresent) {
|
|
stat = asn1PE_H225_SeqOfH225CallsAvailable (pctxt, &pvalue->h321GwCallsAvailable);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode h322GwCallsAvailable */
|
|
|
|
if (pvalue->m.h322GwCallsAvailablePresent) {
|
|
stat = asn1PE_H225_SeqOfH225CallsAvailable (pctxt, &pvalue->h322GwCallsAvailable);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode h323GwCallsAvailable */
|
|
|
|
if (pvalue->m.h323GwCallsAvailablePresent) {
|
|
stat = asn1PE_H225_SeqOfH225CallsAvailable (pctxt, &pvalue->h323GwCallsAvailable);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode h324GwCallsAvailable */
|
|
|
|
if (pvalue->m.h324GwCallsAvailablePresent) {
|
|
stat = asn1PE_H225_SeqOfH225CallsAvailable (pctxt, &pvalue->h324GwCallsAvailable);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode t120OnlyGwCallsAvailable */
|
|
|
|
if (pvalue->m.t120OnlyGwCallsAvailablePresent) {
|
|
stat = asn1PE_H225_SeqOfH225CallsAvailable (pctxt, &pvalue->t120OnlyGwCallsAvailable);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode t38FaxAnnexbOnlyGwCallsAvailable */
|
|
|
|
if (pvalue->m.t38FaxAnnexbOnlyGwCallsAvailablePresent) {
|
|
stat = asn1PE_H225_SeqOfH225CallsAvailable (pctxt, &pvalue->t38FaxAnnexbOnlyGwCallsAvailable);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode terminalCallsAvailable */
|
|
|
|
if (pvalue->m.terminalCallsAvailablePresent) {
|
|
stat = asn1PE_H225_SeqOfH225CallsAvailable (pctxt, &pvalue->terminalCallsAvailable);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode mcuCallsAvailable */
|
|
|
|
if (pvalue->m.mcuCallsAvailablePresent) {
|
|
stat = asn1PE_H225_SeqOfH225CallsAvailable (pctxt, &pvalue->mcuCallsAvailable);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.sipGwCallsAvailablePresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.sipGwCallsAvailablePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CallsAvailable (&lctxt, &pvalue->sipGwCallsAvailable);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CallCapacity */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CallCapacity (OOCTXT* pctxt, H225CallCapacity* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.maximumCallCapacityPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.currentCallCapacityPresent);
|
|
|
|
/* encode maximumCallCapacity */
|
|
|
|
if (pvalue->m.maximumCallCapacityPresent) {
|
|
stat = asn1PE_H225CallCapacityInfo (pctxt, &pvalue->maximumCallCapacity);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode currentCallCapacity */
|
|
|
|
if (pvalue->m.currentCallCapacityPresent) {
|
|
stat = asn1PE_H225CallCapacityInfo (pctxt, &pvalue->currentCallCapacity);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225CicInfo_cic_element */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225CicInfo_cic_element (OOCTXT* pctxt, H225_SeqOfH225CicInfo_cic_element* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = asn1PE_H225CicInfo_cic_element (pctxt, &pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CicInfo */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CicInfo (OOCTXT* pctxt, H225CicInfo* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode cic */
|
|
|
|
stat = asn1PE_H225_SeqOfH225CicInfo_cic_element (pctxt, &pvalue->cic);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode pointCode */
|
|
|
|
stat = asn1PE_H225CicInfo_pointCode (pctxt, &pvalue->pointCode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GroupID_member */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225GroupID_member (OOCTXT* pctxt, H225GroupID_member* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = encodeConsUnsigned (pctxt, pvalue->elem[xx1], 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GroupID */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225GroupID (OOCTXT* pctxt, H225GroupID* pvalue)
|
|
{
|
|
static Asn1SizeCnst group_lsize1 = { 0, 1, 128, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.memberPresent);
|
|
|
|
/* encode member */
|
|
|
|
if (pvalue->m.memberPresent) {
|
|
stat = asn1PE_H225GroupID_member (pctxt, &pvalue->member);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode group */
|
|
|
|
addSizeConstraint (pctxt, &group_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->group, 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CircuitIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CircuitIdentifier (OOCTXT* pctxt, H225CircuitIdentifier* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.carrierPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cicPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.groupPresent);
|
|
|
|
/* encode cic */
|
|
|
|
if (pvalue->m.cicPresent) {
|
|
stat = asn1PE_H225CicInfo (pctxt, &pvalue->cic);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode group */
|
|
|
|
if (pvalue->m.groupPresent) {
|
|
stat = asn1PE_H225GroupID (pctxt, &pvalue->group);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.carrierPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.carrierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CarrierInfo (&lctxt, &pvalue->carrier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225GenericData */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225GenericData (OOCTXT* pctxt, H225_SeqOfH225GenericData* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225GenericData (pctxt, ((H225GenericData*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CircuitInfo */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CircuitInfo (OOCTXT* pctxt, H225CircuitInfo* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.sourceCircuitIDPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destinationCircuitIDPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
|
|
/* encode sourceCircuitID */
|
|
|
|
if (pvalue->m.sourceCircuitIDPresent) {
|
|
stat = asn1PE_H225CircuitIdentifier (pctxt, &pvalue->sourceCircuitID);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode destinationCircuitID */
|
|
|
|
if (pvalue->m.destinationCircuitIDPresent) {
|
|
stat = asn1PE_H225CircuitIdentifier (pctxt, &pvalue->destinationCircuitID);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode genericData */
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
stat = asn1PE_H225_SeqOfH225GenericData (pctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225FeatureDescriptor */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225FeatureDescriptor (OOCTXT* pctxt, H225_SeqOfH225FeatureDescriptor* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225FeatureDescriptor (pctxt, ((H225FeatureDescriptor*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Setup_UUIE_parallelH245Control */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Setup_UUIE_parallelH245Control (OOCTXT* pctxt, H225Setup_UUIE_parallelH245Control* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = encodeOctetString (pctxt, pvalue->elem[xx1].numocts, pvalue->elem[xx1].data);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ExtendedAliasAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ExtendedAliasAddress (OOCTXT* pctxt, H225ExtendedAliasAddress* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.presentationIndicatorPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.screeningIndicatorPresent);
|
|
|
|
/* encode address */
|
|
|
|
stat = asn1PE_H225AliasAddress (pctxt, &pvalue->address);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode presentationIndicator */
|
|
|
|
if (pvalue->m.presentationIndicatorPresent) {
|
|
stat = asn1PE_H225PresentationIndicator (pctxt, &pvalue->presentationIndicator);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode screeningIndicator */
|
|
|
|
if (pvalue->m.screeningIndicatorPresent) {
|
|
stat = asn1PE_H225ScreeningIndicator (pctxt, pvalue->screeningIndicator);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225ExtendedAliasAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225ExtendedAliasAddress (OOCTXT* pctxt, H225_SeqOfH225ExtendedAliasAddress* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225ExtendedAliasAddress (pctxt, ((H225ExtendedAliasAddress*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Setup_UUIE */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Setup_UUIE (OOCTXT* pctxt, H225Setup_UUIE* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.sourceCallSignalAddressPresent ||
|
|
pvalue->m.remoteExtensionAddressPresent ||
|
|
pvalue->m.callIdentifierPresent ||
|
|
pvalue->m.h245SecurityCapabilityPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.fastStartPresent ||
|
|
pvalue->m.mediaWaitForConnectPresent ||
|
|
pvalue->m.canOverlapSendPresent ||
|
|
pvalue->m.endpointIdentifierPresent ||
|
|
pvalue->m.multipleCallsPresent ||
|
|
pvalue->m.maintainConnectionPresent ||
|
|
pvalue->m.connectionParametersPresent ||
|
|
pvalue->m.languagePresent ||
|
|
pvalue->m.presentationIndicatorPresent ||
|
|
pvalue->m.screeningIndicatorPresent ||
|
|
pvalue->m.serviceControlPresent ||
|
|
pvalue->m.symmetricOperationRequiredPresent ||
|
|
pvalue->m.capacityPresent ||
|
|
pvalue->m.circuitInfoPresent ||
|
|
pvalue->m.desiredProtocolsPresent ||
|
|
pvalue->m.neededFeaturesPresent ||
|
|
pvalue->m.desiredFeaturesPresent ||
|
|
pvalue->m.supportedFeaturesPresent ||
|
|
pvalue->m.parallelH245ControlPresent ||
|
|
pvalue->m.additionalSourceAddressesPresent ||
|
|
pvalue->m.hopCountPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h245AddressPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.sourceAddressPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destinationAddressPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destCallSignalAddressPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destExtraCallInfoPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destExtraCRVPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callServicesPresent);
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode h245Address */
|
|
|
|
if (pvalue->m.h245AddressPresent) {
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->h245Address);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode sourceAddress */
|
|
|
|
if (pvalue->m.sourceAddressPresent) {
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->sourceAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode sourceInfo */
|
|
|
|
stat = asn1PE_H225EndpointType (pctxt, &pvalue->sourceInfo);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode destinationAddress */
|
|
|
|
if (pvalue->m.destinationAddressPresent) {
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->destinationAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode destCallSignalAddress */
|
|
|
|
if (pvalue->m.destCallSignalAddressPresent) {
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->destCallSignalAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode destExtraCallInfo */
|
|
|
|
if (pvalue->m.destExtraCallInfoPresent) {
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->destExtraCallInfo);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode destExtraCRV */
|
|
|
|
if (pvalue->m.destExtraCRVPresent) {
|
|
stat = asn1PE_H225_SeqOfH225CallReferenceValue (pctxt, &pvalue->destExtraCRV);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode activeMC */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->activeMC);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode conferenceID */
|
|
|
|
stat = asn1PE_H225ConferenceIdentifier (pctxt, &pvalue->conferenceID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode conferenceGoal */
|
|
|
|
stat = asn1PE_H225Setup_UUIE_conferenceGoal (pctxt, &pvalue->conferenceGoal);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callServices */
|
|
|
|
if (pvalue->m.callServicesPresent) {
|
|
stat = asn1PE_H225QseriesOptions (pctxt, &pvalue->callServices);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode callType */
|
|
|
|
stat = asn1PE_H225CallType (pctxt, &pvalue->callType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 26);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.sourceCallSignalAddressPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.remoteExtensionAddressPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h245SecurityCapabilityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.fastStartPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.mediaWaitForConnectPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.canOverlapSendPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.endpointIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.multipleCallsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.maintainConnectionPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.connectionParametersPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.languagePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.presentationIndicatorPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.screeningIndicatorPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.serviceControlPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.symmetricOperationRequiredPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.capacityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.circuitInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.desiredProtocolsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.neededFeaturesPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.desiredFeaturesPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedFeaturesPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.parallelH245ControlPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.additionalSourceAddressesPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.hopCountPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.sourceCallSignalAddressPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225TransportAddress (&lctxt, &pvalue->sourceCallSignalAddress);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.remoteExtensionAddressPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225AliasAddress (&lctxt, &pvalue->remoteExtensionAddress);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.callIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallIdentifier (&lctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.h245SecurityCapabilityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225H245Security (&lctxt, &pvalue->h245SecurityCapability);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.fastStartPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225Setup_UUIE_fastStart (&lctxt, &pvalue->fastStart);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.mediaWaitForConnectPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->mediaWaitForConnect);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.canOverlapSendPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->canOverlapSend);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.endpointIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225EndpointIdentifier (&lctxt, pvalue->endpointIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.multipleCallsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->multipleCalls);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.maintainConnectionPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->maintainConnection);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.connectionParametersPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225Setup_UUIE_connectionParameters (&lctxt, &pvalue->connectionParameters);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.languagePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225Setup_UUIE_language (&lctxt, &pvalue->language);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.presentationIndicatorPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225PresentationIndicator (&lctxt, &pvalue->presentationIndicator);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.screeningIndicatorPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ScreeningIndicator (&lctxt, pvalue->screeningIndicator);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.serviceControlPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ServiceControlSession (&lctxt, &pvalue->serviceControl);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.symmetricOperationRequiredPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.capacityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallCapacity (&lctxt, &pvalue->capacity);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.circuitInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CircuitInfo (&lctxt, &pvalue->circuitInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.desiredProtocolsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedProtocols (&lctxt, &pvalue->desiredProtocols);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.neededFeaturesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225FeatureDescriptor (&lctxt, &pvalue->neededFeatures);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.desiredFeaturesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225FeatureDescriptor (&lctxt, &pvalue->desiredFeatures);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportedFeaturesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225FeatureDescriptor (&lctxt, &pvalue->supportedFeatures);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.parallelH245ControlPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225Setup_UUIE_parallelH245Control (&lctxt, &pvalue->parallelH245Control);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.additionalSourceAddressesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ExtendedAliasAddress (&lctxt, &pvalue->additionalSourceAddresses);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.hopCountPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeConsUnsigned (&lctxt, pvalue->hopCount, 1U, 31U);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CallProceeding_UUIE_fastStart */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CallProceeding_UUIE_fastStart (OOCTXT* pctxt, H225CallProceeding_UUIE_fastStart* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = encodeOctetString (pctxt, pvalue->elem[xx1].numocts, pvalue->elem[xx1].data);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FeatureSet */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225FeatureSet (OOCTXT* pctxt, H225FeatureSet* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.neededFeaturesPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.desiredFeaturesPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedFeaturesPresent);
|
|
|
|
/* encode replacementFeatureSet */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->replacementFeatureSet);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode neededFeatures */
|
|
|
|
if (pvalue->m.neededFeaturesPresent) {
|
|
stat = asn1PE_H225_SeqOfH225FeatureDescriptor (pctxt, &pvalue->neededFeatures);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode desiredFeatures */
|
|
|
|
if (pvalue->m.desiredFeaturesPresent) {
|
|
stat = asn1PE_H225_SeqOfH225FeatureDescriptor (pctxt, &pvalue->desiredFeatures);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode supportedFeatures */
|
|
|
|
if (pvalue->m.supportedFeaturesPresent) {
|
|
stat = asn1PE_H225_SeqOfH225FeatureDescriptor (pctxt, &pvalue->supportedFeatures);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CallProceeding_UUIE */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CallProceeding_UUIE (OOCTXT* pctxt, H225CallProceeding_UUIE* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.callIdentifierPresent ||
|
|
pvalue->m.h245SecurityModePresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.fastStartPresent ||
|
|
pvalue->m.multipleCallsPresent ||
|
|
pvalue->m.maintainConnectionPresent ||
|
|
pvalue->m.fastConnectRefusedPresent ||
|
|
pvalue->m.featureSetPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h245AddressPresent);
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode destinationInfo */
|
|
|
|
stat = asn1PE_H225EndpointType (pctxt, &pvalue->destinationInfo);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode h245Address */
|
|
|
|
if (pvalue->m.h245AddressPresent) {
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->h245Address);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 8);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h245SecurityModePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.fastStartPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.multipleCallsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.maintainConnectionPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.fastConnectRefusedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.callIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallIdentifier (&lctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.h245SecurityModePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225H245Security (&lctxt, &pvalue->h245SecurityMode);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.fastStartPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallProceeding_UUIE_fastStart (&lctxt, &pvalue->fastStart);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.multipleCallsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->multipleCalls);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.maintainConnectionPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->maintainConnection);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.fastConnectRefusedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Connect_UUIE_fastStart */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Connect_UUIE_fastStart (OOCTXT* pctxt, H225Connect_UUIE_fastStart* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = encodeOctetString (pctxt, pvalue->elem[xx1].numocts, pvalue->elem[xx1].data);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Connect_UUIE_language */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Connect_UUIE_language (OOCTXT* pctxt, H225Connect_UUIE_language* pvalue)
|
|
{
|
|
static Asn1SizeCnst element_lsize1 = { 0, 1, 32, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
addSizeConstraint (pctxt, &element_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->elem[xx1], 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Connect_UUIE */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Connect_UUIE (OOCTXT* pctxt, H225Connect_UUIE* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.callIdentifierPresent ||
|
|
pvalue->m.h245SecurityModePresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.fastStartPresent ||
|
|
pvalue->m.multipleCallsPresent ||
|
|
pvalue->m.maintainConnectionPresent ||
|
|
pvalue->m.languagePresent ||
|
|
pvalue->m.connectedAddressPresent ||
|
|
pvalue->m.presentationIndicatorPresent ||
|
|
pvalue->m.screeningIndicatorPresent ||
|
|
pvalue->m.fastConnectRefusedPresent ||
|
|
pvalue->m.serviceControlPresent ||
|
|
pvalue->m.capacityPresent ||
|
|
pvalue->m.featureSetPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h245AddressPresent);
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode h245Address */
|
|
|
|
if (pvalue->m.h245AddressPresent) {
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->h245Address);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode destinationInfo */
|
|
|
|
stat = asn1PE_H225EndpointType (pctxt, &pvalue->destinationInfo);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode conferenceID */
|
|
|
|
stat = asn1PE_H225ConferenceIdentifier (pctxt, &pvalue->conferenceID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 14);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h245SecurityModePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.fastStartPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.multipleCallsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.maintainConnectionPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.languagePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.connectedAddressPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.presentationIndicatorPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.screeningIndicatorPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.fastConnectRefusedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.serviceControlPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.capacityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.callIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallIdentifier (&lctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.h245SecurityModePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225H245Security (&lctxt, &pvalue->h245SecurityMode);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.fastStartPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225Connect_UUIE_fastStart (&lctxt, &pvalue->fastStart);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.multipleCallsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->multipleCalls);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.maintainConnectionPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->maintainConnection);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.languagePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225Connect_UUIE_language (&lctxt, &pvalue->language);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.connectedAddressPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (&lctxt, &pvalue->connectedAddress);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.presentationIndicatorPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225PresentationIndicator (&lctxt, &pvalue->presentationIndicator);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.screeningIndicatorPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ScreeningIndicator (&lctxt, pvalue->screeningIndicator);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.fastConnectRefusedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.serviceControlPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ServiceControlSession (&lctxt, &pvalue->serviceControl);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.capacityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallCapacity (&lctxt, &pvalue->capacity);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Alerting_UUIE_fastStart */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Alerting_UUIE_fastStart (OOCTXT* pctxt, H225Alerting_UUIE_fastStart* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = encodeOctetString (pctxt, pvalue->elem[xx1].numocts, pvalue->elem[xx1].data);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Alerting_UUIE */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Alerting_UUIE (OOCTXT* pctxt, H225Alerting_UUIE* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.callIdentifierPresent ||
|
|
pvalue->m.h245SecurityModePresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.fastStartPresent ||
|
|
pvalue->m.multipleCallsPresent ||
|
|
pvalue->m.maintainConnectionPresent ||
|
|
pvalue->m.alertingAddressPresent ||
|
|
pvalue->m.presentationIndicatorPresent ||
|
|
pvalue->m.screeningIndicatorPresent ||
|
|
pvalue->m.fastConnectRefusedPresent ||
|
|
pvalue->m.serviceControlPresent ||
|
|
pvalue->m.capacityPresent ||
|
|
pvalue->m.featureSetPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h245AddressPresent);
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode destinationInfo */
|
|
|
|
stat = asn1PE_H225EndpointType (pctxt, &pvalue->destinationInfo);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode h245Address */
|
|
|
|
if (pvalue->m.h245AddressPresent) {
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->h245Address);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 13);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h245SecurityModePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.fastStartPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.multipleCallsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.maintainConnectionPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alertingAddressPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.presentationIndicatorPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.screeningIndicatorPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.fastConnectRefusedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.serviceControlPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.capacityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.callIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallIdentifier (&lctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.h245SecurityModePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225H245Security (&lctxt, &pvalue->h245SecurityMode);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.fastStartPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225Alerting_UUIE_fastStart (&lctxt, &pvalue->fastStart);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.multipleCallsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->multipleCalls);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.maintainConnectionPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->maintainConnection);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.alertingAddressPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (&lctxt, &pvalue->alertingAddress);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.presentationIndicatorPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225PresentationIndicator (&lctxt, &pvalue->presentationIndicator);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.screeningIndicatorPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ScreeningIndicator (&lctxt, pvalue->screeningIndicator);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.fastConnectRefusedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.serviceControlPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ServiceControlSession (&lctxt, &pvalue->serviceControl);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.capacityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallCapacity (&lctxt, &pvalue->capacity);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Information_UUIE_fastStart */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Information_UUIE_fastStart (OOCTXT* pctxt, H225Information_UUIE_fastStart* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = encodeOctetString (pctxt, pvalue->elem[xx1].numocts, pvalue->elem[xx1].data);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Information_UUIE */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Information_UUIE (OOCTXT* pctxt, H225Information_UUIE* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.callIdentifierPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.fastStartPresent ||
|
|
pvalue->m.fastConnectRefusedPresent ||
|
|
pvalue->m.circuitInfoPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.fastStartPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.fastConnectRefusedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.circuitInfoPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.callIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallIdentifier (&lctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.fastStartPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225Information_UUIE_fastStart (&lctxt, &pvalue->fastStart);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.fastConnectRefusedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.circuitInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CircuitInfo (&lctxt, &pvalue->circuitInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* SecurityErrors */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225SecurityErrors (OOCTXT* pctxt, H225SecurityErrors* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 16);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 15);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* securityWrongSyncTime */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityReplay */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityWrongGeneralID */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityWrongSendersID */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityIntegrityFailed */
|
|
case 5:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityWrongOID */
|
|
case 6:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityDHmismatch */
|
|
case 7:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityCertificateExpired */
|
|
case 8:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityCertificateDateInvalid */
|
|
case 9:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityCertificateRevoked */
|
|
case 10:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityCertificateNotReadable */
|
|
case 11:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityCertificateSignatureInvalid */
|
|
case 12:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityCertificateMissing */
|
|
case 13:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityCertificateIncomplete */
|
|
case 14:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityUnsupportedCertificateAlgOID */
|
|
case 15:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityUnknownCA */
|
|
case 16:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 17);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ReleaseCompleteReason */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ReleaseCompleteReason (OOCTXT* pctxt, H225ReleaseCompleteReason* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 12);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 11);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* noBandwidth */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* gatekeeperResources */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* unreachableDestination */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* destinationRejection */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* invalidRevision */
|
|
case 5:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* noPermission */
|
|
case 6:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* unreachableGatekeeper */
|
|
case 7:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* gatewayResources */
|
|
case 8:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* badFormatAddress */
|
|
case 9:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* adaptiveBusy */
|
|
case 10:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* inConf */
|
|
case 11:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* undefinedReason */
|
|
case 12:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 13);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* facilityCallDeflection */
|
|
case 13:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* securityDenied */
|
|
case 14:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* calledPartyNotRegistered */
|
|
case 15:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* callerNotRegistered */
|
|
case 16:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* newConnectionNeeded */
|
|
case 17:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* nonStandardReason */
|
|
case 18:
|
|
stat = asn1PE_H225NonStandardParameter (&lctxt, pvalue->u.nonStandardReason);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* replaceWithConferenceInvite */
|
|
case 19:
|
|
stat = asn1PE_H225ConferenceIdentifier (&lctxt, pvalue->u.replaceWithConferenceInvite);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* genericDataReason */
|
|
case 20:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* neededFeatureNotSupported */
|
|
case 21:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* tunnelledSignallingRejected */
|
|
case 22:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* invalidCID */
|
|
case 23:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* securityError */
|
|
case 24:
|
|
stat = asn1PE_H225SecurityErrors (&lctxt, pvalue->u.securityError);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* hopCountExceeded */
|
|
case 25:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ReleaseComplete_UUIE */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ReleaseComplete_UUIE (OOCTXT* pctxt, H225ReleaseComplete_UUIE* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.callIdentifierPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.busyAddressPresent ||
|
|
pvalue->m.presentationIndicatorPresent ||
|
|
pvalue->m.screeningIndicatorPresent ||
|
|
pvalue->m.capacityPresent ||
|
|
pvalue->m.serviceControlPresent ||
|
|
pvalue->m.featureSetPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.reasonPresent);
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode reason */
|
|
|
|
if (pvalue->m.reasonPresent) {
|
|
stat = asn1PE_H225ReleaseCompleteReason (pctxt, &pvalue->reason);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 8);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.busyAddressPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.presentationIndicatorPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.screeningIndicatorPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.capacityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.serviceControlPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.callIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallIdentifier (&lctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.busyAddressPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (&lctxt, &pvalue->busyAddress);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.presentationIndicatorPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225PresentationIndicator (&lctxt, &pvalue->presentationIndicator);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.screeningIndicatorPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ScreeningIndicator (&lctxt, pvalue->screeningIndicator);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.capacityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallCapacity (&lctxt, &pvalue->capacity);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.serviceControlPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ServiceControlSession (&lctxt, &pvalue->serviceControl);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FacilityReason */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225FacilityReason (OOCTXT* pctxt, H225FacilityReason* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 4);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* routeCallToGatekeeper */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* callForwarded */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* routeCallToMC */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* undefinedReason */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* conferenceListChoice */
|
|
case 5:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* startH245 */
|
|
case 6:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* noH245 */
|
|
case 7:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* newTokens */
|
|
case 8:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* featureSetUpdate */
|
|
case 9:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* forwardedElements */
|
|
case 10:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* transportedInformation */
|
|
case 11:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceList */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ConferenceList (OOCTXT* pctxt, H225ConferenceList* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.conferenceIDPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.conferenceAliasPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode conferenceID */
|
|
|
|
if (pvalue->m.conferenceIDPresent) {
|
|
stat = asn1PE_H225ConferenceIdentifier (pctxt, &pvalue->conferenceID);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode conferenceAlias */
|
|
|
|
if (pvalue->m.conferenceAliasPresent) {
|
|
stat = asn1PE_H225AliasAddress (pctxt, &pvalue->conferenceAlias);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225ConferenceList */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225ConferenceList (OOCTXT* pctxt, H225_SeqOfH225ConferenceList* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225ConferenceList (pctxt, ((H225ConferenceList*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Facility_UUIE_fastStart */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Facility_UUIE_fastStart (OOCTXT* pctxt, H225Facility_UUIE_fastStart* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = encodeOctetString (pctxt, pvalue->elem[xx1].numocts, pvalue->elem[xx1].data);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Facility_UUIE */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Facility_UUIE (OOCTXT* pctxt, H225Facility_UUIE* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.callIdentifierPresent ||
|
|
pvalue->m.destExtraCallInfoPresent ||
|
|
pvalue->m.remoteExtensionAddressPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.conferencesPresent ||
|
|
pvalue->m.h245AddressPresent ||
|
|
pvalue->m.fastStartPresent ||
|
|
pvalue->m.multipleCallsPresent ||
|
|
pvalue->m.maintainConnectionPresent ||
|
|
pvalue->m.fastConnectRefusedPresent ||
|
|
pvalue->m.serviceControlPresent ||
|
|
pvalue->m.circuitInfoPresent ||
|
|
pvalue->m.featureSetPresent ||
|
|
pvalue->m.destinationInfoPresent ||
|
|
pvalue->m.h245SecurityModePresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alternativeAddressPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alternativeAliasAddressPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.conferenceIDPresent);
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode alternativeAddress */
|
|
|
|
if (pvalue->m.alternativeAddressPresent) {
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->alternativeAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode alternativeAliasAddress */
|
|
|
|
if (pvalue->m.alternativeAliasAddressPresent) {
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->alternativeAliasAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode conferenceID */
|
|
|
|
if (pvalue->m.conferenceIDPresent) {
|
|
stat = asn1PE_H225ConferenceIdentifier (pctxt, &pvalue->conferenceID);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode reason */
|
|
|
|
stat = asn1PE_H225FacilityReason (pctxt, &pvalue->reason);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 15);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destExtraCallInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.remoteExtensionAddressPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.conferencesPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h245AddressPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.fastStartPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.multipleCallsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.maintainConnectionPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.fastConnectRefusedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.serviceControlPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.circuitInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destinationInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h245SecurityModePresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.callIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallIdentifier (&lctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.destExtraCallInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (&lctxt, &pvalue->destExtraCallInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.remoteExtensionAddressPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225AliasAddress (&lctxt, &pvalue->remoteExtensionAddress);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.conferencesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ConferenceList (&lctxt, &pvalue->conferences);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.h245AddressPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225TransportAddress (&lctxt, &pvalue->h245Address);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.fastStartPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225Facility_UUIE_fastStart (&lctxt, &pvalue->fastStart);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.multipleCallsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->multipleCalls);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.maintainConnectionPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->maintainConnection);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.fastConnectRefusedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.serviceControlPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ServiceControlSession (&lctxt, &pvalue->serviceControl);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.circuitInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CircuitInfo (&lctxt, &pvalue->circuitInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.destinationInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225EndpointType (&lctxt, &pvalue->destinationInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.h245SecurityModePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225H245Security (&lctxt, &pvalue->h245SecurityMode);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Progress_UUIE_fastStart */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Progress_UUIE_fastStart (OOCTXT* pctxt, H225Progress_UUIE_fastStart* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = encodeOctetString (pctxt, pvalue->elem[xx1].numocts, pvalue->elem[xx1].data);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Progress_UUIE */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Progress_UUIE (OOCTXT* pctxt, H225Progress_UUIE* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.multipleCallsPresent ||
|
|
pvalue->m.maintainConnectionPresent ||
|
|
pvalue->m.fastConnectRefusedPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h245AddressPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h245SecurityModePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.fastStartPresent);
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode destinationInfo */
|
|
|
|
stat = asn1PE_H225EndpointType (pctxt, &pvalue->destinationInfo);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode h245Address */
|
|
|
|
if (pvalue->m.h245AddressPresent) {
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->h245Address);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode callIdentifier */
|
|
|
|
stat = asn1PE_H225CallIdentifier (pctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode h245SecurityMode */
|
|
|
|
if (pvalue->m.h245SecurityModePresent) {
|
|
stat = asn1PE_H225H245Security (pctxt, &pvalue->h245SecurityMode);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode tokens */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (pctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode cryptoTokens */
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (pctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode fastStart */
|
|
|
|
if (pvalue->m.fastStartPresent) {
|
|
stat = asn1PE_H225Progress_UUIE_fastStart (pctxt, &pvalue->fastStart);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.multipleCallsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.maintainConnectionPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.fastConnectRefusedPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.multipleCallsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->multipleCalls);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.maintainConnectionPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->maintainConnection);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.fastConnectRefusedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Status_UUIE */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Status_UUIE (OOCTXT* pctxt, H225Status_UUIE* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callIdentifier */
|
|
|
|
stat = asn1PE_H225CallIdentifier (pctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode tokens */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (pctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode cryptoTokens */
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (pctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* StatusInquiry_UUIE */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225StatusInquiry_UUIE (OOCTXT* pctxt, H225StatusInquiry_UUIE* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callIdentifier */
|
|
|
|
stat = asn1PE_H225CallIdentifier (pctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode tokens */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (pctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode cryptoTokens */
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (pctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* SetupAcknowledge_UUIE */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225SetupAcknowledge_UUIE (OOCTXT* pctxt, H225SetupAcknowledge_UUIE* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callIdentifier */
|
|
|
|
stat = asn1PE_H225CallIdentifier (pctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode tokens */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (pctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode cryptoTokens */
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (pctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Notify_UUIE */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Notify_UUIE (OOCTXT* pctxt, H225Notify_UUIE* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callIdentifier */
|
|
|
|
stat = asn1PE_H225CallIdentifier (pctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode tokens */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (pctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode cryptoTokens */
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (pctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H323_UU_PDU_h323_message_body */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H323_UU_PDU_h323_message_body (OOCTXT* pctxt, H225H323_UU_PDU_h323_message_body* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 7);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 6);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* setup */
|
|
case 1:
|
|
stat = asn1PE_H225Setup_UUIE (pctxt, pvalue->u.setup);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* callProceeding */
|
|
case 2:
|
|
stat = asn1PE_H225CallProceeding_UUIE (pctxt, pvalue->u.callProceeding);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* connect */
|
|
case 3:
|
|
stat = asn1PE_H225Connect_UUIE (pctxt, pvalue->u.connect);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* alerting */
|
|
case 4:
|
|
stat = asn1PE_H225Alerting_UUIE (pctxt, pvalue->u.alerting);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* information */
|
|
case 5:
|
|
stat = asn1PE_H225Information_UUIE (pctxt, pvalue->u.information);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* releaseComplete */
|
|
case 6:
|
|
stat = asn1PE_H225ReleaseComplete_UUIE (pctxt, pvalue->u.releaseComplete);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* facility */
|
|
case 7:
|
|
stat = asn1PE_H225Facility_UUIE (pctxt, pvalue->u.facility);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 8);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* progress */
|
|
case 8:
|
|
stat = asn1PE_H225Progress_UUIE (&lctxt, pvalue->u.progress);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* empty */
|
|
case 9:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* status */
|
|
case 10:
|
|
stat = asn1PE_H225Status_UUIE (&lctxt, pvalue->u.status);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* statusInquiry */
|
|
case 11:
|
|
stat = asn1PE_H225StatusInquiry_UUIE (&lctxt, pvalue->u.statusInquiry);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* setupAcknowledge */
|
|
case 12:
|
|
stat = asn1PE_H225SetupAcknowledge_UUIE (&lctxt, pvalue->u.setupAcknowledge);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* notify */
|
|
case 13:
|
|
stat = asn1PE_H225Notify_UUIE (&lctxt, pvalue->u.notify);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H323_UU_PDU_h4501SupplementaryService */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H323_UU_PDU_h4501SupplementaryService (OOCTXT* pctxt, H225H323_UU_PDU_h4501SupplementaryService* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = encodeOctetString (pctxt, pvalue->elem[xx1].numocts, pvalue->elem[xx1].data);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H323_UU_PDU_h245Control */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H323_UU_PDU_h245Control (OOCTXT* pctxt, H225H323_UU_PDU_h245Control* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = encodeOctetString (pctxt, pvalue->elem[xx1].numocts, pvalue->elem[xx1].data);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225NonStandardParameter */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225NonStandardParameter (OOCTXT* pctxt, H225_SeqOfH225NonStandardParameter* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, ((H225NonStandardParameter*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CallLinkage */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CallLinkage (OOCTXT* pctxt, H225CallLinkage* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.globalCallIdPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.threadIdPresent);
|
|
|
|
/* encode globalCallId */
|
|
|
|
if (pvalue->m.globalCallIdPresent) {
|
|
stat = asn1PE_H225GloballyUniqueID (pctxt, &pvalue->globalCallId);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode threadId */
|
|
|
|
if (pvalue->m.threadIdPresent) {
|
|
stat = asn1PE_H225GloballyUniqueID (pctxt, &pvalue->threadId);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H323_UU_PDU_tunnelledSignallingMessage_messageContent */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H323_UU_PDU_tunnelledSignallingMessage_messageContent (OOCTXT* pctxt, H225H323_UU_PDU_tunnelledSignallingMessage_messageContent* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = encodeOctetString (pctxt, pvalue->elem[xx1].numocts, pvalue->elem[xx1].data);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H323_UU_PDU_tunnelledSignallingMessage */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H323_UU_PDU_tunnelledSignallingMessage (OOCTXT* pctxt, H225H323_UU_PDU_tunnelledSignallingMessage* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tunnellingRequiredPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode tunnelledProtocolID */
|
|
|
|
stat = asn1PE_H225TunnelledProtocol (pctxt, &pvalue->tunnelledProtocolID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode messageContent */
|
|
|
|
stat = asn1PE_H225H323_UU_PDU_tunnelledSignallingMessage_messageContent (pctxt, &pvalue->messageContent);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode tunnellingRequired */
|
|
|
|
if (pvalue->m.tunnellingRequiredPresent) {
|
|
/* NULL */
|
|
}
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* StimulusControl */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225StimulusControl (OOCTXT* pctxt, H225StimulusControl* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.isTextPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h248MessagePresent);
|
|
|
|
/* encode nonStandard */
|
|
|
|
if (pvalue->m.nonStandardPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode isText */
|
|
|
|
if (pvalue->m.isTextPresent) {
|
|
/* NULL */
|
|
}
|
|
|
|
/* encode h248Message */
|
|
|
|
if (pvalue->m.h248MessagePresent) {
|
|
stat = encodeOctetString (pctxt, pvalue->h248Message.numocts, pvalue->h248Message.data);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H323_UU_PDU */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H323_UU_PDU (OOCTXT* pctxt, H225H323_UU_PDU* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.h4501SupplementaryServicePresent ||
|
|
pvalue->m.h245TunnelingPresent ||
|
|
pvalue->m.h245ControlPresent ||
|
|
pvalue->m.nonStandardControlPresent ||
|
|
pvalue->m.callLinkagePresent ||
|
|
pvalue->m.tunnelledSignallingMessagePresent ||
|
|
pvalue->m.provisionalRespToH245TunnelingPresent ||
|
|
pvalue->m.stimulusControlPresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode h323_message_body */
|
|
|
|
stat = asn1PE_H225H323_UU_PDU_h323_message_body (pctxt, &pvalue->h323_message_body);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 8);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h4501SupplementaryServicePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h245TunnelingPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.h245ControlPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardControlPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callLinkagePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tunnelledSignallingMessagePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.provisionalRespToH245TunnelingPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.stimulusControlPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.h4501SupplementaryServicePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225H323_UU_PDU_h4501SupplementaryService (&lctxt, &pvalue->h4501SupplementaryService);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.h245TunnelingPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->h245Tunneling);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.h245ControlPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225H323_UU_PDU_h245Control (&lctxt, &pvalue->h245Control);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.nonStandardControlPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225NonStandardParameter (&lctxt, &pvalue->nonStandardControl);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.callLinkagePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallLinkage (&lctxt, &pvalue->callLinkage);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tunnelledSignallingMessagePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225H323_UU_PDU_tunnelledSignallingMessage (&lctxt, &pvalue->tunnelledSignallingMessage);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.provisionalRespToH245TunnelingPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.stimulusControlPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225StimulusControl (&lctxt, &pvalue->stimulusControl);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H323_UserInformation_user_data */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H323_UserInformation_user_data (OOCTXT* pctxt, H225H323_UserInformation_user_data* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode protocol_discriminator */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->protocol_discriminator, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode user_information */
|
|
|
|
stat = asn1PE_H225H323_UserInformation_user_data_user_information (pctxt, &pvalue->user_information);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H323_UserInformation */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225H323_UserInformation (OOCTXT* pctxt, H225H323_UserInformation* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.user_dataPresent);
|
|
|
|
/* encode h323_uu_pdu */
|
|
|
|
stat = asn1PE_H225H323_UU_PDU (pctxt, &pvalue->h323_uu_pdu);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode user_data */
|
|
|
|
if (pvalue->m.user_dataPresent) {
|
|
stat = asn1PE_H225H323_UserInformation_user_data (pctxt, &pvalue->user_data);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AddressPattern_range */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225AddressPattern_range (OOCTXT* pctxt, H225AddressPattern_range* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* encode startOfRange */
|
|
|
|
stat = asn1PE_H225PartyNumber (pctxt, &pvalue->startOfRange);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode endOfRange */
|
|
|
|
stat = asn1PE_H225PartyNumber (pctxt, &pvalue->endOfRange);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AddressPattern */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225AddressPattern (OOCTXT* pctxt, H225AddressPattern* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 2);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* wildcard */
|
|
case 1:
|
|
stat = asn1PE_H225AliasAddress (pctxt, pvalue->u.wildcard);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* range */
|
|
case 2:
|
|
stat = asn1PE_H225AddressPattern_range (pctxt, pvalue->u.range);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225TransportAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225TransportAddress (OOCTXT* pctxt, H225_SeqOfH225TransportAddress* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225TransportAddress (pctxt, ((H225TransportAddress*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AlternateTransportAddresses */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225AlternateTransportAddresses (OOCTXT* pctxt, H225AlternateTransportAddresses* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.sctpPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.annexEPresent);
|
|
|
|
/* encode annexE */
|
|
|
|
if (pvalue->m.annexEPresent) {
|
|
stat = asn1PE_H225_SeqOfH225TransportAddress (pctxt, &pvalue->annexE);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.sctpPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.sctpPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225TransportAddress (&lctxt, &pvalue->sctp);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Endpoint */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225Endpoint (OOCTXT* pctxt, H225Endpoint* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.alternateTransportAddressesPresent ||
|
|
pvalue->m.circuitInfoPresent ||
|
|
pvalue->m.featureSetPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.aliasAddressPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callSignalAddressPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.rasAddressPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.endpointTypePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.priorityPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.remoteExtensionAddressPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destExtraCallInfoPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode aliasAddress */
|
|
|
|
if (pvalue->m.aliasAddressPresent) {
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->aliasAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode callSignalAddress */
|
|
|
|
if (pvalue->m.callSignalAddressPresent) {
|
|
stat = asn1PE_H225_SeqOfH225TransportAddress (pctxt, &pvalue->callSignalAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode rasAddress */
|
|
|
|
if (pvalue->m.rasAddressPresent) {
|
|
stat = asn1PE_H225_SeqOfH225TransportAddress (pctxt, &pvalue->rasAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode endpointType */
|
|
|
|
if (pvalue->m.endpointTypePresent) {
|
|
stat = asn1PE_H225EndpointType (pctxt, &pvalue->endpointType);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode tokens */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (pctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode cryptoTokens */
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (pctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode priority */
|
|
|
|
if (pvalue->m.priorityPresent) {
|
|
stat = encodeConsUnsigned (pctxt, pvalue->priority, 0U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
/* encode remoteExtensionAddress */
|
|
|
|
if (pvalue->m.remoteExtensionAddressPresent) {
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->remoteExtensionAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode destExtraCallInfo */
|
|
|
|
if (pvalue->m.destExtraCallInfoPresent) {
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->destExtraCallInfo);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alternateTransportAddressesPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.circuitInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.alternateTransportAddressesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225AlternateTransportAddresses (&lctxt, &pvalue->alternateTransportAddresses);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.circuitInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CircuitInfo (&lctxt, &pvalue->circuitInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UseSpecifiedTransport */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225UseSpecifiedTransport (OOCTXT* pctxt, H225UseSpecifiedTransport* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 2);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* tcp */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* annexE */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* sctp */
|
|
case 3:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AlternateGK */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225AlternateGK (OOCTXT* pctxt, H225AlternateGK* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.gatekeeperIdentifierPresent);
|
|
|
|
/* encode rasAddress */
|
|
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->rasAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode gatekeeperIdentifier */
|
|
|
|
if (pvalue->m.gatekeeperIdentifierPresent) {
|
|
stat = asn1PE_H225GatekeeperIdentifier (pctxt, pvalue->gatekeeperIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode needToRegister */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->needToRegister);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode priority */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->priority, 0U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225AlternateGK */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225AlternateGK (OOCTXT* pctxt, H225_SeqOfH225AlternateGK* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225AlternateGK (pctxt, ((H225AlternateGK*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AltGKInfo */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225AltGKInfo (OOCTXT* pctxt, H225AltGKInfo* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode alternateGatekeeper */
|
|
|
|
stat = asn1PE_H225_SeqOfH225AlternateGK (pctxt, &pvalue->alternateGatekeeper);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode altGKisPermanent */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->altGKisPermanent);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* SecurityErrors2 */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225SecurityErrors2 (OOCTXT* pctxt, H225SecurityErrors2* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 6);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* securityWrongSyncTime */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityReplay */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityWrongGeneralID */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityWrongSendersID */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityIntegrityFailed */
|
|
case 5:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityWrongOID */
|
|
case 6:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 7);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EncryptIntAlg */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225EncryptIntAlg (OOCTXT* pctxt, H225EncryptIntAlg* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 2);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* nonStandard */
|
|
case 1:
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* isoAlgorithm */
|
|
case 2:
|
|
stat = encodeObjectIdentifier (pctxt, pvalue->u.isoAlgorithm);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NonIsoIntegrityMechanism */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225NonIsoIntegrityMechanism (OOCTXT* pctxt, H225NonIsoIntegrityMechanism* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 4);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* hMAC_MD5 */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* hMAC_iso10118_2_s */
|
|
case 2:
|
|
stat = asn1PE_H225EncryptIntAlg (pctxt, pvalue->u.hMAC_iso10118_2_s);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* hMAC_iso10118_2_l */
|
|
case 3:
|
|
stat = asn1PE_H225EncryptIntAlg (pctxt, pvalue->u.hMAC_iso10118_2_l);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* hMAC_iso10118_3 */
|
|
case 4:
|
|
stat = encodeObjectIdentifier (pctxt, pvalue->u.hMAC_iso10118_3);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* IntegrityMechanism */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225IntegrityMechanism (OOCTXT* pctxt, H225IntegrityMechanism* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 4);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* nonStandard */
|
|
case 1:
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* digSig */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* iso9797 */
|
|
case 3:
|
|
stat = encodeObjectIdentifier (pctxt, pvalue->u.iso9797);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* nonIsoIM */
|
|
case 4:
|
|
stat = asn1PE_H225NonIsoIntegrityMechanism (pctxt, pvalue->u.nonIsoIM);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ICV */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ICV (OOCTXT* pctxt, H225ICV* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* encode algorithmOID */
|
|
|
|
stat = encodeObjectIdentifier (pctxt, &pvalue->algorithmOID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode icv */
|
|
|
|
stat = encodeBitString (pctxt, pvalue->icv.numbits, pvalue->icv.data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CapacityReportingCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CapacityReportingCapability (OOCTXT* pctxt, H225CapacityReportingCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode canReportCallCapacity */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->canReportCallCapacity);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CapacityReportingSpecification_when */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CapacityReportingSpecification_when (OOCTXT* pctxt, H225CapacityReportingSpecification_when* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callStartPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callEndPresent);
|
|
|
|
/* encode callStart */
|
|
|
|
if (pvalue->m.callStartPresent) {
|
|
/* NULL */
|
|
}
|
|
|
|
/* encode callEnd */
|
|
|
|
if (pvalue->m.callEndPresent) {
|
|
/* NULL */
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CapacityReportingSpecification */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CapacityReportingSpecification (OOCTXT* pctxt, H225CapacityReportingSpecification* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode when */
|
|
|
|
stat = asn1PE_H225CapacityReportingSpecification_when (pctxt, &pvalue->when);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RasUsageInfoTypes */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225RasUsageInfoTypes (OOCTXT* pctxt, H225RasUsageInfoTypes* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.startTimePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.endTimePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.terminationCausePresent);
|
|
|
|
/* encode nonStandardUsageTypes */
|
|
|
|
stat = asn1PE_H225_SeqOfH225NonStandardParameter (pctxt, &pvalue->nonStandardUsageTypes);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode startTime */
|
|
|
|
if (pvalue->m.startTimePresent) {
|
|
/* NULL */
|
|
}
|
|
|
|
/* encode endTime */
|
|
|
|
if (pvalue->m.endTimePresent) {
|
|
/* NULL */
|
|
}
|
|
|
|
/* encode terminationCause */
|
|
|
|
if (pvalue->m.terminationCausePresent) {
|
|
/* NULL */
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RasUsageSpecification_when */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225RasUsageSpecification_when (OOCTXT* pctxt, H225RasUsageSpecification_when* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.startPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.endPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.inIrrPresent);
|
|
|
|
/* encode start */
|
|
|
|
if (pvalue->m.startPresent) {
|
|
/* NULL */
|
|
}
|
|
|
|
/* encode end */
|
|
|
|
if (pvalue->m.endPresent) {
|
|
/* NULL */
|
|
}
|
|
|
|
/* encode inIrr */
|
|
|
|
if (pvalue->m.inIrrPresent) {
|
|
/* NULL */
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RasUsageSpecification_callStartingPoint */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225RasUsageSpecification_callStartingPoint (OOCTXT* pctxt, H225RasUsageSpecification_callStartingPoint* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alertingPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.connectPresent);
|
|
|
|
/* encode alerting */
|
|
|
|
if (pvalue->m.alertingPresent) {
|
|
/* NULL */
|
|
}
|
|
|
|
/* encode connect */
|
|
|
|
if (pvalue->m.connectPresent) {
|
|
/* NULL */
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RasUsageSpecification */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225RasUsageSpecification (OOCTXT* pctxt, H225RasUsageSpecification* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callStartingPointPresent);
|
|
|
|
/* encode when */
|
|
|
|
stat = asn1PE_H225RasUsageSpecification_when (pctxt, &pvalue->when);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callStartingPoint */
|
|
|
|
if (pvalue->m.callStartingPointPresent) {
|
|
stat = asn1PE_H225RasUsageSpecification_callStartingPoint (pctxt, &pvalue->callStartingPoint);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode required */
|
|
|
|
stat = asn1PE_H225RasUsageInfoTypes (pctxt, &pvalue->required);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RasUsageInformation */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225RasUsageInformation (OOCTXT* pctxt, H225RasUsageInformation* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alertingTimePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.connectTimePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.endTimePresent);
|
|
|
|
/* encode nonStandardUsageFields */
|
|
|
|
stat = asn1PE_H225_SeqOfH225NonStandardParameter (pctxt, &pvalue->nonStandardUsageFields);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode alertingTime */
|
|
|
|
if (pvalue->m.alertingTimePresent) {
|
|
stat = asn1PE_H235TimeStamp (pctxt, pvalue->alertingTime);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode connectTime */
|
|
|
|
if (pvalue->m.connectTimePresent) {
|
|
stat = asn1PE_H235TimeStamp (pctxt, pvalue->connectTime);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode endTime */
|
|
|
|
if (pvalue->m.endTimePresent) {
|
|
stat = asn1PE_H235TimeStamp (pctxt, pvalue->endTime);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CallTerminationCause */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CallTerminationCause (OOCTXT* pctxt, H225CallTerminationCause* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 2);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* releaseCompleteReason */
|
|
case 1:
|
|
stat = asn1PE_H225ReleaseCompleteReason (pctxt, pvalue->u.releaseCompleteReason);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* releaseCompleteCauseIE */
|
|
case 2:
|
|
stat = asn1PE_H225CallTerminationCause_releaseCompleteCauseIE (pctxt, pvalue->u.releaseCompleteCauseIE);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportChannelInfo */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportChannelInfo (OOCTXT* pctxt, H225TransportChannelInfo* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.sendAddressPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.recvAddressPresent);
|
|
|
|
/* encode sendAddress */
|
|
|
|
if (pvalue->m.sendAddressPresent) {
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->sendAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode recvAddress */
|
|
|
|
if (pvalue->m.recvAddressPresent) {
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->recvAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* BandwidthDetails */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225BandwidthDetails (OOCTXT* pctxt, H225BandwidthDetails* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode sender */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->sender);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode multicast */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->multicast);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode bandwidth */
|
|
|
|
stat = asn1PE_H225BandWidth (pctxt, pvalue->bandwidth);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode rtcpAddresses */
|
|
|
|
stat = asn1PE_H225TransportChannelInfo (pctxt, &pvalue->rtcpAddresses);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CallCreditCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CallCreditCapability (OOCTXT* pctxt, H225CallCreditCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.canDisplayAmountStringPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.canEnforceDurationLimitPresent);
|
|
|
|
/* encode canDisplayAmountString */
|
|
|
|
if (pvalue->m.canDisplayAmountStringPresent) {
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->canDisplayAmountString);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode canEnforceDurationLimit */
|
|
|
|
if (pvalue->m.canEnforceDurationLimitPresent) {
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->canEnforceDurationLimit);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RTPSession_associatedSessionIds */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225RTPSession_associatedSessionIds (OOCTXT* pctxt, H225RTPSession_associatedSessionIds* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = encodeConsUnsigned (pctxt, pvalue->elem[xx1], 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RTPSession */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225RTPSession (OOCTXT* pctxt, H225RTPSession* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.multicastPresent ||
|
|
pvalue->m.bandwidthPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode rtpAddress */
|
|
|
|
stat = asn1PE_H225TransportChannelInfo (pctxt, &pvalue->rtpAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode rtcpAddress */
|
|
|
|
stat = asn1PE_H225TransportChannelInfo (pctxt, &pvalue->rtcpAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode cname */
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->cname, 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode ssrc */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->ssrc, 1U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode sessionId */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->sessionId, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode associatedSessionIds */
|
|
|
|
stat = asn1PE_H225RTPSession_associatedSessionIds (pctxt, &pvalue->associatedSessionIds);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.multicastPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.bandwidthPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.multicastPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.bandwidthPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225BandWidth (&lctxt, pvalue->bandwidth);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225Endpoint */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225Endpoint (OOCTXT* pctxt, H225_SeqOfH225Endpoint* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225Endpoint (pctxt, ((H225Endpoint*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225AuthenticationMechanism */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225AuthenticationMechanism (OOCTXT* pctxt, H225_SeqOfH225AuthenticationMechanism* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H235AuthenticationMechanism (pctxt, ((H235AuthenticationMechanism*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GatekeeperRequest_algorithmOIDs */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225GatekeeperRequest_algorithmOIDs (OOCTXT* pctxt, H225GatekeeperRequest_algorithmOIDs* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = encodeObjectIdentifier (pctxt, &pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225IntegrityMechanism */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225IntegrityMechanism (OOCTXT* pctxt, H225_SeqOfH225IntegrityMechanism* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225IntegrityMechanism (pctxt, ((H225IntegrityMechanism*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GatekeeperRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225GatekeeperRequest (OOCTXT* pctxt, H225GatekeeperRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.alternateEndpointsPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.authenticationCapabilityPresent ||
|
|
pvalue->m.algorithmOIDsPresent ||
|
|
pvalue->m.integrityPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.supportsAltGKPresent ||
|
|
pvalue->m.featureSetPresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.gatekeeperIdentifierPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callServicesPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.endpointAliasPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode rasAddress */
|
|
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->rasAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode endpointType */
|
|
|
|
stat = asn1PE_H225EndpointType (pctxt, &pvalue->endpointType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode gatekeeperIdentifier */
|
|
|
|
if (pvalue->m.gatekeeperIdentifierPresent) {
|
|
stat = asn1PE_H225GatekeeperIdentifier (pctxt, pvalue->gatekeeperIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode callServices */
|
|
|
|
if (pvalue->m.callServicesPresent) {
|
|
stat = asn1PE_H225QseriesOptions (pctxt, &pvalue->callServices);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode endpointAlias */
|
|
|
|
if (pvalue->m.endpointAliasPresent) {
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->endpointAlias);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 9);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alternateEndpointsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.authenticationCapabilityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.algorithmOIDsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportsAltGKPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.alternateEndpointsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225Endpoint (&lctxt, &pvalue->alternateEndpoints);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.authenticationCapabilityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AuthenticationMechanism (&lctxt, &pvalue->authenticationCapability);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.algorithmOIDsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225GatekeeperRequest_algorithmOIDs (&lctxt, &pvalue->algorithmOIDs);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225IntegrityMechanism (&lctxt, &pvalue->integrity);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportsAltGKPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GatekeeperConfirm */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225GatekeeperConfirm (OOCTXT* pctxt, H225GatekeeperConfirm* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.alternateGatekeeperPresent ||
|
|
pvalue->m.authenticationModePresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.algorithmOIDPresent ||
|
|
pvalue->m.integrityPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.featureSetPresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.gatekeeperIdentifierPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode gatekeeperIdentifier */
|
|
|
|
if (pvalue->m.gatekeeperIdentifierPresent) {
|
|
stat = asn1PE_H225GatekeeperIdentifier (pctxt, pvalue->gatekeeperIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode rasAddress */
|
|
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->rasAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 8);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alternateGatekeeperPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.authenticationModePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.algorithmOIDPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.alternateGatekeeperPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AlternateGK (&lctxt, &pvalue->alternateGatekeeper);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.authenticationModePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H235AuthenticationMechanism (&lctxt, &pvalue->authenticationMode);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.algorithmOIDPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeObjectIdentifier (&lctxt, &pvalue->algorithmOID);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225IntegrityMechanism (&lctxt, &pvalue->integrity);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GatekeeperRejectReason */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225GatekeeperRejectReason (OOCTXT* pctxt, H225GatekeeperRejectReason* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 4);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* resourceUnavailable */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* terminalExcluded */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* invalidRevision */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* undefinedReason */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* securityDenial */
|
|
case 5:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* genericDataReason */
|
|
case 6:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* neededFeatureNotSupported */
|
|
case 7:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* securityError */
|
|
case 8:
|
|
stat = asn1PE_H225SecurityErrors (&lctxt, pvalue->u.securityError);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GatekeeperReject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225GatekeeperReject (OOCTXT* pctxt, H225GatekeeperReject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.altGKInfoPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.featureSetPresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.gatekeeperIdentifierPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode gatekeeperIdentifier */
|
|
|
|
if (pvalue->m.gatekeeperIdentifierPresent) {
|
|
stat = asn1PE_H225GatekeeperIdentifier (pctxt, pvalue->gatekeeperIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode rejectReason */
|
|
|
|
stat = asn1PE_H225GatekeeperRejectReason (pctxt, &pvalue->rejectReason);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.altGKInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.altGKInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225AltGKInfo (&lctxt, &pvalue->altGKInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225AddressPattern */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225AddressPattern (OOCTXT* pctxt, H225_SeqOfH225AddressPattern* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225AddressPattern (pctxt, ((H225AddressPattern*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225H248PackagesDescriptor */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225H248PackagesDescriptor (OOCTXT* pctxt, H225_SeqOfH225H248PackagesDescriptor* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = asn1PE_H225H248PackagesDescriptor (pctxt, pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RegistrationRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225RegistrationRequest (OOCTXT* pctxt, H225RegistrationRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.alternateEndpointsPresent ||
|
|
pvalue->m.timeToLivePresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.keepAlivePresent ||
|
|
pvalue->m.endpointIdentifierPresent ||
|
|
pvalue->m.willSupplyUUIEsPresent ||
|
|
pvalue->m.maintainConnectionPresent ||
|
|
pvalue->m.alternateTransportAddressesPresent ||
|
|
pvalue->m.additiveRegistrationPresent ||
|
|
pvalue->m.terminalAliasPatternPresent ||
|
|
pvalue->m.supportsAltGKPresent ||
|
|
pvalue->m.usageReportingCapabilityPresent ||
|
|
pvalue->m.multipleCallsPresent ||
|
|
pvalue->m.supportedH248PackagesPresent ||
|
|
pvalue->m.callCreditCapabilityPresent ||
|
|
pvalue->m.capacityReportingCapabilityPresent ||
|
|
pvalue->m.capacityPresent ||
|
|
pvalue->m.featureSetPresent ||
|
|
pvalue->m.genericDataPresent ||
|
|
pvalue->m.restartPresent ||
|
|
pvalue->m.supportsACFSequencesPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.terminalAliasPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.gatekeeperIdentifierPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode discoveryComplete */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->discoveryComplete);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callSignalAddress */
|
|
|
|
stat = asn1PE_H225_SeqOfH225TransportAddress (pctxt, &pvalue->callSignalAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode rasAddress */
|
|
|
|
stat = asn1PE_H225_SeqOfH225TransportAddress (pctxt, &pvalue->rasAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode terminalType */
|
|
|
|
stat = asn1PE_H225EndpointType (pctxt, &pvalue->terminalType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode terminalAlias */
|
|
|
|
if (pvalue->m.terminalAliasPresent) {
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->terminalAlias);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode gatekeeperIdentifier */
|
|
|
|
if (pvalue->m.gatekeeperIdentifierPresent) {
|
|
stat = asn1PE_H225GatekeeperIdentifier (pctxt, pvalue->gatekeeperIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode endpointVendor */
|
|
|
|
stat = asn1PE_H225VendorIdentifier (pctxt, &pvalue->endpointVendor);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 22);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alternateEndpointsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.timeToLivePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.keepAlivePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.endpointIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.willSupplyUUIEsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.maintainConnectionPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alternateTransportAddressesPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.additiveRegistrationPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.terminalAliasPatternPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportsAltGKPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.usageReportingCapabilityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.multipleCallsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedH248PackagesPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callCreditCapabilityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.capacityReportingCapabilityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.capacityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.restartPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportsACFSequencesPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.alternateEndpointsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225Endpoint (&lctxt, &pvalue->alternateEndpoints);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.timeToLivePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225TimeToLive (&lctxt, pvalue->timeToLive);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.keepAlivePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->keepAlive);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.endpointIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225EndpointIdentifier (&lctxt, pvalue->endpointIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.willSupplyUUIEsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->willSupplyUUIEs);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.maintainConnectionPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->maintainConnection);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.alternateTransportAddressesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225AlternateTransportAddresses (&lctxt, &pvalue->alternateTransportAddresses);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.additiveRegistrationPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.terminalAliasPatternPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AddressPattern (&lctxt, &pvalue->terminalAliasPattern);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportsAltGKPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.usageReportingCapabilityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225RasUsageInfoTypes (&lctxt, &pvalue->usageReportingCapability);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.multipleCallsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->multipleCalls);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportedH248PackagesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225H248PackagesDescriptor (&lctxt, &pvalue->supportedH248Packages);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.callCreditCapabilityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallCreditCapability (&lctxt, &pvalue->callCreditCapability);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.capacityReportingCapabilityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CapacityReportingCapability (&lctxt, &pvalue->capacityReportingCapability);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.capacityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallCapacity (&lctxt, &pvalue->capacity);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.restartPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportsACFSequencesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RegistrationConfirm_preGrantedARQ */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225RegistrationConfirm_preGrantedARQ (OOCTXT* pctxt, H225RegistrationConfirm_preGrantedARQ* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.irrFrequencyInCallPresent ||
|
|
pvalue->m.totalBandwidthRestrictionPresent ||
|
|
pvalue->m.alternateTransportAddressesPresent ||
|
|
pvalue->m.useSpecifiedTransportPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode makeCall */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->makeCall);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode useGKCallSignalAddressToMakeCall */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->useGKCallSignalAddressToMakeCall);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode answerCall */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->answerCall);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode useGKCallSignalAddressToAnswer */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->useGKCallSignalAddressToAnswer);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.irrFrequencyInCallPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.totalBandwidthRestrictionPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alternateTransportAddressesPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.useSpecifiedTransportPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.irrFrequencyInCallPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeConsUnsigned (&lctxt, pvalue->irrFrequencyInCall, 1U, 65535U);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.totalBandwidthRestrictionPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225BandWidth (&lctxt, pvalue->totalBandwidthRestriction);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.alternateTransportAddressesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225AlternateTransportAddresses (&lctxt, &pvalue->alternateTransportAddresses);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.useSpecifiedTransportPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225UseSpecifiedTransport (&lctxt, &pvalue->useSpecifiedTransport);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225RasUsageSpecification */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225RasUsageSpecification (OOCTXT* pctxt, H225_SeqOfH225RasUsageSpecification* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225RasUsageSpecification (pctxt, ((H225RasUsageSpecification*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RegistrationConfirm */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225RegistrationConfirm (OOCTXT* pctxt, H225RegistrationConfirm* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.alternateGatekeeperPresent ||
|
|
pvalue->m.timeToLivePresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.willRespondToIRRPresent ||
|
|
pvalue->m.preGrantedARQPresent ||
|
|
pvalue->m.maintainConnectionPresent ||
|
|
pvalue->m.serviceControlPresent ||
|
|
pvalue->m.supportsAdditiveRegistrationPresent ||
|
|
pvalue->m.terminalAliasPatternPresent ||
|
|
pvalue->m.supportedPrefixesPresent ||
|
|
pvalue->m.usageSpecPresent ||
|
|
pvalue->m.featureServerAliasPresent ||
|
|
pvalue->m.capacityReportingSpecPresent ||
|
|
pvalue->m.featureSetPresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.terminalAliasPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.gatekeeperIdentifierPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode callSignalAddress */
|
|
|
|
stat = asn1PE_H225_SeqOfH225TransportAddress (pctxt, &pvalue->callSignalAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode terminalAlias */
|
|
|
|
if (pvalue->m.terminalAliasPresent) {
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->terminalAlias);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode gatekeeperIdentifier */
|
|
|
|
if (pvalue->m.gatekeeperIdentifierPresent) {
|
|
stat = asn1PE_H225GatekeeperIdentifier (pctxt, pvalue->gatekeeperIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode endpointIdentifier */
|
|
|
|
stat = asn1PE_H225EndpointIdentifier (pctxt, pvalue->endpointIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 16);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alternateGatekeeperPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.timeToLivePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.willRespondToIRRPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.preGrantedARQPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.maintainConnectionPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.serviceControlPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportsAdditiveRegistrationPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.terminalAliasPatternPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedPrefixesPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.usageSpecPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureServerAliasPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.capacityReportingSpecPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.alternateGatekeeperPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AlternateGK (&lctxt, &pvalue->alternateGatekeeper);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.timeToLivePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225TimeToLive (&lctxt, pvalue->timeToLive);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.willRespondToIRRPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->willRespondToIRR);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.preGrantedARQPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225RegistrationConfirm_preGrantedARQ (&lctxt, &pvalue->preGrantedARQ);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.maintainConnectionPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->maintainConnection);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.serviceControlPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ServiceControlSession (&lctxt, &pvalue->serviceControl);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportsAdditiveRegistrationPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.terminalAliasPatternPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AddressPattern (&lctxt, &pvalue->terminalAliasPattern);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportedPrefixesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedPrefix (&lctxt, &pvalue->supportedPrefixes);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.usageSpecPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225RasUsageSpecification (&lctxt, &pvalue->usageSpec);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureServerAliasPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225AliasAddress (&lctxt, &pvalue->featureServerAlias);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.capacityReportingSpecPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CapacityReportingSpecification (&lctxt, &pvalue->capacityReportingSpec);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RegistrationRejectReason_invalidTerminalAliases */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225RegistrationRejectReason_invalidTerminalAliases (OOCTXT* pctxt, H225RegistrationRejectReason_invalidTerminalAliases* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.terminalAliasPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.terminalAliasPatternPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedPrefixesPresent);
|
|
|
|
/* encode terminalAlias */
|
|
|
|
if (pvalue->m.terminalAliasPresent) {
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->terminalAlias);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode terminalAliasPattern */
|
|
|
|
if (pvalue->m.terminalAliasPatternPresent) {
|
|
stat = asn1PE_H225_SeqOfH225AddressPattern (pctxt, &pvalue->terminalAliasPattern);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode supportedPrefixes */
|
|
|
|
if (pvalue->m.supportedPrefixesPresent) {
|
|
stat = asn1PE_H225_SeqOfH225SupportedPrefix (pctxt, &pvalue->supportedPrefixes);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RegistrationRejectReason */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225RegistrationRejectReason (OOCTXT* pctxt, H225RegistrationRejectReason* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 8);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* discoveryRequired */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* invalidRevision */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* invalidCallSignalAddress */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* invalidRASAddress */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* duplicateAlias */
|
|
case 5:
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, pvalue->u.duplicateAlias);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* invalidTerminalType */
|
|
case 6:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* undefinedReason */
|
|
case 7:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* transportNotSupported */
|
|
case 8:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 9);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* transportQOSNotSupported */
|
|
case 9:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* resourceUnavailable */
|
|
case 10:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* invalidAlias */
|
|
case 11:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* securityDenial */
|
|
case 12:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* fullRegistrationRequired */
|
|
case 13:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* additiveRegistrationNotSupported */
|
|
case 14:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* invalidTerminalAliases */
|
|
case 15:
|
|
stat = asn1PE_H225RegistrationRejectReason_invalidTerminalAliases (&lctxt, pvalue->u.invalidTerminalAliases);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* genericDataReason */
|
|
case 16:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* neededFeatureNotSupported */
|
|
case 17:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* securityError */
|
|
case 18:
|
|
stat = asn1PE_H225SecurityErrors (&lctxt, pvalue->u.securityError);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RegistrationReject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225RegistrationReject (OOCTXT* pctxt, H225RegistrationReject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.altGKInfoPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.featureSetPresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.gatekeeperIdentifierPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode rejectReason */
|
|
|
|
stat = asn1PE_H225RegistrationRejectReason (pctxt, &pvalue->rejectReason);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode gatekeeperIdentifier */
|
|
|
|
if (pvalue->m.gatekeeperIdentifierPresent) {
|
|
stat = asn1PE_H225GatekeeperIdentifier (pctxt, pvalue->gatekeeperIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.altGKInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.altGKInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225AltGKInfo (&lctxt, &pvalue->altGKInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnregRequestReason */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225UnregRequestReason (OOCTXT* pctxt, H225UnregRequestReason* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 4);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* reregistrationRequired */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* ttlExpired */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityDenial */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* undefinedReason */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* maintenance */
|
|
case 5:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* securityError */
|
|
case 6:
|
|
stat = asn1PE_H225SecurityErrors2 (&lctxt, pvalue->u.securityError);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnregistrationRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225UnregistrationRequest (OOCTXT* pctxt, H225UnregistrationRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.alternateEndpointsPresent ||
|
|
pvalue->m.gatekeeperIdentifierPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.reasonPresent ||
|
|
pvalue->m.endpointAliasPatternPresent ||
|
|
pvalue->m.supportedPrefixesPresent ||
|
|
pvalue->m.alternateGatekeeperPresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.endpointAliasPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.endpointIdentifierPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callSignalAddress */
|
|
|
|
stat = asn1PE_H225_SeqOfH225TransportAddress (pctxt, &pvalue->callSignalAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode endpointAlias */
|
|
|
|
if (pvalue->m.endpointAliasPresent) {
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->endpointAlias);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode endpointIdentifier */
|
|
|
|
if (pvalue->m.endpointIdentifierPresent) {
|
|
stat = asn1PE_H225EndpointIdentifier (pctxt, pvalue->endpointIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 9);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alternateEndpointsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.gatekeeperIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.reasonPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.endpointAliasPatternPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedPrefixesPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alternateGatekeeperPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.alternateEndpointsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225Endpoint (&lctxt, &pvalue->alternateEndpoints);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.gatekeeperIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225GatekeeperIdentifier (&lctxt, pvalue->gatekeeperIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.reasonPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225UnregRequestReason (&lctxt, &pvalue->reason);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.endpointAliasPatternPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AddressPattern (&lctxt, &pvalue->endpointAliasPattern);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportedPrefixesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedPrefix (&lctxt, &pvalue->supportedPrefixes);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.alternateGatekeeperPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AlternateGK (&lctxt, &pvalue->alternateGatekeeper);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnregistrationConfirm */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225UnregistrationConfirm (OOCTXT* pctxt, H225UnregistrationConfirm* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnregRejectReason */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225UnregRejectReason (OOCTXT* pctxt, H225UnregRejectReason* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 3);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* notCurrentlyRegistered */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* callInProgress */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* undefinedReason */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 4);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* permissionDenied */
|
|
case 4:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* securityDenial */
|
|
case 5:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* securityError */
|
|
case 6:
|
|
stat = asn1PE_H225SecurityErrors2 (&lctxt, pvalue->u.securityError);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnregistrationReject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225UnregistrationReject (OOCTXT* pctxt, H225UnregistrationReject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.altGKInfoPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode rejectReason */
|
|
|
|
stat = asn1PE_H225UnregRejectReason (pctxt, &pvalue->rejectReason);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.altGKInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.altGKInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225AltGKInfo (&lctxt, &pvalue->altGKInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CallModel */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225CallModel (OOCTXT* pctxt, H225CallModel* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 2);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* direct */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* gatekeeperRouted */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportQOS */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225TransportQOS (OOCTXT* pctxt, H225TransportQOS* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 3);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* endpointControlled */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* gatekeeperControlled */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* noControl */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 4);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AdmissionRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225AdmissionRequest (OOCTXT* pctxt, H225AdmissionRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.canMapAliasPresent ||
|
|
pvalue->m.callIdentifierPresent ||
|
|
pvalue->m.srcAlternativesPresent ||
|
|
pvalue->m.destAlternativesPresent ||
|
|
pvalue->m.gatekeeperIdentifierPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.transportQOSPresent ||
|
|
pvalue->m.willSupplyUUIEsPresent ||
|
|
pvalue->m.callLinkagePresent ||
|
|
pvalue->m.gatewayDataRatePresent ||
|
|
pvalue->m.capacityPresent ||
|
|
pvalue->m.circuitInfoPresent ||
|
|
pvalue->m.desiredProtocolsPresent ||
|
|
pvalue->m.desiredTunnelledProtocolPresent ||
|
|
pvalue->m.featureSetPresent ||
|
|
pvalue->m.genericDataPresent ||
|
|
pvalue->m.canMapSrcAliasPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callModelPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destinationInfoPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destCallSignalAddressPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destExtraCallInfoPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.srcCallSignalAddressPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callServicesPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callType */
|
|
|
|
stat = asn1PE_H225CallType (pctxt, &pvalue->callType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callModel */
|
|
|
|
if (pvalue->m.callModelPresent) {
|
|
stat = asn1PE_H225CallModel (pctxt, &pvalue->callModel);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode endpointIdentifier */
|
|
|
|
stat = asn1PE_H225EndpointIdentifier (pctxt, pvalue->endpointIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode destinationInfo */
|
|
|
|
if (pvalue->m.destinationInfoPresent) {
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->destinationInfo);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode destCallSignalAddress */
|
|
|
|
if (pvalue->m.destCallSignalAddressPresent) {
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->destCallSignalAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode destExtraCallInfo */
|
|
|
|
if (pvalue->m.destExtraCallInfoPresent) {
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->destExtraCallInfo);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode srcInfo */
|
|
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->srcInfo);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode srcCallSignalAddress */
|
|
|
|
if (pvalue->m.srcCallSignalAddressPresent) {
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->srcCallSignalAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode bandWidth */
|
|
|
|
stat = asn1PE_H225BandWidth (pctxt, pvalue->bandWidth);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callReferenceValue */
|
|
|
|
stat = asn1PE_H225CallReferenceValue (pctxt, pvalue->callReferenceValue);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode callServices */
|
|
|
|
if (pvalue->m.callServicesPresent) {
|
|
stat = asn1PE_H225QseriesOptions (pctxt, &pvalue->callServices);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode conferenceID */
|
|
|
|
stat = asn1PE_H225ConferenceIdentifier (pctxt, &pvalue->conferenceID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode activeMC */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->activeMC);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode answerCall */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->answerCall);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 18);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.canMapAliasPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.srcAlternativesPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destAlternativesPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.gatekeeperIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.transportQOSPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.willSupplyUUIEsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callLinkagePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.gatewayDataRatePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.capacityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.circuitInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.desiredProtocolsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.desiredTunnelledProtocolPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.canMapSrcAliasPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.canMapAliasPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->canMapAlias);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.callIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallIdentifier (&lctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.srcAlternativesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225Endpoint (&lctxt, &pvalue->srcAlternatives);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.destAlternativesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225Endpoint (&lctxt, &pvalue->destAlternatives);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.gatekeeperIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225GatekeeperIdentifier (&lctxt, pvalue->gatekeeperIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.transportQOSPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225TransportQOS (&lctxt, &pvalue->transportQOS);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.willSupplyUUIEsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->willSupplyUUIEs);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.callLinkagePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallLinkage (&lctxt, &pvalue->callLinkage);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.gatewayDataRatePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225DataRate (&lctxt, &pvalue->gatewayDataRate);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.capacityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallCapacity (&lctxt, &pvalue->capacity);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.circuitInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CircuitInfo (&lctxt, &pvalue->circuitInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.desiredProtocolsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedProtocols (&lctxt, &pvalue->desiredProtocols);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.desiredTunnelledProtocolPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225TunnelledProtocol (&lctxt, &pvalue->desiredTunnelledProtocol);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.canMapSrcAliasPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->canMapSrcAlias);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UUIEsRequested */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225UUIEsRequested (OOCTXT* pctxt, H225UUIEsRequested* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.statusPresent ||
|
|
pvalue->m.statusInquiryPresent ||
|
|
pvalue->m.setupAcknowledgePresent ||
|
|
pvalue->m.notifyPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode setup */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->setup);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callProceeding */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->callProceeding);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode connect */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->connect);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode alerting */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->alerting);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode information */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->information);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode releaseComplete */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->releaseComplete);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode facility */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->facility);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode progress */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->progress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode empty */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->empty);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.statusPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.statusInquiryPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.setupAcknowledgePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.notifyPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.statusPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->status);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.statusInquiryPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->statusInquiry);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.setupAcknowledgePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->setupAcknowledge);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.notifyPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->notify);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AdmissionConfirm_language */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225AdmissionConfirm_language (OOCTXT* pctxt, H225AdmissionConfirm_language* pvalue)
|
|
{
|
|
static Asn1SizeCnst element_lsize1 = { 0, 1, 32, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
addSizeConstraint (pctxt, &element_lsize1);
|
|
|
|
stat = encodeConstrainedStringEx (pctxt, pvalue->elem[xx1], 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AdmissionConfirm */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225AdmissionConfirm (OOCTXT* pctxt, H225AdmissionConfirm* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.destinationInfoPresent ||
|
|
pvalue->m.destExtraCallInfoPresent ||
|
|
pvalue->m.destinationTypePresent ||
|
|
pvalue->m.remoteExtensionAddressPresent ||
|
|
pvalue->m.alternateEndpointsPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.transportQOSPresent ||
|
|
pvalue->m.willRespondToIRRPresent ||
|
|
pvalue->m.uuiesRequestedPresent ||
|
|
pvalue->m.languagePresent ||
|
|
pvalue->m.alternateTransportAddressesPresent ||
|
|
pvalue->m.useSpecifiedTransportPresent ||
|
|
pvalue->m.circuitInfoPresent ||
|
|
pvalue->m.usageSpecPresent ||
|
|
pvalue->m.supportedProtocolsPresent ||
|
|
pvalue->m.serviceControlPresent ||
|
|
pvalue->m.multipleCallsPresent ||
|
|
pvalue->m.featureSetPresent ||
|
|
pvalue->m.genericDataPresent ||
|
|
pvalue->m.modifiedSrcInfoPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.irrFrequencyPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode bandWidth */
|
|
|
|
stat = asn1PE_H225BandWidth (pctxt, pvalue->bandWidth);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callModel */
|
|
|
|
stat = asn1PE_H225CallModel (pctxt, &pvalue->callModel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode destCallSignalAddress */
|
|
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->destCallSignalAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode irrFrequency */
|
|
|
|
if (pvalue->m.irrFrequencyPresent) {
|
|
stat = encodeConsUnsigned (pctxt, pvalue->irrFrequency, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 21);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destinationInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destExtraCallInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destinationTypePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.remoteExtensionAddressPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alternateEndpointsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.transportQOSPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.willRespondToIRRPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.uuiesRequestedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.languagePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alternateTransportAddressesPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.useSpecifiedTransportPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.circuitInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.usageSpecPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedProtocolsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.serviceControlPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.multipleCallsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.modifiedSrcInfoPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.destinationInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (&lctxt, &pvalue->destinationInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.destExtraCallInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (&lctxt, &pvalue->destExtraCallInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.destinationTypePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225EndpointType (&lctxt, &pvalue->destinationType);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.remoteExtensionAddressPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (&lctxt, &pvalue->remoteExtensionAddress);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.alternateEndpointsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225Endpoint (&lctxt, &pvalue->alternateEndpoints);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.transportQOSPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225TransportQOS (&lctxt, &pvalue->transportQOS);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.willRespondToIRRPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->willRespondToIRR);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.uuiesRequestedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225UUIEsRequested (&lctxt, &pvalue->uuiesRequested);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.languagePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225AdmissionConfirm_language (&lctxt, &pvalue->language);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.alternateTransportAddressesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225AlternateTransportAddresses (&lctxt, &pvalue->alternateTransportAddresses);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.useSpecifiedTransportPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225UseSpecifiedTransport (&lctxt, &pvalue->useSpecifiedTransport);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.circuitInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CircuitInfo (&lctxt, &pvalue->circuitInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.usageSpecPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225RasUsageSpecification (&lctxt, &pvalue->usageSpec);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportedProtocolsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedProtocols (&lctxt, &pvalue->supportedProtocols);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.serviceControlPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ServiceControlSession (&lctxt, &pvalue->serviceControl);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.multipleCallsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->multipleCalls);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.modifiedSrcInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (&lctxt, &pvalue->modifiedSrcInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225PartyNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225PartyNumber (OOCTXT* pctxt, H225_SeqOfH225PartyNumber* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225PartyNumber (pctxt, ((H225PartyNumber*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AdmissionRejectReason */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225AdmissionRejectReason (OOCTXT* pctxt, H225AdmissionRejectReason* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 8);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* calledPartyNotRegistered */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* invalidPermission */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* requestDenied */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* undefinedReason */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* callerNotRegistered */
|
|
case 5:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* routeCallToGatekeeper */
|
|
case 6:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* invalidEndpointIdentifier */
|
|
case 7:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* resourceUnavailable */
|
|
case 8:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 9);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* securityDenial */
|
|
case 9:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* qosControlNotSupported */
|
|
case 10:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* incompleteAddress */
|
|
case 11:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* aliasesInconsistent */
|
|
case 12:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* routeCallToSCN */
|
|
case 13:
|
|
stat = asn1PE_H225_SeqOfH225PartyNumber (&lctxt, pvalue->u.routeCallToSCN);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* exceedsCallCapacity */
|
|
case 14:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* collectDestination */
|
|
case 15:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* collectPIN */
|
|
case 16:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* genericDataReason */
|
|
case 17:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* neededFeatureNotSupported */
|
|
case 18:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* securityErrors */
|
|
case 19:
|
|
stat = asn1PE_H225SecurityErrors2 (&lctxt, pvalue->u.securityErrors);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* securityDHmismatch */
|
|
case 20:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* noRouteToDestination */
|
|
case 21:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* unallocatedNumber */
|
|
case 22:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AdmissionReject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225AdmissionReject (OOCTXT* pctxt, H225AdmissionReject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.altGKInfoPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.callSignalAddressPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.serviceControlPresent ||
|
|
pvalue->m.featureSetPresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode rejectReason */
|
|
|
|
stat = asn1PE_H225AdmissionRejectReason (pctxt, &pvalue->rejectReason);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.altGKInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callSignalAddressPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.serviceControlPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.altGKInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225AltGKInfo (&lctxt, &pvalue->altGKInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.callSignalAddressPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225TransportAddress (&lctxt, &pvalue->callSignalAddress);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.serviceControlPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ServiceControlSession (&lctxt, &pvalue->serviceControl);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225BandwidthDetails */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225BandwidthDetails (OOCTXT* pctxt, H225_SeqOfH225BandwidthDetails* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225BandwidthDetails (pctxt, ((H225BandwidthDetails*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* BandwidthRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225BandwidthRequest (OOCTXT* pctxt, H225BandwidthRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.callIdentifierPresent ||
|
|
pvalue->m.gatekeeperIdentifierPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.answeredCallPresent ||
|
|
pvalue->m.callLinkagePresent ||
|
|
pvalue->m.capacityPresent ||
|
|
pvalue->m.usageInformationPresent ||
|
|
pvalue->m.bandwidthDetailsPresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callTypePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode endpointIdentifier */
|
|
|
|
stat = asn1PE_H225EndpointIdentifier (pctxt, pvalue->endpointIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode conferenceID */
|
|
|
|
stat = asn1PE_H225ConferenceIdentifier (pctxt, &pvalue->conferenceID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callReferenceValue */
|
|
|
|
stat = asn1PE_H225CallReferenceValue (pctxt, pvalue->callReferenceValue);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callType */
|
|
|
|
if (pvalue->m.callTypePresent) {
|
|
stat = asn1PE_H225CallType (pctxt, &pvalue->callType);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode bandWidth */
|
|
|
|
stat = asn1PE_H225BandWidth (pctxt, pvalue->bandWidth);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 10);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.gatekeeperIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.answeredCallPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callLinkagePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.capacityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.usageInformationPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.bandwidthDetailsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.callIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallIdentifier (&lctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.gatekeeperIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225GatekeeperIdentifier (&lctxt, pvalue->gatekeeperIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.answeredCallPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->answeredCall);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.callLinkagePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallLinkage (&lctxt, &pvalue->callLinkage);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.capacityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallCapacity (&lctxt, &pvalue->capacity);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.usageInformationPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225RasUsageInformation (&lctxt, &pvalue->usageInformation);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.bandwidthDetailsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225BandwidthDetails (&lctxt, &pvalue->bandwidthDetails);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* BandwidthConfirm */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225BandwidthConfirm (OOCTXT* pctxt, H225BandwidthConfirm* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.capacityPresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode bandWidth */
|
|
|
|
stat = asn1PE_H225BandWidth (pctxt, pvalue->bandWidth);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.capacityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.capacityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallCapacity (&lctxt, &pvalue->capacity);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* BandRejectReason */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225BandRejectReason (OOCTXT* pctxt, H225BandRejectReason* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 6);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* notBound */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* invalidConferenceID */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* invalidPermission */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* insufficientResources */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* invalidRevision */
|
|
case 5:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* undefinedReason */
|
|
case 6:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 7);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* securityDenial */
|
|
case 7:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* securityError */
|
|
case 8:
|
|
stat = asn1PE_H225SecurityErrors2 (&lctxt, pvalue->u.securityError);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* BandwidthReject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225BandwidthReject (OOCTXT* pctxt, H225BandwidthReject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.altGKInfoPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode rejectReason */
|
|
|
|
stat = asn1PE_H225BandRejectReason (pctxt, &pvalue->rejectReason);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode allowedBandWidth */
|
|
|
|
stat = asn1PE_H225BandWidth (pctxt, pvalue->allowedBandWidth);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.altGKInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.altGKInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225AltGKInfo (&lctxt, &pvalue->altGKInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DisengageReason */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225DisengageReason (OOCTXT* pctxt, H225DisengageReason* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 3);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* forcedDrop */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* normalDrop */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* undefinedReason */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 4);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DisengageRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225DisengageRequest (OOCTXT* pctxt, H225DisengageRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.callIdentifierPresent ||
|
|
pvalue->m.gatekeeperIdentifierPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.answeredCallPresent ||
|
|
pvalue->m.callLinkagePresent ||
|
|
pvalue->m.capacityPresent ||
|
|
pvalue->m.circuitInfoPresent ||
|
|
pvalue->m.usageInformationPresent ||
|
|
pvalue->m.terminationCausePresent ||
|
|
pvalue->m.serviceControlPresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode endpointIdentifier */
|
|
|
|
stat = asn1PE_H225EndpointIdentifier (pctxt, pvalue->endpointIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode conferenceID */
|
|
|
|
stat = asn1PE_H225ConferenceIdentifier (pctxt, &pvalue->conferenceID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callReferenceValue */
|
|
|
|
stat = asn1PE_H225CallReferenceValue (pctxt, pvalue->callReferenceValue);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode disengageReason */
|
|
|
|
stat = asn1PE_H225DisengageReason (pctxt, &pvalue->disengageReason);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 12);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.gatekeeperIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.answeredCallPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callLinkagePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.capacityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.circuitInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.usageInformationPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.terminationCausePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.serviceControlPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.callIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallIdentifier (&lctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.gatekeeperIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225GatekeeperIdentifier (&lctxt, pvalue->gatekeeperIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.answeredCallPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->answeredCall);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.callLinkagePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallLinkage (&lctxt, &pvalue->callLinkage);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.capacityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallCapacity (&lctxt, &pvalue->capacity);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.circuitInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CircuitInfo (&lctxt, &pvalue->circuitInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.usageInformationPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225RasUsageInformation (&lctxt, &pvalue->usageInformation);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.terminationCausePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallTerminationCause (&lctxt, &pvalue->terminationCause);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.serviceControlPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ServiceControlSession (&lctxt, &pvalue->serviceControl);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DisengageConfirm */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225DisengageConfirm (OOCTXT* pctxt, H225DisengageConfirm* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.capacityPresent ||
|
|
pvalue->m.circuitInfoPresent ||
|
|
pvalue->m.usageInformationPresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 6);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.capacityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.circuitInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.usageInformationPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.capacityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallCapacity (&lctxt, &pvalue->capacity);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.circuitInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CircuitInfo (&lctxt, &pvalue->circuitInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.usageInformationPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225RasUsageInformation (&lctxt, &pvalue->usageInformation);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DisengageRejectReason */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225DisengageRejectReason (OOCTXT* pctxt, H225DisengageRejectReason* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 2);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* notRegistered */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* requestToDropOther */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* securityDenial */
|
|
case 3:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* securityError */
|
|
case 4:
|
|
stat = asn1PE_H225SecurityErrors2 (&lctxt, pvalue->u.securityError);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DisengageReject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225DisengageReject (OOCTXT* pctxt, H225DisengageReject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.altGKInfoPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode rejectReason */
|
|
|
|
stat = asn1PE_H225DisengageRejectReason (pctxt, &pvalue->rejectReason);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.altGKInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.altGKInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225AltGKInfo (&lctxt, &pvalue->altGKInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* LocationRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225LocationRequest (OOCTXT* pctxt, H225LocationRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.sourceInfoPresent ||
|
|
pvalue->m.canMapAliasPresent ||
|
|
pvalue->m.gatekeeperIdentifierPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.desiredProtocolsPresent ||
|
|
pvalue->m.desiredTunnelledProtocolPresent ||
|
|
pvalue->m.featureSetPresent ||
|
|
pvalue->m.genericDataPresent ||
|
|
pvalue->m.hopCountPresent ||
|
|
pvalue->m.circuitInfoPresent ||
|
|
pvalue->m.callIdentifierPresent ||
|
|
pvalue->m.bandWidthPresent ||
|
|
pvalue->m.sourceEndpointInfoPresent ||
|
|
pvalue->m.canMapSrcAliasPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.endpointIdentifierPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode endpointIdentifier */
|
|
|
|
if (pvalue->m.endpointIdentifierPresent) {
|
|
stat = asn1PE_H225EndpointIdentifier (pctxt, pvalue->endpointIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode destinationInfo */
|
|
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->destinationInfo);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode replyAddress */
|
|
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->replyAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 15);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.sourceInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.canMapAliasPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.gatekeeperIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.desiredProtocolsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.desiredTunnelledProtocolPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.hopCountPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.circuitInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.bandWidthPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.sourceEndpointInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.canMapSrcAliasPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.sourceInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (&lctxt, &pvalue->sourceInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.canMapAliasPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->canMapAlias);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.gatekeeperIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225GatekeeperIdentifier (&lctxt, pvalue->gatekeeperIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.desiredProtocolsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedProtocols (&lctxt, &pvalue->desiredProtocols);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.desiredTunnelledProtocolPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225TunnelledProtocol (&lctxt, &pvalue->desiredTunnelledProtocol);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.hopCountPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeConsUnsigned (&lctxt, pvalue->hopCount, 1U, 255U);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.circuitInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CircuitInfo (&lctxt, &pvalue->circuitInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.callIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallIdentifier (&lctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.bandWidthPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225BandWidth (&lctxt, pvalue->bandWidth);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.sourceEndpointInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (&lctxt, &pvalue->sourceEndpointInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.canMapSrcAliasPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->canMapSrcAlias);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* LocationConfirm */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225LocationConfirm (OOCTXT* pctxt, H225LocationConfirm* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.destinationInfoPresent ||
|
|
pvalue->m.destExtraCallInfoPresent ||
|
|
pvalue->m.destinationTypePresent ||
|
|
pvalue->m.remoteExtensionAddressPresent ||
|
|
pvalue->m.alternateEndpointsPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.alternateTransportAddressesPresent ||
|
|
pvalue->m.supportedProtocolsPresent ||
|
|
pvalue->m.multipleCallsPresent ||
|
|
pvalue->m.featureSetPresent ||
|
|
pvalue->m.genericDataPresent ||
|
|
pvalue->m.circuitInfoPresent ||
|
|
pvalue->m.serviceControlPresent ||
|
|
pvalue->m.modifiedSrcInfoPresent ||
|
|
pvalue->m.bandWidthPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callSignalAddress */
|
|
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->callSignalAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode rasAddress */
|
|
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->rasAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 16);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destinationInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destExtraCallInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.destinationTypePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.remoteExtensionAddressPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alternateEndpointsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.alternateTransportAddressesPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.supportedProtocolsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.multipleCallsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.circuitInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.serviceControlPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.modifiedSrcInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.bandWidthPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.destinationInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (&lctxt, &pvalue->destinationInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.destExtraCallInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (&lctxt, &pvalue->destExtraCallInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.destinationTypePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225EndpointType (&lctxt, &pvalue->destinationType);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.remoteExtensionAddressPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (&lctxt, &pvalue->remoteExtensionAddress);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.alternateEndpointsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225Endpoint (&lctxt, &pvalue->alternateEndpoints);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.alternateTransportAddressesPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225AlternateTransportAddresses (&lctxt, &pvalue->alternateTransportAddresses);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.supportedProtocolsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedProtocols (&lctxt, &pvalue->supportedProtocols);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.multipleCallsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->multipleCalls);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.circuitInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CircuitInfo (&lctxt, &pvalue->circuitInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.serviceControlPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ServiceControlSession (&lctxt, &pvalue->serviceControl);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.modifiedSrcInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (&lctxt, &pvalue->modifiedSrcInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.bandWidthPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225BandWidth (&lctxt, pvalue->bandWidth);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* LocationRejectReason */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225LocationRejectReason (OOCTXT* pctxt, H225LocationRejectReason* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 4);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* notRegistered */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* invalidPermission */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* requestDenied */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* undefinedReason */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* securityDenial */
|
|
case 5:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* aliasesInconsistent */
|
|
case 6:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* routeCalltoSCN */
|
|
case 7:
|
|
stat = asn1PE_H225_SeqOfH225PartyNumber (&lctxt, pvalue->u.routeCalltoSCN);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* resourceUnavailable */
|
|
case 8:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* genericDataReason */
|
|
case 9:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* neededFeatureNotSupported */
|
|
case 10:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* hopCountExceeded */
|
|
case 11:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* incompleteAddress */
|
|
case 12:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* securityError */
|
|
case 13:
|
|
stat = asn1PE_H225SecurityErrors2 (&lctxt, pvalue->u.securityError);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* securityDHmismatch */
|
|
case 14:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* noRouteToDestination */
|
|
case 15:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* unallocatedNumber */
|
|
case 16:
|
|
/* NULL */
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* LocationReject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225LocationReject (OOCTXT* pctxt, H225LocationReject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.altGKInfoPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.featureSetPresent ||
|
|
pvalue->m.genericDataPresent ||
|
|
pvalue->m.serviceControlPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode rejectReason */
|
|
|
|
stat = asn1PE_H225LocationRejectReason (pctxt, &pvalue->rejectReason);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 6);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.altGKInfoPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.serviceControlPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.altGKInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225AltGKInfo (&lctxt, &pvalue->altGKInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.serviceControlPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ServiceControlSession (&lctxt, &pvalue->serviceControl);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* InfoRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225InfoRequest (OOCTXT* pctxt, H225InfoRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.callIdentifierPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.uuiesRequestedPresent ||
|
|
pvalue->m.callLinkagePresent ||
|
|
pvalue->m.usageInfoRequestedPresent ||
|
|
pvalue->m.segmentedResponseSupportedPresent ||
|
|
pvalue->m.nextSegmentRequestedPresent ||
|
|
pvalue->m.capacityInfoRequestedPresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.replyAddressPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callReferenceValue */
|
|
|
|
stat = asn1PE_H225CallReferenceValue (pctxt, pvalue->callReferenceValue);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode replyAddress */
|
|
|
|
if (pvalue->m.replyAddressPresent) {
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->replyAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 10);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.uuiesRequestedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callLinkagePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.usageInfoRequestedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.segmentedResponseSupportedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nextSegmentRequestedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.capacityInfoRequestedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.callIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallIdentifier (&lctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.uuiesRequestedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225UUIEsRequested (&lctxt, &pvalue->uuiesRequested);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.callLinkagePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallLinkage (&lctxt, &pvalue->callLinkage);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.usageInfoRequestedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225RasUsageInfoTypes (&lctxt, &pvalue->usageInfoRequested);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.segmentedResponseSupportedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.nextSegmentRequestedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeConsUnsigned (&lctxt, pvalue->nextSegmentRequested, 0U, 65535U);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.capacityInfoRequestedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
/* NULL */
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225RTPSession */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225RTPSession (OOCTXT* pctxt, H225_SeqOfH225RTPSession* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225RTPSession (pctxt, ((H225RTPSession*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225TransportChannelInfo */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225TransportChannelInfo (OOCTXT* pctxt, H225_SeqOfH225TransportChannelInfo* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225TransportChannelInfo (pctxt, ((H225TransportChannelInfo*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225ConferenceIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225ConferenceIdentifier (OOCTXT* pctxt, H225_SeqOfH225ConferenceIdentifier* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, pvalue->n);
|
|
if (stat < 0) return stat;
|
|
|
|
/* encode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
stat = asn1PE_H225ConferenceIdentifier (pctxt, &pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* InfoRequestResponse_perCallInfo_element_pdu_element */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225InfoRequestResponse_perCallInfo_element_pdu_element (OOCTXT* pctxt, H225InfoRequestResponse_perCallInfo_element_pdu_element* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* encode h323pdu */
|
|
|
|
stat = asn1PE_H225H323_UU_PDU (pctxt, &pvalue->h323pdu);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode sent */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->sent);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225InfoRequestResponse_perCallInfo_element_pdu_el */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225InfoRequestResponse_perCallInfo_element_pdu_element (OOCTXT* pctxt, H225_SeqOfH225InfoRequestResponse_perCallInfo_element_pdu_element* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225InfoRequestResponse_perCallInfo_element_pdu_element (pctxt, ((H225InfoRequestResponse_perCallInfo_element_pdu_element*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* InfoRequestResponse_perCallInfo_element */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225InfoRequestResponse_perCallInfo_element (OOCTXT* pctxt, H225InfoRequestResponse_perCallInfo_element* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.callIdentifierPresent ||
|
|
pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.substituteConfIDsPresent ||
|
|
pvalue->m.pduPresent ||
|
|
pvalue->m.callLinkagePresent ||
|
|
pvalue->m.usageInformationPresent ||
|
|
pvalue->m.circuitInfoPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.originatorPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.audioPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.videoPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.dataPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode callReferenceValue */
|
|
|
|
stat = asn1PE_H225CallReferenceValue (pctxt, pvalue->callReferenceValue);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode conferenceID */
|
|
|
|
stat = asn1PE_H225ConferenceIdentifier (pctxt, &pvalue->conferenceID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode originator */
|
|
|
|
if (pvalue->m.originatorPresent) {
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->originator);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode audio */
|
|
|
|
if (pvalue->m.audioPresent) {
|
|
stat = asn1PE_H225_SeqOfH225RTPSession (pctxt, &pvalue->audio);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode video */
|
|
|
|
if (pvalue->m.videoPresent) {
|
|
stat = asn1PE_H225_SeqOfH225RTPSession (pctxt, &pvalue->video);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode data */
|
|
|
|
if (pvalue->m.dataPresent) {
|
|
stat = asn1PE_H225_SeqOfH225TransportChannelInfo (pctxt, &pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode h245 */
|
|
|
|
stat = asn1PE_H225TransportChannelInfo (pctxt, &pvalue->h245);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callSignaling */
|
|
|
|
stat = asn1PE_H225TransportChannelInfo (pctxt, &pvalue->callSignaling);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callType */
|
|
|
|
stat = asn1PE_H225CallType (pctxt, &pvalue->callType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode bandWidth */
|
|
|
|
stat = asn1PE_H225BandWidth (pctxt, pvalue->bandWidth);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callModel */
|
|
|
|
stat = asn1PE_H225CallModel (pctxt, &pvalue->callModel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callIdentifierPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.substituteConfIDsPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.pduPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callLinkagePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.usageInformationPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.circuitInfoPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.callIdentifierPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallIdentifier (&lctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.substituteConfIDsPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ConferenceIdentifier (&lctxt, &pvalue->substituteConfIDs);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.pduPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225InfoRequestResponse_perCallInfo_element_pdu_element (&lctxt, &pvalue->pdu);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.callLinkagePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallLinkage (&lctxt, &pvalue->callLinkage);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.usageInformationPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225RasUsageInformation (&lctxt, &pvalue->usageInformation);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.circuitInfoPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CircuitInfo (&lctxt, &pvalue->circuitInfo);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225InfoRequestResponse_perCallInfo_element */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225InfoRequestResponse_perCallInfo_element (OOCTXT* pctxt, H225_SeqOfH225InfoRequestResponse_perCallInfo_element* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225InfoRequestResponse_perCallInfo_element (pctxt, ((H225InfoRequestResponse_perCallInfo_element*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* InfoRequestResponseStatus */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225InfoRequestResponseStatus (OOCTXT* pctxt, H225InfoRequestResponseStatus* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 4);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* complete */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* incomplete */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* segment */
|
|
case 3:
|
|
stat = encodeConsUnsigned (pctxt, pvalue->u.segment, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
break;
|
|
|
|
/* invalidCall */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* InfoRequestResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225InfoRequestResponse (OOCTXT* pctxt, H225InfoRequestResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.needResponsePresent ||
|
|
pvalue->m.capacityPresent ||
|
|
pvalue->m.irrStatusPresent ||
|
|
pvalue->m.unsolicitedPresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.endpointAliasPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.perCallInfoPresent);
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode endpointType */
|
|
|
|
stat = asn1PE_H225EndpointType (pctxt, &pvalue->endpointType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode endpointIdentifier */
|
|
|
|
stat = asn1PE_H225EndpointIdentifier (pctxt, pvalue->endpointIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode rasAddress */
|
|
|
|
stat = asn1PE_H225TransportAddress (pctxt, &pvalue->rasAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode callSignalAddress */
|
|
|
|
stat = asn1PE_H225_SeqOfH225TransportAddress (pctxt, &pvalue->callSignalAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode endpointAlias */
|
|
|
|
if (pvalue->m.endpointAliasPresent) {
|
|
stat = asn1PE_H225_SeqOfH225AliasAddress (pctxt, &pvalue->endpointAlias);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode perCallInfo */
|
|
|
|
if (pvalue->m.perCallInfoPresent) {
|
|
stat = asn1PE_H225_SeqOfH225InfoRequestResponse_perCallInfo_element (pctxt, &pvalue->perCallInfo);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.needResponsePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.capacityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.irrStatusPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.unsolicitedPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.needResponsePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->needResponse);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.capacityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallCapacity (&lctxt, &pvalue->capacity);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.irrStatusPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225InfoRequestResponseStatus (&lctxt, &pvalue->irrStatus);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.unsolicitedPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeBit (&lctxt, (ASN1BOOL)pvalue->unsolicited);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NonStandardMessage */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225NonStandardMessage (OOCTXT* pctxt, H225NonStandardMessage* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.featureSetPresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225FeatureSet (&lctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnknownMessageResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225UnknownMessageResponse (OOCTXT* pctxt, H225UnknownMessageResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.tokensPresent ||
|
|
pvalue->m.cryptoTokensPresent ||
|
|
pvalue->m.integrityCheckValuePresent ||
|
|
pvalue->m.messageNotUnderstoodPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.messageNotUnderstoodPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (&lctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (&lctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225ICV (&lctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.messageNotUnderstoodPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOctetString (&lctxt, pvalue->messageNotUnderstood.numocts, pvalue->messageNotUnderstood.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestInProgress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225RequestInProgress (OOCTXT* pctxt, H225RequestInProgress* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode tokens */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (pctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode cryptoTokens */
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (pctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode integrityCheckValue */
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
stat = asn1PE_H225ICV (pctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode delay */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->delay, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ResourcesAvailableIndicate */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ResourcesAvailableIndicate (OOCTXT* pctxt, H225ResourcesAvailableIndicate* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.capacityPresent ||
|
|
pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode endpointIdentifier */
|
|
|
|
stat = asn1PE_H225EndpointIdentifier (pctxt, pvalue->endpointIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode protocols */
|
|
|
|
stat = asn1PE_H225_SeqOfH225SupportedProtocols (pctxt, &pvalue->protocols);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode almostOutOfResources */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->almostOutOfResources);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode tokens */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (pctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode cryptoTokens */
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (pctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode integrityCheckValue */
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
stat = asn1PE_H225ICV (pctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.capacityPresent);
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.capacityPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225CallCapacity (&lctxt, &pvalue->capacity);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ResourcesAvailableConfirm */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ResourcesAvailableConfirm (OOCTXT* pctxt, H225ResourcesAvailableConfirm* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
ASN1OpenType openType;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->m.genericDataPresent);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode protocolIdentifier */
|
|
|
|
stat = asn1PE_H225ProtocolIdentifier (pctxt, pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode tokens */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (pctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode cryptoTokens */
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (pctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode integrityCheckValue */
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
stat = asn1PE_H225ICV (pctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* encode extension optional bits length */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode optional bits */
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
/* encode extension elements */
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = asn1PE_H225_SeqOfH225GenericData (&lctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeByteAlign (&lctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* InfoRequestAck */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225InfoRequestAck (OOCTXT* pctxt, H225InfoRequestAck* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode tokens */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (pctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode cryptoTokens */
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (pctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode integrityCheckValue */
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
stat = asn1PE_H225ICV (pctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* InfoRequestNakReason */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225InfoRequestNakReason (OOCTXT* pctxt, H225InfoRequestNakReason* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 3);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* notRegistered */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* securityDenial */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* undefinedReason */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 4);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* securityError */
|
|
case 4:
|
|
stat = asn1PE_H225SecurityErrors2 (&lctxt, pvalue->u.securityError);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* InfoRequestNak */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225InfoRequestNak (OOCTXT* pctxt, H225InfoRequestNak* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.altGKInfoPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode nakReason */
|
|
|
|
stat = asn1PE_H225InfoRequestNakReason (pctxt, &pvalue->nakReason);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode altGKInfo */
|
|
|
|
if (pvalue->m.altGKInfoPresent) {
|
|
stat = asn1PE_H225AltGKInfo (pctxt, &pvalue->altGKInfo);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode tokens */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (pctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode cryptoTokens */
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (pctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode integrityCheckValue */
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
stat = asn1PE_H225ICV (pctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ServiceControlIndication_callSpecific */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ServiceControlIndication_callSpecific (OOCTXT* pctxt, H225ServiceControlIndication_callSpecific* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
/* encode callIdentifier */
|
|
|
|
stat = asn1PE_H225CallIdentifier (pctxt, &pvalue->callIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode conferenceID */
|
|
|
|
stat = asn1PE_H225ConferenceIdentifier (pctxt, &pvalue->conferenceID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode answeredCall */
|
|
|
|
stat = encodeBit (pctxt, (ASN1BOOL)pvalue->answeredCall);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ServiceControlIndication */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ServiceControlIndication (OOCTXT* pctxt, H225ServiceControlIndication* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.endpointIdentifierPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.callSpecificPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode serviceControl */
|
|
|
|
stat = asn1PE_H225_SeqOfH225ServiceControlSession (pctxt, &pvalue->serviceControl);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode endpointIdentifier */
|
|
|
|
if (pvalue->m.endpointIdentifierPresent) {
|
|
stat = asn1PE_H225EndpointIdentifier (pctxt, pvalue->endpointIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode callSpecific */
|
|
|
|
if (pvalue->m.callSpecificPresent) {
|
|
stat = asn1PE_H225ServiceControlIndication_callSpecific (pctxt, &pvalue->callSpecific);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode tokens */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (pctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode cryptoTokens */
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (pctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode integrityCheckValue */
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
stat = asn1PE_H225ICV (pctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode featureSet */
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
stat = asn1PE_H225FeatureSet (pctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode genericData */
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
stat = asn1PE_H225_SeqOfH225GenericData (pctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ServiceControlResponse_result */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ServiceControlResponse_result (OOCTXT* pctxt, H225ServiceControlResponse_result* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 5);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* started */
|
|
case 1:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* failed */
|
|
case 2:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* stopped */
|
|
case 3:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* notAvailable */
|
|
case 4:
|
|
/* NULL */
|
|
break;
|
|
|
|
/* neededFeatureNotSupported */
|
|
case 5:
|
|
/* NULL */
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 6);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ServiceControlResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225ServiceControlResponse (OOCTXT* pctxt, H225ServiceControlResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = 0;
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.resultPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.nonStandardDataPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.tokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.cryptoTokensPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.integrityCheckValuePresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.featureSetPresent);
|
|
|
|
encodeBit (pctxt, (ASN1BOOL)pvalue->m.genericDataPresent);
|
|
|
|
/* encode requestSeqNum */
|
|
|
|
stat = asn1PE_H225RequestSeqNum (pctxt, pvalue->requestSeqNum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* encode result */
|
|
|
|
if (pvalue->m.resultPresent) {
|
|
stat = asn1PE_H225ServiceControlResponse_result (pctxt, &pvalue->result);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
stat = asn1PE_H225NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode tokens */
|
|
|
|
if (pvalue->m.tokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225ClearToken (pctxt, &pvalue->tokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode cryptoTokens */
|
|
|
|
if (pvalue->m.cryptoTokensPresent) {
|
|
stat = asn1PE_H225_SeqOfH225CryptoH323Token (pctxt, &pvalue->cryptoTokens);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode integrityCheckValue */
|
|
|
|
if (pvalue->m.integrityCheckValuePresent) {
|
|
stat = asn1PE_H225ICV (pctxt, &pvalue->integrityCheckValue);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode featureSet */
|
|
|
|
if (pvalue->m.featureSetPresent) {
|
|
stat = asn1PE_H225FeatureSet (pctxt, &pvalue->featureSet);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
/* encode genericData */
|
|
|
|
if (pvalue->m.genericDataPresent) {
|
|
stat = asn1PE_H225_SeqOfH225GenericData (pctxt, &pvalue->genericData);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH225AdmissionConfirm */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225_SeqOfH225AdmissionConfirm (OOCTXT* pctxt, H225_SeqOfH225AdmissionConfirm* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
DListNode* pnode;
|
|
ASN1UINT xx1;
|
|
ASN1UINT enclen, fraglen;
|
|
|
|
enclen = fraglen = xx1 = 0;
|
|
pnode = pvalue->head;
|
|
for (;;) {
|
|
/* encode length determinant */
|
|
|
|
stat = encodeLength (pctxt, (pvalue->count - enclen));
|
|
if (stat < 0) return stat;
|
|
|
|
fraglen = stat;
|
|
enclen += fraglen;
|
|
/* encode elements */
|
|
|
|
for (; xx1 < enclen; xx1++) {
|
|
stat = asn1PE_H225AdmissionConfirm (pctxt, ((H225AdmissionConfirm*)pnode->data));
|
|
if (stat != ASN_OK) return stat;
|
|
pnode = pnode->next;
|
|
}
|
|
if ( pvalue->count == enclen && fraglen < 16384) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RasMessage */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PE_H225RasMessage (OOCTXT* pctxt, H225RasMessage* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
extbit = (ASN1BOOL)(pvalue->t > 25);
|
|
|
|
encodeBit (pctxt, extbit);
|
|
|
|
if (!extbit) {
|
|
|
|
/* Encode choice index value */
|
|
|
|
stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 24);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode root element data value */
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* gatekeeperRequest */
|
|
case 1:
|
|
stat = asn1PE_H225GatekeeperRequest (pctxt, pvalue->u.gatekeeperRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* gatekeeperConfirm */
|
|
case 2:
|
|
stat = asn1PE_H225GatekeeperConfirm (pctxt, pvalue->u.gatekeeperConfirm);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* gatekeeperReject */
|
|
case 3:
|
|
stat = asn1PE_H225GatekeeperReject (pctxt, pvalue->u.gatekeeperReject);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* registrationRequest */
|
|
case 4:
|
|
stat = asn1PE_H225RegistrationRequest (pctxt, pvalue->u.registrationRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* registrationConfirm */
|
|
case 5:
|
|
stat = asn1PE_H225RegistrationConfirm (pctxt, pvalue->u.registrationConfirm);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* registrationReject */
|
|
case 6:
|
|
stat = asn1PE_H225RegistrationReject (pctxt, pvalue->u.registrationReject);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* unregistrationRequest */
|
|
case 7:
|
|
stat = asn1PE_H225UnregistrationRequest (pctxt, pvalue->u.unregistrationRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* unregistrationConfirm */
|
|
case 8:
|
|
stat = asn1PE_H225UnregistrationConfirm (pctxt, pvalue->u.unregistrationConfirm);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* unregistrationReject */
|
|
case 9:
|
|
stat = asn1PE_H225UnregistrationReject (pctxt, pvalue->u.unregistrationReject);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* admissionRequest */
|
|
case 10:
|
|
stat = asn1PE_H225AdmissionRequest (pctxt, pvalue->u.admissionRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* admissionConfirm */
|
|
case 11:
|
|
stat = asn1PE_H225AdmissionConfirm (pctxt, pvalue->u.admissionConfirm);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* admissionReject */
|
|
case 12:
|
|
stat = asn1PE_H225AdmissionReject (pctxt, pvalue->u.admissionReject);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* bandwidthRequest */
|
|
case 13:
|
|
stat = asn1PE_H225BandwidthRequest (pctxt, pvalue->u.bandwidthRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* bandwidthConfirm */
|
|
case 14:
|
|
stat = asn1PE_H225BandwidthConfirm (pctxt, pvalue->u.bandwidthConfirm);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* bandwidthReject */
|
|
case 15:
|
|
stat = asn1PE_H225BandwidthReject (pctxt, pvalue->u.bandwidthReject);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* disengageRequest */
|
|
case 16:
|
|
stat = asn1PE_H225DisengageRequest (pctxt, pvalue->u.disengageRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* disengageConfirm */
|
|
case 17:
|
|
stat = asn1PE_H225DisengageConfirm (pctxt, pvalue->u.disengageConfirm);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* disengageReject */
|
|
case 18:
|
|
stat = asn1PE_H225DisengageReject (pctxt, pvalue->u.disengageReject);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* locationRequest */
|
|
case 19:
|
|
stat = asn1PE_H225LocationRequest (pctxt, pvalue->u.locationRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* locationConfirm */
|
|
case 20:
|
|
stat = asn1PE_H225LocationConfirm (pctxt, pvalue->u.locationConfirm);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* locationReject */
|
|
case 21:
|
|
stat = asn1PE_H225LocationReject (pctxt, pvalue->u.locationReject);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* infoRequest */
|
|
case 22:
|
|
stat = asn1PE_H225InfoRequest (pctxt, pvalue->u.infoRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* infoRequestResponse */
|
|
case 23:
|
|
stat = asn1PE_H225InfoRequestResponse (pctxt, pvalue->u.infoRequestResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* nonStandardMessage */
|
|
case 24:
|
|
stat = asn1PE_H225NonStandardMessage (pctxt, pvalue->u.nonStandardMessage);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
/* unknownMessageResponse */
|
|
case 25:
|
|
stat = asn1PE_H225UnknownMessageResponse (pctxt, pvalue->u.unknownMessageResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
/* Encode extension choice index value */
|
|
|
|
stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 26);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* Encode extension element data value */
|
|
|
|
initContext (&lctxt);
|
|
stat = setPERBuffer (&lctxt, 0, 0, TRUE);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
switch (pvalue->t)
|
|
{
|
|
/* requestInProgress */
|
|
case 26:
|
|
stat = asn1PE_H225RequestInProgress (&lctxt, pvalue->u.requestInProgress);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* resourcesAvailableIndicate */
|
|
case 27:
|
|
stat = asn1PE_H225ResourcesAvailableIndicate (&lctxt, pvalue->u.resourcesAvailableIndicate);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* resourcesAvailableConfirm */
|
|
case 28:
|
|
stat = asn1PE_H225ResourcesAvailableConfirm (&lctxt, pvalue->u.resourcesAvailableConfirm);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* infoRequestAck */
|
|
case 29:
|
|
stat = asn1PE_H225InfoRequestAck (&lctxt, pvalue->u.infoRequestAck);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* infoRequestNak */
|
|
case 30:
|
|
stat = asn1PE_H225InfoRequestNak (&lctxt, pvalue->u.infoRequestNak);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* serviceControlIndication */
|
|
case 31:
|
|
stat = asn1PE_H225ServiceControlIndication (&lctxt, pvalue->u.serviceControlIndication);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* serviceControlResponse */
|
|
case 32:
|
|
stat = asn1PE_H225ServiceControlResponse (&lctxt, pvalue->u.serviceControlResponse);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
/* admissionConfirmSequence */
|
|
case 33:
|
|
stat = asn1PE_H225_SeqOfH225AdmissionConfirm (&lctxt, pvalue->u.admissionConfirmSequence);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts);
|
|
break;
|
|
|
|
default:
|
|
;
|
|
}
|
|
|
|
stat = encodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
stat = encodeOpenType (pctxt, openType.numocts, openType.data);
|
|
if (stat != ASN_OK) return freeContext (&lctxt), stat;
|
|
|
|
freeContext (&lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|