42171 lines
1.1 MiB
42171 lines
1.1 MiB
/*
|
|
* 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 "MULTIMEDIA-SYSTEM-CONTROL.h"
|
|
#include "eventHandler.h"
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NonStandardIdentifier_h221NonStandard */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NonStandardIdentifier_h221NonStandard (OOCTXT* pctxt, H245NonStandardIdentifier_h221NonStandard* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* decode t35CountryCode */
|
|
|
|
invokeStartElement (pctxt, "t35CountryCode", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->t35CountryCode, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->t35CountryCode);
|
|
|
|
invokeEndElement (pctxt, "t35CountryCode", -1);
|
|
|
|
/* decode t35Extension */
|
|
|
|
invokeStartElement (pctxt, "t35Extension", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->t35Extension, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->t35Extension);
|
|
|
|
invokeEndElement (pctxt, "t35Extension", -1);
|
|
|
|
/* decode manufacturerCode */
|
|
|
|
invokeStartElement (pctxt, "manufacturerCode", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->manufacturerCode, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->manufacturerCode);
|
|
|
|
invokeEndElement (pctxt, "manufacturerCode", -1);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NonStandardIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NonStandardIdentifier (OOCTXT* pctxt, H245NonStandardIdentifier* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* object */
|
|
case 0:
|
|
invokeStartElement (pctxt, "object", -1);
|
|
|
|
pvalue->u.object = ALLOC_ASN1ELEM (pctxt, ASN1OBJID);
|
|
|
|
stat = decodeObjectIdentifier (pctxt, pvalue->u.object);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOidValue (pctxt, pvalue->u.object->numids, pvalue->u.object->subid);
|
|
|
|
invokeEndElement (pctxt, "object", -1);
|
|
|
|
break;
|
|
|
|
/* h221NonStandard */
|
|
case 1:
|
|
invokeStartElement (pctxt, "h221NonStandard", -1);
|
|
|
|
pvalue->u.h221NonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardIdentifier_h221NonStandard);
|
|
|
|
stat = asn1PD_H245NonStandardIdentifier_h221NonStandard (pctxt, pvalue->u.h221NonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h221NonStandard", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NonStandardParameter */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NonStandardParameter (OOCTXT* pctxt, H245NonStandardParameter* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* decode nonStandardIdentifier */
|
|
|
|
invokeStartElement (pctxt, "nonStandardIdentifier", -1);
|
|
|
|
stat = asn1PD_H245NonStandardIdentifier (pctxt, &pvalue->nonStandardIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandardIdentifier", -1);
|
|
|
|
/* decode data */
|
|
|
|
invokeStartElement (pctxt, "data", -1);
|
|
|
|
stat = decodeDynOctetString (pctxt, (ASN1DynOctStr*)&pvalue->data);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->data.numocts, pvalue->data.data);
|
|
|
|
invokeEndElement (pctxt, "data", -1);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* V42bis */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245V42bis (OOCTXT* pctxt, H245V42bis* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode numberOfCodewords */
|
|
|
|
invokeStartElement (pctxt, "numberOfCodewords", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->numberOfCodewords, 1U, 65536U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->numberOfCodewords);
|
|
|
|
invokeEndElement (pctxt, "numberOfCodewords", -1);
|
|
|
|
/* decode maximumStringLength */
|
|
|
|
invokeStartElement (pctxt, "maximumStringLength", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maximumStringLength, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maximumStringLength);
|
|
|
|
invokeEndElement (pctxt, "maximumStringLength", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CompressionType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CompressionType (OOCTXT* pctxt, H245CompressionType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* v42bis */
|
|
case 0:
|
|
invokeStartElement (pctxt, "v42bis", -1);
|
|
|
|
pvalue->u.v42bis = ALLOC_ASN1ELEM (pctxt, H245V42bis);
|
|
|
|
stat = asn1PD_H245V42bis (pctxt, pvalue->u.v42bis);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "v42bis", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 2;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DataProtocolCapability_v76wCompression */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DataProtocolCapability_v76wCompression (OOCTXT* pctxt, H245DataProtocolCapability_v76wCompression* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* transmitCompression */
|
|
case 0:
|
|
invokeStartElement (pctxt, "transmitCompression", -1);
|
|
|
|
pvalue->u.transmitCompression = ALLOC_ASN1ELEM (pctxt, H245CompressionType);
|
|
|
|
stat = asn1PD_H245CompressionType (pctxt, pvalue->u.transmitCompression);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "transmitCompression", -1);
|
|
|
|
break;
|
|
|
|
/* receiveCompression */
|
|
case 1:
|
|
invokeStartElement (pctxt, "receiveCompression", -1);
|
|
|
|
pvalue->u.receiveCompression = ALLOC_ASN1ELEM (pctxt, H245CompressionType);
|
|
|
|
stat = asn1PD_H245CompressionType (pctxt, pvalue->u.receiveCompression);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "receiveCompression", -1);
|
|
|
|
break;
|
|
|
|
/* transmitAndReceiveCompression */
|
|
case 2:
|
|
invokeStartElement (pctxt, "transmitAndReceiveCompression", -1);
|
|
|
|
pvalue->u.transmitAndReceiveCompression = ALLOC_ASN1ELEM (pctxt, H245CompressionType);
|
|
|
|
stat = asn1PD_H245CompressionType (pctxt, pvalue->u.transmitAndReceiveCompression);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "transmitAndReceiveCompression", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DataProtocolCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DataProtocolCapability (OOCTXT* pctxt, H245DataProtocolCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 6);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* v14buffered */
|
|
case 1:
|
|
invokeStartElement (pctxt, "v14buffered", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "v14buffered", -1);
|
|
|
|
break;
|
|
|
|
/* v42lapm */
|
|
case 2:
|
|
invokeStartElement (pctxt, "v42lapm", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "v42lapm", -1);
|
|
|
|
break;
|
|
|
|
/* hdlcFrameTunnelling */
|
|
case 3:
|
|
invokeStartElement (pctxt, "hdlcFrameTunnelling", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "hdlcFrameTunnelling", -1);
|
|
|
|
break;
|
|
|
|
/* h310SeparateVCStack */
|
|
case 4:
|
|
invokeStartElement (pctxt, "h310SeparateVCStack", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "h310SeparateVCStack", -1);
|
|
|
|
break;
|
|
|
|
/* h310SingleVCStack */
|
|
case 5:
|
|
invokeStartElement (pctxt, "h310SingleVCStack", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "h310SingleVCStack", -1);
|
|
|
|
break;
|
|
|
|
/* transparent */
|
|
case 6:
|
|
invokeStartElement (pctxt, "transparent", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "transparent", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 8;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* segmentationAndReassembly */
|
|
case 8:
|
|
invokeStartElement (pctxt, "segmentationAndReassembly", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "segmentationAndReassembly", -1);
|
|
|
|
break;
|
|
|
|
/* hdlcFrameTunnelingwSAR */
|
|
case 9:
|
|
invokeStartElement (pctxt, "hdlcFrameTunnelingwSAR", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "hdlcFrameTunnelingwSAR", -1);
|
|
|
|
break;
|
|
|
|
/* v120 */
|
|
case 10:
|
|
invokeStartElement (pctxt, "v120", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "v120", -1);
|
|
|
|
break;
|
|
|
|
/* separateLANStack */
|
|
case 11:
|
|
invokeStartElement (pctxt, "separateLANStack", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "separateLANStack", -1);
|
|
|
|
break;
|
|
|
|
/* v76wCompression */
|
|
case 12:
|
|
invokeStartElement (pctxt, "v76wCompression", -1);
|
|
|
|
pvalue->u.v76wCompression = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability_v76wCompression);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability_v76wCompression (pctxt, pvalue->u.v76wCompression);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "v76wCompression", -1);
|
|
|
|
break;
|
|
|
|
/* tcp */
|
|
case 13:
|
|
invokeStartElement (pctxt, "tcp", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "tcp", -1);
|
|
|
|
break;
|
|
|
|
/* udp */
|
|
case 14:
|
|
invokeStartElement (pctxt, "udp", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "udp", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* T38FaxRateManagement */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245T38FaxRateManagement (OOCTXT* pctxt, H245T38FaxRateManagement* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* localTCF */
|
|
case 0:
|
|
invokeStartElement (pctxt, "localTCF", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "localTCF", -1);
|
|
|
|
break;
|
|
|
|
/* transferredTCF */
|
|
case 1:
|
|
invokeStartElement (pctxt, "transferredTCF", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "transferredTCF", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* T38FaxUdpOptions_t38FaxUdpEC */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245T38FaxUdpOptions_t38FaxUdpEC (OOCTXT* pctxt, H245T38FaxUdpOptions_t38FaxUdpEC* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* t38UDPFEC */
|
|
case 0:
|
|
invokeStartElement (pctxt, "t38UDPFEC", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "t38UDPFEC", -1);
|
|
|
|
break;
|
|
|
|
/* t38UDPRedundancy */
|
|
case 1:
|
|
invokeStartElement (pctxt, "t38UDPRedundancy", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "t38UDPRedundancy", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* T38FaxUdpOptions */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245T38FaxUdpOptions (OOCTXT* pctxt, H245T38FaxUdpOptions* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL optbit;
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.t38FaxMaxBufferPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.t38FaxMaxDatagramPresent = optbit;
|
|
|
|
/* decode t38FaxMaxBuffer */
|
|
|
|
if (pvalue->m.t38FaxMaxBufferPresent) {
|
|
invokeStartElement (pctxt, "t38FaxMaxBuffer", -1);
|
|
|
|
stat = decodeUnconsInteger (pctxt, &pvalue->t38FaxMaxBuffer);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeIntValue (pctxt, pvalue->t38FaxMaxBuffer);
|
|
|
|
invokeEndElement (pctxt, "t38FaxMaxBuffer", -1);
|
|
}
|
|
|
|
/* decode t38FaxMaxDatagram */
|
|
|
|
if (pvalue->m.t38FaxMaxDatagramPresent) {
|
|
invokeStartElement (pctxt, "t38FaxMaxDatagram", -1);
|
|
|
|
stat = decodeUnconsInteger (pctxt, &pvalue->t38FaxMaxDatagram);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeIntValue (pctxt, pvalue->t38FaxMaxDatagram);
|
|
|
|
invokeEndElement (pctxt, "t38FaxMaxDatagram", -1);
|
|
}
|
|
|
|
/* decode t38FaxUdpEC */
|
|
|
|
invokeStartElement (pctxt, "t38FaxUdpEC", -1);
|
|
|
|
stat = asn1PD_H245T38FaxUdpOptions_t38FaxUdpEC (pctxt, &pvalue->t38FaxUdpEC);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t38FaxUdpEC", -1);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* T38FaxTcpOptions */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245T38FaxTcpOptions (OOCTXT* pctxt, H245T38FaxTcpOptions* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode t38TCPBidirectionalMode */
|
|
|
|
invokeStartElement (pctxt, "t38TCPBidirectionalMode", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->t38TCPBidirectionalMode);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->t38TCPBidirectionalMode);
|
|
|
|
invokeEndElement (pctxt, "t38TCPBidirectionalMode", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* T38FaxProfile */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245T38FaxProfile (OOCTXT* pctxt, H245T38FaxProfile* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
/* decode fillBitRemoval */
|
|
|
|
invokeStartElement (pctxt, "fillBitRemoval", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->fillBitRemoval);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->fillBitRemoval);
|
|
|
|
invokeEndElement (pctxt, "fillBitRemoval", -1);
|
|
|
|
/* decode transcodingJBIG */
|
|
|
|
invokeStartElement (pctxt, "transcodingJBIG", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->transcodingJBIG);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->transcodingJBIG);
|
|
|
|
invokeEndElement (pctxt, "transcodingJBIG", -1);
|
|
|
|
/* decode transcodingMMR */
|
|
|
|
invokeStartElement (pctxt, "transcodingMMR", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->transcodingMMR);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->transcodingMMR);
|
|
|
|
invokeEndElement (pctxt, "transcodingMMR", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 4 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.versionPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "version", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->version, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->version);
|
|
|
|
invokeEndElement (pctxt, "version", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.t38FaxRateManagementPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "t38FaxRateManagement", -1);
|
|
|
|
stat = asn1PD_H245T38FaxRateManagement (pctxt, &pvalue->t38FaxRateManagement);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t38FaxRateManagement", -1);
|
|
break;
|
|
|
|
case 2:
|
|
pvalue->m.t38FaxUdpOptionsPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "t38FaxUdpOptions", -1);
|
|
|
|
stat = asn1PD_H245T38FaxUdpOptions (pctxt, &pvalue->t38FaxUdpOptions);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t38FaxUdpOptions", -1);
|
|
break;
|
|
|
|
case 3:
|
|
pvalue->m.t38FaxTcpOptionsPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "t38FaxTcpOptions", -1);
|
|
|
|
stat = asn1PD_H245T38FaxTcpOptions (pctxt, &pvalue->t38FaxTcpOptions);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t38FaxTcpOptions", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NonStandardMessage */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NonStandardMessage (OOCTXT* pctxt, H245NonStandardMessage* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode nonStandardData */
|
|
|
|
invokeStartElement (pctxt, "nonStandardData", -1);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandardData", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MasterSlaveDetermination */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MasterSlaveDetermination (OOCTXT* pctxt, H245MasterSlaveDetermination* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode terminalType */
|
|
|
|
invokeStartElement (pctxt, "terminalType", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->terminalType, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->terminalType);
|
|
|
|
invokeEndElement (pctxt, "terminalType", -1);
|
|
|
|
/* decode statusDeterminationNumber */
|
|
|
|
invokeStartElement (pctxt, "statusDeterminationNumber", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->statusDeterminationNumber, 0U, 16777215U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->statusDeterminationNumber);
|
|
|
|
invokeEndElement (pctxt, "statusDeterminationNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* SequenceNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245SequenceNumber (OOCTXT* pctxt, H245SequenceNumber* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = decodeConsUInt8 (pctxt, pvalue, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, *pvalue);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VCCapability_aal1 */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245VCCapability_aal1 (OOCTXT* pctxt, H245VCCapability_aal1* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode nullClockRecovery */
|
|
|
|
invokeStartElement (pctxt, "nullClockRecovery", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->nullClockRecovery);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->nullClockRecovery);
|
|
|
|
invokeEndElement (pctxt, "nullClockRecovery", -1);
|
|
|
|
/* decode srtsClockRecovery */
|
|
|
|
invokeStartElement (pctxt, "srtsClockRecovery", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->srtsClockRecovery);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->srtsClockRecovery);
|
|
|
|
invokeEndElement (pctxt, "srtsClockRecovery", -1);
|
|
|
|
/* decode adaptiveClockRecovery */
|
|
|
|
invokeStartElement (pctxt, "adaptiveClockRecovery", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->adaptiveClockRecovery);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->adaptiveClockRecovery);
|
|
|
|
invokeEndElement (pctxt, "adaptiveClockRecovery", -1);
|
|
|
|
/* decode nullErrorCorrection */
|
|
|
|
invokeStartElement (pctxt, "nullErrorCorrection", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->nullErrorCorrection);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->nullErrorCorrection);
|
|
|
|
invokeEndElement (pctxt, "nullErrorCorrection", -1);
|
|
|
|
/* decode longInterleaver */
|
|
|
|
invokeStartElement (pctxt, "longInterleaver", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->longInterleaver);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->longInterleaver);
|
|
|
|
invokeEndElement (pctxt, "longInterleaver", -1);
|
|
|
|
/* decode shortInterleaver */
|
|
|
|
invokeStartElement (pctxt, "shortInterleaver", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->shortInterleaver);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->shortInterleaver);
|
|
|
|
invokeEndElement (pctxt, "shortInterleaver", -1);
|
|
|
|
/* decode errorCorrectionOnly */
|
|
|
|
invokeStartElement (pctxt, "errorCorrectionOnly", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->errorCorrectionOnly);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->errorCorrectionOnly);
|
|
|
|
invokeEndElement (pctxt, "errorCorrectionOnly", -1);
|
|
|
|
/* decode structuredDataTransfer */
|
|
|
|
invokeStartElement (pctxt, "structuredDataTransfer", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->structuredDataTransfer);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->structuredDataTransfer);
|
|
|
|
invokeEndElement (pctxt, "structuredDataTransfer", -1);
|
|
|
|
/* decode partiallyFilledCells */
|
|
|
|
invokeStartElement (pctxt, "partiallyFilledCells", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->partiallyFilledCells);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->partiallyFilledCells);
|
|
|
|
invokeEndElement (pctxt, "partiallyFilledCells", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VCCapability_aal5 */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245VCCapability_aal5 (OOCTXT* pctxt, H245VCCapability_aal5* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode forwardMaximumSDUSize */
|
|
|
|
invokeStartElement (pctxt, "forwardMaximumSDUSize", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->forwardMaximumSDUSize, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->forwardMaximumSDUSize);
|
|
|
|
invokeEndElement (pctxt, "forwardMaximumSDUSize", -1);
|
|
|
|
/* decode backwardMaximumSDUSize */
|
|
|
|
invokeStartElement (pctxt, "backwardMaximumSDUSize", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->backwardMaximumSDUSize, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->backwardMaximumSDUSize);
|
|
|
|
invokeEndElement (pctxt, "backwardMaximumSDUSize", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VCCapability_availableBitRates_type_rangeOfBitRates */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245VCCapability_availableBitRates_type_rangeOfBitRates (OOCTXT* pctxt, H245VCCapability_availableBitRates_type_rangeOfBitRates* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* decode lowerBitRate */
|
|
|
|
invokeStartElement (pctxt, "lowerBitRate", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->lowerBitRate, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->lowerBitRate);
|
|
|
|
invokeEndElement (pctxt, "lowerBitRate", -1);
|
|
|
|
/* decode higherBitRate */
|
|
|
|
invokeStartElement (pctxt, "higherBitRate", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->higherBitRate, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->higherBitRate);
|
|
|
|
invokeEndElement (pctxt, "higherBitRate", -1);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VCCapability_availableBitRates_type */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245VCCapability_availableBitRates_type (OOCTXT* pctxt, H245VCCapability_availableBitRates_type* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* singleBitRate */
|
|
case 0:
|
|
invokeStartElement (pctxt, "singleBitRate", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.singleBitRate, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.singleBitRate);
|
|
|
|
invokeEndElement (pctxt, "singleBitRate", -1);
|
|
|
|
break;
|
|
|
|
/* rangeOfBitRates */
|
|
case 1:
|
|
invokeStartElement (pctxt, "rangeOfBitRates", -1);
|
|
|
|
pvalue->u.rangeOfBitRates = ALLOC_ASN1ELEM (pctxt, H245VCCapability_availableBitRates_type_rangeOfBitRates);
|
|
|
|
stat = asn1PD_H245VCCapability_availableBitRates_type_rangeOfBitRates (pctxt, pvalue->u.rangeOfBitRates);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "rangeOfBitRates", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VCCapability_availableBitRates */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245VCCapability_availableBitRates (OOCTXT* pctxt, H245VCCapability_availableBitRates* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode type */
|
|
|
|
invokeStartElement (pctxt, "type", -1);
|
|
|
|
stat = asn1PD_H245VCCapability_availableBitRates_type (pctxt, &pvalue->type);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "type", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Q2931Address_address_nsapAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245Q2931Address_address_nsapAddress (OOCTXT* pctxt, H245Q2931Address_address_nsapAddress* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 20, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Q2931Address_address */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245Q2931Address_address (OOCTXT* pctxt, H245Q2931Address_address* pvalue)
|
|
{
|
|
static Asn1SizeCnst internationalNumber_lsize1 = { 0, 1, 16, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* internationalNumber */
|
|
case 0:
|
|
invokeStartElement (pctxt, "internationalNumber", -1);
|
|
|
|
addSizeConstraint (pctxt, &internationalNumber_lsize1);
|
|
|
|
stat = decodeConstrainedStringEx (pctxt, &pvalue->u.internationalNumber, NUM_CANSET, 4, 4, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeCharStrValue (pctxt, pvalue->u.internationalNumber);
|
|
|
|
invokeEndElement (pctxt, "internationalNumber", -1);
|
|
|
|
break;
|
|
|
|
/* nsapAddress */
|
|
case 1:
|
|
invokeStartElement (pctxt, "nsapAddress", -1);
|
|
|
|
pvalue->u.nsapAddress = ALLOC_ASN1ELEM (pctxt, H245Q2931Address_address_nsapAddress);
|
|
|
|
stat = asn1PD_H245Q2931Address_address_nsapAddress (pctxt, pvalue->u.nsapAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nsapAddress", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Q2931Address_subaddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245Q2931Address_subaddress (OOCTXT* pctxt, H245Q2931Address_subaddress* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 20, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Q2931Address */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245Q2931Address (OOCTXT* pctxt, H245Q2931Address* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.subaddressPresent = optbit;
|
|
|
|
/* decode address */
|
|
|
|
invokeStartElement (pctxt, "address", -1);
|
|
|
|
stat = asn1PD_H245Q2931Address_address (pctxt, &pvalue->address);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "address", -1);
|
|
|
|
/* decode subaddress */
|
|
|
|
if (pvalue->m.subaddressPresent) {
|
|
invokeStartElement (pctxt, "subaddress", -1);
|
|
|
|
stat = asn1PD_H245Q2931Address_subaddress (pctxt, &pvalue->subaddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "subaddress", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VCCapability_aal1ViaGateway_gatewayAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245VCCapability_aal1ViaGateway_gatewayAddress (OOCTXT* pctxt, H245VCCapability_aal1ViaGateway_gatewayAddress* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245Q2931Address* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245Q2931Address);
|
|
|
|
stat = asn1PD_H245Q2931Address (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VCCapability_aal1ViaGateway */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245VCCapability_aal1ViaGateway (OOCTXT* pctxt, H245VCCapability_aal1ViaGateway* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode gatewayAddress */
|
|
|
|
invokeStartElement (pctxt, "gatewayAddress", -1);
|
|
|
|
stat = asn1PD_H245VCCapability_aal1ViaGateway_gatewayAddress (pctxt, &pvalue->gatewayAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "gatewayAddress", -1);
|
|
|
|
/* decode nullClockRecovery */
|
|
|
|
invokeStartElement (pctxt, "nullClockRecovery", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->nullClockRecovery);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->nullClockRecovery);
|
|
|
|
invokeEndElement (pctxt, "nullClockRecovery", -1);
|
|
|
|
/* decode srtsClockRecovery */
|
|
|
|
invokeStartElement (pctxt, "srtsClockRecovery", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->srtsClockRecovery);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->srtsClockRecovery);
|
|
|
|
invokeEndElement (pctxt, "srtsClockRecovery", -1);
|
|
|
|
/* decode adaptiveClockRecovery */
|
|
|
|
invokeStartElement (pctxt, "adaptiveClockRecovery", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->adaptiveClockRecovery);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->adaptiveClockRecovery);
|
|
|
|
invokeEndElement (pctxt, "adaptiveClockRecovery", -1);
|
|
|
|
/* decode nullErrorCorrection */
|
|
|
|
invokeStartElement (pctxt, "nullErrorCorrection", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->nullErrorCorrection);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->nullErrorCorrection);
|
|
|
|
invokeEndElement (pctxt, "nullErrorCorrection", -1);
|
|
|
|
/* decode longInterleaver */
|
|
|
|
invokeStartElement (pctxt, "longInterleaver", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->longInterleaver);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->longInterleaver);
|
|
|
|
invokeEndElement (pctxt, "longInterleaver", -1);
|
|
|
|
/* decode shortInterleaver */
|
|
|
|
invokeStartElement (pctxt, "shortInterleaver", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->shortInterleaver);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->shortInterleaver);
|
|
|
|
invokeEndElement (pctxt, "shortInterleaver", -1);
|
|
|
|
/* decode errorCorrectionOnly */
|
|
|
|
invokeStartElement (pctxt, "errorCorrectionOnly", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->errorCorrectionOnly);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->errorCorrectionOnly);
|
|
|
|
invokeEndElement (pctxt, "errorCorrectionOnly", -1);
|
|
|
|
/* decode structuredDataTransfer */
|
|
|
|
invokeStartElement (pctxt, "structuredDataTransfer", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->structuredDataTransfer);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->structuredDataTransfer);
|
|
|
|
invokeEndElement (pctxt, "structuredDataTransfer", -1);
|
|
|
|
/* decode partiallyFilledCells */
|
|
|
|
invokeStartElement (pctxt, "partiallyFilledCells", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->partiallyFilledCells);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->partiallyFilledCells);
|
|
|
|
invokeEndElement (pctxt, "partiallyFilledCells", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VCCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245VCCapability (OOCTXT* pctxt, H245VCCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.aal1Present = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.aal5Present = optbit;
|
|
|
|
/* decode aal1 */
|
|
|
|
if (pvalue->m.aal1Present) {
|
|
invokeStartElement (pctxt, "aal1", -1);
|
|
|
|
stat = asn1PD_H245VCCapability_aal1 (pctxt, &pvalue->aal1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "aal1", -1);
|
|
}
|
|
|
|
/* decode aal5 */
|
|
|
|
if (pvalue->m.aal5Present) {
|
|
invokeStartElement (pctxt, "aal5", -1);
|
|
|
|
stat = asn1PD_H245VCCapability_aal5 (pctxt, &pvalue->aal5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "aal5", -1);
|
|
}
|
|
|
|
/* decode transportStream */
|
|
|
|
invokeStartElement (pctxt, "transportStream", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->transportStream);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->transportStream);
|
|
|
|
invokeEndElement (pctxt, "transportStream", -1);
|
|
|
|
/* decode programStream */
|
|
|
|
invokeStartElement (pctxt, "programStream", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->programStream);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->programStream);
|
|
|
|
invokeEndElement (pctxt, "programStream", -1);
|
|
|
|
/* decode availableBitRates */
|
|
|
|
invokeStartElement (pctxt, "availableBitRates", -1);
|
|
|
|
stat = asn1PD_H245VCCapability_availableBitRates (pctxt, &pvalue->availableBitRates);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "availableBitRates", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 1 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.aal1ViaGatewayPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "aal1ViaGateway", -1);
|
|
|
|
stat = asn1PD_H245VCCapability_aal1ViaGateway (pctxt, &pvalue->aal1ViaGateway);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "aal1ViaGateway", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SetOfH245VCCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245_SetOfH245VCCapability (OOCTXT* pctxt, H245_SetOfH245VCCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
H245VCCapability* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
int lstat;
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (;;) {
|
|
/* decode length determinant */
|
|
|
|
lstat = decodeLength (pctxt, &count);
|
|
if (lstat != ASN_OK && lstat != ASN_OK_FRAG) {
|
|
return lstat;
|
|
}
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245VCCapability);
|
|
|
|
stat = asn1PD_H245VCCapability (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
if(lstat == ASN_OK) break;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H222Capability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H222Capability (OOCTXT* pctxt, H245H222Capability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode numberOfVCs */
|
|
|
|
invokeStartElement (pctxt, "numberOfVCs", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->numberOfVCs, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->numberOfVCs);
|
|
|
|
invokeEndElement (pctxt, "numberOfVCs", -1);
|
|
|
|
/* decode vcCapability */
|
|
|
|
invokeStartElement (pctxt, "vcCapability", -1);
|
|
|
|
stat = asn1PD_H245_SetOfH245VCCapability (pctxt, &pvalue->vcCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "vcCapability", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223Capability_h223MultiplexTableCapability_enhanced */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223Capability_h223MultiplexTableCapability_enhanced (OOCTXT* pctxt, H245H223Capability_h223MultiplexTableCapability_enhanced* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode maximumNestingDepth */
|
|
|
|
invokeStartElement (pctxt, "maximumNestingDepth", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->maximumNestingDepth, 1U, 15U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maximumNestingDepth);
|
|
|
|
invokeEndElement (pctxt, "maximumNestingDepth", -1);
|
|
|
|
/* decode maximumElementListSize */
|
|
|
|
invokeStartElement (pctxt, "maximumElementListSize", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->maximumElementListSize, 2U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maximumElementListSize);
|
|
|
|
invokeEndElement (pctxt, "maximumElementListSize", -1);
|
|
|
|
/* decode maximumSubElementListSize */
|
|
|
|
invokeStartElement (pctxt, "maximumSubElementListSize", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->maximumSubElementListSize, 2U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maximumSubElementListSize);
|
|
|
|
invokeEndElement (pctxt, "maximumSubElementListSize", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223Capability_h223MultiplexTableCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223Capability_h223MultiplexTableCapability (OOCTXT* pctxt, H245H223Capability_h223MultiplexTableCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* basic */
|
|
case 0:
|
|
invokeStartElement (pctxt, "basic", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "basic", -1);
|
|
|
|
break;
|
|
|
|
/* enhanced */
|
|
case 1:
|
|
invokeStartElement (pctxt, "enhanced", -1);
|
|
|
|
pvalue->u.enhanced = ALLOC_ASN1ELEM (pctxt, H245H223Capability_h223MultiplexTableCapability_enhanced);
|
|
|
|
stat = asn1PD_H245H223Capability_h223MultiplexTableCapability_enhanced (pctxt, pvalue->u.enhanced);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "enhanced", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223Capability_mobileOperationTransmitCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223Capability_mobileOperationTransmitCapability (OOCTXT* pctxt, H245H223Capability_mobileOperationTransmitCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode modeChangeCapability */
|
|
|
|
invokeStartElement (pctxt, "modeChangeCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->modeChangeCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->modeChangeCapability);
|
|
|
|
invokeEndElement (pctxt, "modeChangeCapability", -1);
|
|
|
|
/* decode h223AnnexA */
|
|
|
|
invokeStartElement (pctxt, "h223AnnexA", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->h223AnnexA);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->h223AnnexA);
|
|
|
|
invokeEndElement (pctxt, "h223AnnexA", -1);
|
|
|
|
/* decode h223AnnexADoubleFlag */
|
|
|
|
invokeStartElement (pctxt, "h223AnnexADoubleFlag", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->h223AnnexADoubleFlag);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->h223AnnexADoubleFlag);
|
|
|
|
invokeEndElement (pctxt, "h223AnnexADoubleFlag", -1);
|
|
|
|
/* decode h223AnnexB */
|
|
|
|
invokeStartElement (pctxt, "h223AnnexB", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->h223AnnexB);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->h223AnnexB);
|
|
|
|
invokeEndElement (pctxt, "h223AnnexB", -1);
|
|
|
|
/* decode h223AnnexBwithHeader */
|
|
|
|
invokeStartElement (pctxt, "h223AnnexBwithHeader", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->h223AnnexBwithHeader);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->h223AnnexBwithHeader);
|
|
|
|
invokeEndElement (pctxt, "h223AnnexBwithHeader", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223AnnexCCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223AnnexCCapability (OOCTXT* pctxt, H245H223AnnexCCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
/* decode videoWithAL1M */
|
|
|
|
invokeStartElement (pctxt, "videoWithAL1M", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->videoWithAL1M);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->videoWithAL1M);
|
|
|
|
invokeEndElement (pctxt, "videoWithAL1M", -1);
|
|
|
|
/* decode videoWithAL2M */
|
|
|
|
invokeStartElement (pctxt, "videoWithAL2M", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->videoWithAL2M);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->videoWithAL2M);
|
|
|
|
invokeEndElement (pctxt, "videoWithAL2M", -1);
|
|
|
|
/* decode videoWithAL3M */
|
|
|
|
invokeStartElement (pctxt, "videoWithAL3M", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->videoWithAL3M);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->videoWithAL3M);
|
|
|
|
invokeEndElement (pctxt, "videoWithAL3M", -1);
|
|
|
|
/* decode audioWithAL1M */
|
|
|
|
invokeStartElement (pctxt, "audioWithAL1M", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioWithAL1M);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioWithAL1M);
|
|
|
|
invokeEndElement (pctxt, "audioWithAL1M", -1);
|
|
|
|
/* decode audioWithAL2M */
|
|
|
|
invokeStartElement (pctxt, "audioWithAL2M", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioWithAL2M);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioWithAL2M);
|
|
|
|
invokeEndElement (pctxt, "audioWithAL2M", -1);
|
|
|
|
/* decode audioWithAL3M */
|
|
|
|
invokeStartElement (pctxt, "audioWithAL3M", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioWithAL3M);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioWithAL3M);
|
|
|
|
invokeEndElement (pctxt, "audioWithAL3M", -1);
|
|
|
|
/* decode dataWithAL1M */
|
|
|
|
invokeStartElement (pctxt, "dataWithAL1M", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->dataWithAL1M);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->dataWithAL1M);
|
|
|
|
invokeEndElement (pctxt, "dataWithAL1M", -1);
|
|
|
|
/* decode dataWithAL2M */
|
|
|
|
invokeStartElement (pctxt, "dataWithAL2M", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->dataWithAL2M);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->dataWithAL2M);
|
|
|
|
invokeEndElement (pctxt, "dataWithAL2M", -1);
|
|
|
|
/* decode dataWithAL3M */
|
|
|
|
invokeStartElement (pctxt, "dataWithAL3M", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->dataWithAL3M);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->dataWithAL3M);
|
|
|
|
invokeEndElement (pctxt, "dataWithAL3M", -1);
|
|
|
|
/* decode alpduInterleaving */
|
|
|
|
invokeStartElement (pctxt, "alpduInterleaving", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->alpduInterleaving);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->alpduInterleaving);
|
|
|
|
invokeEndElement (pctxt, "alpduInterleaving", -1);
|
|
|
|
/* decode maximumAL1MPDUSize */
|
|
|
|
invokeStartElement (pctxt, "maximumAL1MPDUSize", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maximumAL1MPDUSize, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maximumAL1MPDUSize);
|
|
|
|
invokeEndElement (pctxt, "maximumAL1MPDUSize", -1);
|
|
|
|
/* decode maximumAL2MSDUSize */
|
|
|
|
invokeStartElement (pctxt, "maximumAL2MSDUSize", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maximumAL2MSDUSize, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maximumAL2MSDUSize);
|
|
|
|
invokeEndElement (pctxt, "maximumAL2MSDUSize", -1);
|
|
|
|
/* decode maximumAL3MSDUSize */
|
|
|
|
invokeStartElement (pctxt, "maximumAL3MSDUSize", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maximumAL3MSDUSize, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maximumAL3MSDUSize);
|
|
|
|
invokeEndElement (pctxt, "maximumAL3MSDUSize", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 1 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.rsCodeCapabilityPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "rsCodeCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->rsCodeCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->rsCodeCapability);
|
|
|
|
invokeEndElement (pctxt, "rsCodeCapability", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223Capability_mobileMultilinkFrameCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223Capability_mobileMultilinkFrameCapability (OOCTXT* pctxt, H245H223Capability_mobileMultilinkFrameCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode maximumSampleSize */
|
|
|
|
invokeStartElement (pctxt, "maximumSampleSize", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->maximumSampleSize, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maximumSampleSize);
|
|
|
|
invokeEndElement (pctxt, "maximumSampleSize", -1);
|
|
|
|
/* decode maximumPayloadLength */
|
|
|
|
invokeStartElement (pctxt, "maximumPayloadLength", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maximumPayloadLength, 1U, 65025U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maximumPayloadLength);
|
|
|
|
invokeEndElement (pctxt, "maximumPayloadLength", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223Capability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223Capability (OOCTXT* pctxt, H245H223Capability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
/* decode transportWithI_frames */
|
|
|
|
invokeStartElement (pctxt, "transportWithI_frames", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->transportWithI_frames);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->transportWithI_frames);
|
|
|
|
invokeEndElement (pctxt, "transportWithI_frames", -1);
|
|
|
|
/* decode videoWithAL1 */
|
|
|
|
invokeStartElement (pctxt, "videoWithAL1", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->videoWithAL1);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->videoWithAL1);
|
|
|
|
invokeEndElement (pctxt, "videoWithAL1", -1);
|
|
|
|
/* decode videoWithAL2 */
|
|
|
|
invokeStartElement (pctxt, "videoWithAL2", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->videoWithAL2);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->videoWithAL2);
|
|
|
|
invokeEndElement (pctxt, "videoWithAL2", -1);
|
|
|
|
/* decode videoWithAL3 */
|
|
|
|
invokeStartElement (pctxt, "videoWithAL3", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->videoWithAL3);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->videoWithAL3);
|
|
|
|
invokeEndElement (pctxt, "videoWithAL3", -1);
|
|
|
|
/* decode audioWithAL1 */
|
|
|
|
invokeStartElement (pctxt, "audioWithAL1", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioWithAL1);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioWithAL1);
|
|
|
|
invokeEndElement (pctxt, "audioWithAL1", -1);
|
|
|
|
/* decode audioWithAL2 */
|
|
|
|
invokeStartElement (pctxt, "audioWithAL2", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioWithAL2);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioWithAL2);
|
|
|
|
invokeEndElement (pctxt, "audioWithAL2", -1);
|
|
|
|
/* decode audioWithAL3 */
|
|
|
|
invokeStartElement (pctxt, "audioWithAL3", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioWithAL3);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioWithAL3);
|
|
|
|
invokeEndElement (pctxt, "audioWithAL3", -1);
|
|
|
|
/* decode dataWithAL1 */
|
|
|
|
invokeStartElement (pctxt, "dataWithAL1", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->dataWithAL1);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->dataWithAL1);
|
|
|
|
invokeEndElement (pctxt, "dataWithAL1", -1);
|
|
|
|
/* decode dataWithAL2 */
|
|
|
|
invokeStartElement (pctxt, "dataWithAL2", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->dataWithAL2);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->dataWithAL2);
|
|
|
|
invokeEndElement (pctxt, "dataWithAL2", -1);
|
|
|
|
/* decode dataWithAL3 */
|
|
|
|
invokeStartElement (pctxt, "dataWithAL3", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->dataWithAL3);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->dataWithAL3);
|
|
|
|
invokeEndElement (pctxt, "dataWithAL3", -1);
|
|
|
|
/* decode maximumAl2SDUSize */
|
|
|
|
invokeStartElement (pctxt, "maximumAl2SDUSize", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maximumAl2SDUSize, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maximumAl2SDUSize);
|
|
|
|
invokeEndElement (pctxt, "maximumAl2SDUSize", -1);
|
|
|
|
/* decode maximumAl3SDUSize */
|
|
|
|
invokeStartElement (pctxt, "maximumAl3SDUSize", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maximumAl3SDUSize, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maximumAl3SDUSize);
|
|
|
|
invokeEndElement (pctxt, "maximumAl3SDUSize", -1);
|
|
|
|
/* decode maximumDelayJitter */
|
|
|
|
invokeStartElement (pctxt, "maximumDelayJitter", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maximumDelayJitter, 0U, 1023U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maximumDelayJitter);
|
|
|
|
invokeEndElement (pctxt, "maximumDelayJitter", -1);
|
|
|
|
/* decode h223MultiplexTableCapability */
|
|
|
|
invokeStartElement (pctxt, "h223MultiplexTableCapability", -1);
|
|
|
|
stat = asn1PD_H245H223Capability_h223MultiplexTableCapability (pctxt, &pvalue->h223MultiplexTableCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h223MultiplexTableCapability", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 6 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.maxMUXPDUSizeCapabilityPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "maxMUXPDUSizeCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->maxMUXPDUSizeCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->maxMUXPDUSizeCapability);
|
|
|
|
invokeEndElement (pctxt, "maxMUXPDUSizeCapability", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.nsrpSupportPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "nsrpSupport", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->nsrpSupport);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->nsrpSupport);
|
|
|
|
invokeEndElement (pctxt, "nsrpSupport", -1);
|
|
break;
|
|
|
|
case 2:
|
|
pvalue->m.mobileOperationTransmitCapabilityPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "mobileOperationTransmitCapability", -1);
|
|
|
|
stat = asn1PD_H245H223Capability_mobileOperationTransmitCapability (pctxt, &pvalue->mobileOperationTransmitCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mobileOperationTransmitCapability", -1);
|
|
break;
|
|
|
|
case 3:
|
|
pvalue->m.h223AnnexCCapabilityPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "h223AnnexCCapability", -1);
|
|
|
|
stat = asn1PD_H245H223AnnexCCapability (pctxt, &pvalue->h223AnnexCCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h223AnnexCCapability", -1);
|
|
break;
|
|
|
|
case 4:
|
|
pvalue->m.bitRatePresent = 1;
|
|
|
|
invokeStartElement (pctxt, "bitRate", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->bitRate, 1U, 19200U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->bitRate);
|
|
|
|
invokeEndElement (pctxt, "bitRate", -1);
|
|
break;
|
|
|
|
case 5:
|
|
pvalue->m.mobileMultilinkFrameCapabilityPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "mobileMultilinkFrameCapability", -1);
|
|
|
|
stat = asn1PD_H245H223Capability_mobileMultilinkFrameCapability (pctxt, &pvalue->mobileMultilinkFrameCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mobileMultilinkFrameCapability", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* V75Capability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245V75Capability (OOCTXT* pctxt, H245V75Capability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode audioHeader */
|
|
|
|
invokeStartElement (pctxt, "audioHeader", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioHeader);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioHeader);
|
|
|
|
invokeEndElement (pctxt, "audioHeader", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* V76Capability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245V76Capability (OOCTXT* pctxt, H245V76Capability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode suspendResumeCapabilitywAddress */
|
|
|
|
invokeStartElement (pctxt, "suspendResumeCapabilitywAddress", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->suspendResumeCapabilitywAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->suspendResumeCapabilitywAddress);
|
|
|
|
invokeEndElement (pctxt, "suspendResumeCapabilitywAddress", -1);
|
|
|
|
/* decode suspendResumeCapabilitywoAddress */
|
|
|
|
invokeStartElement (pctxt, "suspendResumeCapabilitywoAddress", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->suspendResumeCapabilitywoAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->suspendResumeCapabilitywoAddress);
|
|
|
|
invokeEndElement (pctxt, "suspendResumeCapabilitywoAddress", -1);
|
|
|
|
/* decode rejCapability */
|
|
|
|
invokeStartElement (pctxt, "rejCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->rejCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->rejCapability);
|
|
|
|
invokeEndElement (pctxt, "rejCapability", -1);
|
|
|
|
/* decode sREJCapability */
|
|
|
|
invokeStartElement (pctxt, "sREJCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->sREJCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->sREJCapability);
|
|
|
|
invokeEndElement (pctxt, "sREJCapability", -1);
|
|
|
|
/* decode mREJCapability */
|
|
|
|
invokeStartElement (pctxt, "mREJCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->mREJCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->mREJCapability);
|
|
|
|
invokeEndElement (pctxt, "mREJCapability", -1);
|
|
|
|
/* decode crc8bitCapability */
|
|
|
|
invokeStartElement (pctxt, "crc8bitCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->crc8bitCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->crc8bitCapability);
|
|
|
|
invokeEndElement (pctxt, "crc8bitCapability", -1);
|
|
|
|
/* decode crc16bitCapability */
|
|
|
|
invokeStartElement (pctxt, "crc16bitCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->crc16bitCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->crc16bitCapability);
|
|
|
|
invokeEndElement (pctxt, "crc16bitCapability", -1);
|
|
|
|
/* decode crc32bitCapability */
|
|
|
|
invokeStartElement (pctxt, "crc32bitCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->crc32bitCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->crc32bitCapability);
|
|
|
|
invokeEndElement (pctxt, "crc32bitCapability", -1);
|
|
|
|
/* decode uihCapability */
|
|
|
|
invokeStartElement (pctxt, "uihCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->uihCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->uihCapability);
|
|
|
|
invokeEndElement (pctxt, "uihCapability", -1);
|
|
|
|
/* decode numOfDLCS */
|
|
|
|
invokeStartElement (pctxt, "numOfDLCS", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->numOfDLCS, 2U, 8191U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->numOfDLCS);
|
|
|
|
invokeEndElement (pctxt, "numOfDLCS", -1);
|
|
|
|
/* decode twoOctetAddressFieldCapability */
|
|
|
|
invokeStartElement (pctxt, "twoOctetAddressFieldCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->twoOctetAddressFieldCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->twoOctetAddressFieldCapability);
|
|
|
|
invokeEndElement (pctxt, "twoOctetAddressFieldCapability", -1);
|
|
|
|
/* decode loopBackTestCapability */
|
|
|
|
invokeStartElement (pctxt, "loopBackTestCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->loopBackTestCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->loopBackTestCapability);
|
|
|
|
invokeEndElement (pctxt, "loopBackTestCapability", -1);
|
|
|
|
/* decode n401Capability */
|
|
|
|
invokeStartElement (pctxt, "n401Capability", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->n401Capability, 1U, 4095U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->n401Capability);
|
|
|
|
invokeEndElement (pctxt, "n401Capability", -1);
|
|
|
|
/* decode maxWindowSizeCapability */
|
|
|
|
invokeStartElement (pctxt, "maxWindowSizeCapability", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->maxWindowSizeCapability, 1U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maxWindowSizeCapability);
|
|
|
|
invokeEndElement (pctxt, "maxWindowSizeCapability", -1);
|
|
|
|
/* decode v75Capability */
|
|
|
|
invokeStartElement (pctxt, "v75Capability", -1);
|
|
|
|
stat = asn1PD_H245V75Capability (pctxt, &pvalue->v75Capability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "v75Capability", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* T84Profile_t84Restricted */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245T84Profile_t84Restricted (OOCTXT* pctxt, H245T84Profile_t84Restricted* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode qcif */
|
|
|
|
invokeStartElement (pctxt, "qcif", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->qcif);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->qcif);
|
|
|
|
invokeEndElement (pctxt, "qcif", -1);
|
|
|
|
/* decode cif */
|
|
|
|
invokeStartElement (pctxt, "cif", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->cif);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->cif);
|
|
|
|
invokeEndElement (pctxt, "cif", -1);
|
|
|
|
/* decode ccir601Seq */
|
|
|
|
invokeStartElement (pctxt, "ccir601Seq", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->ccir601Seq);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->ccir601Seq);
|
|
|
|
invokeEndElement (pctxt, "ccir601Seq", -1);
|
|
|
|
/* decode ccir601Prog */
|
|
|
|
invokeStartElement (pctxt, "ccir601Prog", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->ccir601Prog);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->ccir601Prog);
|
|
|
|
invokeEndElement (pctxt, "ccir601Prog", -1);
|
|
|
|
/* decode hdtvSeq */
|
|
|
|
invokeStartElement (pctxt, "hdtvSeq", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->hdtvSeq);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->hdtvSeq);
|
|
|
|
invokeEndElement (pctxt, "hdtvSeq", -1);
|
|
|
|
/* decode hdtvProg */
|
|
|
|
invokeStartElement (pctxt, "hdtvProg", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->hdtvProg);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->hdtvProg);
|
|
|
|
invokeEndElement (pctxt, "hdtvProg", -1);
|
|
|
|
/* decode g3FacsMH200x100 */
|
|
|
|
invokeStartElement (pctxt, "g3FacsMH200x100", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->g3FacsMH200x100);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->g3FacsMH200x100);
|
|
|
|
invokeEndElement (pctxt, "g3FacsMH200x100", -1);
|
|
|
|
/* decode g3FacsMH200x200 */
|
|
|
|
invokeStartElement (pctxt, "g3FacsMH200x200", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->g3FacsMH200x200);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->g3FacsMH200x200);
|
|
|
|
invokeEndElement (pctxt, "g3FacsMH200x200", -1);
|
|
|
|
/* decode g4FacsMMR200x100 */
|
|
|
|
invokeStartElement (pctxt, "g4FacsMMR200x100", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->g4FacsMMR200x100);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->g4FacsMMR200x100);
|
|
|
|
invokeEndElement (pctxt, "g4FacsMMR200x100", -1);
|
|
|
|
/* decode g4FacsMMR200x200 */
|
|
|
|
invokeStartElement (pctxt, "g4FacsMMR200x200", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->g4FacsMMR200x200);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->g4FacsMMR200x200);
|
|
|
|
invokeEndElement (pctxt, "g4FacsMMR200x200", -1);
|
|
|
|
/* decode jbig200x200Seq */
|
|
|
|
invokeStartElement (pctxt, "jbig200x200Seq", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->jbig200x200Seq);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->jbig200x200Seq);
|
|
|
|
invokeEndElement (pctxt, "jbig200x200Seq", -1);
|
|
|
|
/* decode jbig200x200Prog */
|
|
|
|
invokeStartElement (pctxt, "jbig200x200Prog", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->jbig200x200Prog);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->jbig200x200Prog);
|
|
|
|
invokeEndElement (pctxt, "jbig200x200Prog", -1);
|
|
|
|
/* decode jbig300x300Seq */
|
|
|
|
invokeStartElement (pctxt, "jbig300x300Seq", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->jbig300x300Seq);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->jbig300x300Seq);
|
|
|
|
invokeEndElement (pctxt, "jbig300x300Seq", -1);
|
|
|
|
/* decode jbig300x300Prog */
|
|
|
|
invokeStartElement (pctxt, "jbig300x300Prog", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->jbig300x300Prog);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->jbig300x300Prog);
|
|
|
|
invokeEndElement (pctxt, "jbig300x300Prog", -1);
|
|
|
|
/* decode digPhotoLow */
|
|
|
|
invokeStartElement (pctxt, "digPhotoLow", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->digPhotoLow);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->digPhotoLow);
|
|
|
|
invokeEndElement (pctxt, "digPhotoLow", -1);
|
|
|
|
/* decode digPhotoMedSeq */
|
|
|
|
invokeStartElement (pctxt, "digPhotoMedSeq", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->digPhotoMedSeq);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->digPhotoMedSeq);
|
|
|
|
invokeEndElement (pctxt, "digPhotoMedSeq", -1);
|
|
|
|
/* decode digPhotoMedProg */
|
|
|
|
invokeStartElement (pctxt, "digPhotoMedProg", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->digPhotoMedProg);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->digPhotoMedProg);
|
|
|
|
invokeEndElement (pctxt, "digPhotoMedProg", -1);
|
|
|
|
/* decode digPhotoHighSeq */
|
|
|
|
invokeStartElement (pctxt, "digPhotoHighSeq", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->digPhotoHighSeq);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->digPhotoHighSeq);
|
|
|
|
invokeEndElement (pctxt, "digPhotoHighSeq", -1);
|
|
|
|
/* decode digPhotoHighProg */
|
|
|
|
invokeStartElement (pctxt, "digPhotoHighProg", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->digPhotoHighProg);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->digPhotoHighProg);
|
|
|
|
invokeEndElement (pctxt, "digPhotoHighProg", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* T84Profile */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245T84Profile (OOCTXT* pctxt, H245T84Profile* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* t84Unrestricted */
|
|
case 0:
|
|
invokeStartElement (pctxt, "t84Unrestricted", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "t84Unrestricted", -1);
|
|
|
|
break;
|
|
|
|
/* t84Restricted */
|
|
case 1:
|
|
invokeStartElement (pctxt, "t84Restricted", -1);
|
|
|
|
pvalue->u.t84Restricted = ALLOC_ASN1ELEM (pctxt, H245T84Profile_t84Restricted);
|
|
|
|
stat = asn1PD_H245T84Profile_t84Restricted (pctxt, pvalue->u.t84Restricted);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t84Restricted", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DataApplicationCapability_application_t84 */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DataApplicationCapability_application_t84 (OOCTXT* pctxt, H245DataApplicationCapability_application_t84* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* decode t84Protocol */
|
|
|
|
invokeStartElement (pctxt, "t84Protocol", -1);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, &pvalue->t84Protocol);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t84Protocol", -1);
|
|
|
|
/* decode t84Profile */
|
|
|
|
invokeStartElement (pctxt, "t84Profile", -1);
|
|
|
|
stat = asn1PD_H245T84Profile (pctxt, &pvalue->t84Profile);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t84Profile", -1);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DataApplicationCapability_application_nlpid */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DataApplicationCapability_application_nlpid (OOCTXT* pctxt, H245DataApplicationCapability_application_nlpid* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* decode nlpidProtocol */
|
|
|
|
invokeStartElement (pctxt, "nlpidProtocol", -1);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, &pvalue->nlpidProtocol);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nlpidProtocol", -1);
|
|
|
|
/* decode nlpidData */
|
|
|
|
invokeStartElement (pctxt, "nlpidData", -1);
|
|
|
|
stat = decodeDynOctetString (pctxt, (ASN1DynOctStr*)&pvalue->nlpidData);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->nlpidData.numocts, pvalue->nlpidData.data);
|
|
|
|
invokeEndElement (pctxt, "nlpidData", -1);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DataApplicationCapability_application_t38fax */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DataApplicationCapability_application_t38fax (OOCTXT* pctxt, H245DataApplicationCapability_application_t38fax* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* decode t38FaxProtocol */
|
|
|
|
invokeStartElement (pctxt, "t38FaxProtocol", -1);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, &pvalue->t38FaxProtocol);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t38FaxProtocol", -1);
|
|
|
|
/* decode t38FaxProfile */
|
|
|
|
invokeStartElement (pctxt, "t38FaxProfile", -1);
|
|
|
|
stat = asn1PD_H245T38FaxProfile (pctxt, &pvalue->t38FaxProfile);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t38FaxProfile", -1);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CapabilityIdentifier_uuid */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CapabilityIdentifier_uuid (OOCTXT* pctxt, H245CapabilityIdentifier_uuid* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 16, 16, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CapabilityIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CapabilityIdentifier (OOCTXT* pctxt, H245CapabilityIdentifier* pvalue)
|
|
{
|
|
static Asn1SizeCnst domainBased_lsize1 = { 0, 1, 64, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* standard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "standard", -1);
|
|
|
|
pvalue->u.standard = ALLOC_ASN1ELEM (pctxt, ASN1OBJID);
|
|
|
|
stat = decodeObjectIdentifier (pctxt, pvalue->u.standard);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOidValue (pctxt, pvalue->u.standard->numids, pvalue->u.standard->subid);
|
|
|
|
invokeEndElement (pctxt, "standard", -1);
|
|
|
|
break;
|
|
|
|
/* h221NonStandard */
|
|
case 1:
|
|
invokeStartElement (pctxt, "h221NonStandard", -1);
|
|
|
|
pvalue->u.h221NonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.h221NonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h221NonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* uuid */
|
|
case 2:
|
|
invokeStartElement (pctxt, "uuid", -1);
|
|
|
|
pvalue->u.uuid = ALLOC_ASN1ELEM (pctxt, H245CapabilityIdentifier_uuid);
|
|
|
|
stat = asn1PD_H245CapabilityIdentifier_uuid (pctxt, pvalue->u.uuid);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "uuid", -1);
|
|
|
|
break;
|
|
|
|
/* domainBased */
|
|
case 3:
|
|
invokeStartElement (pctxt, "domainBased", -1);
|
|
|
|
addSizeConstraint (pctxt, &domainBased_lsize1);
|
|
|
|
stat = decodeConstrainedStringEx (pctxt, &pvalue->u.domainBased, 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeCharStrValue (pctxt, pvalue->u.domainBased);
|
|
|
|
invokeEndElement (pctxt, "domainBased", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 5;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ParameterIdentifier_uuid */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ParameterIdentifier_uuid (OOCTXT* pctxt, H245ParameterIdentifier_uuid* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 16, 16, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ParameterIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ParameterIdentifier (OOCTXT* pctxt, H245ParameterIdentifier* pvalue)
|
|
{
|
|
static Asn1SizeCnst domainBased_lsize1 = { 0, 1, 64, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* standard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "standard", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->u.standard, 0U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.standard);
|
|
|
|
invokeEndElement (pctxt, "standard", -1);
|
|
|
|
break;
|
|
|
|
/* h221NonStandard */
|
|
case 1:
|
|
invokeStartElement (pctxt, "h221NonStandard", -1);
|
|
|
|
pvalue->u.h221NonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.h221NonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h221NonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* uuid */
|
|
case 2:
|
|
invokeStartElement (pctxt, "uuid", -1);
|
|
|
|
pvalue->u.uuid = ALLOC_ASN1ELEM (pctxt, H245ParameterIdentifier_uuid);
|
|
|
|
stat = asn1PD_H245ParameterIdentifier_uuid (pctxt, pvalue->u.uuid);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "uuid", -1);
|
|
|
|
break;
|
|
|
|
/* domainBased */
|
|
case 3:
|
|
invokeStartElement (pctxt, "domainBased", -1);
|
|
|
|
addSizeConstraint (pctxt, &domainBased_lsize1);
|
|
|
|
stat = decodeConstrainedStringEx (pctxt, &pvalue->u.domainBased, 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeCharStrValue (pctxt, pvalue->u.domainBased);
|
|
|
|
invokeEndElement (pctxt, "domainBased", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 5;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ParameterValue */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ParameterValue (OOCTXT* pctxt, H245ParameterValue* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* logical */
|
|
case 0:
|
|
invokeStartElement (pctxt, "logical", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "logical", -1);
|
|
|
|
break;
|
|
|
|
/* booleanArray */
|
|
case 1:
|
|
invokeStartElement (pctxt, "booleanArray", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->u.booleanArray, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.booleanArray);
|
|
|
|
invokeEndElement (pctxt, "booleanArray", -1);
|
|
|
|
break;
|
|
|
|
/* unsignedMin */
|
|
case 2:
|
|
invokeStartElement (pctxt, "unsignedMin", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.unsignedMin, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.unsignedMin);
|
|
|
|
invokeEndElement (pctxt, "unsignedMin", -1);
|
|
|
|
break;
|
|
|
|
/* unsignedMax */
|
|
case 3:
|
|
invokeStartElement (pctxt, "unsignedMax", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.unsignedMax, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.unsignedMax);
|
|
|
|
invokeEndElement (pctxt, "unsignedMax", -1);
|
|
|
|
break;
|
|
|
|
/* unsigned32Min */
|
|
case 4:
|
|
invokeStartElement (pctxt, "unsigned32Min", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->u.unsigned32Min, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.unsigned32Min);
|
|
|
|
invokeEndElement (pctxt, "unsigned32Min", -1);
|
|
|
|
break;
|
|
|
|
/* unsigned32Max */
|
|
case 5:
|
|
invokeStartElement (pctxt, "unsigned32Max", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->u.unsigned32Max, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.unsigned32Max);
|
|
|
|
invokeEndElement (pctxt, "unsigned32Max", -1);
|
|
|
|
break;
|
|
|
|
/* octetString */
|
|
case 6:
|
|
invokeStartElement (pctxt, "octetString", -1);
|
|
|
|
pvalue->u.octetString = ALLOC_ASN1ELEM (pctxt, ASN1DynOctStr);
|
|
|
|
stat = decodeDynOctetString (pctxt, (ASN1DynOctStr*)pvalue->u.octetString);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->u.octetString->numocts, pvalue->u.octetString->data);
|
|
|
|
invokeEndElement (pctxt, "octetString", -1);
|
|
|
|
break;
|
|
|
|
/* genericParameter */
|
|
case 7:
|
|
invokeStartElement (pctxt, "genericParameter", -1);
|
|
|
|
pvalue->u.genericParameter = ALLOC_ASN1ELEM (pctxt, H245_SeqOfH245GenericParameter);
|
|
|
|
stat = asn1PD_H245_SeqOfH245GenericParameter (pctxt, (H245_SeqOfH245GenericParameter*)pvalue->u.genericParameter);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "genericParameter", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 9;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH245ParameterIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245_SeqOfH245ParameterIdentifier (OOCTXT* pctxt, H245_SeqOfH245ParameterIdentifier* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
H245ParameterIdentifier* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
int lstat;
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (;;) {
|
|
/* decode length determinant */
|
|
|
|
lstat = decodeLength (pctxt, &count);
|
|
if (lstat != ASN_OK && lstat != ASN_OK_FRAG) {
|
|
return lstat;
|
|
}
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245ParameterIdentifier);
|
|
|
|
stat = asn1PD_H245ParameterIdentifier (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
if(lstat == ASN_OK) break;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GenericParameter */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245GenericParameter (OOCTXT* pctxt, H245GenericParameter* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.supersedesPresent = optbit;
|
|
|
|
/* decode parameterIdentifier */
|
|
|
|
invokeStartElement (pctxt, "parameterIdentifier", -1);
|
|
|
|
stat = asn1PD_H245ParameterIdentifier (pctxt, &pvalue->parameterIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "parameterIdentifier", -1);
|
|
|
|
/* decode parameterValue */
|
|
|
|
invokeStartElement (pctxt, "parameterValue", -1);
|
|
|
|
stat = asn1PD_H245ParameterValue (pctxt, &pvalue->parameterValue);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "parameterValue", -1);
|
|
|
|
/* decode supersedes */
|
|
|
|
if (pvalue->m.supersedesPresent) {
|
|
invokeStartElement (pctxt, "supersedes", -1);
|
|
|
|
stat = asn1PD_H245_SeqOfH245ParameterIdentifier (pctxt, &pvalue->supersedes);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "supersedes", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH245GenericParameter */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245_SeqOfH245GenericParameter (OOCTXT* pctxt, H245_SeqOfH245GenericParameter* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
H245GenericParameter* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
int lstat;
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (;;) {
|
|
/* decode length determinant */
|
|
|
|
lstat = decodeLength (pctxt, &count);
|
|
if (lstat != ASN_OK && lstat != ASN_OK_FRAG) {
|
|
return lstat;
|
|
}
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245GenericParameter);
|
|
|
|
stat = asn1PD_H245GenericParameter (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
if(lstat == ASN_OK) break;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GenericCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245GenericCapability (OOCTXT* pctxt, H245GenericCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.maxBitRatePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.collapsingPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.nonCollapsingPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.nonCollapsingRawPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.transportPresent = optbit;
|
|
|
|
/* decode capabilityIdentifier */
|
|
|
|
invokeStartElement (pctxt, "capabilityIdentifier", -1);
|
|
|
|
stat = asn1PD_H245CapabilityIdentifier (pctxt, &pvalue->capabilityIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "capabilityIdentifier", -1);
|
|
|
|
/* decode maxBitRate */
|
|
|
|
if (pvalue->m.maxBitRatePresent) {
|
|
invokeStartElement (pctxt, "maxBitRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->maxBitRate, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maxBitRate);
|
|
|
|
invokeEndElement (pctxt, "maxBitRate", -1);
|
|
}
|
|
|
|
/* decode collapsing */
|
|
|
|
if (pvalue->m.collapsingPresent) {
|
|
invokeStartElement (pctxt, "collapsing", -1);
|
|
|
|
stat = asn1PD_H245_SeqOfH245GenericParameter (pctxt, &pvalue->collapsing);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "collapsing", -1);
|
|
}
|
|
|
|
/* decode nonCollapsing */
|
|
|
|
if (pvalue->m.nonCollapsingPresent) {
|
|
invokeStartElement (pctxt, "nonCollapsing", -1);
|
|
|
|
stat = asn1PD_H245_SeqOfH245GenericParameter (pctxt, &pvalue->nonCollapsing);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonCollapsing", -1);
|
|
}
|
|
|
|
/* decode nonCollapsingRaw */
|
|
|
|
if (pvalue->m.nonCollapsingRawPresent) {
|
|
invokeStartElement (pctxt, "nonCollapsingRaw", -1);
|
|
|
|
stat = decodeDynOctetString (pctxt, (ASN1DynOctStr*)&pvalue->nonCollapsingRaw);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->nonCollapsingRaw.numocts, pvalue->nonCollapsingRaw.data);
|
|
|
|
invokeEndElement (pctxt, "nonCollapsingRaw", -1);
|
|
}
|
|
|
|
/* decode transport */
|
|
|
|
if (pvalue->m.transportPresent) {
|
|
invokeStartElement (pctxt, "transport", -1);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, &pvalue->transport);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "transport", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DataApplicationCapability_application */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DataApplicationCapability_application (OOCTXT* pctxt, H245DataApplicationCapability_application* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 9);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* t120 */
|
|
case 1:
|
|
invokeStartElement (pctxt, "t120", -1);
|
|
|
|
pvalue->u.t120 = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.t120);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t120", -1);
|
|
|
|
break;
|
|
|
|
/* dsm_cc */
|
|
case 2:
|
|
invokeStartElement (pctxt, "dsm_cc", -1);
|
|
|
|
pvalue->u.dsm_cc = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.dsm_cc);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "dsm_cc", -1);
|
|
|
|
break;
|
|
|
|
/* userData */
|
|
case 3:
|
|
invokeStartElement (pctxt, "userData", -1);
|
|
|
|
pvalue->u.userData = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.userData);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "userData", -1);
|
|
|
|
break;
|
|
|
|
/* t84 */
|
|
case 4:
|
|
invokeStartElement (pctxt, "t84", -1);
|
|
|
|
pvalue->u.t84 = ALLOC_ASN1ELEM (pctxt, H245DataApplicationCapability_application_t84);
|
|
|
|
stat = asn1PD_H245DataApplicationCapability_application_t84 (pctxt, pvalue->u.t84);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t84", -1);
|
|
|
|
break;
|
|
|
|
/* t434 */
|
|
case 5:
|
|
invokeStartElement (pctxt, "t434", -1);
|
|
|
|
pvalue->u.t434 = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.t434);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t434", -1);
|
|
|
|
break;
|
|
|
|
/* h224 */
|
|
case 6:
|
|
invokeStartElement (pctxt, "h224", -1);
|
|
|
|
pvalue->u.h224 = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.h224);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h224", -1);
|
|
|
|
break;
|
|
|
|
/* nlpid */
|
|
case 7:
|
|
invokeStartElement (pctxt, "nlpid", -1);
|
|
|
|
pvalue->u.nlpid = ALLOC_ASN1ELEM (pctxt, H245DataApplicationCapability_application_nlpid);
|
|
|
|
stat = asn1PD_H245DataApplicationCapability_application_nlpid (pctxt, pvalue->u.nlpid);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nlpid", -1);
|
|
|
|
break;
|
|
|
|
/* dsvdControl */
|
|
case 8:
|
|
invokeStartElement (pctxt, "dsvdControl", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "dsvdControl", -1);
|
|
|
|
break;
|
|
|
|
/* h222DataPartitioning */
|
|
case 9:
|
|
invokeStartElement (pctxt, "h222DataPartitioning", -1);
|
|
|
|
pvalue->u.h222DataPartitioning = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.h222DataPartitioning);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h222DataPartitioning", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 11;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* t30fax */
|
|
case 11:
|
|
invokeStartElement (pctxt, "t30fax", -1);
|
|
|
|
pvalue->u.t30fax = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.t30fax);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t30fax", -1);
|
|
|
|
break;
|
|
|
|
/* t140 */
|
|
case 12:
|
|
invokeStartElement (pctxt, "t140", -1);
|
|
|
|
pvalue->u.t140 = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.t140);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t140", -1);
|
|
|
|
break;
|
|
|
|
/* t38fax */
|
|
case 13:
|
|
invokeStartElement (pctxt, "t38fax", -1);
|
|
|
|
pvalue->u.t38fax = ALLOC_ASN1ELEM (pctxt, H245DataApplicationCapability_application_t38fax);
|
|
|
|
stat = asn1PD_H245DataApplicationCapability_application_t38fax (pctxt, pvalue->u.t38fax);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t38fax", -1);
|
|
|
|
break;
|
|
|
|
/* genericDataCapability */
|
|
case 14:
|
|
invokeStartElement (pctxt, "genericDataCapability", -1);
|
|
|
|
pvalue->u.genericDataCapability = ALLOC_ASN1ELEM (pctxt, H245GenericCapability);
|
|
|
|
stat = asn1PD_H245GenericCapability (pctxt, pvalue->u.genericDataCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "genericDataCapability", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DataApplicationCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DataApplicationCapability (OOCTXT* pctxt, H245DataApplicationCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode application */
|
|
|
|
invokeStartElement (pctxt, "application", -1);
|
|
|
|
stat = asn1PD_H245DataApplicationCapability_application (pctxt, &pvalue->application);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "application", -1);
|
|
|
|
/* decode maxBitRate */
|
|
|
|
invokeStartElement (pctxt, "maxBitRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->maxBitRate, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maxBitRate);
|
|
|
|
invokeEndElement (pctxt, "maxBitRate", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH245DataApplicationCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245_SeqOfH245DataApplicationCapability (OOCTXT* pctxt, H245_SeqOfH245DataApplicationCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
H245DataApplicationCapability* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
int lstat;
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (;;) {
|
|
/* decode length determinant */
|
|
|
|
lstat = decodeLength (pctxt, &count);
|
|
if (lstat != ASN_OK && lstat != ASN_OK_FRAG) {
|
|
return lstat;
|
|
}
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245DataApplicationCapability);
|
|
|
|
stat = asn1PD_H245DataApplicationCapability (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
if(lstat == ASN_OK) break;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MediaDistributionCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MediaDistributionCapability (OOCTXT* pctxt, H245MediaDistributionCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.centralizedDataPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.distributedDataPresent = optbit;
|
|
|
|
/* decode centralizedControl */
|
|
|
|
invokeStartElement (pctxt, "centralizedControl", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->centralizedControl);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->centralizedControl);
|
|
|
|
invokeEndElement (pctxt, "centralizedControl", -1);
|
|
|
|
/* decode distributedControl */
|
|
|
|
invokeStartElement (pctxt, "distributedControl", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->distributedControl);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->distributedControl);
|
|
|
|
invokeEndElement (pctxt, "distributedControl", -1);
|
|
|
|
/* decode centralizedAudio */
|
|
|
|
invokeStartElement (pctxt, "centralizedAudio", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->centralizedAudio);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->centralizedAudio);
|
|
|
|
invokeEndElement (pctxt, "centralizedAudio", -1);
|
|
|
|
/* decode distributedAudio */
|
|
|
|
invokeStartElement (pctxt, "distributedAudio", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->distributedAudio);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->distributedAudio);
|
|
|
|
invokeEndElement (pctxt, "distributedAudio", -1);
|
|
|
|
/* decode centralizedVideo */
|
|
|
|
invokeStartElement (pctxt, "centralizedVideo", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->centralizedVideo);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->centralizedVideo);
|
|
|
|
invokeEndElement (pctxt, "centralizedVideo", -1);
|
|
|
|
/* decode distributedVideo */
|
|
|
|
invokeStartElement (pctxt, "distributedVideo", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->distributedVideo);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->distributedVideo);
|
|
|
|
invokeEndElement (pctxt, "distributedVideo", -1);
|
|
|
|
/* decode centralizedData */
|
|
|
|
if (pvalue->m.centralizedDataPresent) {
|
|
invokeStartElement (pctxt, "centralizedData", -1);
|
|
|
|
stat = asn1PD_H245_SeqOfH245DataApplicationCapability (pctxt, &pvalue->centralizedData);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "centralizedData", -1);
|
|
}
|
|
|
|
/* decode distributedData */
|
|
|
|
if (pvalue->m.distributedDataPresent) {
|
|
invokeStartElement (pctxt, "distributedData", -1);
|
|
|
|
stat = asn1PD_H245_SeqOfH245DataApplicationCapability (pctxt, &pvalue->distributedData);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "distributedData", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH245MediaDistributionCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245_SeqOfH245MediaDistributionCapability (OOCTXT* pctxt, H245_SeqOfH245MediaDistributionCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
H245MediaDistributionCapability* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
int lstat;
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (;;) {
|
|
/* decode length determinant */
|
|
|
|
lstat = decodeLength (pctxt, &count);
|
|
if (lstat != ASN_OK && lstat != ASN_OK_FRAG) {
|
|
return lstat;
|
|
}
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245MediaDistributionCapability);
|
|
|
|
stat = asn1PD_H245MediaDistributionCapability (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
if(lstat == ASN_OK) break;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultipointCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultipointCapability (OOCTXT* pctxt, H245MultipointCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode multicastCapability */
|
|
|
|
invokeStartElement (pctxt, "multicastCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->multicastCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->multicastCapability);
|
|
|
|
invokeEndElement (pctxt, "multicastCapability", -1);
|
|
|
|
/* decode multiUniCastConference */
|
|
|
|
invokeStartElement (pctxt, "multiUniCastConference", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->multiUniCastConference);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->multiUniCastConference);
|
|
|
|
invokeEndElement (pctxt, "multiUniCastConference", -1);
|
|
|
|
/* decode mediaDistributionCapability */
|
|
|
|
invokeStartElement (pctxt, "mediaDistributionCapability", -1);
|
|
|
|
stat = asn1PD_H245_SeqOfH245MediaDistributionCapability (pctxt, &pvalue->mediaDistributionCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaDistributionCapability", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H2250Capability_mcCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H2250Capability_mcCapability (OOCTXT* pctxt, H245H2250Capability_mcCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode centralizedConferenceMC */
|
|
|
|
invokeStartElement (pctxt, "centralizedConferenceMC", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->centralizedConferenceMC);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->centralizedConferenceMC);
|
|
|
|
invokeEndElement (pctxt, "centralizedConferenceMC", -1);
|
|
|
|
/* decode decentralizedConferenceMC */
|
|
|
|
invokeStartElement (pctxt, "decentralizedConferenceMC", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->decentralizedConferenceMC);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->decentralizedConferenceMC);
|
|
|
|
invokeEndElement (pctxt, "decentralizedConferenceMC", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RTPPayloadType_payloadDescriptor */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RTPPayloadType_payloadDescriptor (OOCTXT* pctxt, H245RTPPayloadType_payloadDescriptor* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandardIdentifier */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandardIdentifier", -1);
|
|
|
|
pvalue->u.nonStandardIdentifier = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandardIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandardIdentifier", -1);
|
|
|
|
break;
|
|
|
|
/* rfc_number */
|
|
case 1:
|
|
invokeStartElement (pctxt, "rfc_number", -1);
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (extbit == 0) {
|
|
stat = decodeConsInteger (pctxt, &pvalue->u.rfc_number, 1, 32768);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
else {
|
|
stat = decodeUnconsInteger (pctxt, &pvalue->u.rfc_number);
|
|
if (stat != ASN_OK) return stat;
|
|
}
|
|
invokeIntValue (pctxt, pvalue->u.rfc_number);
|
|
|
|
invokeEndElement (pctxt, "rfc_number", -1);
|
|
|
|
break;
|
|
|
|
/* oid */
|
|
case 2:
|
|
invokeStartElement (pctxt, "oid", -1);
|
|
|
|
pvalue->u.oid = ALLOC_ASN1ELEM (pctxt, ASN1OBJID);
|
|
|
|
stat = decodeObjectIdentifier (pctxt, pvalue->u.oid);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOidValue (pctxt, pvalue->u.oid->numids, pvalue->u.oid->subid);
|
|
|
|
invokeEndElement (pctxt, "oid", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RTPPayloadType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RTPPayloadType (OOCTXT* pctxt, H245RTPPayloadType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.payloadTypePresent = optbit;
|
|
|
|
/* decode payloadDescriptor */
|
|
|
|
invokeStartElement (pctxt, "payloadDescriptor", -1);
|
|
|
|
stat = asn1PD_H245RTPPayloadType_payloadDescriptor (pctxt, &pvalue->payloadDescriptor);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "payloadDescriptor", -1);
|
|
|
|
/* decode payloadType */
|
|
|
|
if (pvalue->m.payloadTypePresent) {
|
|
invokeStartElement (pctxt, "payloadType", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->payloadType, 0U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->payloadType);
|
|
|
|
invokeEndElement (pctxt, "payloadType", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MediaPacketizationCapability_rtpPayloadType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MediaPacketizationCapability_rtpPayloadType (OOCTXT* pctxt, H245MediaPacketizationCapability_rtpPayloadType* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245RTPPayloadType* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245RTPPayloadType);
|
|
|
|
stat = asn1PD_H245RTPPayloadType (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MediaPacketizationCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MediaPacketizationCapability (OOCTXT* pctxt, H245MediaPacketizationCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
/* decode h261aVideoPacketization */
|
|
|
|
invokeStartElement (pctxt, "h261aVideoPacketization", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->h261aVideoPacketization);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->h261aVideoPacketization);
|
|
|
|
invokeEndElement (pctxt, "h261aVideoPacketization", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 1 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.rtpPayloadTypePresent = 1;
|
|
|
|
invokeStartElement (pctxt, "rtpPayloadType", -1);
|
|
|
|
stat = asn1PD_H245MediaPacketizationCapability_rtpPayloadType (pctxt, &pvalue->rtpPayloadType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "rtpPayloadType", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* QOSMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245QOSMode (OOCTXT* pctxt, H245QOSMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* guaranteedQOS */
|
|
case 0:
|
|
invokeStartElement (pctxt, "guaranteedQOS", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "guaranteedQOS", -1);
|
|
|
|
break;
|
|
|
|
/* controlledLoad */
|
|
case 1:
|
|
invokeStartElement (pctxt, "controlledLoad", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "controlledLoad", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RSVPParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RSVPParameters (OOCTXT* pctxt, H245RSVPParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.qosModePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.tokenRatePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.bucketSizePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.peakRatePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.minPolicedPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.maxPktSizePresent = optbit;
|
|
|
|
/* decode qosMode */
|
|
|
|
if (pvalue->m.qosModePresent) {
|
|
invokeStartElement (pctxt, "qosMode", -1);
|
|
|
|
stat = asn1PD_H245QOSMode (pctxt, &pvalue->qosMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "qosMode", -1);
|
|
}
|
|
|
|
/* decode tokenRate */
|
|
|
|
if (pvalue->m.tokenRatePresent) {
|
|
invokeStartElement (pctxt, "tokenRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->tokenRate, 1U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->tokenRate);
|
|
|
|
invokeEndElement (pctxt, "tokenRate", -1);
|
|
}
|
|
|
|
/* decode bucketSize */
|
|
|
|
if (pvalue->m.bucketSizePresent) {
|
|
invokeStartElement (pctxt, "bucketSize", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->bucketSize, 1U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->bucketSize);
|
|
|
|
invokeEndElement (pctxt, "bucketSize", -1);
|
|
}
|
|
|
|
/* decode peakRate */
|
|
|
|
if (pvalue->m.peakRatePresent) {
|
|
invokeStartElement (pctxt, "peakRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->peakRate, 1U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->peakRate);
|
|
|
|
invokeEndElement (pctxt, "peakRate", -1);
|
|
}
|
|
|
|
/* decode minPoliced */
|
|
|
|
if (pvalue->m.minPolicedPresent) {
|
|
invokeStartElement (pctxt, "minPoliced", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->minPoliced, 1U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->minPoliced);
|
|
|
|
invokeEndElement (pctxt, "minPoliced", -1);
|
|
}
|
|
|
|
/* decode maxPktSize */
|
|
|
|
if (pvalue->m.maxPktSizePresent) {
|
|
invokeStartElement (pctxt, "maxPktSize", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->maxPktSize, 1U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maxPktSize);
|
|
|
|
invokeEndElement (pctxt, "maxPktSize", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ATMParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ATMParameters (OOCTXT* pctxt, H245ATMParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode maxNTUSize */
|
|
|
|
invokeStartElement (pctxt, "maxNTUSize", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maxNTUSize, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maxNTUSize);
|
|
|
|
invokeEndElement (pctxt, "maxNTUSize", -1);
|
|
|
|
/* decode atmUBR */
|
|
|
|
invokeStartElement (pctxt, "atmUBR", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->atmUBR);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->atmUBR);
|
|
|
|
invokeEndElement (pctxt, "atmUBR", -1);
|
|
|
|
/* decode atmrtVBR */
|
|
|
|
invokeStartElement (pctxt, "atmrtVBR", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->atmrtVBR);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->atmrtVBR);
|
|
|
|
invokeEndElement (pctxt, "atmrtVBR", -1);
|
|
|
|
/* decode atmnrtVBR */
|
|
|
|
invokeStartElement (pctxt, "atmnrtVBR", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->atmnrtVBR);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->atmnrtVBR);
|
|
|
|
invokeEndElement (pctxt, "atmnrtVBR", -1);
|
|
|
|
/* decode atmABR */
|
|
|
|
invokeStartElement (pctxt, "atmABR", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->atmABR);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->atmABR);
|
|
|
|
invokeEndElement (pctxt, "atmABR", -1);
|
|
|
|
/* decode atmCBR */
|
|
|
|
invokeStartElement (pctxt, "atmCBR", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->atmCBR);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->atmCBR);
|
|
|
|
invokeEndElement (pctxt, "atmCBR", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* QOSCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245QOSCapability (OOCTXT* pctxt, H245QOSCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.nonStandardDataPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.rsvpParametersPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.atmParametersPresent = optbit;
|
|
|
|
/* decode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
invokeStartElement (pctxt, "nonStandardData", -1);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandardData", -1);
|
|
}
|
|
|
|
/* decode rsvpParameters */
|
|
|
|
if (pvalue->m.rsvpParametersPresent) {
|
|
invokeStartElement (pctxt, "rsvpParameters", -1);
|
|
|
|
stat = asn1PD_H245RSVPParameters (pctxt, &pvalue->rsvpParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "rsvpParameters", -1);
|
|
}
|
|
|
|
/* decode atmParameters */
|
|
|
|
if (pvalue->m.atmParametersPresent) {
|
|
invokeStartElement (pctxt, "atmParameters", -1);
|
|
|
|
stat = asn1PD_H245ATMParameters (pctxt, &pvalue->atmParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "atmParameters", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportCapability_qOSCapabilities */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TransportCapability_qOSCapabilities (OOCTXT* pctxt, H245TransportCapability_qOSCapabilities* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245QOSCapability* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245QOSCapability);
|
|
|
|
stat = asn1PD_H245QOSCapability (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MediaTransportType_atm_AAL5_compressed */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MediaTransportType_atm_AAL5_compressed (OOCTXT* pctxt, H245MediaTransportType_atm_AAL5_compressed* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode variable_delta */
|
|
|
|
invokeStartElement (pctxt, "variable_delta", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->variable_delta);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->variable_delta);
|
|
|
|
invokeEndElement (pctxt, "variable_delta", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MediaTransportType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MediaTransportType (OOCTXT* pctxt, H245MediaTransportType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* ip_UDP */
|
|
case 0:
|
|
invokeStartElement (pctxt, "ip_UDP", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "ip_UDP", -1);
|
|
|
|
break;
|
|
|
|
/* ip_TCP */
|
|
case 1:
|
|
invokeStartElement (pctxt, "ip_TCP", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "ip_TCP", -1);
|
|
|
|
break;
|
|
|
|
/* atm_AAL5_UNIDIR */
|
|
case 2:
|
|
invokeStartElement (pctxt, "atm_AAL5_UNIDIR", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "atm_AAL5_UNIDIR", -1);
|
|
|
|
break;
|
|
|
|
/* atm_AAL5_BIDIR */
|
|
case 3:
|
|
invokeStartElement (pctxt, "atm_AAL5_BIDIR", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "atm_AAL5_BIDIR", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 5;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* atm_AAL5_compressed */
|
|
case 5:
|
|
invokeStartElement (pctxt, "atm_AAL5_compressed", -1);
|
|
|
|
pvalue->u.atm_AAL5_compressed = ALLOC_ASN1ELEM (pctxt, H245MediaTransportType_atm_AAL5_compressed);
|
|
|
|
stat = asn1PD_H245MediaTransportType_atm_AAL5_compressed (pctxt, pvalue->u.atm_AAL5_compressed);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "atm_AAL5_compressed", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MediaChannelCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MediaChannelCapability (OOCTXT* pctxt, H245MediaChannelCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.mediaTransportPresent = optbit;
|
|
|
|
/* decode mediaTransport */
|
|
|
|
if (pvalue->m.mediaTransportPresent) {
|
|
invokeStartElement (pctxt, "mediaTransport", -1);
|
|
|
|
stat = asn1PD_H245MediaTransportType (pctxt, &pvalue->mediaTransport);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaTransport", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportCapability_mediaChannelCapabilities */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TransportCapability_mediaChannelCapabilities (OOCTXT* pctxt, H245TransportCapability_mediaChannelCapabilities* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245MediaChannelCapability* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245MediaChannelCapability);
|
|
|
|
stat = asn1PD_H245MediaChannelCapability (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TransportCapability (OOCTXT* pctxt, H245TransportCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.nonStandardPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.qOSCapabilitiesPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.mediaChannelCapabilitiesPresent = optbit;
|
|
|
|
/* decode nonStandard */
|
|
|
|
if (pvalue->m.nonStandardPresent) {
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, &pvalue->nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
}
|
|
|
|
/* decode qOSCapabilities */
|
|
|
|
if (pvalue->m.qOSCapabilitiesPresent) {
|
|
invokeStartElement (pctxt, "qOSCapabilities", -1);
|
|
|
|
stat = asn1PD_H245TransportCapability_qOSCapabilities (pctxt, &pvalue->qOSCapabilities);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "qOSCapabilities", -1);
|
|
}
|
|
|
|
/* decode mediaChannelCapabilities */
|
|
|
|
if (pvalue->m.mediaChannelCapabilitiesPresent) {
|
|
invokeStartElement (pctxt, "mediaChannelCapabilities", -1);
|
|
|
|
stat = asn1PD_H245TransportCapability_mediaChannelCapabilities (pctxt, &pvalue->mediaChannelCapabilities);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaChannelCapabilities", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RTPH263VideoRedundancyFrameMapping_frameSequence */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RTPH263VideoRedundancyFrameMapping_frameSequence (OOCTXT* pctxt, H245RTPH263VideoRedundancyFrameMapping_frameSequence* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &pvalue->n);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->elem[xx1], 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->elem[xx1]);
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RTPH263VideoRedundancyFrameMapping */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RTPH263VideoRedundancyFrameMapping (OOCTXT* pctxt, H245RTPH263VideoRedundancyFrameMapping* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode threadNumber */
|
|
|
|
invokeStartElement (pctxt, "threadNumber", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->threadNumber, 0U, 15U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->threadNumber);
|
|
|
|
invokeEndElement (pctxt, "threadNumber", -1);
|
|
|
|
/* decode frameSequence */
|
|
|
|
invokeStartElement (pctxt, "frameSequence", -1);
|
|
|
|
stat = asn1PD_H245RTPH263VideoRedundancyFrameMapping_frameSequence (pctxt, &pvalue->frameSequence);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "frameSequence", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RTPH263VideoRedundancyEncoding_frameToThreadMapping_cust */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RTPH263VideoRedundancyEncoding_frameToThreadMapping_custom (OOCTXT* pctxt, H245RTPH263VideoRedundancyEncoding_frameToThreadMapping_custom* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245RTPH263VideoRedundancyFrameMapping* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245RTPH263VideoRedundancyFrameMapping);
|
|
|
|
stat = asn1PD_H245RTPH263VideoRedundancyFrameMapping (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RTPH263VideoRedundancyEncoding_frameToThreadMapping */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RTPH263VideoRedundancyEncoding_frameToThreadMapping (OOCTXT* pctxt, H245RTPH263VideoRedundancyEncoding_frameToThreadMapping* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* roundrobin */
|
|
case 0:
|
|
invokeStartElement (pctxt, "roundrobin", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "roundrobin", -1);
|
|
|
|
break;
|
|
|
|
/* custom */
|
|
case 1:
|
|
invokeStartElement (pctxt, "custom", -1);
|
|
|
|
pvalue->u.custom = ALLOC_ASN1ELEM (pctxt, H245RTPH263VideoRedundancyEncoding_frameToThreadMapping_custom);
|
|
|
|
stat = asn1PD_H245RTPH263VideoRedundancyEncoding_frameToThreadMapping_custom (pctxt, pvalue->u.custom);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "custom", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RTPH263VideoRedundancyEncoding_containedThreads */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RTPH263VideoRedundancyEncoding_containedThreads (OOCTXT* pctxt, H245RTPH263VideoRedundancyEncoding_containedThreads* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &pvalue->n);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->elem[xx1], 0U, 15U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->elem[xx1]);
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RTPH263VideoRedundancyEncoding */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RTPH263VideoRedundancyEncoding (OOCTXT* pctxt, H245RTPH263VideoRedundancyEncoding* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.containedThreadsPresent = optbit;
|
|
|
|
/* decode numberOfThreads */
|
|
|
|
invokeStartElement (pctxt, "numberOfThreads", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->numberOfThreads, 1U, 16U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->numberOfThreads);
|
|
|
|
invokeEndElement (pctxt, "numberOfThreads", -1);
|
|
|
|
/* decode framesBetweenSyncPoints */
|
|
|
|
invokeStartElement (pctxt, "framesBetweenSyncPoints", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->framesBetweenSyncPoints, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->framesBetweenSyncPoints);
|
|
|
|
invokeEndElement (pctxt, "framesBetweenSyncPoints", -1);
|
|
|
|
/* decode frameToThreadMapping */
|
|
|
|
invokeStartElement (pctxt, "frameToThreadMapping", -1);
|
|
|
|
stat = asn1PD_H245RTPH263VideoRedundancyEncoding_frameToThreadMapping (pctxt, &pvalue->frameToThreadMapping);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "frameToThreadMapping", -1);
|
|
|
|
/* decode containedThreads */
|
|
|
|
if (pvalue->m.containedThreadsPresent) {
|
|
invokeStartElement (pctxt, "containedThreads", -1);
|
|
|
|
stat = asn1PD_H245RTPH263VideoRedundancyEncoding_containedThreads (pctxt, &pvalue->containedThreads);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "containedThreads", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RedundancyEncodingMethod */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RedundancyEncodingMethod (OOCTXT* pctxt, H245RedundancyEncodingMethod* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* rtpAudioRedundancyEncoding */
|
|
case 1:
|
|
invokeStartElement (pctxt, "rtpAudioRedundancyEncoding", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "rtpAudioRedundancyEncoding", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* rtpH263VideoRedundancyEncoding */
|
|
case 3:
|
|
invokeStartElement (pctxt, "rtpH263VideoRedundancyEncoding", -1);
|
|
|
|
pvalue->u.rtpH263VideoRedundancyEncoding = ALLOC_ASN1ELEM (pctxt, H245RTPH263VideoRedundancyEncoding);
|
|
|
|
stat = asn1PD_H245RTPH263VideoRedundancyEncoding (pctxt, pvalue->u.rtpH263VideoRedundancyEncoding);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "rtpH263VideoRedundancyEncoding", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CapabilityTableEntryNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CapabilityTableEntryNumber (OOCTXT* pctxt, H245CapabilityTableEntryNumber* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = decodeConsUInt16 (pctxt, pvalue, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, *pvalue);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RedundancyEncodingCapability_secondaryEncoding */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RedundancyEncodingCapability_secondaryEncoding (OOCTXT* pctxt, H245RedundancyEncodingCapability_secondaryEncoding* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &pvalue->n);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
stat = asn1PD_H245CapabilityTableEntryNumber (pctxt, &pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RedundancyEncodingCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RedundancyEncodingCapability (OOCTXT* pctxt, H245RedundancyEncodingCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.secondaryEncodingPresent = optbit;
|
|
|
|
/* decode redundancyEncodingMethod */
|
|
|
|
invokeStartElement (pctxt, "redundancyEncodingMethod", -1);
|
|
|
|
stat = asn1PD_H245RedundancyEncodingMethod (pctxt, &pvalue->redundancyEncodingMethod);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "redundancyEncodingMethod", -1);
|
|
|
|
/* decode primaryEncoding */
|
|
|
|
invokeStartElement (pctxt, "primaryEncoding", -1);
|
|
|
|
stat = asn1PD_H245CapabilityTableEntryNumber (pctxt, &pvalue->primaryEncoding);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "primaryEncoding", -1);
|
|
|
|
/* decode secondaryEncoding */
|
|
|
|
if (pvalue->m.secondaryEncodingPresent) {
|
|
invokeStartElement (pctxt, "secondaryEncoding", -1);
|
|
|
|
stat = asn1PD_H245RedundancyEncodingCapability_secondaryEncoding (pctxt, &pvalue->secondaryEncoding);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "secondaryEncoding", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H2250Capability_redundancyEncodingCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H2250Capability_redundancyEncodingCapability (OOCTXT* pctxt, H245H2250Capability_redundancyEncodingCapability* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245RedundancyEncodingCapability* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245RedundancyEncodingCapability);
|
|
|
|
stat = asn1PD_H245RedundancyEncodingCapability (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H2250Capability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H2250Capability (OOCTXT* pctxt, H245H2250Capability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
/* decode maximumAudioDelayJitter */
|
|
|
|
invokeStartElement (pctxt, "maximumAudioDelayJitter", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maximumAudioDelayJitter, 0U, 1023U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maximumAudioDelayJitter);
|
|
|
|
invokeEndElement (pctxt, "maximumAudioDelayJitter", -1);
|
|
|
|
/* decode receiveMultipointCapability */
|
|
|
|
invokeStartElement (pctxt, "receiveMultipointCapability", -1);
|
|
|
|
stat = asn1PD_H245MultipointCapability (pctxt, &pvalue->receiveMultipointCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "receiveMultipointCapability", -1);
|
|
|
|
/* decode transmitMultipointCapability */
|
|
|
|
invokeStartElement (pctxt, "transmitMultipointCapability", -1);
|
|
|
|
stat = asn1PD_H245MultipointCapability (pctxt, &pvalue->transmitMultipointCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "transmitMultipointCapability", -1);
|
|
|
|
/* decode receiveAndTransmitMultipointCapability */
|
|
|
|
invokeStartElement (pctxt, "receiveAndTransmitMultipointCapability", -1);
|
|
|
|
stat = asn1PD_H245MultipointCapability (pctxt, &pvalue->receiveAndTransmitMultipointCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "receiveAndTransmitMultipointCapability", -1);
|
|
|
|
/* decode mcCapability */
|
|
|
|
invokeStartElement (pctxt, "mcCapability", -1);
|
|
|
|
stat = asn1PD_H245H2250Capability_mcCapability (pctxt, &pvalue->mcCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mcCapability", -1);
|
|
|
|
/* decode rtcpVideoControlCapability */
|
|
|
|
invokeStartElement (pctxt, "rtcpVideoControlCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->rtcpVideoControlCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->rtcpVideoControlCapability);
|
|
|
|
invokeEndElement (pctxt, "rtcpVideoControlCapability", -1);
|
|
|
|
/* decode mediaPacketizationCapability */
|
|
|
|
invokeStartElement (pctxt, "mediaPacketizationCapability", -1);
|
|
|
|
stat = asn1PD_H245MediaPacketizationCapability (pctxt, &pvalue->mediaPacketizationCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaPacketizationCapability", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 4 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.transportCapabilityPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "transportCapability", -1);
|
|
|
|
stat = asn1PD_H245TransportCapability (pctxt, &pvalue->transportCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "transportCapability", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.redundancyEncodingCapabilityPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "redundancyEncodingCapability", -1);
|
|
|
|
stat = asn1PD_H245H2250Capability_redundancyEncodingCapability (pctxt, &pvalue->redundancyEncodingCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "redundancyEncodingCapability", -1);
|
|
break;
|
|
|
|
case 2:
|
|
pvalue->m.logicalChannelSwitchingCapabilityPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "logicalChannelSwitchingCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->logicalChannelSwitchingCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->logicalChannelSwitchingCapability);
|
|
|
|
invokeEndElement (pctxt, "logicalChannelSwitchingCapability", -1);
|
|
break;
|
|
|
|
case 3:
|
|
pvalue->m.t120DynamicPortCapabilityPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "t120DynamicPortCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->t120DynamicPortCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->t120DynamicPortCapability);
|
|
|
|
invokeEndElement (pctxt, "t120DynamicPortCapability", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexCapability (OOCTXT* pctxt, H245MultiplexCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* h222Capability */
|
|
case 1:
|
|
invokeStartElement (pctxt, "h222Capability", -1);
|
|
|
|
pvalue->u.h222Capability = ALLOC_ASN1ELEM (pctxt, H245H222Capability);
|
|
|
|
stat = asn1PD_H245H222Capability (pctxt, pvalue->u.h222Capability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h222Capability", -1);
|
|
|
|
break;
|
|
|
|
/* h223Capability */
|
|
case 2:
|
|
invokeStartElement (pctxt, "h223Capability", -1);
|
|
|
|
pvalue->u.h223Capability = ALLOC_ASN1ELEM (pctxt, H245H223Capability);
|
|
|
|
stat = asn1PD_H245H223Capability (pctxt, pvalue->u.h223Capability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h223Capability", -1);
|
|
|
|
break;
|
|
|
|
/* v76Capability */
|
|
case 3:
|
|
invokeStartElement (pctxt, "v76Capability", -1);
|
|
|
|
pvalue->u.v76Capability = ALLOC_ASN1ELEM (pctxt, H245V76Capability);
|
|
|
|
stat = asn1PD_H245V76Capability (pctxt, pvalue->u.v76Capability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "v76Capability", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 5;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* h2250Capability */
|
|
case 5:
|
|
invokeStartElement (pctxt, "h2250Capability", -1);
|
|
|
|
pvalue->u.h2250Capability = ALLOC_ASN1ELEM (pctxt, H245H2250Capability);
|
|
|
|
stat = asn1PD_H245H2250Capability (pctxt, pvalue->u.h2250Capability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h2250Capability", -1);
|
|
|
|
break;
|
|
|
|
/* genericMultiplexCapability */
|
|
case 6:
|
|
invokeStartElement (pctxt, "genericMultiplexCapability", -1);
|
|
|
|
pvalue->u.genericMultiplexCapability = ALLOC_ASN1ELEM (pctxt, H245GenericCapability);
|
|
|
|
stat = asn1PD_H245GenericCapability (pctxt, pvalue->u.genericMultiplexCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "genericMultiplexCapability", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H261VideoCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H261VideoCapability (OOCTXT* pctxt, H245H261VideoCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.qcifMPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.cifMPIPresent = optbit;
|
|
|
|
/* decode qcifMPI */
|
|
|
|
if (pvalue->m.qcifMPIPresent) {
|
|
invokeStartElement (pctxt, "qcifMPI", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->qcifMPI, 1U, 4U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->qcifMPI);
|
|
|
|
invokeEndElement (pctxt, "qcifMPI", -1);
|
|
}
|
|
|
|
/* decode cifMPI */
|
|
|
|
if (pvalue->m.cifMPIPresent) {
|
|
invokeStartElement (pctxt, "cifMPI", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->cifMPI, 1U, 4U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->cifMPI);
|
|
|
|
invokeEndElement (pctxt, "cifMPI", -1);
|
|
}
|
|
|
|
/* decode temporalSpatialTradeOffCapability */
|
|
|
|
invokeStartElement (pctxt, "temporalSpatialTradeOffCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->temporalSpatialTradeOffCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->temporalSpatialTradeOffCapability);
|
|
|
|
invokeEndElement (pctxt, "temporalSpatialTradeOffCapability", -1);
|
|
|
|
/* decode maxBitRate */
|
|
|
|
invokeStartElement (pctxt, "maxBitRate", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maxBitRate, 1U, 19200U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maxBitRate);
|
|
|
|
invokeEndElement (pctxt, "maxBitRate", -1);
|
|
|
|
/* decode stillImageTransmission */
|
|
|
|
invokeStartElement (pctxt, "stillImageTransmission", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->stillImageTransmission);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->stillImageTransmission);
|
|
|
|
invokeEndElement (pctxt, "stillImageTransmission", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 1 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.videoBadMBsCapPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "videoBadMBsCap", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->videoBadMBsCap);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->videoBadMBsCap);
|
|
|
|
invokeEndElement (pctxt, "videoBadMBsCap", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H262VideoCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H262VideoCapability (OOCTXT* pctxt, H245H262VideoCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.videoBitRatePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.vbvBufferSizePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.samplesPerLinePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.linesPerFramePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.framesPerSecondPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.luminanceSampleRatePresent = optbit;
|
|
|
|
/* decode profileAndLevel_SPatML */
|
|
|
|
invokeStartElement (pctxt, "profileAndLevel_SPatML", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->profileAndLevel_SPatML);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->profileAndLevel_SPatML);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_SPatML", -1);
|
|
|
|
/* decode profileAndLevel_MPatLL */
|
|
|
|
invokeStartElement (pctxt, "profileAndLevel_MPatLL", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->profileAndLevel_MPatLL);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->profileAndLevel_MPatLL);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_MPatLL", -1);
|
|
|
|
/* decode profileAndLevel_MPatML */
|
|
|
|
invokeStartElement (pctxt, "profileAndLevel_MPatML", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->profileAndLevel_MPatML);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->profileAndLevel_MPatML);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_MPatML", -1);
|
|
|
|
/* decode profileAndLevel_MPatH_14 */
|
|
|
|
invokeStartElement (pctxt, "profileAndLevel_MPatH_14", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->profileAndLevel_MPatH_14);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->profileAndLevel_MPatH_14);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_MPatH_14", -1);
|
|
|
|
/* decode profileAndLevel_MPatHL */
|
|
|
|
invokeStartElement (pctxt, "profileAndLevel_MPatHL", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->profileAndLevel_MPatHL);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->profileAndLevel_MPatHL);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_MPatHL", -1);
|
|
|
|
/* decode profileAndLevel_SNRatLL */
|
|
|
|
invokeStartElement (pctxt, "profileAndLevel_SNRatLL", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->profileAndLevel_SNRatLL);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->profileAndLevel_SNRatLL);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_SNRatLL", -1);
|
|
|
|
/* decode profileAndLevel_SNRatML */
|
|
|
|
invokeStartElement (pctxt, "profileAndLevel_SNRatML", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->profileAndLevel_SNRatML);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->profileAndLevel_SNRatML);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_SNRatML", -1);
|
|
|
|
/* decode profileAndLevel_SpatialatH_14 */
|
|
|
|
invokeStartElement (pctxt, "profileAndLevel_SpatialatH_14", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->profileAndLevel_SpatialatH_14);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->profileAndLevel_SpatialatH_14);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_SpatialatH_14", -1);
|
|
|
|
/* decode profileAndLevel_HPatML */
|
|
|
|
invokeStartElement (pctxt, "profileAndLevel_HPatML", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->profileAndLevel_HPatML);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->profileAndLevel_HPatML);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_HPatML", -1);
|
|
|
|
/* decode profileAndLevel_HPatH_14 */
|
|
|
|
invokeStartElement (pctxt, "profileAndLevel_HPatH_14", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->profileAndLevel_HPatH_14);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->profileAndLevel_HPatH_14);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_HPatH_14", -1);
|
|
|
|
/* decode profileAndLevel_HPatHL */
|
|
|
|
invokeStartElement (pctxt, "profileAndLevel_HPatHL", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->profileAndLevel_HPatHL);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->profileAndLevel_HPatHL);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_HPatHL", -1);
|
|
|
|
/* decode videoBitRate */
|
|
|
|
if (pvalue->m.videoBitRatePresent) {
|
|
invokeStartElement (pctxt, "videoBitRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->videoBitRate, 0U, 1073741823U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->videoBitRate);
|
|
|
|
invokeEndElement (pctxt, "videoBitRate", -1);
|
|
}
|
|
|
|
/* decode vbvBufferSize */
|
|
|
|
if (pvalue->m.vbvBufferSizePresent) {
|
|
invokeStartElement (pctxt, "vbvBufferSize", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->vbvBufferSize, 0U, 262143U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->vbvBufferSize);
|
|
|
|
invokeEndElement (pctxt, "vbvBufferSize", -1);
|
|
}
|
|
|
|
/* decode samplesPerLine */
|
|
|
|
if (pvalue->m.samplesPerLinePresent) {
|
|
invokeStartElement (pctxt, "samplesPerLine", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->samplesPerLine, 0U, 16383U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->samplesPerLine);
|
|
|
|
invokeEndElement (pctxt, "samplesPerLine", -1);
|
|
}
|
|
|
|
/* decode linesPerFrame */
|
|
|
|
if (pvalue->m.linesPerFramePresent) {
|
|
invokeStartElement (pctxt, "linesPerFrame", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->linesPerFrame, 0U, 16383U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->linesPerFrame);
|
|
|
|
invokeEndElement (pctxt, "linesPerFrame", -1);
|
|
}
|
|
|
|
/* decode framesPerSecond */
|
|
|
|
if (pvalue->m.framesPerSecondPresent) {
|
|
invokeStartElement (pctxt, "framesPerSecond", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->framesPerSecond, 0U, 15U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->framesPerSecond);
|
|
|
|
invokeEndElement (pctxt, "framesPerSecond", -1);
|
|
}
|
|
|
|
/* decode luminanceSampleRate */
|
|
|
|
if (pvalue->m.luminanceSampleRatePresent) {
|
|
invokeStartElement (pctxt, "luminanceSampleRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->luminanceSampleRate, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->luminanceSampleRate);
|
|
|
|
invokeEndElement (pctxt, "luminanceSampleRate", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 1 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.videoBadMBsCapPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "videoBadMBsCap", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->videoBadMBsCap);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->videoBadMBsCap);
|
|
|
|
invokeEndElement (pctxt, "videoBadMBsCap", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransparencyParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TransparencyParameters (OOCTXT* pctxt, H245TransparencyParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode presentationOrder */
|
|
|
|
invokeStartElement (pctxt, "presentationOrder", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->presentationOrder, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->presentationOrder);
|
|
|
|
invokeEndElement (pctxt, "presentationOrder", -1);
|
|
|
|
/* decode offset_x */
|
|
|
|
invokeStartElement (pctxt, "offset_x", -1);
|
|
|
|
stat = decodeConsInteger (pctxt, &pvalue->offset_x, -262144, 262143);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeIntValue (pctxt, pvalue->offset_x);
|
|
|
|
invokeEndElement (pctxt, "offset_x", -1);
|
|
|
|
/* decode offset_y */
|
|
|
|
invokeStartElement (pctxt, "offset_y", -1);
|
|
|
|
stat = decodeConsInteger (pctxt, &pvalue->offset_y, -262144, 262143);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeIntValue (pctxt, pvalue->offset_y);
|
|
|
|
invokeEndElement (pctxt, "offset_y", -1);
|
|
|
|
/* decode scale_x */
|
|
|
|
invokeStartElement (pctxt, "scale_x", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->scale_x, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->scale_x);
|
|
|
|
invokeEndElement (pctxt, "scale_x", -1);
|
|
|
|
/* decode scale_y */
|
|
|
|
invokeStartElement (pctxt, "scale_y", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->scale_y, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->scale_y);
|
|
|
|
invokeEndElement (pctxt, "scale_y", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RefPictureSelection_additionalPictureMemory */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RefPictureSelection_additionalPictureMemory (OOCTXT* pctxt, H245RefPictureSelection_additionalPictureMemory* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.sqcifAdditionalPictureMemoryPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.qcifAdditionalPictureMemoryPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.cifAdditionalPictureMemoryPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.cif4AdditionalPictureMemoryPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.cif16AdditionalPictureMemoryPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.bigCpfAdditionalPictureMemoryPresent = optbit;
|
|
|
|
/* decode sqcifAdditionalPictureMemory */
|
|
|
|
if (pvalue->m.sqcifAdditionalPictureMemoryPresent) {
|
|
invokeStartElement (pctxt, "sqcifAdditionalPictureMemory", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->sqcifAdditionalPictureMemory, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sqcifAdditionalPictureMemory);
|
|
|
|
invokeEndElement (pctxt, "sqcifAdditionalPictureMemory", -1);
|
|
}
|
|
|
|
/* decode qcifAdditionalPictureMemory */
|
|
|
|
if (pvalue->m.qcifAdditionalPictureMemoryPresent) {
|
|
invokeStartElement (pctxt, "qcifAdditionalPictureMemory", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->qcifAdditionalPictureMemory, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->qcifAdditionalPictureMemory);
|
|
|
|
invokeEndElement (pctxt, "qcifAdditionalPictureMemory", -1);
|
|
}
|
|
|
|
/* decode cifAdditionalPictureMemory */
|
|
|
|
if (pvalue->m.cifAdditionalPictureMemoryPresent) {
|
|
invokeStartElement (pctxt, "cifAdditionalPictureMemory", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->cifAdditionalPictureMemory, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->cifAdditionalPictureMemory);
|
|
|
|
invokeEndElement (pctxt, "cifAdditionalPictureMemory", -1);
|
|
}
|
|
|
|
/* decode cif4AdditionalPictureMemory */
|
|
|
|
if (pvalue->m.cif4AdditionalPictureMemoryPresent) {
|
|
invokeStartElement (pctxt, "cif4AdditionalPictureMemory", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->cif4AdditionalPictureMemory, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->cif4AdditionalPictureMemory);
|
|
|
|
invokeEndElement (pctxt, "cif4AdditionalPictureMemory", -1);
|
|
}
|
|
|
|
/* decode cif16AdditionalPictureMemory */
|
|
|
|
if (pvalue->m.cif16AdditionalPictureMemoryPresent) {
|
|
invokeStartElement (pctxt, "cif16AdditionalPictureMemory", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->cif16AdditionalPictureMemory, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->cif16AdditionalPictureMemory);
|
|
|
|
invokeEndElement (pctxt, "cif16AdditionalPictureMemory", -1);
|
|
}
|
|
|
|
/* decode bigCpfAdditionalPictureMemory */
|
|
|
|
if (pvalue->m.bigCpfAdditionalPictureMemoryPresent) {
|
|
invokeStartElement (pctxt, "bigCpfAdditionalPictureMemory", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->bigCpfAdditionalPictureMemory, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->bigCpfAdditionalPictureMemory);
|
|
|
|
invokeEndElement (pctxt, "bigCpfAdditionalPictureMemory", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RefPictureSelection_videoBackChannelSend */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RefPictureSelection_videoBackChannelSend (OOCTXT* pctxt, H245RefPictureSelection_videoBackChannelSend* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* none */
|
|
case 0:
|
|
invokeStartElement (pctxt, "none", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "none", -1);
|
|
|
|
break;
|
|
|
|
/* ackMessageOnly */
|
|
case 1:
|
|
invokeStartElement (pctxt, "ackMessageOnly", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "ackMessageOnly", -1);
|
|
|
|
break;
|
|
|
|
/* nackMessageOnly */
|
|
case 2:
|
|
invokeStartElement (pctxt, "nackMessageOnly", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "nackMessageOnly", -1);
|
|
|
|
break;
|
|
|
|
/* ackOrNackMessageOnly */
|
|
case 3:
|
|
invokeStartElement (pctxt, "ackOrNackMessageOnly", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "ackOrNackMessageOnly", -1);
|
|
|
|
break;
|
|
|
|
/* ackAndNackMessage */
|
|
case 4:
|
|
invokeStartElement (pctxt, "ackAndNackMessage", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "ackAndNackMessage", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 6;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RefPictureSelection_enhancedReferencePicSelect_subPictur */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters (OOCTXT* pctxt, H245RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode mpuHorizMBs */
|
|
|
|
invokeStartElement (pctxt, "mpuHorizMBs", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->mpuHorizMBs, 1U, 128U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->mpuHorizMBs);
|
|
|
|
invokeEndElement (pctxt, "mpuHorizMBs", -1);
|
|
|
|
/* decode mpuVertMBs */
|
|
|
|
invokeStartElement (pctxt, "mpuVertMBs", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->mpuVertMBs, 1U, 72U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->mpuVertMBs);
|
|
|
|
invokeEndElement (pctxt, "mpuVertMBs", -1);
|
|
|
|
/* decode mpuTotalNumber */
|
|
|
|
invokeStartElement (pctxt, "mpuTotalNumber", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->mpuTotalNumber, 1U, 65536U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->mpuTotalNumber);
|
|
|
|
invokeEndElement (pctxt, "mpuTotalNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RefPictureSelection_enhancedReferencePicSelect */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RefPictureSelection_enhancedReferencePicSelect (OOCTXT* pctxt, H245RefPictureSelection_enhancedReferencePicSelect* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.subPictureRemovalParametersPresent = optbit;
|
|
|
|
/* decode subPictureRemovalParameters */
|
|
|
|
if (pvalue->m.subPictureRemovalParametersPresent) {
|
|
invokeStartElement (pctxt, "subPictureRemovalParameters", -1);
|
|
|
|
stat = asn1PD_H245RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters (pctxt, &pvalue->subPictureRemovalParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "subPictureRemovalParameters", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RefPictureSelection */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RefPictureSelection (OOCTXT* pctxt, H245RefPictureSelection* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.additionalPictureMemoryPresent = optbit;
|
|
|
|
/* decode additionalPictureMemory */
|
|
|
|
if (pvalue->m.additionalPictureMemoryPresent) {
|
|
invokeStartElement (pctxt, "additionalPictureMemory", -1);
|
|
|
|
stat = asn1PD_H245RefPictureSelection_additionalPictureMemory (pctxt, &pvalue->additionalPictureMemory);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "additionalPictureMemory", -1);
|
|
}
|
|
|
|
/* decode videoMux */
|
|
|
|
invokeStartElement (pctxt, "videoMux", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->videoMux);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->videoMux);
|
|
|
|
invokeEndElement (pctxt, "videoMux", -1);
|
|
|
|
/* decode videoBackChannelSend */
|
|
|
|
invokeStartElement (pctxt, "videoBackChannelSend", -1);
|
|
|
|
stat = asn1PD_H245RefPictureSelection_videoBackChannelSend (pctxt, &pvalue->videoBackChannelSend);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "videoBackChannelSend", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 1 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.enhancedReferencePicSelectPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "enhancedReferencePicSelect", -1);
|
|
|
|
stat = asn1PD_H245RefPictureSelection_enhancedReferencePicSelect (pctxt, &pvalue->enhancedReferencePicSelect);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "enhancedReferencePicSelect", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CustomPictureClockFrequency */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CustomPictureClockFrequency (OOCTXT* pctxt, H245CustomPictureClockFrequency* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.sqcifMPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.qcifMPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.cifMPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.cif4MPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.cif16MPIPresent = optbit;
|
|
|
|
/* decode clockConversionCode */
|
|
|
|
invokeStartElement (pctxt, "clockConversionCode", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->clockConversionCode, 1000U, 1001U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->clockConversionCode);
|
|
|
|
invokeEndElement (pctxt, "clockConversionCode", -1);
|
|
|
|
/* decode clockDivisor */
|
|
|
|
invokeStartElement (pctxt, "clockDivisor", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->clockDivisor, 1U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->clockDivisor);
|
|
|
|
invokeEndElement (pctxt, "clockDivisor", -1);
|
|
|
|
/* decode sqcifMPI */
|
|
|
|
if (pvalue->m.sqcifMPIPresent) {
|
|
invokeStartElement (pctxt, "sqcifMPI", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->sqcifMPI, 1U, 2048U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sqcifMPI);
|
|
|
|
invokeEndElement (pctxt, "sqcifMPI", -1);
|
|
}
|
|
|
|
/* decode qcifMPI */
|
|
|
|
if (pvalue->m.qcifMPIPresent) {
|
|
invokeStartElement (pctxt, "qcifMPI", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->qcifMPI, 1U, 2048U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->qcifMPI);
|
|
|
|
invokeEndElement (pctxt, "qcifMPI", -1);
|
|
}
|
|
|
|
/* decode cifMPI */
|
|
|
|
if (pvalue->m.cifMPIPresent) {
|
|
invokeStartElement (pctxt, "cifMPI", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->cifMPI, 1U, 2048U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->cifMPI);
|
|
|
|
invokeEndElement (pctxt, "cifMPI", -1);
|
|
}
|
|
|
|
/* decode cif4MPI */
|
|
|
|
if (pvalue->m.cif4MPIPresent) {
|
|
invokeStartElement (pctxt, "cif4MPI", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->cif4MPI, 1U, 2048U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->cif4MPI);
|
|
|
|
invokeEndElement (pctxt, "cif4MPI", -1);
|
|
}
|
|
|
|
/* decode cif16MPI */
|
|
|
|
if (pvalue->m.cif16MPIPresent) {
|
|
invokeStartElement (pctxt, "cif16MPI", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->cif16MPI, 1U, 2048U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->cif16MPI);
|
|
|
|
invokeEndElement (pctxt, "cif16MPI", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H263Options_customPictureClockFrequency */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H263Options_customPictureClockFrequency (OOCTXT* pctxt, H245H263Options_customPictureClockFrequency* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 16, 0 };
|
|
int stat = ASN_OK;
|
|
H245CustomPictureClockFrequency* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245CustomPictureClockFrequency);
|
|
|
|
stat = asn1PD_H245CustomPictureClockFrequency (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CustomPictureFormat_mPI_customPCF_element */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CustomPictureFormat_mPI_customPCF_element (OOCTXT* pctxt, H245CustomPictureFormat_mPI_customPCF_element* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode clockConversionCode */
|
|
|
|
invokeStartElement (pctxt, "clockConversionCode", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->clockConversionCode, 1000U, 1001U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->clockConversionCode);
|
|
|
|
invokeEndElement (pctxt, "clockConversionCode", -1);
|
|
|
|
/* decode clockDivisor */
|
|
|
|
invokeStartElement (pctxt, "clockDivisor", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->clockDivisor, 1U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->clockDivisor);
|
|
|
|
invokeEndElement (pctxt, "clockDivisor", -1);
|
|
|
|
/* decode customMPI */
|
|
|
|
invokeStartElement (pctxt, "customMPI", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->customMPI, 1U, 2048U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->customMPI);
|
|
|
|
invokeEndElement (pctxt, "customMPI", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CustomPictureFormat_mPI_customPCF */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CustomPictureFormat_mPI_customPCF (OOCTXT* pctxt, H245CustomPictureFormat_mPI_customPCF* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 16, 0 };
|
|
int stat = ASN_OK;
|
|
H245CustomPictureFormat_mPI_customPCF_element* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245CustomPictureFormat_mPI_customPCF_element);
|
|
|
|
stat = asn1PD_H245CustomPictureFormat_mPI_customPCF_element (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CustomPictureFormat_mPI */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CustomPictureFormat_mPI (OOCTXT* pctxt, H245CustomPictureFormat_mPI* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.standardMPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.customPCFPresent = optbit;
|
|
|
|
/* decode standardMPI */
|
|
|
|
if (pvalue->m.standardMPIPresent) {
|
|
invokeStartElement (pctxt, "standardMPI", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->standardMPI, 1U, 31U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->standardMPI);
|
|
|
|
invokeEndElement (pctxt, "standardMPI", -1);
|
|
}
|
|
|
|
/* decode customPCF */
|
|
|
|
if (pvalue->m.customPCFPresent) {
|
|
invokeStartElement (pctxt, "customPCF", -1);
|
|
|
|
stat = asn1PD_H245CustomPictureFormat_mPI_customPCF (pctxt, &pvalue->customPCF);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "customPCF", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CustomPictureFormat_pixelAspectInformation_pixelAspectCo */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CustomPictureFormat_pixelAspectInformation_pixelAspectCode (OOCTXT* pctxt, H245CustomPictureFormat_pixelAspectInformation_pixelAspectCode* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 14, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &pvalue->n);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->elem[xx1], 1U, 14U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->elem[xx1]);
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CustomPictureFormat_pixelAspectInformation_extendedPAR_e */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CustomPictureFormat_pixelAspectInformation_extendedPAR_element (OOCTXT* pctxt, H245CustomPictureFormat_pixelAspectInformation_extendedPAR_element* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode width */
|
|
|
|
invokeStartElement (pctxt, "width", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->width, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->width);
|
|
|
|
invokeEndElement (pctxt, "width", -1);
|
|
|
|
/* decode height */
|
|
|
|
invokeStartElement (pctxt, "height", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->height, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->height);
|
|
|
|
invokeEndElement (pctxt, "height", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CustomPictureFormat_pixelAspectInformation_extendedPAR */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CustomPictureFormat_pixelAspectInformation_extendedPAR (OOCTXT* pctxt, H245CustomPictureFormat_pixelAspectInformation_extendedPAR* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245CustomPictureFormat_pixelAspectInformation_extendedPAR_element* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245CustomPictureFormat_pixelAspectInformation_extendedPAR_element);
|
|
|
|
stat = asn1PD_H245CustomPictureFormat_pixelAspectInformation_extendedPAR_element (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CustomPictureFormat_pixelAspectInformation */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CustomPictureFormat_pixelAspectInformation (OOCTXT* pctxt, H245CustomPictureFormat_pixelAspectInformation* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* anyPixelAspectRatio */
|
|
case 0:
|
|
invokeStartElement (pctxt, "anyPixelAspectRatio", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->u.anyPixelAspectRatio);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->u.anyPixelAspectRatio);
|
|
|
|
invokeEndElement (pctxt, "anyPixelAspectRatio", -1);
|
|
|
|
break;
|
|
|
|
/* pixelAspectCode */
|
|
case 1:
|
|
invokeStartElement (pctxt, "pixelAspectCode", -1);
|
|
|
|
pvalue->u.pixelAspectCode = ALLOC_ASN1ELEM (pctxt, H245CustomPictureFormat_pixelAspectInformation_pixelAspectCode);
|
|
|
|
stat = asn1PD_H245CustomPictureFormat_pixelAspectInformation_pixelAspectCode (pctxt, pvalue->u.pixelAspectCode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "pixelAspectCode", -1);
|
|
|
|
break;
|
|
|
|
/* extendedPAR */
|
|
case 2:
|
|
invokeStartElement (pctxt, "extendedPAR", -1);
|
|
|
|
pvalue->u.extendedPAR = ALLOC_ASN1ELEM (pctxt, H245CustomPictureFormat_pixelAspectInformation_extendedPAR);
|
|
|
|
stat = asn1PD_H245CustomPictureFormat_pixelAspectInformation_extendedPAR (pctxt, pvalue->u.extendedPAR);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "extendedPAR", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CustomPictureFormat */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CustomPictureFormat (OOCTXT* pctxt, H245CustomPictureFormat* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode maxCustomPictureWidth */
|
|
|
|
invokeStartElement (pctxt, "maxCustomPictureWidth", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maxCustomPictureWidth, 1U, 2048U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maxCustomPictureWidth);
|
|
|
|
invokeEndElement (pctxt, "maxCustomPictureWidth", -1);
|
|
|
|
/* decode maxCustomPictureHeight */
|
|
|
|
invokeStartElement (pctxt, "maxCustomPictureHeight", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maxCustomPictureHeight, 1U, 2048U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maxCustomPictureHeight);
|
|
|
|
invokeEndElement (pctxt, "maxCustomPictureHeight", -1);
|
|
|
|
/* decode minCustomPictureWidth */
|
|
|
|
invokeStartElement (pctxt, "minCustomPictureWidth", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->minCustomPictureWidth, 1U, 2048U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->minCustomPictureWidth);
|
|
|
|
invokeEndElement (pctxt, "minCustomPictureWidth", -1);
|
|
|
|
/* decode minCustomPictureHeight */
|
|
|
|
invokeStartElement (pctxt, "minCustomPictureHeight", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->minCustomPictureHeight, 1U, 2048U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->minCustomPictureHeight);
|
|
|
|
invokeEndElement (pctxt, "minCustomPictureHeight", -1);
|
|
|
|
/* decode mPI */
|
|
|
|
invokeStartElement (pctxt, "mPI", -1);
|
|
|
|
stat = asn1PD_H245CustomPictureFormat_mPI (pctxt, &pvalue->mPI);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mPI", -1);
|
|
|
|
/* decode pixelAspectInformation */
|
|
|
|
invokeStartElement (pctxt, "pixelAspectInformation", -1);
|
|
|
|
stat = asn1PD_H245CustomPictureFormat_pixelAspectInformation (pctxt, &pvalue->pixelAspectInformation);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "pixelAspectInformation", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H263Options_customPictureFormat */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H263Options_customPictureFormat (OOCTXT* pctxt, H245H263Options_customPictureFormat* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 16, 0 };
|
|
int stat = ASN_OK;
|
|
H245CustomPictureFormat* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245CustomPictureFormat);
|
|
|
|
stat = asn1PD_H245CustomPictureFormat (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H263Version3Options */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H263Version3Options (OOCTXT* pctxt, H245H263Version3Options* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode dataPartitionedSlices */
|
|
|
|
invokeStartElement (pctxt, "dataPartitionedSlices", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->dataPartitionedSlices);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->dataPartitionedSlices);
|
|
|
|
invokeEndElement (pctxt, "dataPartitionedSlices", -1);
|
|
|
|
/* decode fixedPointIDCT0 */
|
|
|
|
invokeStartElement (pctxt, "fixedPointIDCT0", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->fixedPointIDCT0);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->fixedPointIDCT0);
|
|
|
|
invokeEndElement (pctxt, "fixedPointIDCT0", -1);
|
|
|
|
/* decode interlacedFields */
|
|
|
|
invokeStartElement (pctxt, "interlacedFields", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->interlacedFields);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->interlacedFields);
|
|
|
|
invokeEndElement (pctxt, "interlacedFields", -1);
|
|
|
|
/* decode currentPictureHeaderRepetition */
|
|
|
|
invokeStartElement (pctxt, "currentPictureHeaderRepetition", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->currentPictureHeaderRepetition);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->currentPictureHeaderRepetition);
|
|
|
|
invokeEndElement (pctxt, "currentPictureHeaderRepetition", -1);
|
|
|
|
/* decode previousPictureHeaderRepetition */
|
|
|
|
invokeStartElement (pctxt, "previousPictureHeaderRepetition", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->previousPictureHeaderRepetition);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->previousPictureHeaderRepetition);
|
|
|
|
invokeEndElement (pctxt, "previousPictureHeaderRepetition", -1);
|
|
|
|
/* decode nextPictureHeaderRepetition */
|
|
|
|
invokeStartElement (pctxt, "nextPictureHeaderRepetition", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->nextPictureHeaderRepetition);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->nextPictureHeaderRepetition);
|
|
|
|
invokeEndElement (pctxt, "nextPictureHeaderRepetition", -1);
|
|
|
|
/* decode pictureNumber */
|
|
|
|
invokeStartElement (pctxt, "pictureNumber", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->pictureNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->pictureNumber);
|
|
|
|
invokeEndElement (pctxt, "pictureNumber", -1);
|
|
|
|
/* decode spareReferencePictures */
|
|
|
|
invokeStartElement (pctxt, "spareReferencePictures", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->spareReferencePictures);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->spareReferencePictures);
|
|
|
|
invokeEndElement (pctxt, "spareReferencePictures", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H263ModeComboFlags */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H263ModeComboFlags (OOCTXT* pctxt, H245H263ModeComboFlags* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
/* decode unrestrictedVector */
|
|
|
|
invokeStartElement (pctxt, "unrestrictedVector", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->unrestrictedVector);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->unrestrictedVector);
|
|
|
|
invokeEndElement (pctxt, "unrestrictedVector", -1);
|
|
|
|
/* decode arithmeticCoding */
|
|
|
|
invokeStartElement (pctxt, "arithmeticCoding", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->arithmeticCoding);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->arithmeticCoding);
|
|
|
|
invokeEndElement (pctxt, "arithmeticCoding", -1);
|
|
|
|
/* decode advancedPrediction */
|
|
|
|
invokeStartElement (pctxt, "advancedPrediction", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->advancedPrediction);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->advancedPrediction);
|
|
|
|
invokeEndElement (pctxt, "advancedPrediction", -1);
|
|
|
|
/* decode pbFrames */
|
|
|
|
invokeStartElement (pctxt, "pbFrames", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->pbFrames);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->pbFrames);
|
|
|
|
invokeEndElement (pctxt, "pbFrames", -1);
|
|
|
|
/* decode advancedIntraCodingMode */
|
|
|
|
invokeStartElement (pctxt, "advancedIntraCodingMode", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->advancedIntraCodingMode);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->advancedIntraCodingMode);
|
|
|
|
invokeEndElement (pctxt, "advancedIntraCodingMode", -1);
|
|
|
|
/* decode deblockingFilterMode */
|
|
|
|
invokeStartElement (pctxt, "deblockingFilterMode", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->deblockingFilterMode);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->deblockingFilterMode);
|
|
|
|
invokeEndElement (pctxt, "deblockingFilterMode", -1);
|
|
|
|
/* decode unlimitedMotionVectors */
|
|
|
|
invokeStartElement (pctxt, "unlimitedMotionVectors", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->unlimitedMotionVectors);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->unlimitedMotionVectors);
|
|
|
|
invokeEndElement (pctxt, "unlimitedMotionVectors", -1);
|
|
|
|
/* decode slicesInOrder_NonRect */
|
|
|
|
invokeStartElement (pctxt, "slicesInOrder_NonRect", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->slicesInOrder_NonRect);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->slicesInOrder_NonRect);
|
|
|
|
invokeEndElement (pctxt, "slicesInOrder_NonRect", -1);
|
|
|
|
/* decode slicesInOrder_Rect */
|
|
|
|
invokeStartElement (pctxt, "slicesInOrder_Rect", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->slicesInOrder_Rect);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->slicesInOrder_Rect);
|
|
|
|
invokeEndElement (pctxt, "slicesInOrder_Rect", -1);
|
|
|
|
/* decode slicesNoOrder_NonRect */
|
|
|
|
invokeStartElement (pctxt, "slicesNoOrder_NonRect", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->slicesNoOrder_NonRect);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->slicesNoOrder_NonRect);
|
|
|
|
invokeEndElement (pctxt, "slicesNoOrder_NonRect", -1);
|
|
|
|
/* decode slicesNoOrder_Rect */
|
|
|
|
invokeStartElement (pctxt, "slicesNoOrder_Rect", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->slicesNoOrder_Rect);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->slicesNoOrder_Rect);
|
|
|
|
invokeEndElement (pctxt, "slicesNoOrder_Rect", -1);
|
|
|
|
/* decode improvedPBFramesMode */
|
|
|
|
invokeStartElement (pctxt, "improvedPBFramesMode", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->improvedPBFramesMode);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->improvedPBFramesMode);
|
|
|
|
invokeEndElement (pctxt, "improvedPBFramesMode", -1);
|
|
|
|
/* decode referencePicSelect */
|
|
|
|
invokeStartElement (pctxt, "referencePicSelect", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->referencePicSelect);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->referencePicSelect);
|
|
|
|
invokeEndElement (pctxt, "referencePicSelect", -1);
|
|
|
|
/* decode dynamicPictureResizingByFour */
|
|
|
|
invokeStartElement (pctxt, "dynamicPictureResizingByFour", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->dynamicPictureResizingByFour);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->dynamicPictureResizingByFour);
|
|
|
|
invokeEndElement (pctxt, "dynamicPictureResizingByFour", -1);
|
|
|
|
/* decode dynamicPictureResizingSixteenthPel */
|
|
|
|
invokeStartElement (pctxt, "dynamicPictureResizingSixteenthPel", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->dynamicPictureResizingSixteenthPel);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->dynamicPictureResizingSixteenthPel);
|
|
|
|
invokeEndElement (pctxt, "dynamicPictureResizingSixteenthPel", -1);
|
|
|
|
/* decode dynamicWarpingHalfPel */
|
|
|
|
invokeStartElement (pctxt, "dynamicWarpingHalfPel", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->dynamicWarpingHalfPel);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->dynamicWarpingHalfPel);
|
|
|
|
invokeEndElement (pctxt, "dynamicWarpingHalfPel", -1);
|
|
|
|
/* decode dynamicWarpingSixteenthPel */
|
|
|
|
invokeStartElement (pctxt, "dynamicWarpingSixteenthPel", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->dynamicWarpingSixteenthPel);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->dynamicWarpingSixteenthPel);
|
|
|
|
invokeEndElement (pctxt, "dynamicWarpingSixteenthPel", -1);
|
|
|
|
/* decode reducedResolutionUpdate */
|
|
|
|
invokeStartElement (pctxt, "reducedResolutionUpdate", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->reducedResolutionUpdate);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->reducedResolutionUpdate);
|
|
|
|
invokeEndElement (pctxt, "reducedResolutionUpdate", -1);
|
|
|
|
/* decode independentSegmentDecoding */
|
|
|
|
invokeStartElement (pctxt, "independentSegmentDecoding", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->independentSegmentDecoding);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->independentSegmentDecoding);
|
|
|
|
invokeEndElement (pctxt, "independentSegmentDecoding", -1);
|
|
|
|
/* decode alternateInterVLCMode */
|
|
|
|
invokeStartElement (pctxt, "alternateInterVLCMode", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->alternateInterVLCMode);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->alternateInterVLCMode);
|
|
|
|
invokeEndElement (pctxt, "alternateInterVLCMode", -1);
|
|
|
|
/* decode modifiedQuantizationMode */
|
|
|
|
invokeStartElement (pctxt, "modifiedQuantizationMode", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->modifiedQuantizationMode);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->modifiedQuantizationMode);
|
|
|
|
invokeEndElement (pctxt, "modifiedQuantizationMode", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 2 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.enhancedReferencePicSelectPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "enhancedReferencePicSelect", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->enhancedReferencePicSelect);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->enhancedReferencePicSelect);
|
|
|
|
invokeEndElement (pctxt, "enhancedReferencePicSelect", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.h263Version3OptionsPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "h263Version3Options", -1);
|
|
|
|
stat = asn1PD_H245H263Version3Options (pctxt, &pvalue->h263Version3Options);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h263Version3Options", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H263VideoModeCombos_h263VideoCoupledModes */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H263VideoModeCombos_h263VideoCoupledModes (OOCTXT* pctxt, H245H263VideoModeCombos_h263VideoCoupledModes* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 16, 0 };
|
|
int stat = ASN_OK;
|
|
H245H263ModeComboFlags* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245H263ModeComboFlags);
|
|
|
|
stat = asn1PD_H245H263ModeComboFlags (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H263VideoModeCombos */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H263VideoModeCombos (OOCTXT* pctxt, H245H263VideoModeCombos* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode h263VideoUncoupledModes */
|
|
|
|
invokeStartElement (pctxt, "h263VideoUncoupledModes", -1);
|
|
|
|
stat = asn1PD_H245H263ModeComboFlags (pctxt, &pvalue->h263VideoUncoupledModes);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h263VideoUncoupledModes", -1);
|
|
|
|
/* decode h263VideoCoupledModes */
|
|
|
|
invokeStartElement (pctxt, "h263VideoCoupledModes", -1);
|
|
|
|
stat = asn1PD_H245H263VideoModeCombos_h263VideoCoupledModes (pctxt, &pvalue->h263VideoCoupledModes);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h263VideoCoupledModes", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H263Options_modeCombos */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H263Options_modeCombos (OOCTXT* pctxt, H245H263Options_modeCombos* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 16, 0 };
|
|
int stat = ASN_OK;
|
|
H245H263VideoModeCombos* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245H263VideoModeCombos);
|
|
|
|
stat = asn1PD_H245H263VideoModeCombos (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H263Options */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H263Options (OOCTXT* pctxt, H245H263Options* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.transparencyParametersPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.refPictureSelectionPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.customPictureClockFrequencyPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.customPictureFormatPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.modeCombosPresent = optbit;
|
|
|
|
/* decode advancedIntraCodingMode */
|
|
|
|
invokeStartElement (pctxt, "advancedIntraCodingMode", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->advancedIntraCodingMode);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->advancedIntraCodingMode);
|
|
|
|
invokeEndElement (pctxt, "advancedIntraCodingMode", -1);
|
|
|
|
/* decode deblockingFilterMode */
|
|
|
|
invokeStartElement (pctxt, "deblockingFilterMode", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->deblockingFilterMode);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->deblockingFilterMode);
|
|
|
|
invokeEndElement (pctxt, "deblockingFilterMode", -1);
|
|
|
|
/* decode improvedPBFramesMode */
|
|
|
|
invokeStartElement (pctxt, "improvedPBFramesMode", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->improvedPBFramesMode);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->improvedPBFramesMode);
|
|
|
|
invokeEndElement (pctxt, "improvedPBFramesMode", -1);
|
|
|
|
/* decode unlimitedMotionVectors */
|
|
|
|
invokeStartElement (pctxt, "unlimitedMotionVectors", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->unlimitedMotionVectors);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->unlimitedMotionVectors);
|
|
|
|
invokeEndElement (pctxt, "unlimitedMotionVectors", -1);
|
|
|
|
/* decode fullPictureFreeze */
|
|
|
|
invokeStartElement (pctxt, "fullPictureFreeze", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->fullPictureFreeze);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->fullPictureFreeze);
|
|
|
|
invokeEndElement (pctxt, "fullPictureFreeze", -1);
|
|
|
|
/* decode partialPictureFreezeAndRelease */
|
|
|
|
invokeStartElement (pctxt, "partialPictureFreezeAndRelease", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->partialPictureFreezeAndRelease);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->partialPictureFreezeAndRelease);
|
|
|
|
invokeEndElement (pctxt, "partialPictureFreezeAndRelease", -1);
|
|
|
|
/* decode resizingPartPicFreezeAndRelease */
|
|
|
|
invokeStartElement (pctxt, "resizingPartPicFreezeAndRelease", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->resizingPartPicFreezeAndRelease);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->resizingPartPicFreezeAndRelease);
|
|
|
|
invokeEndElement (pctxt, "resizingPartPicFreezeAndRelease", -1);
|
|
|
|
/* decode fullPictureSnapshot */
|
|
|
|
invokeStartElement (pctxt, "fullPictureSnapshot", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->fullPictureSnapshot);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->fullPictureSnapshot);
|
|
|
|
invokeEndElement (pctxt, "fullPictureSnapshot", -1);
|
|
|
|
/* decode partialPictureSnapshot */
|
|
|
|
invokeStartElement (pctxt, "partialPictureSnapshot", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->partialPictureSnapshot);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->partialPictureSnapshot);
|
|
|
|
invokeEndElement (pctxt, "partialPictureSnapshot", -1);
|
|
|
|
/* decode videoSegmentTagging */
|
|
|
|
invokeStartElement (pctxt, "videoSegmentTagging", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->videoSegmentTagging);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->videoSegmentTagging);
|
|
|
|
invokeEndElement (pctxt, "videoSegmentTagging", -1);
|
|
|
|
/* decode progressiveRefinement */
|
|
|
|
invokeStartElement (pctxt, "progressiveRefinement", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->progressiveRefinement);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->progressiveRefinement);
|
|
|
|
invokeEndElement (pctxt, "progressiveRefinement", -1);
|
|
|
|
/* decode dynamicPictureResizingByFour */
|
|
|
|
invokeStartElement (pctxt, "dynamicPictureResizingByFour", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->dynamicPictureResizingByFour);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->dynamicPictureResizingByFour);
|
|
|
|
invokeEndElement (pctxt, "dynamicPictureResizingByFour", -1);
|
|
|
|
/* decode dynamicPictureResizingSixteenthPel */
|
|
|
|
invokeStartElement (pctxt, "dynamicPictureResizingSixteenthPel", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->dynamicPictureResizingSixteenthPel);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->dynamicPictureResizingSixteenthPel);
|
|
|
|
invokeEndElement (pctxt, "dynamicPictureResizingSixteenthPel", -1);
|
|
|
|
/* decode dynamicWarpingHalfPel */
|
|
|
|
invokeStartElement (pctxt, "dynamicWarpingHalfPel", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->dynamicWarpingHalfPel);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->dynamicWarpingHalfPel);
|
|
|
|
invokeEndElement (pctxt, "dynamicWarpingHalfPel", -1);
|
|
|
|
/* decode dynamicWarpingSixteenthPel */
|
|
|
|
invokeStartElement (pctxt, "dynamicWarpingSixteenthPel", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->dynamicWarpingSixteenthPel);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->dynamicWarpingSixteenthPel);
|
|
|
|
invokeEndElement (pctxt, "dynamicWarpingSixteenthPel", -1);
|
|
|
|
/* decode independentSegmentDecoding */
|
|
|
|
invokeStartElement (pctxt, "independentSegmentDecoding", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->independentSegmentDecoding);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->independentSegmentDecoding);
|
|
|
|
invokeEndElement (pctxt, "independentSegmentDecoding", -1);
|
|
|
|
/* decode slicesInOrder_NonRect */
|
|
|
|
invokeStartElement (pctxt, "slicesInOrder_NonRect", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->slicesInOrder_NonRect);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->slicesInOrder_NonRect);
|
|
|
|
invokeEndElement (pctxt, "slicesInOrder_NonRect", -1);
|
|
|
|
/* decode slicesInOrder_Rect */
|
|
|
|
invokeStartElement (pctxt, "slicesInOrder_Rect", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->slicesInOrder_Rect);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->slicesInOrder_Rect);
|
|
|
|
invokeEndElement (pctxt, "slicesInOrder_Rect", -1);
|
|
|
|
/* decode slicesNoOrder_NonRect */
|
|
|
|
invokeStartElement (pctxt, "slicesNoOrder_NonRect", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->slicesNoOrder_NonRect);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->slicesNoOrder_NonRect);
|
|
|
|
invokeEndElement (pctxt, "slicesNoOrder_NonRect", -1);
|
|
|
|
/* decode slicesNoOrder_Rect */
|
|
|
|
invokeStartElement (pctxt, "slicesNoOrder_Rect", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->slicesNoOrder_Rect);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->slicesNoOrder_Rect);
|
|
|
|
invokeEndElement (pctxt, "slicesNoOrder_Rect", -1);
|
|
|
|
/* decode alternateInterVLCMode */
|
|
|
|
invokeStartElement (pctxt, "alternateInterVLCMode", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->alternateInterVLCMode);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->alternateInterVLCMode);
|
|
|
|
invokeEndElement (pctxt, "alternateInterVLCMode", -1);
|
|
|
|
/* decode modifiedQuantizationMode */
|
|
|
|
invokeStartElement (pctxt, "modifiedQuantizationMode", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->modifiedQuantizationMode);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->modifiedQuantizationMode);
|
|
|
|
invokeEndElement (pctxt, "modifiedQuantizationMode", -1);
|
|
|
|
/* decode reducedResolutionUpdate */
|
|
|
|
invokeStartElement (pctxt, "reducedResolutionUpdate", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->reducedResolutionUpdate);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->reducedResolutionUpdate);
|
|
|
|
invokeEndElement (pctxt, "reducedResolutionUpdate", -1);
|
|
|
|
/* decode transparencyParameters */
|
|
|
|
if (pvalue->m.transparencyParametersPresent) {
|
|
invokeStartElement (pctxt, "transparencyParameters", -1);
|
|
|
|
stat = asn1PD_H245TransparencyParameters (pctxt, &pvalue->transparencyParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "transparencyParameters", -1);
|
|
}
|
|
|
|
/* decode separateVideoBackChannel */
|
|
|
|
invokeStartElement (pctxt, "separateVideoBackChannel", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->separateVideoBackChannel);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->separateVideoBackChannel);
|
|
|
|
invokeEndElement (pctxt, "separateVideoBackChannel", -1);
|
|
|
|
/* decode refPictureSelection */
|
|
|
|
if (pvalue->m.refPictureSelectionPresent) {
|
|
invokeStartElement (pctxt, "refPictureSelection", -1);
|
|
|
|
stat = asn1PD_H245RefPictureSelection (pctxt, &pvalue->refPictureSelection);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "refPictureSelection", -1);
|
|
}
|
|
|
|
/* decode customPictureClockFrequency */
|
|
|
|
if (pvalue->m.customPictureClockFrequencyPresent) {
|
|
invokeStartElement (pctxt, "customPictureClockFrequency", -1);
|
|
|
|
stat = asn1PD_H245H263Options_customPictureClockFrequency (pctxt, &pvalue->customPictureClockFrequency);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "customPictureClockFrequency", -1);
|
|
}
|
|
|
|
/* decode customPictureFormat */
|
|
|
|
if (pvalue->m.customPictureFormatPresent) {
|
|
invokeStartElement (pctxt, "customPictureFormat", -1);
|
|
|
|
stat = asn1PD_H245H263Options_customPictureFormat (pctxt, &pvalue->customPictureFormat);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "customPictureFormat", -1);
|
|
}
|
|
|
|
/* decode modeCombos */
|
|
|
|
if (pvalue->m.modeCombosPresent) {
|
|
invokeStartElement (pctxt, "modeCombos", -1);
|
|
|
|
stat = asn1PD_H245H263Options_modeCombos (pctxt, &pvalue->modeCombos);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "modeCombos", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 2 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.videoBadMBsCapPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "videoBadMBsCap", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->videoBadMBsCap);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->videoBadMBsCap);
|
|
|
|
invokeEndElement (pctxt, "videoBadMBsCap", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.h263Version3OptionsPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "h263Version3Options", -1);
|
|
|
|
stat = asn1PD_H245H263Version3Options (pctxt, &pvalue->h263Version3Options);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h263Version3Options", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EnhancementOptions */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EnhancementOptions (OOCTXT* pctxt, H245EnhancementOptions* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.sqcifMPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.qcifMPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.cifMPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.cif4MPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.cif16MPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.slowSqcifMPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.slowQcifMPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.slowCifMPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.slowCif4MPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.slowCif16MPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.h263OptionsPresent = optbit;
|
|
|
|
/* decode sqcifMPI */
|
|
|
|
if (pvalue->m.sqcifMPIPresent) {
|
|
invokeStartElement (pctxt, "sqcifMPI", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->sqcifMPI, 1U, 32U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sqcifMPI);
|
|
|
|
invokeEndElement (pctxt, "sqcifMPI", -1);
|
|
}
|
|
|
|
/* decode qcifMPI */
|
|
|
|
if (pvalue->m.qcifMPIPresent) {
|
|
invokeStartElement (pctxt, "qcifMPI", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->qcifMPI, 1U, 32U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->qcifMPI);
|
|
|
|
invokeEndElement (pctxt, "qcifMPI", -1);
|
|
}
|
|
|
|
/* decode cifMPI */
|
|
|
|
if (pvalue->m.cifMPIPresent) {
|
|
invokeStartElement (pctxt, "cifMPI", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->cifMPI, 1U, 32U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->cifMPI);
|
|
|
|
invokeEndElement (pctxt, "cifMPI", -1);
|
|
}
|
|
|
|
/* decode cif4MPI */
|
|
|
|
if (pvalue->m.cif4MPIPresent) {
|
|
invokeStartElement (pctxt, "cif4MPI", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->cif4MPI, 1U, 32U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->cif4MPI);
|
|
|
|
invokeEndElement (pctxt, "cif4MPI", -1);
|
|
}
|
|
|
|
/* decode cif16MPI */
|
|
|
|
if (pvalue->m.cif16MPIPresent) {
|
|
invokeStartElement (pctxt, "cif16MPI", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->cif16MPI, 1U, 32U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->cif16MPI);
|
|
|
|
invokeEndElement (pctxt, "cif16MPI", -1);
|
|
}
|
|
|
|
/* decode maxBitRate */
|
|
|
|
invokeStartElement (pctxt, "maxBitRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->maxBitRate, 1U, 192400U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maxBitRate);
|
|
|
|
invokeEndElement (pctxt, "maxBitRate", -1);
|
|
|
|
/* decode unrestrictedVector */
|
|
|
|
invokeStartElement (pctxt, "unrestrictedVector", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->unrestrictedVector);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->unrestrictedVector);
|
|
|
|
invokeEndElement (pctxt, "unrestrictedVector", -1);
|
|
|
|
/* decode arithmeticCoding */
|
|
|
|
invokeStartElement (pctxt, "arithmeticCoding", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->arithmeticCoding);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->arithmeticCoding);
|
|
|
|
invokeEndElement (pctxt, "arithmeticCoding", -1);
|
|
|
|
/* decode temporalSpatialTradeOffCapability */
|
|
|
|
invokeStartElement (pctxt, "temporalSpatialTradeOffCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->temporalSpatialTradeOffCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->temporalSpatialTradeOffCapability);
|
|
|
|
invokeEndElement (pctxt, "temporalSpatialTradeOffCapability", -1);
|
|
|
|
/* decode slowSqcifMPI */
|
|
|
|
if (pvalue->m.slowSqcifMPIPresent) {
|
|
invokeStartElement (pctxt, "slowSqcifMPI", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->slowSqcifMPI, 1U, 3600U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->slowSqcifMPI);
|
|
|
|
invokeEndElement (pctxt, "slowSqcifMPI", -1);
|
|
}
|
|
|
|
/* decode slowQcifMPI */
|
|
|
|
if (pvalue->m.slowQcifMPIPresent) {
|
|
invokeStartElement (pctxt, "slowQcifMPI", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->slowQcifMPI, 1U, 3600U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->slowQcifMPI);
|
|
|
|
invokeEndElement (pctxt, "slowQcifMPI", -1);
|
|
}
|
|
|
|
/* decode slowCifMPI */
|
|
|
|
if (pvalue->m.slowCifMPIPresent) {
|
|
invokeStartElement (pctxt, "slowCifMPI", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->slowCifMPI, 1U, 3600U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->slowCifMPI);
|
|
|
|
invokeEndElement (pctxt, "slowCifMPI", -1);
|
|
}
|
|
|
|
/* decode slowCif4MPI */
|
|
|
|
if (pvalue->m.slowCif4MPIPresent) {
|
|
invokeStartElement (pctxt, "slowCif4MPI", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->slowCif4MPI, 1U, 3600U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->slowCif4MPI);
|
|
|
|
invokeEndElement (pctxt, "slowCif4MPI", -1);
|
|
}
|
|
|
|
/* decode slowCif16MPI */
|
|
|
|
if (pvalue->m.slowCif16MPIPresent) {
|
|
invokeStartElement (pctxt, "slowCif16MPI", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->slowCif16MPI, 1U, 3600U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->slowCif16MPI);
|
|
|
|
invokeEndElement (pctxt, "slowCif16MPI", -1);
|
|
}
|
|
|
|
/* decode errorCompensation */
|
|
|
|
invokeStartElement (pctxt, "errorCompensation", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->errorCompensation);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->errorCompensation);
|
|
|
|
invokeEndElement (pctxt, "errorCompensation", -1);
|
|
|
|
/* decode h263Options */
|
|
|
|
if (pvalue->m.h263OptionsPresent) {
|
|
invokeStartElement (pctxt, "h263Options", -1);
|
|
|
|
stat = asn1PD_H245H263Options (pctxt, &pvalue->h263Options);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h263Options", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EnhancementLayerInfo_snrEnhancement */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EnhancementLayerInfo_snrEnhancement (OOCTXT* pctxt, H245EnhancementLayerInfo_snrEnhancement* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 14, 0 };
|
|
int stat = ASN_OK;
|
|
H245EnhancementOptions* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245EnhancementOptions);
|
|
|
|
stat = asn1PD_H245EnhancementOptions (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EnhancementLayerInfo_spatialEnhancement */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EnhancementLayerInfo_spatialEnhancement (OOCTXT* pctxt, H245EnhancementLayerInfo_spatialEnhancement* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 14, 0 };
|
|
int stat = ASN_OK;
|
|
H245EnhancementOptions* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245EnhancementOptions);
|
|
|
|
stat = asn1PD_H245EnhancementOptions (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* BEnhancementParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245BEnhancementParameters (OOCTXT* pctxt, H245BEnhancementParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode enhancementOptions */
|
|
|
|
invokeStartElement (pctxt, "enhancementOptions", -1);
|
|
|
|
stat = asn1PD_H245EnhancementOptions (pctxt, &pvalue->enhancementOptions);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "enhancementOptions", -1);
|
|
|
|
/* decode numberOfBPictures */
|
|
|
|
invokeStartElement (pctxt, "numberOfBPictures", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->numberOfBPictures, 1U, 64U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->numberOfBPictures);
|
|
|
|
invokeEndElement (pctxt, "numberOfBPictures", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EnhancementLayerInfo_bPictureEnhancement */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EnhancementLayerInfo_bPictureEnhancement (OOCTXT* pctxt, H245EnhancementLayerInfo_bPictureEnhancement* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 14, 0 };
|
|
int stat = ASN_OK;
|
|
H245BEnhancementParameters* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245BEnhancementParameters);
|
|
|
|
stat = asn1PD_H245BEnhancementParameters (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EnhancementLayerInfo */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EnhancementLayerInfo (OOCTXT* pctxt, H245EnhancementLayerInfo* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.snrEnhancementPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.spatialEnhancementPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.bPictureEnhancementPresent = optbit;
|
|
|
|
/* decode baseBitRateConstrained */
|
|
|
|
invokeStartElement (pctxt, "baseBitRateConstrained", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->baseBitRateConstrained);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->baseBitRateConstrained);
|
|
|
|
invokeEndElement (pctxt, "baseBitRateConstrained", -1);
|
|
|
|
/* decode snrEnhancement */
|
|
|
|
if (pvalue->m.snrEnhancementPresent) {
|
|
invokeStartElement (pctxt, "snrEnhancement", -1);
|
|
|
|
stat = asn1PD_H245EnhancementLayerInfo_snrEnhancement (pctxt, &pvalue->snrEnhancement);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "snrEnhancement", -1);
|
|
}
|
|
|
|
/* decode spatialEnhancement */
|
|
|
|
if (pvalue->m.spatialEnhancementPresent) {
|
|
invokeStartElement (pctxt, "spatialEnhancement", -1);
|
|
|
|
stat = asn1PD_H245EnhancementLayerInfo_spatialEnhancement (pctxt, &pvalue->spatialEnhancement);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "spatialEnhancement", -1);
|
|
}
|
|
|
|
/* decode bPictureEnhancement */
|
|
|
|
if (pvalue->m.bPictureEnhancementPresent) {
|
|
invokeStartElement (pctxt, "bPictureEnhancement", -1);
|
|
|
|
stat = asn1PD_H245EnhancementLayerInfo_bPictureEnhancement (pctxt, &pvalue->bPictureEnhancement);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "bPictureEnhancement", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H263VideoCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H263VideoCapability (OOCTXT* pctxt, H245H263VideoCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.sqcifMPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.qcifMPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.cifMPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.cif4MPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.cif16MPIPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.hrd_BPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.bppMaxKbPresent = optbit;
|
|
|
|
/* decode sqcifMPI */
|
|
|
|
if (pvalue->m.sqcifMPIPresent) {
|
|
invokeStartElement (pctxt, "sqcifMPI", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->sqcifMPI, 1U, 32U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sqcifMPI);
|
|
|
|
invokeEndElement (pctxt, "sqcifMPI", -1);
|
|
}
|
|
|
|
/* decode qcifMPI */
|
|
|
|
if (pvalue->m.qcifMPIPresent) {
|
|
invokeStartElement (pctxt, "qcifMPI", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->qcifMPI, 1U, 32U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->qcifMPI);
|
|
|
|
invokeEndElement (pctxt, "qcifMPI", -1);
|
|
}
|
|
|
|
/* decode cifMPI */
|
|
|
|
if (pvalue->m.cifMPIPresent) {
|
|
invokeStartElement (pctxt, "cifMPI", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->cifMPI, 1U, 32U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->cifMPI);
|
|
|
|
invokeEndElement (pctxt, "cifMPI", -1);
|
|
}
|
|
|
|
/* decode cif4MPI */
|
|
|
|
if (pvalue->m.cif4MPIPresent) {
|
|
invokeStartElement (pctxt, "cif4MPI", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->cif4MPI, 1U, 32U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->cif4MPI);
|
|
|
|
invokeEndElement (pctxt, "cif4MPI", -1);
|
|
}
|
|
|
|
/* decode cif16MPI */
|
|
|
|
if (pvalue->m.cif16MPIPresent) {
|
|
invokeStartElement (pctxt, "cif16MPI", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->cif16MPI, 1U, 32U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->cif16MPI);
|
|
|
|
invokeEndElement (pctxt, "cif16MPI", -1);
|
|
}
|
|
|
|
/* decode maxBitRate */
|
|
|
|
invokeStartElement (pctxt, "maxBitRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->maxBitRate, 1U, 192400U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maxBitRate);
|
|
|
|
invokeEndElement (pctxt, "maxBitRate", -1);
|
|
|
|
/* decode unrestrictedVector */
|
|
|
|
invokeStartElement (pctxt, "unrestrictedVector", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->unrestrictedVector);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->unrestrictedVector);
|
|
|
|
invokeEndElement (pctxt, "unrestrictedVector", -1);
|
|
|
|
/* decode arithmeticCoding */
|
|
|
|
invokeStartElement (pctxt, "arithmeticCoding", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->arithmeticCoding);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->arithmeticCoding);
|
|
|
|
invokeEndElement (pctxt, "arithmeticCoding", -1);
|
|
|
|
/* decode advancedPrediction */
|
|
|
|
invokeStartElement (pctxt, "advancedPrediction", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->advancedPrediction);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->advancedPrediction);
|
|
|
|
invokeEndElement (pctxt, "advancedPrediction", -1);
|
|
|
|
/* decode pbFrames */
|
|
|
|
invokeStartElement (pctxt, "pbFrames", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->pbFrames);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->pbFrames);
|
|
|
|
invokeEndElement (pctxt, "pbFrames", -1);
|
|
|
|
/* decode temporalSpatialTradeOffCapability */
|
|
|
|
invokeStartElement (pctxt, "temporalSpatialTradeOffCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->temporalSpatialTradeOffCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->temporalSpatialTradeOffCapability);
|
|
|
|
invokeEndElement (pctxt, "temporalSpatialTradeOffCapability", -1);
|
|
|
|
/* decode hrd_B */
|
|
|
|
if (pvalue->m.hrd_BPresent) {
|
|
invokeStartElement (pctxt, "hrd_B", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->hrd_B, 0U, 524287U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->hrd_B);
|
|
|
|
invokeEndElement (pctxt, "hrd_B", -1);
|
|
}
|
|
|
|
/* decode bppMaxKb */
|
|
|
|
if (pvalue->m.bppMaxKbPresent) {
|
|
invokeStartElement (pctxt, "bppMaxKb", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->bppMaxKb, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->bppMaxKb);
|
|
|
|
invokeEndElement (pctxt, "bppMaxKb", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 8 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.slowSqcifMPIPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "slowSqcifMPI", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->slowSqcifMPI, 1U, 3600U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->slowSqcifMPI);
|
|
|
|
invokeEndElement (pctxt, "slowSqcifMPI", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.slowQcifMPIPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "slowQcifMPI", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->slowQcifMPI, 1U, 3600U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->slowQcifMPI);
|
|
|
|
invokeEndElement (pctxt, "slowQcifMPI", -1);
|
|
break;
|
|
|
|
case 2:
|
|
pvalue->m.slowCifMPIPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "slowCifMPI", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->slowCifMPI, 1U, 3600U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->slowCifMPI);
|
|
|
|
invokeEndElement (pctxt, "slowCifMPI", -1);
|
|
break;
|
|
|
|
case 3:
|
|
pvalue->m.slowCif4MPIPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "slowCif4MPI", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->slowCif4MPI, 1U, 3600U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->slowCif4MPI);
|
|
|
|
invokeEndElement (pctxt, "slowCif4MPI", -1);
|
|
break;
|
|
|
|
case 4:
|
|
pvalue->m.slowCif16MPIPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "slowCif16MPI", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->slowCif16MPI, 1U, 3600U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->slowCif16MPI);
|
|
|
|
invokeEndElement (pctxt, "slowCif16MPI", -1);
|
|
break;
|
|
|
|
case 5:
|
|
pvalue->m.errorCompensationPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "errorCompensation", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->errorCompensation);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->errorCompensation);
|
|
|
|
invokeEndElement (pctxt, "errorCompensation", -1);
|
|
break;
|
|
|
|
case 6:
|
|
pvalue->m.enhancementLayerInfoPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "enhancementLayerInfo", -1);
|
|
|
|
stat = asn1PD_H245EnhancementLayerInfo (pctxt, &pvalue->enhancementLayerInfo);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "enhancementLayerInfo", -1);
|
|
break;
|
|
|
|
case 7:
|
|
pvalue->m.h263OptionsPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "h263Options", -1);
|
|
|
|
stat = asn1PD_H245H263Options (pctxt, &pvalue->h263Options);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h263Options", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* IS11172VideoCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245IS11172VideoCapability (OOCTXT* pctxt, H245IS11172VideoCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.videoBitRatePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.vbvBufferSizePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.samplesPerLinePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.linesPerFramePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.pictureRatePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.luminanceSampleRatePresent = optbit;
|
|
|
|
/* decode constrainedBitstream */
|
|
|
|
invokeStartElement (pctxt, "constrainedBitstream", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->constrainedBitstream);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->constrainedBitstream);
|
|
|
|
invokeEndElement (pctxt, "constrainedBitstream", -1);
|
|
|
|
/* decode videoBitRate */
|
|
|
|
if (pvalue->m.videoBitRatePresent) {
|
|
invokeStartElement (pctxt, "videoBitRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->videoBitRate, 0U, 1073741823U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->videoBitRate);
|
|
|
|
invokeEndElement (pctxt, "videoBitRate", -1);
|
|
}
|
|
|
|
/* decode vbvBufferSize */
|
|
|
|
if (pvalue->m.vbvBufferSizePresent) {
|
|
invokeStartElement (pctxt, "vbvBufferSize", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->vbvBufferSize, 0U, 262143U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->vbvBufferSize);
|
|
|
|
invokeEndElement (pctxt, "vbvBufferSize", -1);
|
|
}
|
|
|
|
/* decode samplesPerLine */
|
|
|
|
if (pvalue->m.samplesPerLinePresent) {
|
|
invokeStartElement (pctxt, "samplesPerLine", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->samplesPerLine, 0U, 16383U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->samplesPerLine);
|
|
|
|
invokeEndElement (pctxt, "samplesPerLine", -1);
|
|
}
|
|
|
|
/* decode linesPerFrame */
|
|
|
|
if (pvalue->m.linesPerFramePresent) {
|
|
invokeStartElement (pctxt, "linesPerFrame", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->linesPerFrame, 0U, 16383U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->linesPerFrame);
|
|
|
|
invokeEndElement (pctxt, "linesPerFrame", -1);
|
|
}
|
|
|
|
/* decode pictureRate */
|
|
|
|
if (pvalue->m.pictureRatePresent) {
|
|
invokeStartElement (pctxt, "pictureRate", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->pictureRate, 0U, 15U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->pictureRate);
|
|
|
|
invokeEndElement (pctxt, "pictureRate", -1);
|
|
}
|
|
|
|
/* decode luminanceSampleRate */
|
|
|
|
if (pvalue->m.luminanceSampleRatePresent) {
|
|
invokeStartElement (pctxt, "luminanceSampleRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->luminanceSampleRate, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->luminanceSampleRate);
|
|
|
|
invokeEndElement (pctxt, "luminanceSampleRate", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 1 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.videoBadMBsCapPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "videoBadMBsCap", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->videoBadMBsCap);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->videoBadMBsCap);
|
|
|
|
invokeEndElement (pctxt, "videoBadMBsCap", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VideoCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245VideoCapability (OOCTXT* pctxt, H245VideoCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* h261VideoCapability */
|
|
case 1:
|
|
invokeStartElement (pctxt, "h261VideoCapability", -1);
|
|
|
|
pvalue->u.h261VideoCapability = ALLOC_ASN1ELEM (pctxt, H245H261VideoCapability);
|
|
|
|
stat = asn1PD_H245H261VideoCapability (pctxt, pvalue->u.h261VideoCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h261VideoCapability", -1);
|
|
|
|
break;
|
|
|
|
/* h262VideoCapability */
|
|
case 2:
|
|
invokeStartElement (pctxt, "h262VideoCapability", -1);
|
|
|
|
pvalue->u.h262VideoCapability = ALLOC_ASN1ELEM (pctxt, H245H262VideoCapability);
|
|
|
|
stat = asn1PD_H245H262VideoCapability (pctxt, pvalue->u.h262VideoCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h262VideoCapability", -1);
|
|
|
|
break;
|
|
|
|
/* h263VideoCapability */
|
|
case 3:
|
|
invokeStartElement (pctxt, "h263VideoCapability", -1);
|
|
|
|
pvalue->u.h263VideoCapability = ALLOC_ASN1ELEM (pctxt, H245H263VideoCapability);
|
|
|
|
stat = asn1PD_H245H263VideoCapability (pctxt, pvalue->u.h263VideoCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h263VideoCapability", -1);
|
|
|
|
break;
|
|
|
|
/* is11172VideoCapability */
|
|
case 4:
|
|
invokeStartElement (pctxt, "is11172VideoCapability", -1);
|
|
|
|
pvalue->u.is11172VideoCapability = ALLOC_ASN1ELEM (pctxt, H245IS11172VideoCapability);
|
|
|
|
stat = asn1PD_H245IS11172VideoCapability (pctxt, pvalue->u.is11172VideoCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "is11172VideoCapability", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 6;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* genericVideoCapability */
|
|
case 6:
|
|
invokeStartElement (pctxt, "genericVideoCapability", -1);
|
|
|
|
pvalue->u.genericVideoCapability = ALLOC_ASN1ELEM (pctxt, H245GenericCapability);
|
|
|
|
stat = asn1PD_H245GenericCapability (pctxt, pvalue->u.genericVideoCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "genericVideoCapability", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AudioCapability_g7231 */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245AudioCapability_g7231 (OOCTXT* pctxt, H245AudioCapability_g7231* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* decode maxAl_sduAudioFrames */
|
|
|
|
invokeStartElement (pctxt, "maxAl_sduAudioFrames", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maxAl_sduAudioFrames, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maxAl_sduAudioFrames);
|
|
|
|
invokeEndElement (pctxt, "maxAl_sduAudioFrames", -1);
|
|
|
|
/* decode silenceSuppression */
|
|
|
|
invokeStartElement (pctxt, "silenceSuppression", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->silenceSuppression);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->silenceSuppression);
|
|
|
|
invokeEndElement (pctxt, "silenceSuppression", -1);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* IS11172AudioCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245IS11172AudioCapability (OOCTXT* pctxt, H245IS11172AudioCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode audioLayer1 */
|
|
|
|
invokeStartElement (pctxt, "audioLayer1", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioLayer1);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioLayer1);
|
|
|
|
invokeEndElement (pctxt, "audioLayer1", -1);
|
|
|
|
/* decode audioLayer2 */
|
|
|
|
invokeStartElement (pctxt, "audioLayer2", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioLayer2);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioLayer2);
|
|
|
|
invokeEndElement (pctxt, "audioLayer2", -1);
|
|
|
|
/* decode audioLayer3 */
|
|
|
|
invokeStartElement (pctxt, "audioLayer3", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioLayer3);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioLayer3);
|
|
|
|
invokeEndElement (pctxt, "audioLayer3", -1);
|
|
|
|
/* decode audioSampling32k */
|
|
|
|
invokeStartElement (pctxt, "audioSampling32k", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioSampling32k);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioSampling32k);
|
|
|
|
invokeEndElement (pctxt, "audioSampling32k", -1);
|
|
|
|
/* decode audioSampling44k1 */
|
|
|
|
invokeStartElement (pctxt, "audioSampling44k1", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioSampling44k1);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioSampling44k1);
|
|
|
|
invokeEndElement (pctxt, "audioSampling44k1", -1);
|
|
|
|
/* decode audioSampling48k */
|
|
|
|
invokeStartElement (pctxt, "audioSampling48k", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioSampling48k);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioSampling48k);
|
|
|
|
invokeEndElement (pctxt, "audioSampling48k", -1);
|
|
|
|
/* decode singleChannel */
|
|
|
|
invokeStartElement (pctxt, "singleChannel", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->singleChannel);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->singleChannel);
|
|
|
|
invokeEndElement (pctxt, "singleChannel", -1);
|
|
|
|
/* decode twoChannels */
|
|
|
|
invokeStartElement (pctxt, "twoChannels", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->twoChannels);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->twoChannels);
|
|
|
|
invokeEndElement (pctxt, "twoChannels", -1);
|
|
|
|
/* decode bitRate */
|
|
|
|
invokeStartElement (pctxt, "bitRate", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->bitRate, 1U, 448U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->bitRate);
|
|
|
|
invokeEndElement (pctxt, "bitRate", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* IS13818AudioCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245IS13818AudioCapability (OOCTXT* pctxt, H245IS13818AudioCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode audioLayer1 */
|
|
|
|
invokeStartElement (pctxt, "audioLayer1", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioLayer1);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioLayer1);
|
|
|
|
invokeEndElement (pctxt, "audioLayer1", -1);
|
|
|
|
/* decode audioLayer2 */
|
|
|
|
invokeStartElement (pctxt, "audioLayer2", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioLayer2);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioLayer2);
|
|
|
|
invokeEndElement (pctxt, "audioLayer2", -1);
|
|
|
|
/* decode audioLayer3 */
|
|
|
|
invokeStartElement (pctxt, "audioLayer3", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioLayer3);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioLayer3);
|
|
|
|
invokeEndElement (pctxt, "audioLayer3", -1);
|
|
|
|
/* decode audioSampling16k */
|
|
|
|
invokeStartElement (pctxt, "audioSampling16k", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioSampling16k);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioSampling16k);
|
|
|
|
invokeEndElement (pctxt, "audioSampling16k", -1);
|
|
|
|
/* decode audioSampling22k05 */
|
|
|
|
invokeStartElement (pctxt, "audioSampling22k05", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioSampling22k05);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioSampling22k05);
|
|
|
|
invokeEndElement (pctxt, "audioSampling22k05", -1);
|
|
|
|
/* decode audioSampling24k */
|
|
|
|
invokeStartElement (pctxt, "audioSampling24k", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioSampling24k);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioSampling24k);
|
|
|
|
invokeEndElement (pctxt, "audioSampling24k", -1);
|
|
|
|
/* decode audioSampling32k */
|
|
|
|
invokeStartElement (pctxt, "audioSampling32k", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioSampling32k);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioSampling32k);
|
|
|
|
invokeEndElement (pctxt, "audioSampling32k", -1);
|
|
|
|
/* decode audioSampling44k1 */
|
|
|
|
invokeStartElement (pctxt, "audioSampling44k1", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioSampling44k1);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioSampling44k1);
|
|
|
|
invokeEndElement (pctxt, "audioSampling44k1", -1);
|
|
|
|
/* decode audioSampling48k */
|
|
|
|
invokeStartElement (pctxt, "audioSampling48k", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioSampling48k);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioSampling48k);
|
|
|
|
invokeEndElement (pctxt, "audioSampling48k", -1);
|
|
|
|
/* decode singleChannel */
|
|
|
|
invokeStartElement (pctxt, "singleChannel", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->singleChannel);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->singleChannel);
|
|
|
|
invokeEndElement (pctxt, "singleChannel", -1);
|
|
|
|
/* decode twoChannels */
|
|
|
|
invokeStartElement (pctxt, "twoChannels", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->twoChannels);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->twoChannels);
|
|
|
|
invokeEndElement (pctxt, "twoChannels", -1);
|
|
|
|
/* decode threeChannels2_1 */
|
|
|
|
invokeStartElement (pctxt, "threeChannels2_1", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->threeChannels2_1);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->threeChannels2_1);
|
|
|
|
invokeEndElement (pctxt, "threeChannels2_1", -1);
|
|
|
|
/* decode threeChannels3_0 */
|
|
|
|
invokeStartElement (pctxt, "threeChannels3_0", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->threeChannels3_0);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->threeChannels3_0);
|
|
|
|
invokeEndElement (pctxt, "threeChannels3_0", -1);
|
|
|
|
/* decode fourChannels2_0_2_0 */
|
|
|
|
invokeStartElement (pctxt, "fourChannels2_0_2_0", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->fourChannels2_0_2_0);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->fourChannels2_0_2_0);
|
|
|
|
invokeEndElement (pctxt, "fourChannels2_0_2_0", -1);
|
|
|
|
/* decode fourChannels2_2 */
|
|
|
|
invokeStartElement (pctxt, "fourChannels2_2", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->fourChannels2_2);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->fourChannels2_2);
|
|
|
|
invokeEndElement (pctxt, "fourChannels2_2", -1);
|
|
|
|
/* decode fourChannels3_1 */
|
|
|
|
invokeStartElement (pctxt, "fourChannels3_1", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->fourChannels3_1);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->fourChannels3_1);
|
|
|
|
invokeEndElement (pctxt, "fourChannels3_1", -1);
|
|
|
|
/* decode fiveChannels3_0_2_0 */
|
|
|
|
invokeStartElement (pctxt, "fiveChannels3_0_2_0", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->fiveChannels3_0_2_0);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->fiveChannels3_0_2_0);
|
|
|
|
invokeEndElement (pctxt, "fiveChannels3_0_2_0", -1);
|
|
|
|
/* decode fiveChannels3_2 */
|
|
|
|
invokeStartElement (pctxt, "fiveChannels3_2", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->fiveChannels3_2);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->fiveChannels3_2);
|
|
|
|
invokeEndElement (pctxt, "fiveChannels3_2", -1);
|
|
|
|
/* decode lowFrequencyEnhancement */
|
|
|
|
invokeStartElement (pctxt, "lowFrequencyEnhancement", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->lowFrequencyEnhancement);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->lowFrequencyEnhancement);
|
|
|
|
invokeEndElement (pctxt, "lowFrequencyEnhancement", -1);
|
|
|
|
/* decode multilingual */
|
|
|
|
invokeStartElement (pctxt, "multilingual", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->multilingual);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->multilingual);
|
|
|
|
invokeEndElement (pctxt, "multilingual", -1);
|
|
|
|
/* decode bitRate */
|
|
|
|
invokeStartElement (pctxt, "bitRate", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->bitRate, 1U, 1130U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->bitRate);
|
|
|
|
invokeEndElement (pctxt, "bitRate", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* G7231AnnexCCapability_g723AnnexCAudioMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245G7231AnnexCCapability_g723AnnexCAudioMode (OOCTXT* pctxt, H245G7231AnnexCCapability_g723AnnexCAudioMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode highRateMode0 */
|
|
|
|
invokeStartElement (pctxt, "highRateMode0", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->highRateMode0, 27U, 78U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->highRateMode0);
|
|
|
|
invokeEndElement (pctxt, "highRateMode0", -1);
|
|
|
|
/* decode highRateMode1 */
|
|
|
|
invokeStartElement (pctxt, "highRateMode1", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->highRateMode1, 27U, 78U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->highRateMode1);
|
|
|
|
invokeEndElement (pctxt, "highRateMode1", -1);
|
|
|
|
/* decode lowRateMode0 */
|
|
|
|
invokeStartElement (pctxt, "lowRateMode0", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->lowRateMode0, 23U, 66U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->lowRateMode0);
|
|
|
|
invokeEndElement (pctxt, "lowRateMode0", -1);
|
|
|
|
/* decode lowRateMode1 */
|
|
|
|
invokeStartElement (pctxt, "lowRateMode1", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->lowRateMode1, 23U, 66U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->lowRateMode1);
|
|
|
|
invokeEndElement (pctxt, "lowRateMode1", -1);
|
|
|
|
/* decode sidMode0 */
|
|
|
|
invokeStartElement (pctxt, "sidMode0", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->sidMode0, 6U, 17U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sidMode0);
|
|
|
|
invokeEndElement (pctxt, "sidMode0", -1);
|
|
|
|
/* decode sidMode1 */
|
|
|
|
invokeStartElement (pctxt, "sidMode1", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->sidMode1, 6U, 17U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sidMode1);
|
|
|
|
invokeEndElement (pctxt, "sidMode1", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* G7231AnnexCCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245G7231AnnexCCapability (OOCTXT* pctxt, H245G7231AnnexCCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.g723AnnexCAudioModePresent = optbit;
|
|
|
|
/* decode maxAl_sduAudioFrames */
|
|
|
|
invokeStartElement (pctxt, "maxAl_sduAudioFrames", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maxAl_sduAudioFrames, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maxAl_sduAudioFrames);
|
|
|
|
invokeEndElement (pctxt, "maxAl_sduAudioFrames", -1);
|
|
|
|
/* decode silenceSuppression */
|
|
|
|
invokeStartElement (pctxt, "silenceSuppression", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->silenceSuppression);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->silenceSuppression);
|
|
|
|
invokeEndElement (pctxt, "silenceSuppression", -1);
|
|
|
|
/* decode g723AnnexCAudioMode */
|
|
|
|
if (pvalue->m.g723AnnexCAudioModePresent) {
|
|
invokeStartElement (pctxt, "g723AnnexCAudioMode", -1);
|
|
|
|
stat = asn1PD_H245G7231AnnexCCapability_g723AnnexCAudioMode (pctxt, &pvalue->g723AnnexCAudioMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "g723AnnexCAudioMode", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* GSMAudioCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245GSMAudioCapability (OOCTXT* pctxt, H245GSMAudioCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode audioUnitSize */
|
|
|
|
invokeStartElement (pctxt, "audioUnitSize", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->audioUnitSize, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->audioUnitSize);
|
|
|
|
invokeEndElement (pctxt, "audioUnitSize", -1);
|
|
|
|
/* decode comfortNoise */
|
|
|
|
invokeStartElement (pctxt, "comfortNoise", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->comfortNoise);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->comfortNoise);
|
|
|
|
invokeEndElement (pctxt, "comfortNoise", -1);
|
|
|
|
/* decode scrambled */
|
|
|
|
invokeStartElement (pctxt, "scrambled", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->scrambled);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->scrambled);
|
|
|
|
invokeEndElement (pctxt, "scrambled", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* G729Extensions */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245G729Extensions (OOCTXT* pctxt, H245G729Extensions* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.audioUnitPresent = optbit;
|
|
|
|
/* decode audioUnit */
|
|
|
|
if (pvalue->m.audioUnitPresent) {
|
|
invokeStartElement (pctxt, "audioUnit", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->audioUnit, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->audioUnit);
|
|
|
|
invokeEndElement (pctxt, "audioUnit", -1);
|
|
}
|
|
|
|
/* decode annexA */
|
|
|
|
invokeStartElement (pctxt, "annexA", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->annexA);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->annexA);
|
|
|
|
invokeEndElement (pctxt, "annexA", -1);
|
|
|
|
/* decode annexB */
|
|
|
|
invokeStartElement (pctxt, "annexB", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->annexB);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->annexB);
|
|
|
|
invokeEndElement (pctxt, "annexB", -1);
|
|
|
|
/* decode annexD */
|
|
|
|
invokeStartElement (pctxt, "annexD", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->annexD);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->annexD);
|
|
|
|
invokeEndElement (pctxt, "annexD", -1);
|
|
|
|
/* decode annexE */
|
|
|
|
invokeStartElement (pctxt, "annexE", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->annexE);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->annexE);
|
|
|
|
invokeEndElement (pctxt, "annexE", -1);
|
|
|
|
/* decode annexF */
|
|
|
|
invokeStartElement (pctxt, "annexF", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->annexF);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->annexF);
|
|
|
|
invokeEndElement (pctxt, "annexF", -1);
|
|
|
|
/* decode annexG */
|
|
|
|
invokeStartElement (pctxt, "annexG", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->annexG);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->annexG);
|
|
|
|
invokeEndElement (pctxt, "annexG", -1);
|
|
|
|
/* decode annexH */
|
|
|
|
invokeStartElement (pctxt, "annexH", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->annexH);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->annexH);
|
|
|
|
invokeEndElement (pctxt, "annexH", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VBDCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245VBDCapability (OOCTXT* pctxt, H245VBDCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode type */
|
|
|
|
invokeStartElement (pctxt, "type", -1);
|
|
|
|
pvalue->type = ALLOC_ASN1ELEM (pctxt, H245AudioCapability);
|
|
|
|
stat = asn1PD_H245AudioCapability (pctxt, (H245AudioCapability*)pvalue->type);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "type", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NoPTAudioTelephonyEventCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NoPTAudioTelephonyEventCapability (OOCTXT* pctxt, H245NoPTAudioTelephonyEventCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode audioTelephoneEvent */
|
|
|
|
invokeStartElement (pctxt, "audioTelephoneEvent", -1);
|
|
|
|
stat = decodeVarWidthCharString (pctxt, &pvalue->audioTelephoneEvent);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeCharStrValue (pctxt, pvalue->audioTelephoneEvent);
|
|
|
|
invokeEndElement (pctxt, "audioTelephoneEvent", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NoPTAudioToneCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NoPTAudioToneCapability (OOCTXT* pctxt, H245NoPTAudioToneCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AudioCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245AudioCapability (OOCTXT* pctxt, H245AudioCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 13);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* g711Alaw64k */
|
|
case 1:
|
|
invokeStartElement (pctxt, "g711Alaw64k", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.g711Alaw64k, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.g711Alaw64k);
|
|
|
|
invokeEndElement (pctxt, "g711Alaw64k", -1);
|
|
|
|
break;
|
|
|
|
/* g711Alaw56k */
|
|
case 2:
|
|
invokeStartElement (pctxt, "g711Alaw56k", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.g711Alaw56k, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.g711Alaw56k);
|
|
|
|
invokeEndElement (pctxt, "g711Alaw56k", -1);
|
|
|
|
break;
|
|
|
|
/* g711Ulaw64k */
|
|
case 3:
|
|
invokeStartElement (pctxt, "g711Ulaw64k", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.g711Ulaw64k, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.g711Ulaw64k);
|
|
|
|
invokeEndElement (pctxt, "g711Ulaw64k", -1);
|
|
|
|
break;
|
|
|
|
/* g711Ulaw56k */
|
|
case 4:
|
|
invokeStartElement (pctxt, "g711Ulaw56k", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.g711Ulaw56k, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.g711Ulaw56k);
|
|
|
|
invokeEndElement (pctxt, "g711Ulaw56k", -1);
|
|
|
|
break;
|
|
|
|
/* g722_64k */
|
|
case 5:
|
|
invokeStartElement (pctxt, "g722_64k", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.g722_64k, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.g722_64k);
|
|
|
|
invokeEndElement (pctxt, "g722_64k", -1);
|
|
|
|
break;
|
|
|
|
/* g722_56k */
|
|
case 6:
|
|
invokeStartElement (pctxt, "g722_56k", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.g722_56k, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.g722_56k);
|
|
|
|
invokeEndElement (pctxt, "g722_56k", -1);
|
|
|
|
break;
|
|
|
|
/* g722_48k */
|
|
case 7:
|
|
invokeStartElement (pctxt, "g722_48k", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.g722_48k, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.g722_48k);
|
|
|
|
invokeEndElement (pctxt, "g722_48k", -1);
|
|
|
|
break;
|
|
|
|
/* g7231 */
|
|
case 8:
|
|
invokeStartElement (pctxt, "g7231", -1);
|
|
|
|
pvalue->u.g7231 = ALLOC_ASN1ELEM (pctxt, H245AudioCapability_g7231);
|
|
|
|
stat = asn1PD_H245AudioCapability_g7231 (pctxt, pvalue->u.g7231);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "g7231", -1);
|
|
|
|
break;
|
|
|
|
/* g728 */
|
|
case 9:
|
|
invokeStartElement (pctxt, "g728", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.g728, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.g728);
|
|
|
|
invokeEndElement (pctxt, "g728", -1);
|
|
|
|
break;
|
|
|
|
/* g729 */
|
|
case 10:
|
|
invokeStartElement (pctxt, "g729", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.g729, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.g729);
|
|
|
|
invokeEndElement (pctxt, "g729", -1);
|
|
|
|
break;
|
|
|
|
/* g729AnnexA */
|
|
case 11:
|
|
invokeStartElement (pctxt, "g729AnnexA", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.g729AnnexA, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.g729AnnexA);
|
|
|
|
invokeEndElement (pctxt, "g729AnnexA", -1);
|
|
|
|
break;
|
|
|
|
/* is11172AudioCapability */
|
|
case 12:
|
|
invokeStartElement (pctxt, "is11172AudioCapability", -1);
|
|
|
|
pvalue->u.is11172AudioCapability = ALLOC_ASN1ELEM (pctxt, H245IS11172AudioCapability);
|
|
|
|
stat = asn1PD_H245IS11172AudioCapability (pctxt, pvalue->u.is11172AudioCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "is11172AudioCapability", -1);
|
|
|
|
break;
|
|
|
|
/* is13818AudioCapability */
|
|
case 13:
|
|
invokeStartElement (pctxt, "is13818AudioCapability", -1);
|
|
|
|
pvalue->u.is13818AudioCapability = ALLOC_ASN1ELEM (pctxt, H245IS13818AudioCapability);
|
|
|
|
stat = asn1PD_H245IS13818AudioCapability (pctxt, pvalue->u.is13818AudioCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "is13818AudioCapability", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 15;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* g729wAnnexB */
|
|
case 15:
|
|
invokeStartElement (pctxt, "g729wAnnexB", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.g729wAnnexB, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.g729wAnnexB);
|
|
|
|
invokeEndElement (pctxt, "g729wAnnexB", -1);
|
|
|
|
break;
|
|
|
|
/* g729AnnexAwAnnexB */
|
|
case 16:
|
|
invokeStartElement (pctxt, "g729AnnexAwAnnexB", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.g729AnnexAwAnnexB, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.g729AnnexAwAnnexB);
|
|
|
|
invokeEndElement (pctxt, "g729AnnexAwAnnexB", -1);
|
|
|
|
break;
|
|
|
|
/* g7231AnnexCCapability */
|
|
case 17:
|
|
invokeStartElement (pctxt, "g7231AnnexCCapability", -1);
|
|
|
|
pvalue->u.g7231AnnexCCapability = ALLOC_ASN1ELEM (pctxt, H245G7231AnnexCCapability);
|
|
|
|
stat = asn1PD_H245G7231AnnexCCapability (pctxt, pvalue->u.g7231AnnexCCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "g7231AnnexCCapability", -1);
|
|
|
|
break;
|
|
|
|
/* gsmFullRate */
|
|
case 18:
|
|
invokeStartElement (pctxt, "gsmFullRate", -1);
|
|
|
|
pvalue->u.gsmFullRate = ALLOC_ASN1ELEM (pctxt, H245GSMAudioCapability);
|
|
|
|
stat = asn1PD_H245GSMAudioCapability (pctxt, pvalue->u.gsmFullRate);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "gsmFullRate", -1);
|
|
|
|
break;
|
|
|
|
/* gsmHalfRate */
|
|
case 19:
|
|
invokeStartElement (pctxt, "gsmHalfRate", -1);
|
|
|
|
pvalue->u.gsmHalfRate = ALLOC_ASN1ELEM (pctxt, H245GSMAudioCapability);
|
|
|
|
stat = asn1PD_H245GSMAudioCapability (pctxt, pvalue->u.gsmHalfRate);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "gsmHalfRate", -1);
|
|
|
|
break;
|
|
|
|
/* gsmEnhancedFullRate */
|
|
case 20:
|
|
invokeStartElement (pctxt, "gsmEnhancedFullRate", -1);
|
|
|
|
pvalue->u.gsmEnhancedFullRate = ALLOC_ASN1ELEM (pctxt, H245GSMAudioCapability);
|
|
|
|
stat = asn1PD_H245GSMAudioCapability (pctxt, pvalue->u.gsmEnhancedFullRate);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "gsmEnhancedFullRate", -1);
|
|
|
|
break;
|
|
|
|
/* genericAudioCapability */
|
|
case 21:
|
|
invokeStartElement (pctxt, "genericAudioCapability", -1);
|
|
|
|
pvalue->u.genericAudioCapability = ALLOC_ASN1ELEM (pctxt, H245GenericCapability);
|
|
|
|
stat = asn1PD_H245GenericCapability (pctxt, pvalue->u.genericAudioCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "genericAudioCapability", -1);
|
|
|
|
break;
|
|
|
|
/* g729Extensions */
|
|
case 22:
|
|
invokeStartElement (pctxt, "g729Extensions", -1);
|
|
|
|
pvalue->u.g729Extensions = ALLOC_ASN1ELEM (pctxt, H245G729Extensions);
|
|
|
|
stat = asn1PD_H245G729Extensions (pctxt, pvalue->u.g729Extensions);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "g729Extensions", -1);
|
|
|
|
break;
|
|
|
|
/* vbd */
|
|
case 23:
|
|
invokeStartElement (pctxt, "vbd", -1);
|
|
|
|
pvalue->u.vbd = ALLOC_ASN1ELEM (pctxt, H245VBDCapability);
|
|
|
|
stat = asn1PD_H245VBDCapability (pctxt, pvalue->u.vbd);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "vbd", -1);
|
|
|
|
break;
|
|
|
|
/* audioTelephonyEvent */
|
|
case 24:
|
|
invokeStartElement (pctxt, "audioTelephonyEvent", -1);
|
|
|
|
pvalue->u.audioTelephonyEvent = ALLOC_ASN1ELEM (pctxt, H245NoPTAudioTelephonyEventCapability);
|
|
|
|
stat = asn1PD_H245NoPTAudioTelephonyEventCapability (pctxt, pvalue->u.audioTelephonyEvent);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "audioTelephonyEvent", -1);
|
|
|
|
break;
|
|
|
|
/* audioTone */
|
|
case 25:
|
|
invokeStartElement (pctxt, "audioTone", -1);
|
|
|
|
pvalue->u.audioTone = ALLOC_ASN1ELEM (pctxt, H245NoPTAudioToneCapability);
|
|
|
|
stat = asn1PD_H245NoPTAudioToneCapability (pctxt, pvalue->u.audioTone);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "audioTone", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Capability_h233EncryptionReceiveCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245Capability_h233EncryptionReceiveCapability (OOCTXT* pctxt, H245Capability_h233EncryptionReceiveCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode h233IVResponseTime */
|
|
|
|
invokeStartElement (pctxt, "h233IVResponseTime", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->h233IVResponseTime, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->h233IVResponseTime);
|
|
|
|
invokeEndElement (pctxt, "h233IVResponseTime", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH245NonStandardParameter */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245_SeqOfH245NonStandardParameter (OOCTXT* pctxt, H245_SeqOfH245NonStandardParameter* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
H245NonStandardParameter* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
int lstat;
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (;;) {
|
|
/* decode length determinant */
|
|
|
|
lstat = decodeLength (pctxt, &count);
|
|
if (lstat != ASN_OK && lstat != ASN_OK_FRAG) {
|
|
return lstat;
|
|
}
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
if(lstat == ASN_OK) break;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceCapability (OOCTXT* pctxt, H245ConferenceCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.nonStandardDataPresent = optbit;
|
|
|
|
/* decode nonStandardData */
|
|
|
|
if (pvalue->m.nonStandardDataPresent) {
|
|
invokeStartElement (pctxt, "nonStandardData", -1);
|
|
|
|
stat = asn1PD_H245_SeqOfH245NonStandardParameter (pctxt, &pvalue->nonStandardData);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandardData", -1);
|
|
}
|
|
|
|
/* decode chairControlCapability */
|
|
|
|
invokeStartElement (pctxt, "chairControlCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->chairControlCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->chairControlCapability);
|
|
|
|
invokeEndElement (pctxt, "chairControlCapability", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 2 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.videoIndicateMixingCapabilityPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "videoIndicateMixingCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->videoIndicateMixingCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->videoIndicateMixingCapability);
|
|
|
|
invokeEndElement (pctxt, "videoIndicateMixingCapability", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.multipointVisualizationCapabilityPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "multipointVisualizationCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->multipointVisualizationCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->multipointVisualizationCapability);
|
|
|
|
invokeEndElement (pctxt, "multipointVisualizationCapability", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MediaEncryptionAlgorithm */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MediaEncryptionAlgorithm (OOCTXT* pctxt, H245MediaEncryptionAlgorithm* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* algorithm */
|
|
case 1:
|
|
invokeStartElement (pctxt, "algorithm", -1);
|
|
|
|
pvalue->u.algorithm = ALLOC_ASN1ELEM (pctxt, ASN1OBJID);
|
|
|
|
stat = decodeObjectIdentifier (pctxt, pvalue->u.algorithm);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOidValue (pctxt, pvalue->u.algorithm->numids, pvalue->u.algorithm->subid);
|
|
|
|
invokeEndElement (pctxt, "algorithm", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EncryptionCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EncryptionCapability (OOCTXT* pctxt, H245EncryptionCapability* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245MediaEncryptionAlgorithm* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245MediaEncryptionAlgorithm);
|
|
|
|
stat = asn1PD_H245MediaEncryptionAlgorithm (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AuthenticationCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245AuthenticationCapability (OOCTXT* pctxt, H245AuthenticationCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.nonStandardPresent = optbit;
|
|
|
|
/* decode nonStandard */
|
|
|
|
if (pvalue->m.nonStandardPresent) {
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, &pvalue->nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 1 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.antiSpamAlgorithmPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "antiSpamAlgorithm", -1);
|
|
|
|
stat = decodeObjectIdentifier (pctxt, &pvalue->antiSpamAlgorithm);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOidValue (pctxt, pvalue->antiSpamAlgorithm.numids, pvalue->antiSpamAlgorithm.subid);
|
|
|
|
invokeEndElement (pctxt, "antiSpamAlgorithm", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* IntegrityCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245IntegrityCapability (OOCTXT* pctxt, H245IntegrityCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.nonStandardPresent = optbit;
|
|
|
|
/* decode nonStandard */
|
|
|
|
if (pvalue->m.nonStandardPresent) {
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, &pvalue->nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EncryptionAuthenticationAndIntegrity */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EncryptionAuthenticationAndIntegrity (OOCTXT* pctxt, H245EncryptionAuthenticationAndIntegrity* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.encryptionCapabilityPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.authenticationCapabilityPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.integrityCapabilityPresent = optbit;
|
|
|
|
/* decode encryptionCapability */
|
|
|
|
if (pvalue->m.encryptionCapabilityPresent) {
|
|
invokeStartElement (pctxt, "encryptionCapability", -1);
|
|
|
|
stat = asn1PD_H245EncryptionCapability (pctxt, &pvalue->encryptionCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "encryptionCapability", -1);
|
|
}
|
|
|
|
/* decode authenticationCapability */
|
|
|
|
if (pvalue->m.authenticationCapabilityPresent) {
|
|
invokeStartElement (pctxt, "authenticationCapability", -1);
|
|
|
|
stat = asn1PD_H245AuthenticationCapability (pctxt, &pvalue->authenticationCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "authenticationCapability", -1);
|
|
}
|
|
|
|
/* decode integrityCapability */
|
|
|
|
if (pvalue->m.integrityCapabilityPresent) {
|
|
invokeStartElement (pctxt, "integrityCapability", -1);
|
|
|
|
stat = asn1PD_H245IntegrityCapability (pctxt, &pvalue->integrityCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "integrityCapability", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H235SecurityCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H235SecurityCapability (OOCTXT* pctxt, H245H235SecurityCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode encryptionAuthenticationAndIntegrity */
|
|
|
|
invokeStartElement (pctxt, "encryptionAuthenticationAndIntegrity", -1);
|
|
|
|
stat = asn1PD_H245EncryptionAuthenticationAndIntegrity (pctxt, &pvalue->encryptionAuthenticationAndIntegrity);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "encryptionAuthenticationAndIntegrity", -1);
|
|
|
|
/* decode mediaCapability */
|
|
|
|
invokeStartElement (pctxt, "mediaCapability", -1);
|
|
|
|
stat = asn1PD_H245CapabilityTableEntryNumber (pctxt, &pvalue->mediaCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaCapability", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UserInputCapability_nonStandard */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UserInputCapability_nonStandard (OOCTXT* pctxt, H245UserInputCapability_nonStandard* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 16, 0 };
|
|
int stat = ASN_OK;
|
|
H245NonStandardParameter* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UserInputCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UserInputCapability (OOCTXT* pctxt, H245UserInputCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 5);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245UserInputCapability_nonStandard);
|
|
|
|
stat = asn1PD_H245UserInputCapability_nonStandard (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* basicString */
|
|
case 1:
|
|
invokeStartElement (pctxt, "basicString", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "basicString", -1);
|
|
|
|
break;
|
|
|
|
/* iA5String */
|
|
case 2:
|
|
invokeStartElement (pctxt, "iA5String", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "iA5String", -1);
|
|
|
|
break;
|
|
|
|
/* generalString */
|
|
case 3:
|
|
invokeStartElement (pctxt, "generalString", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "generalString", -1);
|
|
|
|
break;
|
|
|
|
/* dtmf */
|
|
case 4:
|
|
invokeStartElement (pctxt, "dtmf", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "dtmf", -1);
|
|
|
|
break;
|
|
|
|
/* hookflash */
|
|
case 5:
|
|
invokeStartElement (pctxt, "hookflash", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "hookflash", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 7;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* extendedAlphanumeric */
|
|
case 7:
|
|
invokeStartElement (pctxt, "extendedAlphanumeric", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "extendedAlphanumeric", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexFormat */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexFormat (OOCTXT* pctxt, H245MultiplexFormat* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* h222Capability */
|
|
case 1:
|
|
invokeStartElement (pctxt, "h222Capability", -1);
|
|
|
|
pvalue->u.h222Capability = ALLOC_ASN1ELEM (pctxt, H245H222Capability);
|
|
|
|
stat = asn1PD_H245H222Capability (pctxt, pvalue->u.h222Capability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h222Capability", -1);
|
|
|
|
break;
|
|
|
|
/* h223Capability */
|
|
case 2:
|
|
invokeStartElement (pctxt, "h223Capability", -1);
|
|
|
|
pvalue->u.h223Capability = ALLOC_ASN1ELEM (pctxt, H245H223Capability);
|
|
|
|
stat = asn1PD_H245H223Capability (pctxt, pvalue->u.h223Capability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h223Capability", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AlternativeCapabilitySet */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245AlternativeCapabilitySet (OOCTXT* pctxt, H245AlternativeCapabilitySet* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &pvalue->n);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
stat = asn1PD_H245CapabilityTableEntryNumber (pctxt, &pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexedStreamCapability_capabilityOnMuxStream */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexedStreamCapability_capabilityOnMuxStream (OOCTXT* pctxt, H245MultiplexedStreamCapability_capabilityOnMuxStream* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245AlternativeCapabilitySet* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245AlternativeCapabilitySet);
|
|
|
|
stat = asn1PD_H245AlternativeCapabilitySet (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexedStreamCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexedStreamCapability (OOCTXT* pctxt, H245MultiplexedStreamCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.capabilityOnMuxStreamPresent = optbit;
|
|
|
|
/* decode multiplexFormat */
|
|
|
|
invokeStartElement (pctxt, "multiplexFormat", -1);
|
|
|
|
stat = asn1PD_H245MultiplexFormat (pctxt, &pvalue->multiplexFormat);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexFormat", -1);
|
|
|
|
/* decode controlOnMuxStream */
|
|
|
|
invokeStartElement (pctxt, "controlOnMuxStream", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->controlOnMuxStream);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->controlOnMuxStream);
|
|
|
|
invokeEndElement (pctxt, "controlOnMuxStream", -1);
|
|
|
|
/* decode capabilityOnMuxStream */
|
|
|
|
if (pvalue->m.capabilityOnMuxStreamPresent) {
|
|
invokeStartElement (pctxt, "capabilityOnMuxStream", -1);
|
|
|
|
stat = asn1PD_H245MultiplexedStreamCapability_capabilityOnMuxStream (pctxt, &pvalue->capabilityOnMuxStream);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "capabilityOnMuxStream", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AudioTelephonyEventCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245AudioTelephonyEventCapability (OOCTXT* pctxt, H245AudioTelephonyEventCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode dynamicRTPPayloadType */
|
|
|
|
invokeStartElement (pctxt, "dynamicRTPPayloadType", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->dynamicRTPPayloadType, 96U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->dynamicRTPPayloadType);
|
|
|
|
invokeEndElement (pctxt, "dynamicRTPPayloadType", -1);
|
|
|
|
/* decode audioTelephoneEvent */
|
|
|
|
invokeStartElement (pctxt, "audioTelephoneEvent", -1);
|
|
|
|
stat = decodeVarWidthCharString (pctxt, &pvalue->audioTelephoneEvent);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeCharStrValue (pctxt, pvalue->audioTelephoneEvent);
|
|
|
|
invokeEndElement (pctxt, "audioTelephoneEvent", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AudioToneCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245AudioToneCapability (OOCTXT* pctxt, H245AudioToneCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode dynamicRTPPayloadType */
|
|
|
|
invokeStartElement (pctxt, "dynamicRTPPayloadType", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->dynamicRTPPayloadType, 96U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->dynamicRTPPayloadType);
|
|
|
|
invokeEndElement (pctxt, "dynamicRTPPayloadType", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FECCapability_rfc2733_separateStream */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FECCapability_rfc2733_separateStream (OOCTXT* pctxt, H245FECCapability_rfc2733_separateStream* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode separatePort */
|
|
|
|
invokeStartElement (pctxt, "separatePort", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->separatePort);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->separatePort);
|
|
|
|
invokeEndElement (pctxt, "separatePort", -1);
|
|
|
|
/* decode samePort */
|
|
|
|
invokeStartElement (pctxt, "samePort", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->samePort);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->samePort);
|
|
|
|
invokeEndElement (pctxt, "samePort", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FECCapability_rfc2733 */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FECCapability_rfc2733 (OOCTXT* pctxt, H245FECCapability_rfc2733* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode redundancyEncoding */
|
|
|
|
invokeStartElement (pctxt, "redundancyEncoding", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->redundancyEncoding);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->redundancyEncoding);
|
|
|
|
invokeEndElement (pctxt, "redundancyEncoding", -1);
|
|
|
|
/* decode separateStream */
|
|
|
|
invokeStartElement (pctxt, "separateStream", -1);
|
|
|
|
stat = asn1PD_H245FECCapability_rfc2733_separateStream (pctxt, &pvalue->separateStream);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "separateStream", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FECCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FECCapability (OOCTXT* pctxt, H245FECCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* rfc2733 */
|
|
case 0:
|
|
invokeStartElement (pctxt, "rfc2733", -1);
|
|
|
|
pvalue->u.rfc2733 = ALLOC_ASN1ELEM (pctxt, H245FECCapability_rfc2733);
|
|
|
|
stat = asn1PD_H245FECCapability_rfc2733 (pctxt, pvalue->u.rfc2733);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "rfc2733", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 2;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplePayloadStreamCapability_capabilities */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplePayloadStreamCapability_capabilities (OOCTXT* pctxt, H245MultiplePayloadStreamCapability_capabilities* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245AlternativeCapabilitySet* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245AlternativeCapabilitySet);
|
|
|
|
stat = asn1PD_H245AlternativeCapabilitySet (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplePayloadStreamCapability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplePayloadStreamCapability (OOCTXT* pctxt, H245MultiplePayloadStreamCapability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode capabilities */
|
|
|
|
invokeStartElement (pctxt, "capabilities", -1);
|
|
|
|
stat = asn1PD_H245MultiplePayloadStreamCapability_capabilities (pctxt, &pvalue->capabilities);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "capabilities", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Capability */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245Capability (OOCTXT* pctxt, H245Capability* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 11);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* receiveVideoCapability */
|
|
case 1:
|
|
invokeStartElement (pctxt, "receiveVideoCapability", -1);
|
|
|
|
pvalue->u.receiveVideoCapability = ALLOC_ASN1ELEM (pctxt, H245VideoCapability);
|
|
|
|
stat = asn1PD_H245VideoCapability (pctxt, pvalue->u.receiveVideoCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "receiveVideoCapability", -1);
|
|
|
|
break;
|
|
|
|
/* transmitVideoCapability */
|
|
case 2:
|
|
invokeStartElement (pctxt, "transmitVideoCapability", -1);
|
|
|
|
pvalue->u.transmitVideoCapability = ALLOC_ASN1ELEM (pctxt, H245VideoCapability);
|
|
|
|
stat = asn1PD_H245VideoCapability (pctxt, pvalue->u.transmitVideoCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "transmitVideoCapability", -1);
|
|
|
|
break;
|
|
|
|
/* receiveAndTransmitVideoCapability */
|
|
case 3:
|
|
invokeStartElement (pctxt, "receiveAndTransmitVideoCapability", -1);
|
|
|
|
pvalue->u.receiveAndTransmitVideoCapability = ALLOC_ASN1ELEM (pctxt, H245VideoCapability);
|
|
|
|
stat = asn1PD_H245VideoCapability (pctxt, pvalue->u.receiveAndTransmitVideoCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "receiveAndTransmitVideoCapability", -1);
|
|
|
|
break;
|
|
|
|
/* receiveAudioCapability */
|
|
case 4:
|
|
invokeStartElement (pctxt, "receiveAudioCapability", -1);
|
|
|
|
pvalue->u.receiveAudioCapability = ALLOC_ASN1ELEM (pctxt, H245AudioCapability);
|
|
|
|
stat = asn1PD_H245AudioCapability (pctxt, pvalue->u.receiveAudioCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "receiveAudioCapability", -1);
|
|
|
|
break;
|
|
|
|
/* transmitAudioCapability */
|
|
case 5:
|
|
invokeStartElement (pctxt, "transmitAudioCapability", -1);
|
|
|
|
pvalue->u.transmitAudioCapability = ALLOC_ASN1ELEM (pctxt, H245AudioCapability);
|
|
|
|
stat = asn1PD_H245AudioCapability (pctxt, pvalue->u.transmitAudioCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "transmitAudioCapability", -1);
|
|
|
|
break;
|
|
|
|
/* receiveAndTransmitAudioCapability */
|
|
case 6:
|
|
invokeStartElement (pctxt, "receiveAndTransmitAudioCapability", -1);
|
|
|
|
pvalue->u.receiveAndTransmitAudioCapability = ALLOC_ASN1ELEM (pctxt, H245AudioCapability);
|
|
|
|
stat = asn1PD_H245AudioCapability (pctxt, pvalue->u.receiveAndTransmitAudioCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "receiveAndTransmitAudioCapability", -1);
|
|
|
|
break;
|
|
|
|
/* receiveDataApplicationCapability */
|
|
case 7:
|
|
invokeStartElement (pctxt, "receiveDataApplicationCapability", -1);
|
|
|
|
pvalue->u.receiveDataApplicationCapability = ALLOC_ASN1ELEM (pctxt, H245DataApplicationCapability);
|
|
|
|
stat = asn1PD_H245DataApplicationCapability (pctxt, pvalue->u.receiveDataApplicationCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "receiveDataApplicationCapability", -1);
|
|
|
|
break;
|
|
|
|
/* transmitDataApplicationCapability */
|
|
case 8:
|
|
invokeStartElement (pctxt, "transmitDataApplicationCapability", -1);
|
|
|
|
pvalue->u.transmitDataApplicationCapability = ALLOC_ASN1ELEM (pctxt, H245DataApplicationCapability);
|
|
|
|
stat = asn1PD_H245DataApplicationCapability (pctxt, pvalue->u.transmitDataApplicationCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "transmitDataApplicationCapability", -1);
|
|
|
|
break;
|
|
|
|
/* receiveAndTransmitDataApplicationCapability */
|
|
case 9:
|
|
invokeStartElement (pctxt, "receiveAndTransmitDataApplicationCapability", -1);
|
|
|
|
pvalue->u.receiveAndTransmitDataApplicationCapability = ALLOC_ASN1ELEM (pctxt, H245DataApplicationCapability);
|
|
|
|
stat = asn1PD_H245DataApplicationCapability (pctxt, pvalue->u.receiveAndTransmitDataApplicationCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "receiveAndTransmitDataApplicationCapability", -1);
|
|
|
|
break;
|
|
|
|
/* h233EncryptionTransmitCapability */
|
|
case 10:
|
|
invokeStartElement (pctxt, "h233EncryptionTransmitCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->u.h233EncryptionTransmitCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->u.h233EncryptionTransmitCapability);
|
|
|
|
invokeEndElement (pctxt, "h233EncryptionTransmitCapability", -1);
|
|
|
|
break;
|
|
|
|
/* h233EncryptionReceiveCapability */
|
|
case 11:
|
|
invokeStartElement (pctxt, "h233EncryptionReceiveCapability", -1);
|
|
|
|
pvalue->u.h233EncryptionReceiveCapability = ALLOC_ASN1ELEM (pctxt, H245Capability_h233EncryptionReceiveCapability);
|
|
|
|
stat = asn1PD_H245Capability_h233EncryptionReceiveCapability (pctxt, pvalue->u.h233EncryptionReceiveCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h233EncryptionReceiveCapability", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 13;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* conferenceCapability */
|
|
case 13:
|
|
invokeStartElement (pctxt, "conferenceCapability", -1);
|
|
|
|
pvalue->u.conferenceCapability = ALLOC_ASN1ELEM (pctxt, H245ConferenceCapability);
|
|
|
|
stat = asn1PD_H245ConferenceCapability (pctxt, pvalue->u.conferenceCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "conferenceCapability", -1);
|
|
|
|
break;
|
|
|
|
/* h235SecurityCapability */
|
|
case 14:
|
|
invokeStartElement (pctxt, "h235SecurityCapability", -1);
|
|
|
|
pvalue->u.h235SecurityCapability = ALLOC_ASN1ELEM (pctxt, H245H235SecurityCapability);
|
|
|
|
stat = asn1PD_H245H235SecurityCapability (pctxt, pvalue->u.h235SecurityCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h235SecurityCapability", -1);
|
|
|
|
break;
|
|
|
|
/* maxPendingReplacementFor */
|
|
case 15:
|
|
invokeStartElement (pctxt, "maxPendingReplacementFor", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->u.maxPendingReplacementFor, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.maxPendingReplacementFor);
|
|
|
|
invokeEndElement (pctxt, "maxPendingReplacementFor", -1);
|
|
|
|
break;
|
|
|
|
/* receiveUserInputCapability */
|
|
case 16:
|
|
invokeStartElement (pctxt, "receiveUserInputCapability", -1);
|
|
|
|
pvalue->u.receiveUserInputCapability = ALLOC_ASN1ELEM (pctxt, H245UserInputCapability);
|
|
|
|
stat = asn1PD_H245UserInputCapability (pctxt, pvalue->u.receiveUserInputCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "receiveUserInputCapability", -1);
|
|
|
|
break;
|
|
|
|
/* transmitUserInputCapability */
|
|
case 17:
|
|
invokeStartElement (pctxt, "transmitUserInputCapability", -1);
|
|
|
|
pvalue->u.transmitUserInputCapability = ALLOC_ASN1ELEM (pctxt, H245UserInputCapability);
|
|
|
|
stat = asn1PD_H245UserInputCapability (pctxt, pvalue->u.transmitUserInputCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "transmitUserInputCapability", -1);
|
|
|
|
break;
|
|
|
|
/* receiveAndTransmitUserInputCapability */
|
|
case 18:
|
|
invokeStartElement (pctxt, "receiveAndTransmitUserInputCapability", -1);
|
|
|
|
pvalue->u.receiveAndTransmitUserInputCapability = ALLOC_ASN1ELEM (pctxt, H245UserInputCapability);
|
|
|
|
stat = asn1PD_H245UserInputCapability (pctxt, pvalue->u.receiveAndTransmitUserInputCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "receiveAndTransmitUserInputCapability", -1);
|
|
|
|
break;
|
|
|
|
/* genericControlCapability */
|
|
case 19:
|
|
invokeStartElement (pctxt, "genericControlCapability", -1);
|
|
|
|
pvalue->u.genericControlCapability = ALLOC_ASN1ELEM (pctxt, H245GenericCapability);
|
|
|
|
stat = asn1PD_H245GenericCapability (pctxt, pvalue->u.genericControlCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "genericControlCapability", -1);
|
|
|
|
break;
|
|
|
|
/* receiveMultiplexedStreamCapability */
|
|
case 20:
|
|
invokeStartElement (pctxt, "receiveMultiplexedStreamCapability", -1);
|
|
|
|
pvalue->u.receiveMultiplexedStreamCapability = ALLOC_ASN1ELEM (pctxt, H245MultiplexedStreamCapability);
|
|
|
|
stat = asn1PD_H245MultiplexedStreamCapability (pctxt, pvalue->u.receiveMultiplexedStreamCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "receiveMultiplexedStreamCapability", -1);
|
|
|
|
break;
|
|
|
|
/* transmitMultiplexedStreamCapability */
|
|
case 21:
|
|
invokeStartElement (pctxt, "transmitMultiplexedStreamCapability", -1);
|
|
|
|
pvalue->u.transmitMultiplexedStreamCapability = ALLOC_ASN1ELEM (pctxt, H245MultiplexedStreamCapability);
|
|
|
|
stat = asn1PD_H245MultiplexedStreamCapability (pctxt, pvalue->u.transmitMultiplexedStreamCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "transmitMultiplexedStreamCapability", -1);
|
|
|
|
break;
|
|
|
|
/* receiveAndTransmitMultiplexedStreamCapability */
|
|
case 22:
|
|
invokeStartElement (pctxt, "receiveAndTransmitMultiplexedStreamCapability", -1);
|
|
|
|
pvalue->u.receiveAndTransmitMultiplexedStreamCapability = ALLOC_ASN1ELEM (pctxt, H245MultiplexedStreamCapability);
|
|
|
|
stat = asn1PD_H245MultiplexedStreamCapability (pctxt, pvalue->u.receiveAndTransmitMultiplexedStreamCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "receiveAndTransmitMultiplexedStreamCapability", -1);
|
|
|
|
break;
|
|
|
|
/* receiveRTPAudioTelephonyEventCapability */
|
|
case 23:
|
|
invokeStartElement (pctxt, "receiveRTPAudioTelephonyEventCapability", -1);
|
|
|
|
pvalue->u.receiveRTPAudioTelephonyEventCapability = ALLOC_ASN1ELEM (pctxt, H245AudioTelephonyEventCapability);
|
|
|
|
stat = asn1PD_H245AudioTelephonyEventCapability (pctxt, pvalue->u.receiveRTPAudioTelephonyEventCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "receiveRTPAudioTelephonyEventCapability", -1);
|
|
|
|
break;
|
|
|
|
/* receiveRTPAudioToneCapability */
|
|
case 24:
|
|
invokeStartElement (pctxt, "receiveRTPAudioToneCapability", -1);
|
|
|
|
pvalue->u.receiveRTPAudioToneCapability = ALLOC_ASN1ELEM (pctxt, H245AudioToneCapability);
|
|
|
|
stat = asn1PD_H245AudioToneCapability (pctxt, pvalue->u.receiveRTPAudioToneCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "receiveRTPAudioToneCapability", -1);
|
|
|
|
break;
|
|
|
|
/* fecCapability */
|
|
case 25:
|
|
invokeStartElement (pctxt, "fecCapability", -1);
|
|
|
|
pvalue->u.fecCapability = ALLOC_ASN1ELEM (pctxt, H245FECCapability);
|
|
|
|
stat = asn1PD_H245FECCapability (pctxt, pvalue->u.fecCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "fecCapability", -1);
|
|
|
|
break;
|
|
|
|
/* multiplePayloadStreamCapability */
|
|
case 26:
|
|
invokeStartElement (pctxt, "multiplePayloadStreamCapability", -1);
|
|
|
|
pvalue->u.multiplePayloadStreamCapability = ALLOC_ASN1ELEM (pctxt, H245MultiplePayloadStreamCapability);
|
|
|
|
stat = asn1PD_H245MultiplePayloadStreamCapability (pctxt, pvalue->u.multiplePayloadStreamCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplePayloadStreamCapability", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CapabilityTableEntry */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CapabilityTableEntry (OOCTXT* pctxt, H245CapabilityTableEntry* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL optbit;
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.capabilityPresent = optbit;
|
|
|
|
/* decode capabilityTableEntryNumber */
|
|
|
|
invokeStartElement (pctxt, "capabilityTableEntryNumber", -1);
|
|
|
|
stat = asn1PD_H245CapabilityTableEntryNumber (pctxt, &pvalue->capabilityTableEntryNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "capabilityTableEntryNumber", -1);
|
|
|
|
/* decode capability */
|
|
|
|
if (pvalue->m.capabilityPresent) {
|
|
invokeStartElement (pctxt, "capability", -1);
|
|
|
|
stat = asn1PD_H245Capability (pctxt, &pvalue->capability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "capability", -1);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TerminalCapabilitySet_capabilityTable */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TerminalCapabilitySet_capabilityTable (OOCTXT* pctxt, H245TerminalCapabilitySet_capabilityTable* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245CapabilityTableEntry* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245CapabilityTableEntry);
|
|
|
|
stat = asn1PD_H245CapabilityTableEntry (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CapabilityDescriptorNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CapabilityDescriptorNumber (OOCTXT* pctxt, H245CapabilityDescriptorNumber* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = decodeConsUInt8 (pctxt, pvalue, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, *pvalue);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CapabilityDescriptor_simultaneousCapabilities */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CapabilityDescriptor_simultaneousCapabilities (OOCTXT* pctxt, H245CapabilityDescriptor_simultaneousCapabilities* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245AlternativeCapabilitySet* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245AlternativeCapabilitySet);
|
|
|
|
stat = asn1PD_H245AlternativeCapabilitySet (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CapabilityDescriptor */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CapabilityDescriptor (OOCTXT* pctxt, H245CapabilityDescriptor* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL optbit;
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.simultaneousCapabilitiesPresent = optbit;
|
|
|
|
/* decode capabilityDescriptorNumber */
|
|
|
|
invokeStartElement (pctxt, "capabilityDescriptorNumber", -1);
|
|
|
|
stat = asn1PD_H245CapabilityDescriptorNumber (pctxt, &pvalue->capabilityDescriptorNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "capabilityDescriptorNumber", -1);
|
|
|
|
/* decode simultaneousCapabilities */
|
|
|
|
if (pvalue->m.simultaneousCapabilitiesPresent) {
|
|
invokeStartElement (pctxt, "simultaneousCapabilities", -1);
|
|
|
|
stat = asn1PD_H245CapabilityDescriptor_simultaneousCapabilities (pctxt, &pvalue->simultaneousCapabilities);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "simultaneousCapabilities", -1);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TerminalCapabilitySet_capabilityDescriptors */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TerminalCapabilitySet_capabilityDescriptors (OOCTXT* pctxt, H245TerminalCapabilitySet_capabilityDescriptors* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245CapabilityDescriptor* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245CapabilityDescriptor);
|
|
|
|
stat = asn1PD_H245CapabilityDescriptor (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TerminalCapabilitySet */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TerminalCapabilitySet (OOCTXT* pctxt, H245TerminalCapabilitySet* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.multiplexCapabilityPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.capabilityTablePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.capabilityDescriptorsPresent = optbit;
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->sequenceNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
/* decode protocolIdentifier */
|
|
|
|
invokeStartElement (pctxt, "protocolIdentifier", -1);
|
|
|
|
stat = decodeObjectIdentifier (pctxt, &pvalue->protocolIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOidValue (pctxt, pvalue->protocolIdentifier.numids, pvalue->protocolIdentifier.subid);
|
|
|
|
invokeEndElement (pctxt, "protocolIdentifier", -1);
|
|
|
|
/* decode multiplexCapability */
|
|
|
|
if (pvalue->m.multiplexCapabilityPresent) {
|
|
invokeStartElement (pctxt, "multiplexCapability", -1);
|
|
|
|
stat = asn1PD_H245MultiplexCapability (pctxt, &pvalue->multiplexCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexCapability", -1);
|
|
}
|
|
|
|
/* decode capabilityTable */
|
|
|
|
if (pvalue->m.capabilityTablePresent) {
|
|
invokeStartElement (pctxt, "capabilityTable", -1);
|
|
|
|
stat = asn1PD_H245TerminalCapabilitySet_capabilityTable (pctxt, &pvalue->capabilityTable);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "capabilityTable", -1);
|
|
}
|
|
|
|
/* decode capabilityDescriptors */
|
|
|
|
if (pvalue->m.capabilityDescriptorsPresent) {
|
|
invokeStartElement (pctxt, "capabilityDescriptors", -1);
|
|
|
|
stat = asn1PD_H245TerminalCapabilitySet_capabilityDescriptors (pctxt, &pvalue->capabilityDescriptors);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "capabilityDescriptors", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* LogicalChannelNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245LogicalChannelNumber (OOCTXT* pctxt, H245LogicalChannelNumber* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = decodeConsUInt16 (pctxt, pvalue, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, *pvalue);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EncryptionMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EncryptionMode (OOCTXT* pctxt, H245EncryptionMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* h233Encryption */
|
|
case 1:
|
|
invokeStartElement (pctxt, "h233Encryption", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "h233Encryption", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RedundancyEncodingElement */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RedundancyEncodingElement (OOCTXT* pctxt, H245RedundancyEncodingElement* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.payloadTypePresent = optbit;
|
|
|
|
/* decode dataType */
|
|
|
|
invokeStartElement (pctxt, "dataType", -1);
|
|
|
|
pvalue->dataType = ALLOC_ASN1ELEM (pctxt, H245DataType);
|
|
|
|
stat = asn1PD_H245DataType (pctxt, (H245DataType*)pvalue->dataType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "dataType", -1);
|
|
|
|
/* decode payloadType */
|
|
|
|
if (pvalue->m.payloadTypePresent) {
|
|
invokeStartElement (pctxt, "payloadType", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->payloadType, 0U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->payloadType);
|
|
|
|
invokeEndElement (pctxt, "payloadType", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH245RedundancyEncodingElement */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245_SeqOfH245RedundancyEncodingElement (OOCTXT* pctxt, H245_SeqOfH245RedundancyEncodingElement* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
H245RedundancyEncodingElement* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
int lstat;
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (;;) {
|
|
/* decode length determinant */
|
|
|
|
lstat = decodeLength (pctxt, &count);
|
|
if (lstat != ASN_OK && lstat != ASN_OK_FRAG) {
|
|
return lstat;
|
|
}
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245RedundancyEncodingElement);
|
|
|
|
stat = asn1PD_H245RedundancyEncodingElement (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
if(lstat == ASN_OK) break;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RedundancyEncoding_rtpRedundancyEncoding */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RedundancyEncoding_rtpRedundancyEncoding (OOCTXT* pctxt, H245RedundancyEncoding_rtpRedundancyEncoding* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.primaryPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.secondaryPresent = optbit;
|
|
|
|
/* decode primary */
|
|
|
|
if (pvalue->m.primaryPresent) {
|
|
invokeStartElement (pctxt, "primary", -1);
|
|
|
|
stat = asn1PD_H245RedundancyEncodingElement (pctxt, &pvalue->primary);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "primary", -1);
|
|
}
|
|
|
|
/* decode secondary */
|
|
|
|
if (pvalue->m.secondaryPresent) {
|
|
invokeStartElement (pctxt, "secondary", -1);
|
|
|
|
stat = asn1PD_H245_SeqOfH245RedundancyEncodingElement (pctxt, &pvalue->secondary);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "secondary", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RedundancyEncoding */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RedundancyEncoding (OOCTXT* pctxt, H245RedundancyEncoding* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.secondaryEncodingPresent = optbit;
|
|
|
|
/* decode redundancyEncodingMethod */
|
|
|
|
invokeStartElement (pctxt, "redundancyEncodingMethod", -1);
|
|
|
|
stat = asn1PD_H245RedundancyEncodingMethod (pctxt, &pvalue->redundancyEncodingMethod);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "redundancyEncodingMethod", -1);
|
|
|
|
/* decode secondaryEncoding */
|
|
|
|
if (pvalue->m.secondaryEncodingPresent) {
|
|
invokeStartElement (pctxt, "secondaryEncoding", -1);
|
|
|
|
pvalue->secondaryEncoding = ALLOC_ASN1ELEM (pctxt, H245DataType);
|
|
|
|
stat = asn1PD_H245DataType (pctxt, (H245DataType*)pvalue->secondaryEncoding);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "secondaryEncoding", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 1 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.rtpRedundancyEncodingPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "rtpRedundancyEncoding", -1);
|
|
|
|
stat = asn1PD_H245RedundancyEncoding_rtpRedundancyEncoding (pctxt, &pvalue->rtpRedundancyEncoding);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "rtpRedundancyEncoding", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplePayloadStreamElement */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplePayloadStreamElement (OOCTXT* pctxt, H245MultiplePayloadStreamElement* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.payloadTypePresent = optbit;
|
|
|
|
/* decode dataType */
|
|
|
|
invokeStartElement (pctxt, "dataType", -1);
|
|
|
|
pvalue->dataType = ALLOC_ASN1ELEM (pctxt, H245DataType);
|
|
|
|
stat = asn1PD_H245DataType (pctxt, (H245DataType*)pvalue->dataType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "dataType", -1);
|
|
|
|
/* decode payloadType */
|
|
|
|
if (pvalue->m.payloadTypePresent) {
|
|
invokeStartElement (pctxt, "payloadType", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->payloadType, 0U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->payloadType);
|
|
|
|
invokeEndElement (pctxt, "payloadType", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH245MultiplePayloadStreamElement */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245_SeqOfH245MultiplePayloadStreamElement (OOCTXT* pctxt, H245_SeqOfH245MultiplePayloadStreamElement* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
H245MultiplePayloadStreamElement* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
int lstat;
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (;;) {
|
|
/* decode length determinant */
|
|
|
|
lstat = decodeLength (pctxt, &count);
|
|
if (lstat != ASN_OK && lstat != ASN_OK_FRAG) {
|
|
return lstat;
|
|
}
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245MultiplePayloadStreamElement);
|
|
|
|
stat = asn1PD_H245MultiplePayloadStreamElement (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
if(lstat == ASN_OK) break;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplePayloadStream */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplePayloadStream (OOCTXT* pctxt, H245MultiplePayloadStream* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode elements */
|
|
|
|
invokeStartElement (pctxt, "elements", -1);
|
|
|
|
stat = asn1PD_H245_SeqOfH245MultiplePayloadStreamElement (pctxt, &pvalue->elements);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "elements", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FECData_rfc2733_mode_separateStream_differentPort */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FECData_rfc2733_mode_separateStream_differentPort (OOCTXT* pctxt, H245FECData_rfc2733_mode_separateStream_differentPort* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.protectedPayloadTypePresent = optbit;
|
|
|
|
/* decode protectedSessionID */
|
|
|
|
invokeStartElement (pctxt, "protectedSessionID", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->protectedSessionID, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->protectedSessionID);
|
|
|
|
invokeEndElement (pctxt, "protectedSessionID", -1);
|
|
|
|
/* decode protectedPayloadType */
|
|
|
|
if (pvalue->m.protectedPayloadTypePresent) {
|
|
invokeStartElement (pctxt, "protectedPayloadType", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->protectedPayloadType, 0U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->protectedPayloadType);
|
|
|
|
invokeEndElement (pctxt, "protectedPayloadType", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FECData_rfc2733_mode_separateStream_samePort */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FECData_rfc2733_mode_separateStream_samePort (OOCTXT* pctxt, H245FECData_rfc2733_mode_separateStream_samePort* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode protectedPayloadType */
|
|
|
|
invokeStartElement (pctxt, "protectedPayloadType", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->protectedPayloadType, 0U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->protectedPayloadType);
|
|
|
|
invokeEndElement (pctxt, "protectedPayloadType", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FECData_rfc2733_mode_separateStream */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FECData_rfc2733_mode_separateStream (OOCTXT* pctxt, H245FECData_rfc2733_mode_separateStream* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* differentPort */
|
|
case 0:
|
|
invokeStartElement (pctxt, "differentPort", -1);
|
|
|
|
pvalue->u.differentPort = ALLOC_ASN1ELEM (pctxt, H245FECData_rfc2733_mode_separateStream_differentPort);
|
|
|
|
stat = asn1PD_H245FECData_rfc2733_mode_separateStream_differentPort (pctxt, pvalue->u.differentPort);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "differentPort", -1);
|
|
|
|
break;
|
|
|
|
/* samePort */
|
|
case 1:
|
|
invokeStartElement (pctxt, "samePort", -1);
|
|
|
|
pvalue->u.samePort = ALLOC_ASN1ELEM (pctxt, H245FECData_rfc2733_mode_separateStream_samePort);
|
|
|
|
stat = asn1PD_H245FECData_rfc2733_mode_separateStream_samePort (pctxt, pvalue->u.samePort);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "samePort", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FECData_rfc2733_mode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FECData_rfc2733_mode (OOCTXT* pctxt, H245FECData_rfc2733_mode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* redundancyEncoding */
|
|
case 0:
|
|
invokeStartElement (pctxt, "redundancyEncoding", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "redundancyEncoding", -1);
|
|
|
|
break;
|
|
|
|
/* separateStream */
|
|
case 1:
|
|
invokeStartElement (pctxt, "separateStream", -1);
|
|
|
|
pvalue->u.separateStream = ALLOC_ASN1ELEM (pctxt, H245FECData_rfc2733_mode_separateStream);
|
|
|
|
stat = asn1PD_H245FECData_rfc2733_mode_separateStream (pctxt, pvalue->u.separateStream);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "separateStream", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FECData_rfc2733 */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FECData_rfc2733 (OOCTXT* pctxt, H245FECData_rfc2733* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode mode */
|
|
|
|
invokeStartElement (pctxt, "mode", -1);
|
|
|
|
stat = asn1PD_H245FECData_rfc2733_mode (pctxt, &pvalue->mode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mode", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FECData */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FECData (OOCTXT* pctxt, H245FECData* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* rfc2733 */
|
|
case 0:
|
|
invokeStartElement (pctxt, "rfc2733", -1);
|
|
|
|
pvalue->u.rfc2733 = ALLOC_ASN1ELEM (pctxt, H245FECData_rfc2733);
|
|
|
|
stat = asn1PD_H245FECData_rfc2733 (pctxt, pvalue->u.rfc2733);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "rfc2733", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H235Media_mediaType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H235Media_mediaType (OOCTXT* pctxt, H245H235Media_mediaType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* videoData */
|
|
case 1:
|
|
invokeStartElement (pctxt, "videoData", -1);
|
|
|
|
pvalue->u.videoData = ALLOC_ASN1ELEM (pctxt, H245VideoCapability);
|
|
|
|
stat = asn1PD_H245VideoCapability (pctxt, pvalue->u.videoData);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "videoData", -1);
|
|
|
|
break;
|
|
|
|
/* audioData */
|
|
case 2:
|
|
invokeStartElement (pctxt, "audioData", -1);
|
|
|
|
pvalue->u.audioData = ALLOC_ASN1ELEM (pctxt, H245AudioCapability);
|
|
|
|
stat = asn1PD_H245AudioCapability (pctxt, pvalue->u.audioData);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "audioData", -1);
|
|
|
|
break;
|
|
|
|
/* data */
|
|
case 3:
|
|
invokeStartElement (pctxt, "data", -1);
|
|
|
|
pvalue->u.data = ALLOC_ASN1ELEM (pctxt, H245DataApplicationCapability);
|
|
|
|
stat = asn1PD_H245DataApplicationCapability (pctxt, pvalue->u.data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "data", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 5;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* redundancyEncoding */
|
|
case 5:
|
|
invokeStartElement (pctxt, "redundancyEncoding", -1);
|
|
|
|
pvalue->u.redundancyEncoding = ALLOC_ASN1ELEM (pctxt, H245RedundancyEncoding);
|
|
|
|
stat = asn1PD_H245RedundancyEncoding (pctxt, pvalue->u.redundancyEncoding);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "redundancyEncoding", -1);
|
|
|
|
break;
|
|
|
|
/* multiplePayloadStream */
|
|
case 6:
|
|
invokeStartElement (pctxt, "multiplePayloadStream", -1);
|
|
|
|
pvalue->u.multiplePayloadStream = ALLOC_ASN1ELEM (pctxt, H245MultiplePayloadStream);
|
|
|
|
stat = asn1PD_H245MultiplePayloadStream (pctxt, pvalue->u.multiplePayloadStream);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplePayloadStream", -1);
|
|
|
|
break;
|
|
|
|
/* fec */
|
|
case 7:
|
|
invokeStartElement (pctxt, "fec", -1);
|
|
|
|
pvalue->u.fec = ALLOC_ASN1ELEM (pctxt, H245FECData);
|
|
|
|
stat = asn1PD_H245FECData (pctxt, pvalue->u.fec);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "fec", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H235Media */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H235Media (OOCTXT* pctxt, H245H235Media* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode encryptionAuthenticationAndIntegrity */
|
|
|
|
invokeStartElement (pctxt, "encryptionAuthenticationAndIntegrity", -1);
|
|
|
|
stat = asn1PD_H245EncryptionAuthenticationAndIntegrity (pctxt, &pvalue->encryptionAuthenticationAndIntegrity);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "encryptionAuthenticationAndIntegrity", -1);
|
|
|
|
/* decode mediaType */
|
|
|
|
invokeStartElement (pctxt, "mediaType", -1);
|
|
|
|
stat = asn1PD_H245H235Media_mediaType (pctxt, &pvalue->mediaType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaType", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexedStreamParameter */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexedStreamParameter (OOCTXT* pctxt, H245MultiplexedStreamParameter* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode multiplexFormat */
|
|
|
|
invokeStartElement (pctxt, "multiplexFormat", -1);
|
|
|
|
stat = asn1PD_H245MultiplexFormat (pctxt, &pvalue->multiplexFormat);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexFormat", -1);
|
|
|
|
/* decode controlOnMuxStream */
|
|
|
|
invokeStartElement (pctxt, "controlOnMuxStream", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->controlOnMuxStream);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->controlOnMuxStream);
|
|
|
|
invokeEndElement (pctxt, "controlOnMuxStream", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DataType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DataType (OOCTXT* pctxt, H245DataType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 5);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* nullData */
|
|
case 1:
|
|
invokeStartElement (pctxt, "nullData", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "nullData", -1);
|
|
|
|
break;
|
|
|
|
/* videoData */
|
|
case 2:
|
|
invokeStartElement (pctxt, "videoData", -1);
|
|
|
|
pvalue->u.videoData = ALLOC_ASN1ELEM (pctxt, H245VideoCapability);
|
|
|
|
stat = asn1PD_H245VideoCapability (pctxt, pvalue->u.videoData);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "videoData", -1);
|
|
|
|
break;
|
|
|
|
/* audioData */
|
|
case 3:
|
|
invokeStartElement (pctxt, "audioData", -1);
|
|
|
|
pvalue->u.audioData = ALLOC_ASN1ELEM (pctxt, H245AudioCapability);
|
|
|
|
stat = asn1PD_H245AudioCapability (pctxt, pvalue->u.audioData);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "audioData", -1);
|
|
|
|
break;
|
|
|
|
/* data */
|
|
case 4:
|
|
invokeStartElement (pctxt, "data", -1);
|
|
|
|
pvalue->u.data = ALLOC_ASN1ELEM (pctxt, H245DataApplicationCapability);
|
|
|
|
stat = asn1PD_H245DataApplicationCapability (pctxt, pvalue->u.data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "data", -1);
|
|
|
|
break;
|
|
|
|
/* encryptionData */
|
|
case 5:
|
|
invokeStartElement (pctxt, "encryptionData", -1);
|
|
|
|
pvalue->u.encryptionData = ALLOC_ASN1ELEM (pctxt, H245EncryptionMode);
|
|
|
|
stat = asn1PD_H245EncryptionMode (pctxt, pvalue->u.encryptionData);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "encryptionData", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 7;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* h235Control */
|
|
case 7:
|
|
invokeStartElement (pctxt, "h235Control", -1);
|
|
|
|
pvalue->u.h235Control = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.h235Control);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h235Control", -1);
|
|
|
|
break;
|
|
|
|
/* h235Media */
|
|
case 8:
|
|
invokeStartElement (pctxt, "h235Media", -1);
|
|
|
|
pvalue->u.h235Media = ALLOC_ASN1ELEM (pctxt, H245H235Media);
|
|
|
|
stat = asn1PD_H245H235Media (pctxt, pvalue->u.h235Media);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h235Media", -1);
|
|
|
|
break;
|
|
|
|
/* multiplexedStream */
|
|
case 9:
|
|
invokeStartElement (pctxt, "multiplexedStream", -1);
|
|
|
|
pvalue->u.multiplexedStream = ALLOC_ASN1ELEM (pctxt, H245MultiplexedStreamParameter);
|
|
|
|
stat = asn1PD_H245MultiplexedStreamParameter (pctxt, pvalue->u.multiplexedStream);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexedStream", -1);
|
|
|
|
break;
|
|
|
|
/* redundancyEncoding */
|
|
case 10:
|
|
invokeStartElement (pctxt, "redundancyEncoding", -1);
|
|
|
|
pvalue->u.redundancyEncoding = ALLOC_ASN1ELEM (pctxt, H245RedundancyEncoding);
|
|
|
|
stat = asn1PD_H245RedundancyEncoding (pctxt, pvalue->u.redundancyEncoding);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "redundancyEncoding", -1);
|
|
|
|
break;
|
|
|
|
/* multiplePayloadStream */
|
|
case 11:
|
|
invokeStartElement (pctxt, "multiplePayloadStream", -1);
|
|
|
|
pvalue->u.multiplePayloadStream = ALLOC_ASN1ELEM (pctxt, H245MultiplePayloadStream);
|
|
|
|
stat = asn1PD_H245MultiplePayloadStream (pctxt, pvalue->u.multiplePayloadStream);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplePayloadStream", -1);
|
|
|
|
break;
|
|
|
|
/* fec */
|
|
case 12:
|
|
invokeStartElement (pctxt, "fec", -1);
|
|
|
|
pvalue->u.fec = ALLOC_ASN1ELEM (pctxt, H245FECData);
|
|
|
|
stat = asn1PD_H245FECData (pctxt, pvalue->u.fec);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "fec", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H222LogicalChannelParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H222LogicalChannelParameters (OOCTXT* pctxt, H245H222LogicalChannelParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.pcr_pidPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.programDescriptorsPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.streamDescriptorsPresent = optbit;
|
|
|
|
/* decode resourceID */
|
|
|
|
invokeStartElement (pctxt, "resourceID", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->resourceID, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->resourceID);
|
|
|
|
invokeEndElement (pctxt, "resourceID", -1);
|
|
|
|
/* decode subChannelID */
|
|
|
|
invokeStartElement (pctxt, "subChannelID", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->subChannelID, 0U, 8191U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->subChannelID);
|
|
|
|
invokeEndElement (pctxt, "subChannelID", -1);
|
|
|
|
/* decode pcr_pid */
|
|
|
|
if (pvalue->m.pcr_pidPresent) {
|
|
invokeStartElement (pctxt, "pcr_pid", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->pcr_pid, 0U, 8191U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->pcr_pid);
|
|
|
|
invokeEndElement (pctxt, "pcr_pid", -1);
|
|
}
|
|
|
|
/* decode programDescriptors */
|
|
|
|
if (pvalue->m.programDescriptorsPresent) {
|
|
invokeStartElement (pctxt, "programDescriptors", -1);
|
|
|
|
stat = decodeDynOctetString (pctxt, (ASN1DynOctStr*)&pvalue->programDescriptors);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->programDescriptors.numocts, pvalue->programDescriptors.data);
|
|
|
|
invokeEndElement (pctxt, "programDescriptors", -1);
|
|
}
|
|
|
|
/* decode streamDescriptors */
|
|
|
|
if (pvalue->m.streamDescriptorsPresent) {
|
|
invokeStartElement (pctxt, "streamDescriptors", -1);
|
|
|
|
stat = decodeDynOctetString (pctxt, (ASN1DynOctStr*)&pvalue->streamDescriptors);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->streamDescriptors.numocts, pvalue->streamDescriptors.data);
|
|
|
|
invokeEndElement (pctxt, "streamDescriptors", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223LogicalChannelParameters_adaptationLayerType_al3 */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223LogicalChannelParameters_adaptationLayerType_al3 (OOCTXT* pctxt, H245H223LogicalChannelParameters_adaptationLayerType_al3* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* decode controlFieldOctets */
|
|
|
|
invokeStartElement (pctxt, "controlFieldOctets", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->controlFieldOctets, 0U, 2U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->controlFieldOctets);
|
|
|
|
invokeEndElement (pctxt, "controlFieldOctets", -1);
|
|
|
|
/* decode sendBufferSize */
|
|
|
|
invokeStartElement (pctxt, "sendBufferSize", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->sendBufferSize, 0U, 16777215U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sendBufferSize);
|
|
|
|
invokeEndElement (pctxt, "sendBufferSize", -1);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223AL1MParameters_transferMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223AL1MParameters_transferMode (OOCTXT* pctxt, H245H223AL1MParameters_transferMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* framed */
|
|
case 0:
|
|
invokeStartElement (pctxt, "framed", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "framed", -1);
|
|
|
|
break;
|
|
|
|
/* unframed */
|
|
case 1:
|
|
invokeStartElement (pctxt, "unframed", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "unframed", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223AL1MParameters_headerFEC */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223AL1MParameters_headerFEC (OOCTXT* pctxt, H245H223AL1MParameters_headerFEC* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* sebch16_7 */
|
|
case 0:
|
|
invokeStartElement (pctxt, "sebch16_7", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "sebch16_7", -1);
|
|
|
|
break;
|
|
|
|
/* golay24_12 */
|
|
case 1:
|
|
invokeStartElement (pctxt, "golay24_12", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "golay24_12", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223AL1MParameters_crcLength */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223AL1MParameters_crcLength (OOCTXT* pctxt, H245H223AL1MParameters_crcLength* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* crc4bit */
|
|
case 0:
|
|
invokeStartElement (pctxt, "crc4bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc4bit", -1);
|
|
|
|
break;
|
|
|
|
/* crc12bit */
|
|
case 1:
|
|
invokeStartElement (pctxt, "crc12bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc12bit", -1);
|
|
|
|
break;
|
|
|
|
/* crc20bit */
|
|
case 2:
|
|
invokeStartElement (pctxt, "crc20bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc20bit", -1);
|
|
|
|
break;
|
|
|
|
/* crc28bit */
|
|
case 3:
|
|
invokeStartElement (pctxt, "crc28bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc28bit", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 5;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* crc8bit */
|
|
case 5:
|
|
invokeStartElement (pctxt, "crc8bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc8bit", -1);
|
|
|
|
break;
|
|
|
|
/* crc16bit */
|
|
case 6:
|
|
invokeStartElement (pctxt, "crc16bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc16bit", -1);
|
|
|
|
break;
|
|
|
|
/* crc32bit */
|
|
case 7:
|
|
invokeStartElement (pctxt, "crc32bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc32bit", -1);
|
|
|
|
break;
|
|
|
|
/* crcNotUsed */
|
|
case 8:
|
|
invokeStartElement (pctxt, "crcNotUsed", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crcNotUsed", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223AnnexCArqParameters_numberOfRetransmissions */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223AnnexCArqParameters_numberOfRetransmissions (OOCTXT* pctxt, H245H223AnnexCArqParameters_numberOfRetransmissions* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* finite */
|
|
case 0:
|
|
invokeStartElement (pctxt, "finite", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->u.finite, 0U, 16U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.finite);
|
|
|
|
invokeEndElement (pctxt, "finite", -1);
|
|
|
|
break;
|
|
|
|
/* infinite */
|
|
case 1:
|
|
invokeStartElement (pctxt, "infinite", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "infinite", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223AnnexCArqParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223AnnexCArqParameters (OOCTXT* pctxt, H245H223AnnexCArqParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode numberOfRetransmissions */
|
|
|
|
invokeStartElement (pctxt, "numberOfRetransmissions", -1);
|
|
|
|
stat = asn1PD_H245H223AnnexCArqParameters_numberOfRetransmissions (pctxt, &pvalue->numberOfRetransmissions);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "numberOfRetransmissions", -1);
|
|
|
|
/* decode sendBufferSize */
|
|
|
|
invokeStartElement (pctxt, "sendBufferSize", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->sendBufferSize, 0U, 16777215U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sendBufferSize);
|
|
|
|
invokeEndElement (pctxt, "sendBufferSize", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223AL1MParameters_arqType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223AL1MParameters_arqType (OOCTXT* pctxt, H245H223AL1MParameters_arqType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* noArq */
|
|
case 0:
|
|
invokeStartElement (pctxt, "noArq", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "noArq", -1);
|
|
|
|
break;
|
|
|
|
/* typeIArq */
|
|
case 1:
|
|
invokeStartElement (pctxt, "typeIArq", -1);
|
|
|
|
pvalue->u.typeIArq = ALLOC_ASN1ELEM (pctxt, H245H223AnnexCArqParameters);
|
|
|
|
stat = asn1PD_H245H223AnnexCArqParameters (pctxt, pvalue->u.typeIArq);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "typeIArq", -1);
|
|
|
|
break;
|
|
|
|
/* typeIIArq */
|
|
case 2:
|
|
invokeStartElement (pctxt, "typeIIArq", -1);
|
|
|
|
pvalue->u.typeIIArq = ALLOC_ASN1ELEM (pctxt, H245H223AnnexCArqParameters);
|
|
|
|
stat = asn1PD_H245H223AnnexCArqParameters (pctxt, pvalue->u.typeIIArq);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "typeIIArq", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223AL1MParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223AL1MParameters (OOCTXT* pctxt, H245H223AL1MParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
/* decode transferMode */
|
|
|
|
invokeStartElement (pctxt, "transferMode", -1);
|
|
|
|
stat = asn1PD_H245H223AL1MParameters_transferMode (pctxt, &pvalue->transferMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "transferMode", -1);
|
|
|
|
/* decode headerFEC */
|
|
|
|
invokeStartElement (pctxt, "headerFEC", -1);
|
|
|
|
stat = asn1PD_H245H223AL1MParameters_headerFEC (pctxt, &pvalue->headerFEC);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "headerFEC", -1);
|
|
|
|
/* decode crcLength */
|
|
|
|
invokeStartElement (pctxt, "crcLength", -1);
|
|
|
|
stat = asn1PD_H245H223AL1MParameters_crcLength (pctxt, &pvalue->crcLength);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "crcLength", -1);
|
|
|
|
/* decode rcpcCodeRate */
|
|
|
|
invokeStartElement (pctxt, "rcpcCodeRate", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->rcpcCodeRate, 8U, 32U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->rcpcCodeRate);
|
|
|
|
invokeEndElement (pctxt, "rcpcCodeRate", -1);
|
|
|
|
/* decode arqType */
|
|
|
|
invokeStartElement (pctxt, "arqType", -1);
|
|
|
|
stat = asn1PD_H245H223AL1MParameters_arqType (pctxt, &pvalue->arqType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "arqType", -1);
|
|
|
|
/* decode alpduInterleaving */
|
|
|
|
invokeStartElement (pctxt, "alpduInterleaving", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->alpduInterleaving);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->alpduInterleaving);
|
|
|
|
invokeEndElement (pctxt, "alpduInterleaving", -1);
|
|
|
|
/* decode alsduSplitting */
|
|
|
|
invokeStartElement (pctxt, "alsduSplitting", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->alsduSplitting);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->alsduSplitting);
|
|
|
|
invokeEndElement (pctxt, "alsduSplitting", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 1 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.rsCodeCorrectionPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "rsCodeCorrection", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->rsCodeCorrection, 0U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->rsCodeCorrection);
|
|
|
|
invokeEndElement (pctxt, "rsCodeCorrection", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223AL2MParameters_headerFEC */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223AL2MParameters_headerFEC (OOCTXT* pctxt, H245H223AL2MParameters_headerFEC* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* sebch16_5 */
|
|
case 0:
|
|
invokeStartElement (pctxt, "sebch16_5", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "sebch16_5", -1);
|
|
|
|
break;
|
|
|
|
/* golay24_12 */
|
|
case 1:
|
|
invokeStartElement (pctxt, "golay24_12", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "golay24_12", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223AL2MParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223AL2MParameters (OOCTXT* pctxt, H245H223AL2MParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode headerFEC */
|
|
|
|
invokeStartElement (pctxt, "headerFEC", -1);
|
|
|
|
stat = asn1PD_H245H223AL2MParameters_headerFEC (pctxt, &pvalue->headerFEC);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "headerFEC", -1);
|
|
|
|
/* decode alpduInterleaving */
|
|
|
|
invokeStartElement (pctxt, "alpduInterleaving", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->alpduInterleaving);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->alpduInterleaving);
|
|
|
|
invokeEndElement (pctxt, "alpduInterleaving", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223AL3MParameters_headerFormat */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223AL3MParameters_headerFormat (OOCTXT* pctxt, H245H223AL3MParameters_headerFormat* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* sebch16_7 */
|
|
case 0:
|
|
invokeStartElement (pctxt, "sebch16_7", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "sebch16_7", -1);
|
|
|
|
break;
|
|
|
|
/* golay24_12 */
|
|
case 1:
|
|
invokeStartElement (pctxt, "golay24_12", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "golay24_12", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223AL3MParameters_crcLength */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223AL3MParameters_crcLength (OOCTXT* pctxt, H245H223AL3MParameters_crcLength* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* crc4bit */
|
|
case 0:
|
|
invokeStartElement (pctxt, "crc4bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc4bit", -1);
|
|
|
|
break;
|
|
|
|
/* crc12bit */
|
|
case 1:
|
|
invokeStartElement (pctxt, "crc12bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc12bit", -1);
|
|
|
|
break;
|
|
|
|
/* crc20bit */
|
|
case 2:
|
|
invokeStartElement (pctxt, "crc20bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc20bit", -1);
|
|
|
|
break;
|
|
|
|
/* crc28bit */
|
|
case 3:
|
|
invokeStartElement (pctxt, "crc28bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc28bit", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 5;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* crc8bit */
|
|
case 5:
|
|
invokeStartElement (pctxt, "crc8bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc8bit", -1);
|
|
|
|
break;
|
|
|
|
/* crc16bit */
|
|
case 6:
|
|
invokeStartElement (pctxt, "crc16bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc16bit", -1);
|
|
|
|
break;
|
|
|
|
/* crc32bit */
|
|
case 7:
|
|
invokeStartElement (pctxt, "crc32bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc32bit", -1);
|
|
|
|
break;
|
|
|
|
/* crcNotUsed */
|
|
case 8:
|
|
invokeStartElement (pctxt, "crcNotUsed", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crcNotUsed", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223AL3MParameters_arqType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223AL3MParameters_arqType (OOCTXT* pctxt, H245H223AL3MParameters_arqType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* noArq */
|
|
case 0:
|
|
invokeStartElement (pctxt, "noArq", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "noArq", -1);
|
|
|
|
break;
|
|
|
|
/* typeIArq */
|
|
case 1:
|
|
invokeStartElement (pctxt, "typeIArq", -1);
|
|
|
|
pvalue->u.typeIArq = ALLOC_ASN1ELEM (pctxt, H245H223AnnexCArqParameters);
|
|
|
|
stat = asn1PD_H245H223AnnexCArqParameters (pctxt, pvalue->u.typeIArq);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "typeIArq", -1);
|
|
|
|
break;
|
|
|
|
/* typeIIArq */
|
|
case 2:
|
|
invokeStartElement (pctxt, "typeIIArq", -1);
|
|
|
|
pvalue->u.typeIIArq = ALLOC_ASN1ELEM (pctxt, H245H223AnnexCArqParameters);
|
|
|
|
stat = asn1PD_H245H223AnnexCArqParameters (pctxt, pvalue->u.typeIIArq);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "typeIIArq", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223AL3MParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223AL3MParameters (OOCTXT* pctxt, H245H223AL3MParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
/* decode headerFormat */
|
|
|
|
invokeStartElement (pctxt, "headerFormat", -1);
|
|
|
|
stat = asn1PD_H245H223AL3MParameters_headerFormat (pctxt, &pvalue->headerFormat);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "headerFormat", -1);
|
|
|
|
/* decode crcLength */
|
|
|
|
invokeStartElement (pctxt, "crcLength", -1);
|
|
|
|
stat = asn1PD_H245H223AL3MParameters_crcLength (pctxt, &pvalue->crcLength);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "crcLength", -1);
|
|
|
|
/* decode rcpcCodeRate */
|
|
|
|
invokeStartElement (pctxt, "rcpcCodeRate", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->rcpcCodeRate, 8U, 32U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->rcpcCodeRate);
|
|
|
|
invokeEndElement (pctxt, "rcpcCodeRate", -1);
|
|
|
|
/* decode arqType */
|
|
|
|
invokeStartElement (pctxt, "arqType", -1);
|
|
|
|
stat = asn1PD_H245H223AL3MParameters_arqType (pctxt, &pvalue->arqType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "arqType", -1);
|
|
|
|
/* decode alpduInterleaving */
|
|
|
|
invokeStartElement (pctxt, "alpduInterleaving", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->alpduInterleaving);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->alpduInterleaving);
|
|
|
|
invokeEndElement (pctxt, "alpduInterleaving", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 1 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.rsCodeCorrectionPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "rsCodeCorrection", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->rsCodeCorrection, 0U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->rsCodeCorrection);
|
|
|
|
invokeEndElement (pctxt, "rsCodeCorrection", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223LogicalChannelParameters_adaptationLayerType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223LogicalChannelParameters_adaptationLayerType (OOCTXT* pctxt, H245H223LogicalChannelParameters_adaptationLayerType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 5);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* al1Framed */
|
|
case 1:
|
|
invokeStartElement (pctxt, "al1Framed", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "al1Framed", -1);
|
|
|
|
break;
|
|
|
|
/* al1NotFramed */
|
|
case 2:
|
|
invokeStartElement (pctxt, "al1NotFramed", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "al1NotFramed", -1);
|
|
|
|
break;
|
|
|
|
/* al2WithoutSequenceNumbers */
|
|
case 3:
|
|
invokeStartElement (pctxt, "al2WithoutSequenceNumbers", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "al2WithoutSequenceNumbers", -1);
|
|
|
|
break;
|
|
|
|
/* al2WithSequenceNumbers */
|
|
case 4:
|
|
invokeStartElement (pctxt, "al2WithSequenceNumbers", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "al2WithSequenceNumbers", -1);
|
|
|
|
break;
|
|
|
|
/* al3 */
|
|
case 5:
|
|
invokeStartElement (pctxt, "al3", -1);
|
|
|
|
pvalue->u.al3 = ALLOC_ASN1ELEM (pctxt, H245H223LogicalChannelParameters_adaptationLayerType_al3);
|
|
|
|
stat = asn1PD_H245H223LogicalChannelParameters_adaptationLayerType_al3 (pctxt, pvalue->u.al3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "al3", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 7;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* al1M */
|
|
case 7:
|
|
invokeStartElement (pctxt, "al1M", -1);
|
|
|
|
pvalue->u.al1M = ALLOC_ASN1ELEM (pctxt, H245H223AL1MParameters);
|
|
|
|
stat = asn1PD_H245H223AL1MParameters (pctxt, pvalue->u.al1M);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "al1M", -1);
|
|
|
|
break;
|
|
|
|
/* al2M */
|
|
case 8:
|
|
invokeStartElement (pctxt, "al2M", -1);
|
|
|
|
pvalue->u.al2M = ALLOC_ASN1ELEM (pctxt, H245H223AL2MParameters);
|
|
|
|
stat = asn1PD_H245H223AL2MParameters (pctxt, pvalue->u.al2M);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "al2M", -1);
|
|
|
|
break;
|
|
|
|
/* al3M */
|
|
case 9:
|
|
invokeStartElement (pctxt, "al3M", -1);
|
|
|
|
pvalue->u.al3M = ALLOC_ASN1ELEM (pctxt, H245H223AL3MParameters);
|
|
|
|
stat = asn1PD_H245H223AL3MParameters (pctxt, pvalue->u.al3M);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "al3M", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223LogicalChannelParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223LogicalChannelParameters (OOCTXT* pctxt, H245H223LogicalChannelParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode adaptationLayerType */
|
|
|
|
invokeStartElement (pctxt, "adaptationLayerType", -1);
|
|
|
|
stat = asn1PD_H245H223LogicalChannelParameters_adaptationLayerType (pctxt, &pvalue->adaptationLayerType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "adaptationLayerType", -1);
|
|
|
|
/* decode segmentableFlag */
|
|
|
|
invokeStartElement (pctxt, "segmentableFlag", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->segmentableFlag);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->segmentableFlag);
|
|
|
|
invokeEndElement (pctxt, "segmentableFlag", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CRCLength */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CRCLength (OOCTXT* pctxt, H245CRCLength* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* crc8bit */
|
|
case 0:
|
|
invokeStartElement (pctxt, "crc8bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc8bit", -1);
|
|
|
|
break;
|
|
|
|
/* crc16bit */
|
|
case 1:
|
|
invokeStartElement (pctxt, "crc16bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc16bit", -1);
|
|
|
|
break;
|
|
|
|
/* crc32bit */
|
|
case 2:
|
|
invokeStartElement (pctxt, "crc32bit", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "crc32bit", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* V76HDLCParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245V76HDLCParameters (OOCTXT* pctxt, H245V76HDLCParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode crcLength */
|
|
|
|
invokeStartElement (pctxt, "crcLength", -1);
|
|
|
|
stat = asn1PD_H245CRCLength (pctxt, &pvalue->crcLength);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "crcLength", -1);
|
|
|
|
/* decode n401 */
|
|
|
|
invokeStartElement (pctxt, "n401", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->n401, 1U, 4095U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->n401);
|
|
|
|
invokeEndElement (pctxt, "n401", -1);
|
|
|
|
/* decode loopbackTestProcedure */
|
|
|
|
invokeStartElement (pctxt, "loopbackTestProcedure", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->loopbackTestProcedure);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->loopbackTestProcedure);
|
|
|
|
invokeEndElement (pctxt, "loopbackTestProcedure", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* V76LogicalChannelParameters_suspendResume */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245V76LogicalChannelParameters_suspendResume (OOCTXT* pctxt, H245V76LogicalChannelParameters_suspendResume* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* noSuspendResume */
|
|
case 0:
|
|
invokeStartElement (pctxt, "noSuspendResume", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "noSuspendResume", -1);
|
|
|
|
break;
|
|
|
|
/* suspendResumewAddress */
|
|
case 1:
|
|
invokeStartElement (pctxt, "suspendResumewAddress", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "suspendResumewAddress", -1);
|
|
|
|
break;
|
|
|
|
/* suspendResumewoAddress */
|
|
case 2:
|
|
invokeStartElement (pctxt, "suspendResumewoAddress", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "suspendResumewoAddress", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* V76LogicalChannelParameters_mode_eRM_recovery */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245V76LogicalChannelParameters_mode_eRM_recovery (OOCTXT* pctxt, H245V76LogicalChannelParameters_mode_eRM_recovery* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* rej */
|
|
case 0:
|
|
invokeStartElement (pctxt, "rej", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "rej", -1);
|
|
|
|
break;
|
|
|
|
/* sREJ */
|
|
case 1:
|
|
invokeStartElement (pctxt, "sREJ", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "sREJ", -1);
|
|
|
|
break;
|
|
|
|
/* mSREJ */
|
|
case 2:
|
|
invokeStartElement (pctxt, "mSREJ", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "mSREJ", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* V76LogicalChannelParameters_mode_eRM */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245V76LogicalChannelParameters_mode_eRM (OOCTXT* pctxt, H245V76LogicalChannelParameters_mode_eRM* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode windowSize */
|
|
|
|
invokeStartElement (pctxt, "windowSize", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->windowSize, 1U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->windowSize);
|
|
|
|
invokeEndElement (pctxt, "windowSize", -1);
|
|
|
|
/* decode recovery */
|
|
|
|
invokeStartElement (pctxt, "recovery", -1);
|
|
|
|
stat = asn1PD_H245V76LogicalChannelParameters_mode_eRM_recovery (pctxt, &pvalue->recovery);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "recovery", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* V76LogicalChannelParameters_mode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245V76LogicalChannelParameters_mode (OOCTXT* pctxt, H245V76LogicalChannelParameters_mode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* eRM */
|
|
case 0:
|
|
invokeStartElement (pctxt, "eRM", -1);
|
|
|
|
pvalue->u.eRM = ALLOC_ASN1ELEM (pctxt, H245V76LogicalChannelParameters_mode_eRM);
|
|
|
|
stat = asn1PD_H245V76LogicalChannelParameters_mode_eRM (pctxt, pvalue->u.eRM);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "eRM", -1);
|
|
|
|
break;
|
|
|
|
/* uNERM */
|
|
case 1:
|
|
invokeStartElement (pctxt, "uNERM", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "uNERM", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* V75Parameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245V75Parameters (OOCTXT* pctxt, H245V75Parameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode audioHeaderPresent */
|
|
|
|
invokeStartElement (pctxt, "audioHeaderPresent", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->audioHeaderPresent);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->audioHeaderPresent);
|
|
|
|
invokeEndElement (pctxt, "audioHeaderPresent", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* V76LogicalChannelParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245V76LogicalChannelParameters (OOCTXT* pctxt, H245V76LogicalChannelParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode hdlcParameters */
|
|
|
|
invokeStartElement (pctxt, "hdlcParameters", -1);
|
|
|
|
stat = asn1PD_H245V76HDLCParameters (pctxt, &pvalue->hdlcParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "hdlcParameters", -1);
|
|
|
|
/* decode suspendResume */
|
|
|
|
invokeStartElement (pctxt, "suspendResume", -1);
|
|
|
|
stat = asn1PD_H245V76LogicalChannelParameters_suspendResume (pctxt, &pvalue->suspendResume);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "suspendResume", -1);
|
|
|
|
/* decode uIH */
|
|
|
|
invokeStartElement (pctxt, "uIH", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->uIH);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->uIH);
|
|
|
|
invokeEndElement (pctxt, "uIH", -1);
|
|
|
|
/* decode mode */
|
|
|
|
invokeStartElement (pctxt, "mode", -1);
|
|
|
|
stat = asn1PD_H245V76LogicalChannelParameters_mode (pctxt, &pvalue->mode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mode", -1);
|
|
|
|
/* decode v75Parameters */
|
|
|
|
invokeStartElement (pctxt, "v75Parameters", -1);
|
|
|
|
stat = asn1PD_H245V75Parameters (pctxt, &pvalue->v75Parameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "v75Parameters", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnicastAddress_iPAddress_network */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UnicastAddress_iPAddress_network (OOCTXT* pctxt, H245UnicastAddress_iPAddress_network* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 4, 4, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnicastAddress_iPAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UnicastAddress_iPAddress (OOCTXT* pctxt, H245UnicastAddress_iPAddress* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode network */
|
|
|
|
invokeStartElement (pctxt, "network", -1);
|
|
|
|
stat = asn1PD_H245UnicastAddress_iPAddress_network (pctxt, &pvalue->network);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "network", -1);
|
|
|
|
/* decode tsapIdentifier */
|
|
|
|
invokeStartElement (pctxt, "tsapIdentifier", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->tsapIdentifier, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->tsapIdentifier);
|
|
|
|
invokeEndElement (pctxt, "tsapIdentifier", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnicastAddress_iPXAddress_node */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UnicastAddress_iPXAddress_node (OOCTXT* pctxt, H245UnicastAddress_iPXAddress_node* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 6, 6, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnicastAddress_iPXAddress_netnum */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UnicastAddress_iPXAddress_netnum (OOCTXT* pctxt, H245UnicastAddress_iPXAddress_netnum* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 4, 4, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnicastAddress_iPXAddress_tsapIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UnicastAddress_iPXAddress_tsapIdentifier (OOCTXT* pctxt, H245UnicastAddress_iPXAddress_tsapIdentifier* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 2, 2, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnicastAddress_iPXAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UnicastAddress_iPXAddress (OOCTXT* pctxt, H245UnicastAddress_iPXAddress* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode node */
|
|
|
|
invokeStartElement (pctxt, "node", -1);
|
|
|
|
stat = asn1PD_H245UnicastAddress_iPXAddress_node (pctxt, &pvalue->node);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "node", -1);
|
|
|
|
/* decode netnum */
|
|
|
|
invokeStartElement (pctxt, "netnum", -1);
|
|
|
|
stat = asn1PD_H245UnicastAddress_iPXAddress_netnum (pctxt, &pvalue->netnum);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "netnum", -1);
|
|
|
|
/* decode tsapIdentifier */
|
|
|
|
invokeStartElement (pctxt, "tsapIdentifier", -1);
|
|
|
|
stat = asn1PD_H245UnicastAddress_iPXAddress_tsapIdentifier (pctxt, &pvalue->tsapIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "tsapIdentifier", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnicastAddress_iP6Address_network */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UnicastAddress_iP6Address_network (OOCTXT* pctxt, H245UnicastAddress_iP6Address_network* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 16, 16, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnicastAddress_iP6Address */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UnicastAddress_iP6Address (OOCTXT* pctxt, H245UnicastAddress_iP6Address* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode network */
|
|
|
|
invokeStartElement (pctxt, "network", -1);
|
|
|
|
stat = asn1PD_H245UnicastAddress_iP6Address_network (pctxt, &pvalue->network);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "network", -1);
|
|
|
|
/* decode tsapIdentifier */
|
|
|
|
invokeStartElement (pctxt, "tsapIdentifier", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->tsapIdentifier, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->tsapIdentifier);
|
|
|
|
invokeEndElement (pctxt, "tsapIdentifier", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnicastAddress_netBios */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UnicastAddress_netBios (OOCTXT* pctxt, H245UnicastAddress_netBios* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 16, 16, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnicastAddress_iPSourceRouteAddress_routing */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UnicastAddress_iPSourceRouteAddress_routing (OOCTXT* pctxt, H245UnicastAddress_iPSourceRouteAddress_routing* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* strict */
|
|
case 0:
|
|
invokeStartElement (pctxt, "strict", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "strict", -1);
|
|
|
|
break;
|
|
|
|
/* loose */
|
|
case 1:
|
|
invokeStartElement (pctxt, "loose", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "loose", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnicastAddress_iPSourceRouteAddress_network */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UnicastAddress_iPSourceRouteAddress_network (OOCTXT* pctxt, H245UnicastAddress_iPSourceRouteAddress_network* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 4, 4, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnicastAddress_iPSourceRouteAddress_route_element */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UnicastAddress_iPSourceRouteAddress_route_element (OOCTXT* pctxt, H245UnicastAddress_iPSourceRouteAddress_route_element* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 4, 4, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH245UnicastAddress_iPSourceRouteAddress_route_elem */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245_SeqOfH245UnicastAddress_iPSourceRouteAddress_route_element (OOCTXT* pctxt, H245_SeqOfH245UnicastAddress_iPSourceRouteAddress_route_element* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
stat = decodeLength (pctxt, &pvalue->n);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
ALLOC_ASN1ARRAY (pctxt, pvalue, H245UnicastAddress_iPSourceRouteAddress_route_element);
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
stat = asn1PD_H245UnicastAddress_iPSourceRouteAddress_route_element (pctxt, &pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnicastAddress_iPSourceRouteAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UnicastAddress_iPSourceRouteAddress (OOCTXT* pctxt, H245UnicastAddress_iPSourceRouteAddress* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode routing */
|
|
|
|
invokeStartElement (pctxt, "routing", -1);
|
|
|
|
stat = asn1PD_H245UnicastAddress_iPSourceRouteAddress_routing (pctxt, &pvalue->routing);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "routing", -1);
|
|
|
|
/* decode network */
|
|
|
|
invokeStartElement (pctxt, "network", -1);
|
|
|
|
stat = asn1PD_H245UnicastAddress_iPSourceRouteAddress_network (pctxt, &pvalue->network);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "network", -1);
|
|
|
|
/* decode tsapIdentifier */
|
|
|
|
invokeStartElement (pctxt, "tsapIdentifier", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->tsapIdentifier, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->tsapIdentifier);
|
|
|
|
invokeEndElement (pctxt, "tsapIdentifier", -1);
|
|
|
|
/* decode route */
|
|
|
|
invokeStartElement (pctxt, "route", -1);
|
|
|
|
stat = asn1PD_H245_SeqOfH245UnicastAddress_iPSourceRouteAddress_route_element (pctxt, &pvalue->route);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "route", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnicastAddress_nsap */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UnicastAddress_nsap (OOCTXT* pctxt, H245UnicastAddress_nsap* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 20, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UnicastAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UnicastAddress (OOCTXT* pctxt, H245UnicastAddress* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* iPAddress */
|
|
case 0:
|
|
invokeStartElement (pctxt, "iPAddress", -1);
|
|
|
|
pvalue->u.iPAddress = ALLOC_ASN1ELEM (pctxt, H245UnicastAddress_iPAddress);
|
|
|
|
stat = asn1PD_H245UnicastAddress_iPAddress (pctxt, pvalue->u.iPAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "iPAddress", -1);
|
|
|
|
break;
|
|
|
|
/* iPXAddress */
|
|
case 1:
|
|
invokeStartElement (pctxt, "iPXAddress", -1);
|
|
|
|
pvalue->u.iPXAddress = ALLOC_ASN1ELEM (pctxt, H245UnicastAddress_iPXAddress);
|
|
|
|
stat = asn1PD_H245UnicastAddress_iPXAddress (pctxt, pvalue->u.iPXAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "iPXAddress", -1);
|
|
|
|
break;
|
|
|
|
/* iP6Address */
|
|
case 2:
|
|
invokeStartElement (pctxt, "iP6Address", -1);
|
|
|
|
pvalue->u.iP6Address = ALLOC_ASN1ELEM (pctxt, H245UnicastAddress_iP6Address);
|
|
|
|
stat = asn1PD_H245UnicastAddress_iP6Address (pctxt, pvalue->u.iP6Address);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "iP6Address", -1);
|
|
|
|
break;
|
|
|
|
/* netBios */
|
|
case 3:
|
|
invokeStartElement (pctxt, "netBios", -1);
|
|
|
|
pvalue->u.netBios = ALLOC_ASN1ELEM (pctxt, H245UnicastAddress_netBios);
|
|
|
|
stat = asn1PD_H245UnicastAddress_netBios (pctxt, pvalue->u.netBios);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "netBios", -1);
|
|
|
|
break;
|
|
|
|
/* iPSourceRouteAddress */
|
|
case 4:
|
|
invokeStartElement (pctxt, "iPSourceRouteAddress", -1);
|
|
|
|
pvalue->u.iPSourceRouteAddress = ALLOC_ASN1ELEM (pctxt, H245UnicastAddress_iPSourceRouteAddress);
|
|
|
|
stat = asn1PD_H245UnicastAddress_iPSourceRouteAddress (pctxt, pvalue->u.iPSourceRouteAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "iPSourceRouteAddress", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 6;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* nsap */
|
|
case 6:
|
|
invokeStartElement (pctxt, "nsap", -1);
|
|
|
|
pvalue->u.nsap = ALLOC_ASN1ELEM (pctxt, H245UnicastAddress_nsap);
|
|
|
|
stat = asn1PD_H245UnicastAddress_nsap (pctxt, pvalue->u.nsap);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nsap", -1);
|
|
|
|
break;
|
|
|
|
/* nonStandardAddress */
|
|
case 7:
|
|
invokeStartElement (pctxt, "nonStandardAddress", -1);
|
|
|
|
pvalue->u.nonStandardAddress = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandardAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandardAddress", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MulticastAddress_iPAddress_network */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MulticastAddress_iPAddress_network (OOCTXT* pctxt, H245MulticastAddress_iPAddress_network* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 4, 4, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MulticastAddress_iPAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MulticastAddress_iPAddress (OOCTXT* pctxt, H245MulticastAddress_iPAddress* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode network */
|
|
|
|
invokeStartElement (pctxt, "network", -1);
|
|
|
|
stat = asn1PD_H245MulticastAddress_iPAddress_network (pctxt, &pvalue->network);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "network", -1);
|
|
|
|
/* decode tsapIdentifier */
|
|
|
|
invokeStartElement (pctxt, "tsapIdentifier", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->tsapIdentifier, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->tsapIdentifier);
|
|
|
|
invokeEndElement (pctxt, "tsapIdentifier", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MulticastAddress_iP6Address_network */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MulticastAddress_iP6Address_network (OOCTXT* pctxt, H245MulticastAddress_iP6Address_network* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 16, 16, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MulticastAddress_iP6Address */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MulticastAddress_iP6Address (OOCTXT* pctxt, H245MulticastAddress_iP6Address* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode network */
|
|
|
|
invokeStartElement (pctxt, "network", -1);
|
|
|
|
stat = asn1PD_H245MulticastAddress_iP6Address_network (pctxt, &pvalue->network);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "network", -1);
|
|
|
|
/* decode tsapIdentifier */
|
|
|
|
invokeStartElement (pctxt, "tsapIdentifier", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->tsapIdentifier, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->tsapIdentifier);
|
|
|
|
invokeEndElement (pctxt, "tsapIdentifier", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MulticastAddress_nsap */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MulticastAddress_nsap (OOCTXT* pctxt, H245MulticastAddress_nsap* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 20, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MulticastAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MulticastAddress (OOCTXT* pctxt, H245MulticastAddress* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* iPAddress */
|
|
case 0:
|
|
invokeStartElement (pctxt, "iPAddress", -1);
|
|
|
|
pvalue->u.iPAddress = ALLOC_ASN1ELEM (pctxt, H245MulticastAddress_iPAddress);
|
|
|
|
stat = asn1PD_H245MulticastAddress_iPAddress (pctxt, pvalue->u.iPAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "iPAddress", -1);
|
|
|
|
break;
|
|
|
|
/* iP6Address */
|
|
case 1:
|
|
invokeStartElement (pctxt, "iP6Address", -1);
|
|
|
|
pvalue->u.iP6Address = ALLOC_ASN1ELEM (pctxt, H245MulticastAddress_iP6Address);
|
|
|
|
stat = asn1PD_H245MulticastAddress_iP6Address (pctxt, pvalue->u.iP6Address);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "iP6Address", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* nsap */
|
|
case 3:
|
|
invokeStartElement (pctxt, "nsap", -1);
|
|
|
|
pvalue->u.nsap = ALLOC_ASN1ELEM (pctxt, H245MulticastAddress_nsap);
|
|
|
|
stat = asn1PD_H245MulticastAddress_nsap (pctxt, pvalue->u.nsap);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nsap", -1);
|
|
|
|
break;
|
|
|
|
/* nonStandardAddress */
|
|
case 4:
|
|
invokeStartElement (pctxt, "nonStandardAddress", -1);
|
|
|
|
pvalue->u.nonStandardAddress = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandardAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandardAddress", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TransportAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TransportAddress (OOCTXT* pctxt, H245TransportAddress* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* unicastAddress */
|
|
case 0:
|
|
invokeStartElement (pctxt, "unicastAddress", -1);
|
|
|
|
pvalue->u.unicastAddress = ALLOC_ASN1ELEM (pctxt, H245UnicastAddress);
|
|
|
|
stat = asn1PD_H245UnicastAddress (pctxt, pvalue->u.unicastAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "unicastAddress", -1);
|
|
|
|
break;
|
|
|
|
/* multicastAddress */
|
|
case 1:
|
|
invokeStartElement (pctxt, "multicastAddress", -1);
|
|
|
|
pvalue->u.multicastAddress = ALLOC_ASN1ELEM (pctxt, H245MulticastAddress);
|
|
|
|
stat = asn1PD_H245MulticastAddress (pctxt, pvalue->u.multicastAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multicastAddress", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* McuNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245McuNumber (OOCTXT* pctxt, H245McuNumber* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = decodeConsUInt8 (pctxt, pvalue, 0U, 192U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, *pvalue);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TerminalNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TerminalNumber (OOCTXT* pctxt, H245TerminalNumber* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = decodeConsUInt8 (pctxt, pvalue, 0U, 192U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, *pvalue);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TerminalLabel */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TerminalLabel (OOCTXT* pctxt, H245TerminalLabel* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode mcuNumber */
|
|
|
|
invokeStartElement (pctxt, "mcuNumber", -1);
|
|
|
|
stat = asn1PD_H245McuNumber (pctxt, &pvalue->mcuNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mcuNumber", -1);
|
|
|
|
/* decode terminalNumber */
|
|
|
|
invokeStartElement (pctxt, "terminalNumber", -1);
|
|
|
|
stat = asn1PD_H245TerminalNumber (pctxt, &pvalue->terminalNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H2250LogicalChannelParameters_mediaPacketization */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H2250LogicalChannelParameters_mediaPacketization (OOCTXT* pctxt, H245H2250LogicalChannelParameters_mediaPacketization* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* h261aVideoPacketization */
|
|
case 0:
|
|
invokeStartElement (pctxt, "h261aVideoPacketization", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "h261aVideoPacketization", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 2;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* rtpPayloadType */
|
|
case 2:
|
|
invokeStartElement (pctxt, "rtpPayloadType", -1);
|
|
|
|
pvalue->u.rtpPayloadType = ALLOC_ASN1ELEM (pctxt, H245RTPPayloadType);
|
|
|
|
stat = asn1PD_H245RTPPayloadType (pctxt, pvalue->u.rtpPayloadType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "rtpPayloadType", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H2250LogicalChannelParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H2250LogicalChannelParameters (OOCTXT* pctxt, H245H2250LogicalChannelParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.nonStandardPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.associatedSessionIDPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.mediaChannelPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.mediaGuaranteedDeliveryPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.mediaControlChannelPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.mediaControlGuaranteedDeliveryPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.silenceSuppressionPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.destinationPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.dynamicRTPPayloadTypePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.mediaPacketizationPresent = optbit;
|
|
|
|
/* decode nonStandard */
|
|
|
|
if (pvalue->m.nonStandardPresent) {
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
stat = asn1PD_H245_SeqOfH245NonStandardParameter (pctxt, &pvalue->nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
}
|
|
|
|
/* decode sessionID */
|
|
|
|
invokeStartElement (pctxt, "sessionID", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->sessionID, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sessionID);
|
|
|
|
invokeEndElement (pctxt, "sessionID", -1);
|
|
|
|
/* decode associatedSessionID */
|
|
|
|
if (pvalue->m.associatedSessionIDPresent) {
|
|
invokeStartElement (pctxt, "associatedSessionID", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->associatedSessionID, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->associatedSessionID);
|
|
|
|
invokeEndElement (pctxt, "associatedSessionID", -1);
|
|
}
|
|
|
|
/* decode mediaChannel */
|
|
|
|
if (pvalue->m.mediaChannelPresent) {
|
|
invokeStartElement (pctxt, "mediaChannel", -1);
|
|
|
|
stat = asn1PD_H245TransportAddress (pctxt, &pvalue->mediaChannel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaChannel", -1);
|
|
}
|
|
|
|
/* decode mediaGuaranteedDelivery */
|
|
|
|
if (pvalue->m.mediaGuaranteedDeliveryPresent) {
|
|
invokeStartElement (pctxt, "mediaGuaranteedDelivery", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->mediaGuaranteedDelivery);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->mediaGuaranteedDelivery);
|
|
|
|
invokeEndElement (pctxt, "mediaGuaranteedDelivery", -1);
|
|
}
|
|
|
|
/* decode mediaControlChannel */
|
|
|
|
if (pvalue->m.mediaControlChannelPresent) {
|
|
invokeStartElement (pctxt, "mediaControlChannel", -1);
|
|
|
|
stat = asn1PD_H245TransportAddress (pctxt, &pvalue->mediaControlChannel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaControlChannel", -1);
|
|
}
|
|
|
|
/* decode mediaControlGuaranteedDelivery */
|
|
|
|
if (pvalue->m.mediaControlGuaranteedDeliveryPresent) {
|
|
invokeStartElement (pctxt, "mediaControlGuaranteedDelivery", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->mediaControlGuaranteedDelivery);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->mediaControlGuaranteedDelivery);
|
|
|
|
invokeEndElement (pctxt, "mediaControlGuaranteedDelivery", -1);
|
|
}
|
|
|
|
/* decode silenceSuppression */
|
|
|
|
if (pvalue->m.silenceSuppressionPresent) {
|
|
invokeStartElement (pctxt, "silenceSuppression", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->silenceSuppression);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->silenceSuppression);
|
|
|
|
invokeEndElement (pctxt, "silenceSuppression", -1);
|
|
}
|
|
|
|
/* decode destination */
|
|
|
|
if (pvalue->m.destinationPresent) {
|
|
invokeStartElement (pctxt, "destination", -1);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, &pvalue->destination);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "destination", -1);
|
|
}
|
|
|
|
/* decode dynamicRTPPayloadType */
|
|
|
|
if (pvalue->m.dynamicRTPPayloadTypePresent) {
|
|
invokeStartElement (pctxt, "dynamicRTPPayloadType", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->dynamicRTPPayloadType, 96U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->dynamicRTPPayloadType);
|
|
|
|
invokeEndElement (pctxt, "dynamicRTPPayloadType", -1);
|
|
}
|
|
|
|
/* decode mediaPacketization */
|
|
|
|
if (pvalue->m.mediaPacketizationPresent) {
|
|
invokeStartElement (pctxt, "mediaPacketization", -1);
|
|
|
|
stat = asn1PD_H245H2250LogicalChannelParameters_mediaPacketization (pctxt, &pvalue->mediaPacketization);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaPacketization", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 3 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.transportCapabilityPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "transportCapability", -1);
|
|
|
|
stat = asn1PD_H245TransportCapability (pctxt, &pvalue->transportCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "transportCapability", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.redundancyEncodingPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "redundancyEncoding", -1);
|
|
|
|
stat = asn1PD_H245RedundancyEncoding (pctxt, &pvalue->redundancyEncoding);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "redundancyEncoding", -1);
|
|
break;
|
|
|
|
case 2:
|
|
pvalue->m.sourcePresent = 1;
|
|
|
|
invokeStartElement (pctxt, "source", -1);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, &pvalue->source);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "source", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* OpenLogicalChannel_forwardLogicalChannelParameters_multi */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters (OOCTXT* pctxt, H245OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* h222LogicalChannelParameters */
|
|
case 0:
|
|
invokeStartElement (pctxt, "h222LogicalChannelParameters", -1);
|
|
|
|
pvalue->u.h222LogicalChannelParameters = ALLOC_ASN1ELEM (pctxt, H245H222LogicalChannelParameters);
|
|
|
|
stat = asn1PD_H245H222LogicalChannelParameters (pctxt, pvalue->u.h222LogicalChannelParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h222LogicalChannelParameters", -1);
|
|
|
|
break;
|
|
|
|
/* h223LogicalChannelParameters */
|
|
case 1:
|
|
invokeStartElement (pctxt, "h223LogicalChannelParameters", -1);
|
|
|
|
pvalue->u.h223LogicalChannelParameters = ALLOC_ASN1ELEM (pctxt, H245H223LogicalChannelParameters);
|
|
|
|
stat = asn1PD_H245H223LogicalChannelParameters (pctxt, pvalue->u.h223LogicalChannelParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h223LogicalChannelParameters", -1);
|
|
|
|
break;
|
|
|
|
/* v76LogicalChannelParameters */
|
|
case 2:
|
|
invokeStartElement (pctxt, "v76LogicalChannelParameters", -1);
|
|
|
|
pvalue->u.v76LogicalChannelParameters = ALLOC_ASN1ELEM (pctxt, H245V76LogicalChannelParameters);
|
|
|
|
stat = asn1PD_H245V76LogicalChannelParameters (pctxt, pvalue->u.v76LogicalChannelParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "v76LogicalChannelParameters", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* h2250LogicalChannelParameters */
|
|
case 4:
|
|
invokeStartElement (pctxt, "h2250LogicalChannelParameters", -1);
|
|
|
|
pvalue->u.h2250LogicalChannelParameters = ALLOC_ASN1ELEM (pctxt, H245H2250LogicalChannelParameters);
|
|
|
|
stat = asn1PD_H245H2250LogicalChannelParameters (pctxt, pvalue->u.h2250LogicalChannelParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h2250LogicalChannelParameters", -1);
|
|
|
|
break;
|
|
|
|
/* none */
|
|
case 5:
|
|
invokeStartElement (pctxt, "none", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "none", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* OpenLogicalChannel_forwardLogicalChannelParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245OpenLogicalChannel_forwardLogicalChannelParameters (OOCTXT* pctxt, H245OpenLogicalChannel_forwardLogicalChannelParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.portNumberPresent = optbit;
|
|
|
|
/* decode portNumber */
|
|
|
|
if (pvalue->m.portNumberPresent) {
|
|
invokeStartElement (pctxt, "portNumber", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->portNumber, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->portNumber);
|
|
|
|
invokeEndElement (pctxt, "portNumber", -1);
|
|
}
|
|
|
|
/* decode dataType */
|
|
|
|
invokeStartElement (pctxt, "dataType", -1);
|
|
|
|
stat = asn1PD_H245DataType (pctxt, &pvalue->dataType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "dataType", -1);
|
|
|
|
/* decode multiplexParameters */
|
|
|
|
invokeStartElement (pctxt, "multiplexParameters", -1);
|
|
|
|
stat = asn1PD_H245OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters (pctxt, &pvalue->multiplexParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexParameters", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 2 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.forwardLogicalChannelDependencyPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "forwardLogicalChannelDependency", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->forwardLogicalChannelDependency);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "forwardLogicalChannelDependency", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.replacementForPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "replacementFor", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->replacementFor);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "replacementFor", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* OpenLogicalChannel_reverseLogicalChannelParameters_multi */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters (OOCTXT* pctxt, H245OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* h223LogicalChannelParameters */
|
|
case 0:
|
|
invokeStartElement (pctxt, "h223LogicalChannelParameters", -1);
|
|
|
|
pvalue->u.h223LogicalChannelParameters = ALLOC_ASN1ELEM (pctxt, H245H223LogicalChannelParameters);
|
|
|
|
stat = asn1PD_H245H223LogicalChannelParameters (pctxt, pvalue->u.h223LogicalChannelParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h223LogicalChannelParameters", -1);
|
|
|
|
break;
|
|
|
|
/* v76LogicalChannelParameters */
|
|
case 1:
|
|
invokeStartElement (pctxt, "v76LogicalChannelParameters", -1);
|
|
|
|
pvalue->u.v76LogicalChannelParameters = ALLOC_ASN1ELEM (pctxt, H245V76LogicalChannelParameters);
|
|
|
|
stat = asn1PD_H245V76LogicalChannelParameters (pctxt, pvalue->u.v76LogicalChannelParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "v76LogicalChannelParameters", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* h2250LogicalChannelParameters */
|
|
case 3:
|
|
invokeStartElement (pctxt, "h2250LogicalChannelParameters", -1);
|
|
|
|
pvalue->u.h2250LogicalChannelParameters = ALLOC_ASN1ELEM (pctxt, H245H2250LogicalChannelParameters);
|
|
|
|
stat = asn1PD_H245H2250LogicalChannelParameters (pctxt, pvalue->u.h2250LogicalChannelParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h2250LogicalChannelParameters", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* OpenLogicalChannel_reverseLogicalChannelParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245OpenLogicalChannel_reverseLogicalChannelParameters (OOCTXT* pctxt, H245OpenLogicalChannel_reverseLogicalChannelParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.multiplexParametersPresent = optbit;
|
|
|
|
/* decode dataType */
|
|
|
|
invokeStartElement (pctxt, "dataType", -1);
|
|
|
|
stat = asn1PD_H245DataType (pctxt, &pvalue->dataType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "dataType", -1);
|
|
|
|
/* decode multiplexParameters */
|
|
|
|
if (pvalue->m.multiplexParametersPresent) {
|
|
invokeStartElement (pctxt, "multiplexParameters", -1);
|
|
|
|
stat = asn1PD_H245OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters (pctxt, &pvalue->multiplexParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexParameters", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 2 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.reverseLogicalChannelDependencyPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "reverseLogicalChannelDependency", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->reverseLogicalChannelDependency);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "reverseLogicalChannelDependency", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.replacementForPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "replacementFor", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->replacementFor);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "replacementFor", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NetworkAccessParameters_distribution */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NetworkAccessParameters_distribution (OOCTXT* pctxt, H245NetworkAccessParameters_distribution* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* unicast */
|
|
case 0:
|
|
invokeStartElement (pctxt, "unicast", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "unicast", -1);
|
|
|
|
break;
|
|
|
|
/* multicast */
|
|
case 1:
|
|
invokeStartElement (pctxt, "multicast", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "multicast", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NetworkAccessParameters_networkAddress */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
extern EXTERN const char* gs_MULTIMEDIA_SYSTEM_CONTROL_NetworkAccessParameters_networkAddress_e164Address_CharSet;
|
|
|
|
EXTERN int asn1PD_H245NetworkAccessParameters_networkAddress (OOCTXT* pctxt, H245NetworkAccessParameters_networkAddress* pvalue)
|
|
{
|
|
static Asn1SizeCnst e164Address_lsize1 = { 0, 1, 128, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* q2931Address */
|
|
case 0:
|
|
invokeStartElement (pctxt, "q2931Address", -1);
|
|
|
|
pvalue->u.q2931Address = ALLOC_ASN1ELEM (pctxt, H245Q2931Address);
|
|
|
|
stat = asn1PD_H245Q2931Address (pctxt, pvalue->u.q2931Address);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "q2931Address", -1);
|
|
|
|
break;
|
|
|
|
/* e164Address */
|
|
case 1:
|
|
invokeStartElement (pctxt, "e164Address", -1);
|
|
|
|
addSizeConstraint (pctxt, &e164Address_lsize1);
|
|
|
|
stat = decodeConstrainedStringEx (pctxt, &pvalue->u.e164Address, gs_MULTIMEDIA_SYSTEM_CONTROL_NetworkAccessParameters_networkAddress_e164Address_CharSet, 4, 4, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeCharStrValue (pctxt, pvalue->u.e164Address);
|
|
|
|
invokeEndElement (pctxt, "e164Address", -1);
|
|
|
|
break;
|
|
|
|
/* localAreaAddress */
|
|
case 2:
|
|
invokeStartElement (pctxt, "localAreaAddress", -1);
|
|
|
|
pvalue->u.localAreaAddress = ALLOC_ASN1ELEM (pctxt, H245TransportAddress);
|
|
|
|
stat = asn1PD_H245TransportAddress (pctxt, pvalue->u.localAreaAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "localAreaAddress", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NetworkAccessParameters_externalReference */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NetworkAccessParameters_externalReference (OOCTXT* pctxt, H245NetworkAccessParameters_externalReference* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 255, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NetworkAccessParameters_t120SetupProcedure */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NetworkAccessParameters_t120SetupProcedure (OOCTXT* pctxt, H245NetworkAccessParameters_t120SetupProcedure* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* originateCall */
|
|
case 0:
|
|
invokeStartElement (pctxt, "originateCall", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "originateCall", -1);
|
|
|
|
break;
|
|
|
|
/* waitForCall */
|
|
case 1:
|
|
invokeStartElement (pctxt, "waitForCall", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "waitForCall", -1);
|
|
|
|
break;
|
|
|
|
/* issueQuery */
|
|
case 2:
|
|
invokeStartElement (pctxt, "issueQuery", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "issueQuery", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NetworkAccessParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NetworkAccessParameters (OOCTXT* pctxt, H245NetworkAccessParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.distributionPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.externalReferencePresent = optbit;
|
|
|
|
/* decode distribution */
|
|
|
|
if (pvalue->m.distributionPresent) {
|
|
invokeStartElement (pctxt, "distribution", -1);
|
|
|
|
stat = asn1PD_H245NetworkAccessParameters_distribution (pctxt, &pvalue->distribution);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "distribution", -1);
|
|
}
|
|
|
|
/* decode networkAddress */
|
|
|
|
invokeStartElement (pctxt, "networkAddress", -1);
|
|
|
|
stat = asn1PD_H245NetworkAccessParameters_networkAddress (pctxt, &pvalue->networkAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "networkAddress", -1);
|
|
|
|
/* decode associateConference */
|
|
|
|
invokeStartElement (pctxt, "associateConference", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->associateConference);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->associateConference);
|
|
|
|
invokeEndElement (pctxt, "associateConference", -1);
|
|
|
|
/* decode externalReference */
|
|
|
|
if (pvalue->m.externalReferencePresent) {
|
|
invokeStartElement (pctxt, "externalReference", -1);
|
|
|
|
stat = asn1PD_H245NetworkAccessParameters_externalReference (pctxt, &pvalue->externalReference);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "externalReference", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 1 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.t120SetupProcedurePresent = 1;
|
|
|
|
invokeStartElement (pctxt, "t120SetupProcedure", -1);
|
|
|
|
stat = asn1PD_H245NetworkAccessParameters_t120SetupProcedure (pctxt, &pvalue->t120SetupProcedure);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t120SetupProcedure", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EscrowData_escrowValue */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EscrowData_escrowValue (OOCTXT* pctxt, H245EscrowData_escrowValue* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 65535, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeBitString (pctxt,
|
|
&pvalue->numbits,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeBitStrValue (pctxt, pvalue->numbits, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EscrowData */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EscrowData (OOCTXT* pctxt, H245EscrowData* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode escrowID */
|
|
|
|
invokeStartElement (pctxt, "escrowID", -1);
|
|
|
|
stat = decodeObjectIdentifier (pctxt, &pvalue->escrowID);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOidValue (pctxt, pvalue->escrowID.numids, pvalue->escrowID.subid);
|
|
|
|
invokeEndElement (pctxt, "escrowID", -1);
|
|
|
|
/* decode escrowValue */
|
|
|
|
invokeStartElement (pctxt, "escrowValue", -1);
|
|
|
|
stat = asn1PD_H245EscrowData_escrowValue (pctxt, &pvalue->escrowValue);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "escrowValue", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EncryptionSync_escrowentry */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EncryptionSync_escrowentry (OOCTXT* pctxt, H245EncryptionSync_escrowentry* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245EscrowData* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245EscrowData);
|
|
|
|
stat = asn1PD_H245EscrowData (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EncryptionSync */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EncryptionSync (OOCTXT* pctxt, H245EncryptionSync* pvalue)
|
|
{
|
|
static Asn1SizeCnst h235Key_lsize1 = { 0, 1, 65535, 0 };
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.nonStandardPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.escrowentryPresent = optbit;
|
|
|
|
/* decode nonStandard */
|
|
|
|
if (pvalue->m.nonStandardPresent) {
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, &pvalue->nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
}
|
|
|
|
/* decode synchFlag */
|
|
|
|
invokeStartElement (pctxt, "synchFlag", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->synchFlag, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->synchFlag);
|
|
|
|
invokeEndElement (pctxt, "synchFlag", -1);
|
|
|
|
/* decode h235Key */
|
|
|
|
invokeStartElement (pctxt, "h235Key", -1);
|
|
|
|
addSizeConstraint (pctxt, &h235Key_lsize1);
|
|
|
|
stat = decodeDynOctetString (pctxt, (ASN1DynOctStr*)&pvalue->h235Key);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->h235Key.numocts, pvalue->h235Key.data);
|
|
|
|
invokeEndElement (pctxt, "h235Key", -1);
|
|
|
|
/* decode escrowentry */
|
|
|
|
if (pvalue->m.escrowentryPresent) {
|
|
invokeStartElement (pctxt, "escrowentry", -1);
|
|
|
|
stat = asn1PD_H245EncryptionSync_escrowentry (pctxt, &pvalue->escrowentry);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "escrowentry", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* OpenLogicalChannel */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245OpenLogicalChannel (OOCTXT* pctxt, H245OpenLogicalChannel* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.reverseLogicalChannelParametersPresent = optbit;
|
|
|
|
/* decode forwardLogicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->forwardLogicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
/* decode forwardLogicalChannelParameters */
|
|
|
|
invokeStartElement (pctxt, "forwardLogicalChannelParameters", -1);
|
|
|
|
stat = asn1PD_H245OpenLogicalChannel_forwardLogicalChannelParameters (pctxt, &pvalue->forwardLogicalChannelParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "forwardLogicalChannelParameters", -1);
|
|
|
|
/* decode reverseLogicalChannelParameters */
|
|
|
|
if (pvalue->m.reverseLogicalChannelParametersPresent) {
|
|
invokeStartElement (pctxt, "reverseLogicalChannelParameters", -1);
|
|
|
|
stat = asn1PD_H245OpenLogicalChannel_reverseLogicalChannelParameters (pctxt, &pvalue->reverseLogicalChannelParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "reverseLogicalChannelParameters", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 2 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.separateStackPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "separateStack", -1);
|
|
|
|
stat = asn1PD_H245NetworkAccessParameters (pctxt, &pvalue->separateStack);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "separateStack", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.encryptionSyncPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "encryptionSync", -1);
|
|
|
|
stat = asn1PD_H245EncryptionSync (pctxt, &pvalue->encryptionSync);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "encryptionSync", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CloseLogicalChannel_source */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CloseLogicalChannel_source (OOCTXT* pctxt, H245CloseLogicalChannel_source* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* user */
|
|
case 0:
|
|
invokeStartElement (pctxt, "user", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "user", -1);
|
|
|
|
break;
|
|
|
|
/* lcse */
|
|
case 1:
|
|
invokeStartElement (pctxt, "lcse", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "lcse", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CloseLogicalChannel_reason */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CloseLogicalChannel_reason (OOCTXT* pctxt, H245CloseLogicalChannel_reason* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* unknown */
|
|
case 0:
|
|
invokeStartElement (pctxt, "unknown", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "unknown", -1);
|
|
|
|
break;
|
|
|
|
/* reopen */
|
|
case 1:
|
|
invokeStartElement (pctxt, "reopen", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "reopen", -1);
|
|
|
|
break;
|
|
|
|
/* reservationFailure */
|
|
case 2:
|
|
invokeStartElement (pctxt, "reservationFailure", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "reservationFailure", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CloseLogicalChannel */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CloseLogicalChannel (OOCTXT* pctxt, H245CloseLogicalChannel* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
/* decode forwardLogicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->forwardLogicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
/* decode source */
|
|
|
|
invokeStartElement (pctxt, "source", -1);
|
|
|
|
stat = asn1PD_H245CloseLogicalChannel_source (pctxt, &pvalue->source);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "source", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 1 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.reasonPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "reason", -1);
|
|
|
|
stat = asn1PD_H245CloseLogicalChannel_reason (pctxt, &pvalue->reason);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "reason", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestChannelClose_reason */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestChannelClose_reason (OOCTXT* pctxt, H245RequestChannelClose_reason* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* unknown */
|
|
case 0:
|
|
invokeStartElement (pctxt, "unknown", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "unknown", -1);
|
|
|
|
break;
|
|
|
|
/* normal */
|
|
case 1:
|
|
invokeStartElement (pctxt, "normal", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "normal", -1);
|
|
|
|
break;
|
|
|
|
/* reopen */
|
|
case 2:
|
|
invokeStartElement (pctxt, "reopen", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "reopen", -1);
|
|
|
|
break;
|
|
|
|
/* reservationFailure */
|
|
case 3:
|
|
invokeStartElement (pctxt, "reservationFailure", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "reservationFailure", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 5;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestChannelClose */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestChannelClose (OOCTXT* pctxt, H245RequestChannelClose* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
/* decode forwardLogicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->forwardLogicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 2 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.qosCapabilityPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "qosCapability", -1);
|
|
|
|
stat = asn1PD_H245QOSCapability (pctxt, &pvalue->qosCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "qosCapability", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.reasonPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "reason", -1);
|
|
|
|
stat = asn1PD_H245RequestChannelClose_reason (pctxt, &pvalue->reason);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "reason", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexTableEntryNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexTableEntryNumber (OOCTXT* pctxt, H245MultiplexTableEntryNumber* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = decodeConsUInt8 (pctxt, pvalue, 1U, 15U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, *pvalue);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexElement_type_subElementList */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexElement_type_subElementList (OOCTXT* pctxt, H245MultiplexElement_type_subElementList* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 2, 255, 0 };
|
|
int stat = ASN_OK;
|
|
H245MultiplexElement* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245MultiplexElement);
|
|
|
|
stat = asn1PD_H245MultiplexElement (pctxt, (H245MultiplexElement*)pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexElement_type */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexElement_type (OOCTXT* pctxt, H245MultiplexElement_type* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* logicalChannelNumber */
|
|
case 0:
|
|
invokeStartElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.logicalChannelNumber, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.logicalChannelNumber);
|
|
|
|
invokeEndElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
break;
|
|
|
|
/* subElementList */
|
|
case 1:
|
|
invokeStartElement (pctxt, "subElementList", -1);
|
|
|
|
pvalue->u.subElementList = ALLOC_ASN1ELEM (pctxt, H245MultiplexElement_type_subElementList);
|
|
|
|
stat = asn1PD_H245MultiplexElement_type_subElementList (pctxt, pvalue->u.subElementList);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "subElementList", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexElement_repeatCount */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexElement_repeatCount (OOCTXT* pctxt, H245MultiplexElement_repeatCount* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* finite */
|
|
case 0:
|
|
invokeStartElement (pctxt, "finite", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.finite, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.finite);
|
|
|
|
invokeEndElement (pctxt, "finite", -1);
|
|
|
|
break;
|
|
|
|
/* untilClosingFlag */
|
|
case 1:
|
|
invokeStartElement (pctxt, "untilClosingFlag", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "untilClosingFlag", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexElement */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexElement (OOCTXT* pctxt, H245MultiplexElement* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* decode type */
|
|
|
|
invokeStartElement (pctxt, "type", -1);
|
|
|
|
stat = asn1PD_H245MultiplexElement_type (pctxt, &pvalue->type);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "type", -1);
|
|
|
|
/* decode repeatCount */
|
|
|
|
invokeStartElement (pctxt, "repeatCount", -1);
|
|
|
|
stat = asn1PD_H245MultiplexElement_repeatCount (pctxt, &pvalue->repeatCount);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "repeatCount", -1);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexEntryDescriptor_elementList */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexEntryDescriptor_elementList (OOCTXT* pctxt, H245MultiplexEntryDescriptor_elementList* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245MultiplexElement* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245MultiplexElement);
|
|
|
|
stat = asn1PD_H245MultiplexElement (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexEntryDescriptor */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexEntryDescriptor (OOCTXT* pctxt, H245MultiplexEntryDescriptor* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1BOOL optbit;
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.elementListPresent = optbit;
|
|
|
|
/* decode multiplexTableEntryNumber */
|
|
|
|
invokeStartElement (pctxt, "multiplexTableEntryNumber", -1);
|
|
|
|
stat = asn1PD_H245MultiplexTableEntryNumber (pctxt, &pvalue->multiplexTableEntryNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexTableEntryNumber", -1);
|
|
|
|
/* decode elementList */
|
|
|
|
if (pvalue->m.elementListPresent) {
|
|
invokeStartElement (pctxt, "elementList", -1);
|
|
|
|
stat = asn1PD_H245MultiplexEntryDescriptor_elementList (pctxt, &pvalue->elementList);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "elementList", -1);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexEntrySend_multiplexEntryDescriptors */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexEntrySend_multiplexEntryDescriptors (OOCTXT* pctxt, H245MultiplexEntrySend_multiplexEntryDescriptors* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 15, 0 };
|
|
int stat = ASN_OK;
|
|
H245MultiplexEntryDescriptor* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245MultiplexEntryDescriptor);
|
|
|
|
stat = asn1PD_H245MultiplexEntryDescriptor (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexEntrySend */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexEntrySend (OOCTXT* pctxt, H245MultiplexEntrySend* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->sequenceNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
/* decode multiplexEntryDescriptors */
|
|
|
|
invokeStartElement (pctxt, "multiplexEntryDescriptors", -1);
|
|
|
|
stat = asn1PD_H245MultiplexEntrySend_multiplexEntryDescriptors (pctxt, &pvalue->multiplexEntryDescriptors);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexEntryDescriptors", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestMultiplexEntry_entryNumbers */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestMultiplexEntry_entryNumbers (OOCTXT* pctxt, H245RequestMultiplexEntry_entryNumbers* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 15, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &pvalue->n);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
stat = asn1PD_H245MultiplexTableEntryNumber (pctxt, &pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestMultiplexEntry */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestMultiplexEntry (OOCTXT* pctxt, H245RequestMultiplexEntry* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode entryNumbers */
|
|
|
|
invokeStartElement (pctxt, "entryNumbers", -1);
|
|
|
|
stat = asn1PD_H245RequestMultiplexEntry_entryNumbers (pctxt, &pvalue->entryNumbers);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "entryNumbers", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H261VideoMode_resolution */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H261VideoMode_resolution (OOCTXT* pctxt, H245H261VideoMode_resolution* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* qcif */
|
|
case 0:
|
|
invokeStartElement (pctxt, "qcif", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "qcif", -1);
|
|
|
|
break;
|
|
|
|
/* cif */
|
|
case 1:
|
|
invokeStartElement (pctxt, "cif", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "cif", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H261VideoMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H261VideoMode (OOCTXT* pctxt, H245H261VideoMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode resolution */
|
|
|
|
invokeStartElement (pctxt, "resolution", -1);
|
|
|
|
stat = asn1PD_H245H261VideoMode_resolution (pctxt, &pvalue->resolution);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "resolution", -1);
|
|
|
|
/* decode bitRate */
|
|
|
|
invokeStartElement (pctxt, "bitRate", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->bitRate, 1U, 19200U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->bitRate);
|
|
|
|
invokeEndElement (pctxt, "bitRate", -1);
|
|
|
|
/* decode stillImageTransmission */
|
|
|
|
invokeStartElement (pctxt, "stillImageTransmission", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->stillImageTransmission);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->stillImageTransmission);
|
|
|
|
invokeEndElement (pctxt, "stillImageTransmission", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H262VideoMode_profileAndLevel */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H262VideoMode_profileAndLevel (OOCTXT* pctxt, H245H262VideoMode_profileAndLevel* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 10);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* profileAndLevel_SPatML */
|
|
case 0:
|
|
invokeStartElement (pctxt, "profileAndLevel_SPatML", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_SPatML", -1);
|
|
|
|
break;
|
|
|
|
/* profileAndLevel_MPatLL */
|
|
case 1:
|
|
invokeStartElement (pctxt, "profileAndLevel_MPatLL", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_MPatLL", -1);
|
|
|
|
break;
|
|
|
|
/* profileAndLevel_MPatML */
|
|
case 2:
|
|
invokeStartElement (pctxt, "profileAndLevel_MPatML", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_MPatML", -1);
|
|
|
|
break;
|
|
|
|
/* profileAndLevel_MPatH_14 */
|
|
case 3:
|
|
invokeStartElement (pctxt, "profileAndLevel_MPatH_14", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_MPatH_14", -1);
|
|
|
|
break;
|
|
|
|
/* profileAndLevel_MPatHL */
|
|
case 4:
|
|
invokeStartElement (pctxt, "profileAndLevel_MPatHL", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_MPatHL", -1);
|
|
|
|
break;
|
|
|
|
/* profileAndLevel_SNRatLL */
|
|
case 5:
|
|
invokeStartElement (pctxt, "profileAndLevel_SNRatLL", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_SNRatLL", -1);
|
|
|
|
break;
|
|
|
|
/* profileAndLevel_SNRatML */
|
|
case 6:
|
|
invokeStartElement (pctxt, "profileAndLevel_SNRatML", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_SNRatML", -1);
|
|
|
|
break;
|
|
|
|
/* profileAndLevel_SpatialatH_14 */
|
|
case 7:
|
|
invokeStartElement (pctxt, "profileAndLevel_SpatialatH_14", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_SpatialatH_14", -1);
|
|
|
|
break;
|
|
|
|
/* profileAndLevel_HPatML */
|
|
case 8:
|
|
invokeStartElement (pctxt, "profileAndLevel_HPatML", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_HPatML", -1);
|
|
|
|
break;
|
|
|
|
/* profileAndLevel_HPatH_14 */
|
|
case 9:
|
|
invokeStartElement (pctxt, "profileAndLevel_HPatH_14", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_HPatH_14", -1);
|
|
|
|
break;
|
|
|
|
/* profileAndLevel_HPatHL */
|
|
case 10:
|
|
invokeStartElement (pctxt, "profileAndLevel_HPatHL", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel_HPatHL", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 12;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H262VideoMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H262VideoMode (OOCTXT* pctxt, H245H262VideoMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.videoBitRatePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.vbvBufferSizePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.samplesPerLinePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.linesPerFramePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.framesPerSecondPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.luminanceSampleRatePresent = optbit;
|
|
|
|
/* decode profileAndLevel */
|
|
|
|
invokeStartElement (pctxt, "profileAndLevel", -1);
|
|
|
|
stat = asn1PD_H245H262VideoMode_profileAndLevel (pctxt, &pvalue->profileAndLevel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "profileAndLevel", -1);
|
|
|
|
/* decode videoBitRate */
|
|
|
|
if (pvalue->m.videoBitRatePresent) {
|
|
invokeStartElement (pctxt, "videoBitRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->videoBitRate, 0U, 1073741823U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->videoBitRate);
|
|
|
|
invokeEndElement (pctxt, "videoBitRate", -1);
|
|
}
|
|
|
|
/* decode vbvBufferSize */
|
|
|
|
if (pvalue->m.vbvBufferSizePresent) {
|
|
invokeStartElement (pctxt, "vbvBufferSize", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->vbvBufferSize, 0U, 262143U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->vbvBufferSize);
|
|
|
|
invokeEndElement (pctxt, "vbvBufferSize", -1);
|
|
}
|
|
|
|
/* decode samplesPerLine */
|
|
|
|
if (pvalue->m.samplesPerLinePresent) {
|
|
invokeStartElement (pctxt, "samplesPerLine", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->samplesPerLine, 0U, 16383U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->samplesPerLine);
|
|
|
|
invokeEndElement (pctxt, "samplesPerLine", -1);
|
|
}
|
|
|
|
/* decode linesPerFrame */
|
|
|
|
if (pvalue->m.linesPerFramePresent) {
|
|
invokeStartElement (pctxt, "linesPerFrame", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->linesPerFrame, 0U, 16383U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->linesPerFrame);
|
|
|
|
invokeEndElement (pctxt, "linesPerFrame", -1);
|
|
}
|
|
|
|
/* decode framesPerSecond */
|
|
|
|
if (pvalue->m.framesPerSecondPresent) {
|
|
invokeStartElement (pctxt, "framesPerSecond", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->framesPerSecond, 0U, 15U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->framesPerSecond);
|
|
|
|
invokeEndElement (pctxt, "framesPerSecond", -1);
|
|
}
|
|
|
|
/* decode luminanceSampleRate */
|
|
|
|
if (pvalue->m.luminanceSampleRatePresent) {
|
|
invokeStartElement (pctxt, "luminanceSampleRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->luminanceSampleRate, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->luminanceSampleRate);
|
|
|
|
invokeEndElement (pctxt, "luminanceSampleRate", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H263VideoMode_resolution */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H263VideoMode_resolution (OOCTXT* pctxt, H245H263VideoMode_resolution* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* sqcif */
|
|
case 0:
|
|
invokeStartElement (pctxt, "sqcif", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "sqcif", -1);
|
|
|
|
break;
|
|
|
|
/* qcif */
|
|
case 1:
|
|
invokeStartElement (pctxt, "qcif", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "qcif", -1);
|
|
|
|
break;
|
|
|
|
/* cif */
|
|
case 2:
|
|
invokeStartElement (pctxt, "cif", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "cif", -1);
|
|
|
|
break;
|
|
|
|
/* cif4 */
|
|
case 3:
|
|
invokeStartElement (pctxt, "cif4", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "cif4", -1);
|
|
|
|
break;
|
|
|
|
/* cif16 */
|
|
case 4:
|
|
invokeStartElement (pctxt, "cif16", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "cif16", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 6;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* custom */
|
|
case 6:
|
|
invokeStartElement (pctxt, "custom", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "custom", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H263VideoMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H263VideoMode (OOCTXT* pctxt, H245H263VideoMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
/* decode resolution */
|
|
|
|
invokeStartElement (pctxt, "resolution", -1);
|
|
|
|
stat = asn1PD_H245H263VideoMode_resolution (pctxt, &pvalue->resolution);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "resolution", -1);
|
|
|
|
/* decode bitRate */
|
|
|
|
invokeStartElement (pctxt, "bitRate", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->bitRate, 1U, 19200U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->bitRate);
|
|
|
|
invokeEndElement (pctxt, "bitRate", -1);
|
|
|
|
/* decode unrestrictedVector */
|
|
|
|
invokeStartElement (pctxt, "unrestrictedVector", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->unrestrictedVector);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->unrestrictedVector);
|
|
|
|
invokeEndElement (pctxt, "unrestrictedVector", -1);
|
|
|
|
/* decode arithmeticCoding */
|
|
|
|
invokeStartElement (pctxt, "arithmeticCoding", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->arithmeticCoding);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->arithmeticCoding);
|
|
|
|
invokeEndElement (pctxt, "arithmeticCoding", -1);
|
|
|
|
/* decode advancedPrediction */
|
|
|
|
invokeStartElement (pctxt, "advancedPrediction", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->advancedPrediction);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->advancedPrediction);
|
|
|
|
invokeEndElement (pctxt, "advancedPrediction", -1);
|
|
|
|
/* decode pbFrames */
|
|
|
|
invokeStartElement (pctxt, "pbFrames", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->pbFrames);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->pbFrames);
|
|
|
|
invokeEndElement (pctxt, "pbFrames", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 3 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.errorCompensationPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "errorCompensation", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->errorCompensation);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->errorCompensation);
|
|
|
|
invokeEndElement (pctxt, "errorCompensation", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.enhancementLayerInfoPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "enhancementLayerInfo", -1);
|
|
|
|
stat = asn1PD_H245EnhancementLayerInfo (pctxt, &pvalue->enhancementLayerInfo);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "enhancementLayerInfo", -1);
|
|
break;
|
|
|
|
case 2:
|
|
pvalue->m.h263OptionsPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "h263Options", -1);
|
|
|
|
stat = asn1PD_H245H263Options (pctxt, &pvalue->h263Options);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h263Options", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* IS11172VideoMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245IS11172VideoMode (OOCTXT* pctxt, H245IS11172VideoMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.videoBitRatePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.vbvBufferSizePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.samplesPerLinePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.linesPerFramePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.pictureRatePresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.luminanceSampleRatePresent = optbit;
|
|
|
|
/* decode constrainedBitstream */
|
|
|
|
invokeStartElement (pctxt, "constrainedBitstream", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->constrainedBitstream);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->constrainedBitstream);
|
|
|
|
invokeEndElement (pctxt, "constrainedBitstream", -1);
|
|
|
|
/* decode videoBitRate */
|
|
|
|
if (pvalue->m.videoBitRatePresent) {
|
|
invokeStartElement (pctxt, "videoBitRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->videoBitRate, 0U, 1073741823U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->videoBitRate);
|
|
|
|
invokeEndElement (pctxt, "videoBitRate", -1);
|
|
}
|
|
|
|
/* decode vbvBufferSize */
|
|
|
|
if (pvalue->m.vbvBufferSizePresent) {
|
|
invokeStartElement (pctxt, "vbvBufferSize", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->vbvBufferSize, 0U, 262143U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->vbvBufferSize);
|
|
|
|
invokeEndElement (pctxt, "vbvBufferSize", -1);
|
|
}
|
|
|
|
/* decode samplesPerLine */
|
|
|
|
if (pvalue->m.samplesPerLinePresent) {
|
|
invokeStartElement (pctxt, "samplesPerLine", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->samplesPerLine, 0U, 16383U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->samplesPerLine);
|
|
|
|
invokeEndElement (pctxt, "samplesPerLine", -1);
|
|
}
|
|
|
|
/* decode linesPerFrame */
|
|
|
|
if (pvalue->m.linesPerFramePresent) {
|
|
invokeStartElement (pctxt, "linesPerFrame", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->linesPerFrame, 0U, 16383U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->linesPerFrame);
|
|
|
|
invokeEndElement (pctxt, "linesPerFrame", -1);
|
|
}
|
|
|
|
/* decode pictureRate */
|
|
|
|
if (pvalue->m.pictureRatePresent) {
|
|
invokeStartElement (pctxt, "pictureRate", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->pictureRate, 0U, 15U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->pictureRate);
|
|
|
|
invokeEndElement (pctxt, "pictureRate", -1);
|
|
}
|
|
|
|
/* decode luminanceSampleRate */
|
|
|
|
if (pvalue->m.luminanceSampleRatePresent) {
|
|
invokeStartElement (pctxt, "luminanceSampleRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->luminanceSampleRate, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->luminanceSampleRate);
|
|
|
|
invokeEndElement (pctxt, "luminanceSampleRate", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VideoMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245VideoMode (OOCTXT* pctxt, H245VideoMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* h261VideoMode */
|
|
case 1:
|
|
invokeStartElement (pctxt, "h261VideoMode", -1);
|
|
|
|
pvalue->u.h261VideoMode = ALLOC_ASN1ELEM (pctxt, H245H261VideoMode);
|
|
|
|
stat = asn1PD_H245H261VideoMode (pctxt, pvalue->u.h261VideoMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h261VideoMode", -1);
|
|
|
|
break;
|
|
|
|
/* h262VideoMode */
|
|
case 2:
|
|
invokeStartElement (pctxt, "h262VideoMode", -1);
|
|
|
|
pvalue->u.h262VideoMode = ALLOC_ASN1ELEM (pctxt, H245H262VideoMode);
|
|
|
|
stat = asn1PD_H245H262VideoMode (pctxt, pvalue->u.h262VideoMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h262VideoMode", -1);
|
|
|
|
break;
|
|
|
|
/* h263VideoMode */
|
|
case 3:
|
|
invokeStartElement (pctxt, "h263VideoMode", -1);
|
|
|
|
pvalue->u.h263VideoMode = ALLOC_ASN1ELEM (pctxt, H245H263VideoMode);
|
|
|
|
stat = asn1PD_H245H263VideoMode (pctxt, pvalue->u.h263VideoMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h263VideoMode", -1);
|
|
|
|
break;
|
|
|
|
/* is11172VideoMode */
|
|
case 4:
|
|
invokeStartElement (pctxt, "is11172VideoMode", -1);
|
|
|
|
pvalue->u.is11172VideoMode = ALLOC_ASN1ELEM (pctxt, H245IS11172VideoMode);
|
|
|
|
stat = asn1PD_H245IS11172VideoMode (pctxt, pvalue->u.is11172VideoMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "is11172VideoMode", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 6;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* genericVideoMode */
|
|
case 6:
|
|
invokeStartElement (pctxt, "genericVideoMode", -1);
|
|
|
|
pvalue->u.genericVideoMode = ALLOC_ASN1ELEM (pctxt, H245GenericCapability);
|
|
|
|
stat = asn1PD_H245GenericCapability (pctxt, pvalue->u.genericVideoMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "genericVideoMode", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AudioMode_g7231 */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245AudioMode_g7231 (OOCTXT* pctxt, H245AudioMode_g7231* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* noSilenceSuppressionLowRate */
|
|
case 0:
|
|
invokeStartElement (pctxt, "noSilenceSuppressionLowRate", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "noSilenceSuppressionLowRate", -1);
|
|
|
|
break;
|
|
|
|
/* noSilenceSuppressionHighRate */
|
|
case 1:
|
|
invokeStartElement (pctxt, "noSilenceSuppressionHighRate", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "noSilenceSuppressionHighRate", -1);
|
|
|
|
break;
|
|
|
|
/* silenceSuppressionLowRate */
|
|
case 2:
|
|
invokeStartElement (pctxt, "silenceSuppressionLowRate", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "silenceSuppressionLowRate", -1);
|
|
|
|
break;
|
|
|
|
/* silenceSuppressionHighRate */
|
|
case 3:
|
|
invokeStartElement (pctxt, "silenceSuppressionHighRate", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "silenceSuppressionHighRate", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* IS11172AudioMode_audioLayer */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245IS11172AudioMode_audioLayer (OOCTXT* pctxt, H245IS11172AudioMode_audioLayer* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* audioLayer1 */
|
|
case 0:
|
|
invokeStartElement (pctxt, "audioLayer1", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "audioLayer1", -1);
|
|
|
|
break;
|
|
|
|
/* audioLayer2 */
|
|
case 1:
|
|
invokeStartElement (pctxt, "audioLayer2", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "audioLayer2", -1);
|
|
|
|
break;
|
|
|
|
/* audioLayer3 */
|
|
case 2:
|
|
invokeStartElement (pctxt, "audioLayer3", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "audioLayer3", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* IS11172AudioMode_audioSampling */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245IS11172AudioMode_audioSampling (OOCTXT* pctxt, H245IS11172AudioMode_audioSampling* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* audioSampling32k */
|
|
case 0:
|
|
invokeStartElement (pctxt, "audioSampling32k", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "audioSampling32k", -1);
|
|
|
|
break;
|
|
|
|
/* audioSampling44k1 */
|
|
case 1:
|
|
invokeStartElement (pctxt, "audioSampling44k1", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "audioSampling44k1", -1);
|
|
|
|
break;
|
|
|
|
/* audioSampling48k */
|
|
case 2:
|
|
invokeStartElement (pctxt, "audioSampling48k", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "audioSampling48k", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* IS11172AudioMode_multichannelType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245IS11172AudioMode_multichannelType (OOCTXT* pctxt, H245IS11172AudioMode_multichannelType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* singleChannel */
|
|
case 0:
|
|
invokeStartElement (pctxt, "singleChannel", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "singleChannel", -1);
|
|
|
|
break;
|
|
|
|
/* twoChannelStereo */
|
|
case 1:
|
|
invokeStartElement (pctxt, "twoChannelStereo", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "twoChannelStereo", -1);
|
|
|
|
break;
|
|
|
|
/* twoChannelDual */
|
|
case 2:
|
|
invokeStartElement (pctxt, "twoChannelDual", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "twoChannelDual", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* IS11172AudioMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245IS11172AudioMode (OOCTXT* pctxt, H245IS11172AudioMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode audioLayer */
|
|
|
|
invokeStartElement (pctxt, "audioLayer", -1);
|
|
|
|
stat = asn1PD_H245IS11172AudioMode_audioLayer (pctxt, &pvalue->audioLayer);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "audioLayer", -1);
|
|
|
|
/* decode audioSampling */
|
|
|
|
invokeStartElement (pctxt, "audioSampling", -1);
|
|
|
|
stat = asn1PD_H245IS11172AudioMode_audioSampling (pctxt, &pvalue->audioSampling);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "audioSampling", -1);
|
|
|
|
/* decode multichannelType */
|
|
|
|
invokeStartElement (pctxt, "multichannelType", -1);
|
|
|
|
stat = asn1PD_H245IS11172AudioMode_multichannelType (pctxt, &pvalue->multichannelType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multichannelType", -1);
|
|
|
|
/* decode bitRate */
|
|
|
|
invokeStartElement (pctxt, "bitRate", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->bitRate, 1U, 448U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->bitRate);
|
|
|
|
invokeEndElement (pctxt, "bitRate", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* IS13818AudioMode_audioLayer */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245IS13818AudioMode_audioLayer (OOCTXT* pctxt, H245IS13818AudioMode_audioLayer* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* audioLayer1 */
|
|
case 0:
|
|
invokeStartElement (pctxt, "audioLayer1", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "audioLayer1", -1);
|
|
|
|
break;
|
|
|
|
/* audioLayer2 */
|
|
case 1:
|
|
invokeStartElement (pctxt, "audioLayer2", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "audioLayer2", -1);
|
|
|
|
break;
|
|
|
|
/* audioLayer3 */
|
|
case 2:
|
|
invokeStartElement (pctxt, "audioLayer3", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "audioLayer3", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* IS13818AudioMode_audioSampling */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245IS13818AudioMode_audioSampling (OOCTXT* pctxt, H245IS13818AudioMode_audioSampling* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 5);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* audioSampling16k */
|
|
case 0:
|
|
invokeStartElement (pctxt, "audioSampling16k", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "audioSampling16k", -1);
|
|
|
|
break;
|
|
|
|
/* audioSampling22k05 */
|
|
case 1:
|
|
invokeStartElement (pctxt, "audioSampling22k05", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "audioSampling22k05", -1);
|
|
|
|
break;
|
|
|
|
/* audioSampling24k */
|
|
case 2:
|
|
invokeStartElement (pctxt, "audioSampling24k", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "audioSampling24k", -1);
|
|
|
|
break;
|
|
|
|
/* audioSampling32k */
|
|
case 3:
|
|
invokeStartElement (pctxt, "audioSampling32k", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "audioSampling32k", -1);
|
|
|
|
break;
|
|
|
|
/* audioSampling44k1 */
|
|
case 4:
|
|
invokeStartElement (pctxt, "audioSampling44k1", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "audioSampling44k1", -1);
|
|
|
|
break;
|
|
|
|
/* audioSampling48k */
|
|
case 5:
|
|
invokeStartElement (pctxt, "audioSampling48k", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "audioSampling48k", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* IS13818AudioMode_multichannelType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245IS13818AudioMode_multichannelType (OOCTXT* pctxt, H245IS13818AudioMode_multichannelType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 9);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* singleChannel */
|
|
case 0:
|
|
invokeStartElement (pctxt, "singleChannel", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "singleChannel", -1);
|
|
|
|
break;
|
|
|
|
/* twoChannelStereo */
|
|
case 1:
|
|
invokeStartElement (pctxt, "twoChannelStereo", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "twoChannelStereo", -1);
|
|
|
|
break;
|
|
|
|
/* twoChannelDual */
|
|
case 2:
|
|
invokeStartElement (pctxt, "twoChannelDual", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "twoChannelDual", -1);
|
|
|
|
break;
|
|
|
|
/* threeChannels2_1 */
|
|
case 3:
|
|
invokeStartElement (pctxt, "threeChannels2_1", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "threeChannels2_1", -1);
|
|
|
|
break;
|
|
|
|
/* threeChannels3_0 */
|
|
case 4:
|
|
invokeStartElement (pctxt, "threeChannels3_0", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "threeChannels3_0", -1);
|
|
|
|
break;
|
|
|
|
/* fourChannels2_0_2_0 */
|
|
case 5:
|
|
invokeStartElement (pctxt, "fourChannels2_0_2_0", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "fourChannels2_0_2_0", -1);
|
|
|
|
break;
|
|
|
|
/* fourChannels2_2 */
|
|
case 6:
|
|
invokeStartElement (pctxt, "fourChannels2_2", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "fourChannels2_2", -1);
|
|
|
|
break;
|
|
|
|
/* fourChannels3_1 */
|
|
case 7:
|
|
invokeStartElement (pctxt, "fourChannels3_1", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "fourChannels3_1", -1);
|
|
|
|
break;
|
|
|
|
/* fiveChannels3_0_2_0 */
|
|
case 8:
|
|
invokeStartElement (pctxt, "fiveChannels3_0_2_0", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "fiveChannels3_0_2_0", -1);
|
|
|
|
break;
|
|
|
|
/* fiveChannels3_2 */
|
|
case 9:
|
|
invokeStartElement (pctxt, "fiveChannels3_2", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "fiveChannels3_2", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* IS13818AudioMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245IS13818AudioMode (OOCTXT* pctxt, H245IS13818AudioMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode audioLayer */
|
|
|
|
invokeStartElement (pctxt, "audioLayer", -1);
|
|
|
|
stat = asn1PD_H245IS13818AudioMode_audioLayer (pctxt, &pvalue->audioLayer);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "audioLayer", -1);
|
|
|
|
/* decode audioSampling */
|
|
|
|
invokeStartElement (pctxt, "audioSampling", -1);
|
|
|
|
stat = asn1PD_H245IS13818AudioMode_audioSampling (pctxt, &pvalue->audioSampling);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "audioSampling", -1);
|
|
|
|
/* decode multichannelType */
|
|
|
|
invokeStartElement (pctxt, "multichannelType", -1);
|
|
|
|
stat = asn1PD_H245IS13818AudioMode_multichannelType (pctxt, &pvalue->multichannelType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multichannelType", -1);
|
|
|
|
/* decode lowFrequencyEnhancement */
|
|
|
|
invokeStartElement (pctxt, "lowFrequencyEnhancement", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->lowFrequencyEnhancement);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->lowFrequencyEnhancement);
|
|
|
|
invokeEndElement (pctxt, "lowFrequencyEnhancement", -1);
|
|
|
|
/* decode multilingual */
|
|
|
|
invokeStartElement (pctxt, "multilingual", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->multilingual);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->multilingual);
|
|
|
|
invokeEndElement (pctxt, "multilingual", -1);
|
|
|
|
/* decode bitRate */
|
|
|
|
invokeStartElement (pctxt, "bitRate", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->bitRate, 1U, 1130U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->bitRate);
|
|
|
|
invokeEndElement (pctxt, "bitRate", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* G7231AnnexCMode_g723AnnexCAudioMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245G7231AnnexCMode_g723AnnexCAudioMode (OOCTXT* pctxt, H245G7231AnnexCMode_g723AnnexCAudioMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode highRateMode0 */
|
|
|
|
invokeStartElement (pctxt, "highRateMode0", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->highRateMode0, 27U, 78U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->highRateMode0);
|
|
|
|
invokeEndElement (pctxt, "highRateMode0", -1);
|
|
|
|
/* decode highRateMode1 */
|
|
|
|
invokeStartElement (pctxt, "highRateMode1", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->highRateMode1, 27U, 78U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->highRateMode1);
|
|
|
|
invokeEndElement (pctxt, "highRateMode1", -1);
|
|
|
|
/* decode lowRateMode0 */
|
|
|
|
invokeStartElement (pctxt, "lowRateMode0", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->lowRateMode0, 23U, 66U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->lowRateMode0);
|
|
|
|
invokeEndElement (pctxt, "lowRateMode0", -1);
|
|
|
|
/* decode lowRateMode1 */
|
|
|
|
invokeStartElement (pctxt, "lowRateMode1", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->lowRateMode1, 23U, 66U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->lowRateMode1);
|
|
|
|
invokeEndElement (pctxt, "lowRateMode1", -1);
|
|
|
|
/* decode sidMode0 */
|
|
|
|
invokeStartElement (pctxt, "sidMode0", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->sidMode0, 6U, 17U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sidMode0);
|
|
|
|
invokeEndElement (pctxt, "sidMode0", -1);
|
|
|
|
/* decode sidMode1 */
|
|
|
|
invokeStartElement (pctxt, "sidMode1", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->sidMode1, 6U, 17U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sidMode1);
|
|
|
|
invokeEndElement (pctxt, "sidMode1", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* G7231AnnexCMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245G7231AnnexCMode (OOCTXT* pctxt, H245G7231AnnexCMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode maxAl_sduAudioFrames */
|
|
|
|
invokeStartElement (pctxt, "maxAl_sduAudioFrames", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maxAl_sduAudioFrames, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maxAl_sduAudioFrames);
|
|
|
|
invokeEndElement (pctxt, "maxAl_sduAudioFrames", -1);
|
|
|
|
/* decode silenceSuppression */
|
|
|
|
invokeStartElement (pctxt, "silenceSuppression", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->silenceSuppression);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->silenceSuppression);
|
|
|
|
invokeEndElement (pctxt, "silenceSuppression", -1);
|
|
|
|
/* decode g723AnnexCAudioMode */
|
|
|
|
invokeStartElement (pctxt, "g723AnnexCAudioMode", -1);
|
|
|
|
stat = asn1PD_H245G7231AnnexCMode_g723AnnexCAudioMode (pctxt, &pvalue->g723AnnexCAudioMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "g723AnnexCAudioMode", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VBDMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245VBDMode (OOCTXT* pctxt, H245VBDMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode type */
|
|
|
|
invokeStartElement (pctxt, "type", -1);
|
|
|
|
pvalue->type = ALLOC_ASN1ELEM (pctxt, H245AudioMode);
|
|
|
|
stat = asn1PD_H245AudioMode (pctxt, (H245AudioMode*)pvalue->type);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "type", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* AudioMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245AudioMode (OOCTXT* pctxt, H245AudioMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 13);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* g711Alaw64k */
|
|
case 1:
|
|
invokeStartElement (pctxt, "g711Alaw64k", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "g711Alaw64k", -1);
|
|
|
|
break;
|
|
|
|
/* g711Alaw56k */
|
|
case 2:
|
|
invokeStartElement (pctxt, "g711Alaw56k", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "g711Alaw56k", -1);
|
|
|
|
break;
|
|
|
|
/* g711Ulaw64k */
|
|
case 3:
|
|
invokeStartElement (pctxt, "g711Ulaw64k", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "g711Ulaw64k", -1);
|
|
|
|
break;
|
|
|
|
/* g711Ulaw56k */
|
|
case 4:
|
|
invokeStartElement (pctxt, "g711Ulaw56k", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "g711Ulaw56k", -1);
|
|
|
|
break;
|
|
|
|
/* g722_64k */
|
|
case 5:
|
|
invokeStartElement (pctxt, "g722_64k", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "g722_64k", -1);
|
|
|
|
break;
|
|
|
|
/* g722_56k */
|
|
case 6:
|
|
invokeStartElement (pctxt, "g722_56k", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "g722_56k", -1);
|
|
|
|
break;
|
|
|
|
/* g722_48k */
|
|
case 7:
|
|
invokeStartElement (pctxt, "g722_48k", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "g722_48k", -1);
|
|
|
|
break;
|
|
|
|
/* g728 */
|
|
case 8:
|
|
invokeStartElement (pctxt, "g728", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "g728", -1);
|
|
|
|
break;
|
|
|
|
/* g729 */
|
|
case 9:
|
|
invokeStartElement (pctxt, "g729", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "g729", -1);
|
|
|
|
break;
|
|
|
|
/* g729AnnexA */
|
|
case 10:
|
|
invokeStartElement (pctxt, "g729AnnexA", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "g729AnnexA", -1);
|
|
|
|
break;
|
|
|
|
/* g7231 */
|
|
case 11:
|
|
invokeStartElement (pctxt, "g7231", -1);
|
|
|
|
pvalue->u.g7231 = ALLOC_ASN1ELEM (pctxt, H245AudioMode_g7231);
|
|
|
|
stat = asn1PD_H245AudioMode_g7231 (pctxt, pvalue->u.g7231);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "g7231", -1);
|
|
|
|
break;
|
|
|
|
/* is11172AudioMode */
|
|
case 12:
|
|
invokeStartElement (pctxt, "is11172AudioMode", -1);
|
|
|
|
pvalue->u.is11172AudioMode = ALLOC_ASN1ELEM (pctxt, H245IS11172AudioMode);
|
|
|
|
stat = asn1PD_H245IS11172AudioMode (pctxt, pvalue->u.is11172AudioMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "is11172AudioMode", -1);
|
|
|
|
break;
|
|
|
|
/* is13818AudioMode */
|
|
case 13:
|
|
invokeStartElement (pctxt, "is13818AudioMode", -1);
|
|
|
|
pvalue->u.is13818AudioMode = ALLOC_ASN1ELEM (pctxt, H245IS13818AudioMode);
|
|
|
|
stat = asn1PD_H245IS13818AudioMode (pctxt, pvalue->u.is13818AudioMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "is13818AudioMode", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 15;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* g729wAnnexB */
|
|
case 15:
|
|
invokeStartElement (pctxt, "g729wAnnexB", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.g729wAnnexB, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.g729wAnnexB);
|
|
|
|
invokeEndElement (pctxt, "g729wAnnexB", -1);
|
|
|
|
break;
|
|
|
|
/* g729AnnexAwAnnexB */
|
|
case 16:
|
|
invokeStartElement (pctxt, "g729AnnexAwAnnexB", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.g729AnnexAwAnnexB, 1U, 256U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.g729AnnexAwAnnexB);
|
|
|
|
invokeEndElement (pctxt, "g729AnnexAwAnnexB", -1);
|
|
|
|
break;
|
|
|
|
/* g7231AnnexCMode */
|
|
case 17:
|
|
invokeStartElement (pctxt, "g7231AnnexCMode", -1);
|
|
|
|
pvalue->u.g7231AnnexCMode = ALLOC_ASN1ELEM (pctxt, H245G7231AnnexCMode);
|
|
|
|
stat = asn1PD_H245G7231AnnexCMode (pctxt, pvalue->u.g7231AnnexCMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "g7231AnnexCMode", -1);
|
|
|
|
break;
|
|
|
|
/* gsmFullRate */
|
|
case 18:
|
|
invokeStartElement (pctxt, "gsmFullRate", -1);
|
|
|
|
pvalue->u.gsmFullRate = ALLOC_ASN1ELEM (pctxt, H245GSMAudioCapability);
|
|
|
|
stat = asn1PD_H245GSMAudioCapability (pctxt, pvalue->u.gsmFullRate);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "gsmFullRate", -1);
|
|
|
|
break;
|
|
|
|
/* gsmHalfRate */
|
|
case 19:
|
|
invokeStartElement (pctxt, "gsmHalfRate", -1);
|
|
|
|
pvalue->u.gsmHalfRate = ALLOC_ASN1ELEM (pctxt, H245GSMAudioCapability);
|
|
|
|
stat = asn1PD_H245GSMAudioCapability (pctxt, pvalue->u.gsmHalfRate);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "gsmHalfRate", -1);
|
|
|
|
break;
|
|
|
|
/* gsmEnhancedFullRate */
|
|
case 20:
|
|
invokeStartElement (pctxt, "gsmEnhancedFullRate", -1);
|
|
|
|
pvalue->u.gsmEnhancedFullRate = ALLOC_ASN1ELEM (pctxt, H245GSMAudioCapability);
|
|
|
|
stat = asn1PD_H245GSMAudioCapability (pctxt, pvalue->u.gsmEnhancedFullRate);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "gsmEnhancedFullRate", -1);
|
|
|
|
break;
|
|
|
|
/* genericAudioMode */
|
|
case 21:
|
|
invokeStartElement (pctxt, "genericAudioMode", -1);
|
|
|
|
pvalue->u.genericAudioMode = ALLOC_ASN1ELEM (pctxt, H245GenericCapability);
|
|
|
|
stat = asn1PD_H245GenericCapability (pctxt, pvalue->u.genericAudioMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "genericAudioMode", -1);
|
|
|
|
break;
|
|
|
|
/* g729Extensions */
|
|
case 22:
|
|
invokeStartElement (pctxt, "g729Extensions", -1);
|
|
|
|
pvalue->u.g729Extensions = ALLOC_ASN1ELEM (pctxt, H245G729Extensions);
|
|
|
|
stat = asn1PD_H245G729Extensions (pctxt, pvalue->u.g729Extensions);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "g729Extensions", -1);
|
|
|
|
break;
|
|
|
|
/* vbd */
|
|
case 23:
|
|
invokeStartElement (pctxt, "vbd", -1);
|
|
|
|
pvalue->u.vbd = ALLOC_ASN1ELEM (pctxt, H245VBDMode);
|
|
|
|
stat = asn1PD_H245VBDMode (pctxt, pvalue->u.vbd);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "vbd", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DataMode_application_nlpid */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DataMode_application_nlpid (OOCTXT* pctxt, H245DataMode_application_nlpid* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* decode nlpidProtocol */
|
|
|
|
invokeStartElement (pctxt, "nlpidProtocol", -1);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, &pvalue->nlpidProtocol);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nlpidProtocol", -1);
|
|
|
|
/* decode nlpidData */
|
|
|
|
invokeStartElement (pctxt, "nlpidData", -1);
|
|
|
|
stat = decodeDynOctetString (pctxt, (ASN1DynOctStr*)&pvalue->nlpidData);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->nlpidData.numocts, pvalue->nlpidData.data);
|
|
|
|
invokeEndElement (pctxt, "nlpidData", -1);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DataMode_application_t38fax */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DataMode_application_t38fax (OOCTXT* pctxt, H245DataMode_application_t38fax* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* decode t38FaxProtocol */
|
|
|
|
invokeStartElement (pctxt, "t38FaxProtocol", -1);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, &pvalue->t38FaxProtocol);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t38FaxProtocol", -1);
|
|
|
|
/* decode t38FaxProfile */
|
|
|
|
invokeStartElement (pctxt, "t38FaxProfile", -1);
|
|
|
|
stat = asn1PD_H245T38FaxProfile (pctxt, &pvalue->t38FaxProfile);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t38FaxProfile", -1);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DataMode_application */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DataMode_application (OOCTXT* pctxt, H245DataMode_application* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 9);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* t120 */
|
|
case 1:
|
|
invokeStartElement (pctxt, "t120", -1);
|
|
|
|
pvalue->u.t120 = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.t120);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t120", -1);
|
|
|
|
break;
|
|
|
|
/* dsm_cc */
|
|
case 2:
|
|
invokeStartElement (pctxt, "dsm_cc", -1);
|
|
|
|
pvalue->u.dsm_cc = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.dsm_cc);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "dsm_cc", -1);
|
|
|
|
break;
|
|
|
|
/* userData */
|
|
case 3:
|
|
invokeStartElement (pctxt, "userData", -1);
|
|
|
|
pvalue->u.userData = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.userData);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "userData", -1);
|
|
|
|
break;
|
|
|
|
/* t84 */
|
|
case 4:
|
|
invokeStartElement (pctxt, "t84", -1);
|
|
|
|
pvalue->u.t84 = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.t84);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t84", -1);
|
|
|
|
break;
|
|
|
|
/* t434 */
|
|
case 5:
|
|
invokeStartElement (pctxt, "t434", -1);
|
|
|
|
pvalue->u.t434 = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.t434);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t434", -1);
|
|
|
|
break;
|
|
|
|
/* h224 */
|
|
case 6:
|
|
invokeStartElement (pctxt, "h224", -1);
|
|
|
|
pvalue->u.h224 = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.h224);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h224", -1);
|
|
|
|
break;
|
|
|
|
/* nlpid */
|
|
case 7:
|
|
invokeStartElement (pctxt, "nlpid", -1);
|
|
|
|
pvalue->u.nlpid = ALLOC_ASN1ELEM (pctxt, H245DataMode_application_nlpid);
|
|
|
|
stat = asn1PD_H245DataMode_application_nlpid (pctxt, pvalue->u.nlpid);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nlpid", -1);
|
|
|
|
break;
|
|
|
|
/* dsvdControl */
|
|
case 8:
|
|
invokeStartElement (pctxt, "dsvdControl", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "dsvdControl", -1);
|
|
|
|
break;
|
|
|
|
/* h222DataPartitioning */
|
|
case 9:
|
|
invokeStartElement (pctxt, "h222DataPartitioning", -1);
|
|
|
|
pvalue->u.h222DataPartitioning = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.h222DataPartitioning);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h222DataPartitioning", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 11;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* t30fax */
|
|
case 11:
|
|
invokeStartElement (pctxt, "t30fax", -1);
|
|
|
|
pvalue->u.t30fax = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.t30fax);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t30fax", -1);
|
|
|
|
break;
|
|
|
|
/* t140 */
|
|
case 12:
|
|
invokeStartElement (pctxt, "t140", -1);
|
|
|
|
pvalue->u.t140 = ALLOC_ASN1ELEM (pctxt, H245DataProtocolCapability);
|
|
|
|
stat = asn1PD_H245DataProtocolCapability (pctxt, pvalue->u.t140);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t140", -1);
|
|
|
|
break;
|
|
|
|
/* t38fax */
|
|
case 13:
|
|
invokeStartElement (pctxt, "t38fax", -1);
|
|
|
|
pvalue->u.t38fax = ALLOC_ASN1ELEM (pctxt, H245DataMode_application_t38fax);
|
|
|
|
stat = asn1PD_H245DataMode_application_t38fax (pctxt, pvalue->u.t38fax);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "t38fax", -1);
|
|
|
|
break;
|
|
|
|
/* genericDataMode */
|
|
case 14:
|
|
invokeStartElement (pctxt, "genericDataMode", -1);
|
|
|
|
pvalue->u.genericDataMode = ALLOC_ASN1ELEM (pctxt, H245GenericCapability);
|
|
|
|
stat = asn1PD_H245GenericCapability (pctxt, pvalue->u.genericDataMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "genericDataMode", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DataMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DataMode (OOCTXT* pctxt, H245DataMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode application */
|
|
|
|
invokeStartElement (pctxt, "application", -1);
|
|
|
|
stat = asn1PD_H245DataMode_application (pctxt, &pvalue->application);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "application", -1);
|
|
|
|
/* decode bitRate */
|
|
|
|
invokeStartElement (pctxt, "bitRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->bitRate, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->bitRate);
|
|
|
|
invokeEndElement (pctxt, "bitRate", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H235Mode_mediaMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H235Mode_mediaMode (OOCTXT* pctxt, H245H235Mode_mediaMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* videoMode */
|
|
case 1:
|
|
invokeStartElement (pctxt, "videoMode", -1);
|
|
|
|
pvalue->u.videoMode = ALLOC_ASN1ELEM (pctxt, H245VideoMode);
|
|
|
|
stat = asn1PD_H245VideoMode (pctxt, pvalue->u.videoMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "videoMode", -1);
|
|
|
|
break;
|
|
|
|
/* audioMode */
|
|
case 2:
|
|
invokeStartElement (pctxt, "audioMode", -1);
|
|
|
|
pvalue->u.audioMode = ALLOC_ASN1ELEM (pctxt, H245AudioMode);
|
|
|
|
stat = asn1PD_H245AudioMode (pctxt, pvalue->u.audioMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "audioMode", -1);
|
|
|
|
break;
|
|
|
|
/* dataMode */
|
|
case 3:
|
|
invokeStartElement (pctxt, "dataMode", -1);
|
|
|
|
pvalue->u.dataMode = ALLOC_ASN1ELEM (pctxt, H245DataMode);
|
|
|
|
stat = asn1PD_H245DataMode (pctxt, pvalue->u.dataMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "dataMode", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 5;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H235Mode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H235Mode (OOCTXT* pctxt, H245H235Mode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode encryptionAuthenticationAndIntegrity */
|
|
|
|
invokeStartElement (pctxt, "encryptionAuthenticationAndIntegrity", -1);
|
|
|
|
stat = asn1PD_H245EncryptionAuthenticationAndIntegrity (pctxt, &pvalue->encryptionAuthenticationAndIntegrity);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "encryptionAuthenticationAndIntegrity", -1);
|
|
|
|
/* decode mediaMode */
|
|
|
|
invokeStartElement (pctxt, "mediaMode", -1);
|
|
|
|
stat = asn1PD_H245H235Mode_mediaMode (pctxt, &pvalue->mediaMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaMode", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RedundancyEncodingDTModeElement_type */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RedundancyEncodingDTModeElement_type (OOCTXT* pctxt, H245RedundancyEncodingDTModeElement_type* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 5);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* videoMode */
|
|
case 1:
|
|
invokeStartElement (pctxt, "videoMode", -1);
|
|
|
|
pvalue->u.videoMode = ALLOC_ASN1ELEM (pctxt, H245VideoMode);
|
|
|
|
stat = asn1PD_H245VideoMode (pctxt, pvalue->u.videoMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "videoMode", -1);
|
|
|
|
break;
|
|
|
|
/* audioMode */
|
|
case 2:
|
|
invokeStartElement (pctxt, "audioMode", -1);
|
|
|
|
pvalue->u.audioMode = ALLOC_ASN1ELEM (pctxt, H245AudioMode);
|
|
|
|
stat = asn1PD_H245AudioMode (pctxt, pvalue->u.audioMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "audioMode", -1);
|
|
|
|
break;
|
|
|
|
/* dataMode */
|
|
case 3:
|
|
invokeStartElement (pctxt, "dataMode", -1);
|
|
|
|
pvalue->u.dataMode = ALLOC_ASN1ELEM (pctxt, H245DataMode);
|
|
|
|
stat = asn1PD_H245DataMode (pctxt, pvalue->u.dataMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "dataMode", -1);
|
|
|
|
break;
|
|
|
|
/* encryptionMode */
|
|
case 4:
|
|
invokeStartElement (pctxt, "encryptionMode", -1);
|
|
|
|
pvalue->u.encryptionMode = ALLOC_ASN1ELEM (pctxt, H245EncryptionMode);
|
|
|
|
stat = asn1PD_H245EncryptionMode (pctxt, pvalue->u.encryptionMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "encryptionMode", -1);
|
|
|
|
break;
|
|
|
|
/* h235Mode */
|
|
case 5:
|
|
invokeStartElement (pctxt, "h235Mode", -1);
|
|
|
|
pvalue->u.h235Mode = ALLOC_ASN1ELEM (pctxt, H245H235Mode);
|
|
|
|
stat = asn1PD_H245H235Mode (pctxt, pvalue->u.h235Mode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h235Mode", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 7;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RedundancyEncodingDTModeElement */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RedundancyEncodingDTModeElement (OOCTXT* pctxt, H245RedundancyEncodingDTModeElement* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode type */
|
|
|
|
invokeStartElement (pctxt, "type", -1);
|
|
|
|
stat = asn1PD_H245RedundancyEncodingDTModeElement_type (pctxt, &pvalue->type);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "type", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH245RedundancyEncodingDTModeElement */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245_SeqOfH245RedundancyEncodingDTModeElement (OOCTXT* pctxt, H245_SeqOfH245RedundancyEncodingDTModeElement* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
H245RedundancyEncodingDTModeElement* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
int lstat;
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (;;) {
|
|
/* decode length determinant */
|
|
|
|
lstat = decodeLength (pctxt, &count);
|
|
if (lstat != ASN_OK && lstat != ASN_OK_FRAG) {
|
|
return lstat;
|
|
}
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245RedundancyEncodingDTModeElement);
|
|
|
|
stat = asn1PD_H245RedundancyEncodingDTModeElement (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
if(lstat == ASN_OK) break;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RedundancyEncodingDTMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RedundancyEncodingDTMode (OOCTXT* pctxt, H245RedundancyEncodingDTMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode redundancyEncodingMethod */
|
|
|
|
invokeStartElement (pctxt, "redundancyEncodingMethod", -1);
|
|
|
|
stat = asn1PD_H245RedundancyEncodingMethod (pctxt, &pvalue->redundancyEncodingMethod);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "redundancyEncodingMethod", -1);
|
|
|
|
/* decode primary */
|
|
|
|
invokeStartElement (pctxt, "primary", -1);
|
|
|
|
stat = asn1PD_H245RedundancyEncodingDTModeElement (pctxt, &pvalue->primary);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "primary", -1);
|
|
|
|
/* decode secondary */
|
|
|
|
invokeStartElement (pctxt, "secondary", -1);
|
|
|
|
stat = asn1PD_H245_SeqOfH245RedundancyEncodingDTModeElement (pctxt, &pvalue->secondary);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "secondary", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplePayloadStreamElementMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplePayloadStreamElementMode (OOCTXT* pctxt, H245MultiplePayloadStreamElementMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode type */
|
|
|
|
invokeStartElement (pctxt, "type", -1);
|
|
|
|
pvalue->type = ALLOC_ASN1ELEM (pctxt, H245ModeElementType);
|
|
|
|
stat = asn1PD_H245ModeElementType (pctxt, (H245ModeElementType*)pvalue->type);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "type", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH245MultiplePayloadStreamElementMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245_SeqOfH245MultiplePayloadStreamElementMode (OOCTXT* pctxt, H245_SeqOfH245MultiplePayloadStreamElementMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
H245MultiplePayloadStreamElementMode* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
int lstat;
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (;;) {
|
|
/* decode length determinant */
|
|
|
|
lstat = decodeLength (pctxt, &count);
|
|
if (lstat != ASN_OK && lstat != ASN_OK_FRAG) {
|
|
return lstat;
|
|
}
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245MultiplePayloadStreamElementMode);
|
|
|
|
stat = asn1PD_H245MultiplePayloadStreamElementMode (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
if(lstat == ASN_OK) break;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplePayloadStreamMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplePayloadStreamMode (OOCTXT* pctxt, H245MultiplePayloadStreamMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode elements */
|
|
|
|
invokeStartElement (pctxt, "elements", -1);
|
|
|
|
stat = asn1PD_H245_SeqOfH245MultiplePayloadStreamElementMode (pctxt, &pvalue->elements);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "elements", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FECMode_rfc2733Mode_mode_separateStream_differentPort */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FECMode_rfc2733Mode_mode_separateStream_differentPort (OOCTXT* pctxt, H245FECMode_rfc2733Mode_mode_separateStream_differentPort* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.protectedPayloadTypePresent = optbit;
|
|
|
|
/* decode protectedSessionID */
|
|
|
|
invokeStartElement (pctxt, "protectedSessionID", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->protectedSessionID, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->protectedSessionID);
|
|
|
|
invokeEndElement (pctxt, "protectedSessionID", -1);
|
|
|
|
/* decode protectedPayloadType */
|
|
|
|
if (pvalue->m.protectedPayloadTypePresent) {
|
|
invokeStartElement (pctxt, "protectedPayloadType", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->protectedPayloadType, 0U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->protectedPayloadType);
|
|
|
|
invokeEndElement (pctxt, "protectedPayloadType", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FECMode_rfc2733Mode_mode_separateStream_samePort */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FECMode_rfc2733Mode_mode_separateStream_samePort (OOCTXT* pctxt, H245FECMode_rfc2733Mode_mode_separateStream_samePort* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode protectedType */
|
|
|
|
invokeStartElement (pctxt, "protectedType", -1);
|
|
|
|
pvalue->protectedType = ALLOC_ASN1ELEM (pctxt, H245ModeElementType);
|
|
|
|
stat = asn1PD_H245ModeElementType (pctxt, (H245ModeElementType*)pvalue->protectedType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "protectedType", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FECMode_rfc2733Mode_mode_separateStream */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FECMode_rfc2733Mode_mode_separateStream (OOCTXT* pctxt, H245FECMode_rfc2733Mode_mode_separateStream* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* differentPort */
|
|
case 0:
|
|
invokeStartElement (pctxt, "differentPort", -1);
|
|
|
|
pvalue->u.differentPort = ALLOC_ASN1ELEM (pctxt, H245FECMode_rfc2733Mode_mode_separateStream_differentPort);
|
|
|
|
stat = asn1PD_H245FECMode_rfc2733Mode_mode_separateStream_differentPort (pctxt, pvalue->u.differentPort);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "differentPort", -1);
|
|
|
|
break;
|
|
|
|
/* samePort */
|
|
case 1:
|
|
invokeStartElement (pctxt, "samePort", -1);
|
|
|
|
pvalue->u.samePort = ALLOC_ASN1ELEM (pctxt, H245FECMode_rfc2733Mode_mode_separateStream_samePort);
|
|
|
|
stat = asn1PD_H245FECMode_rfc2733Mode_mode_separateStream_samePort (pctxt, pvalue->u.samePort);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "samePort", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FECMode_rfc2733Mode_mode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FECMode_rfc2733Mode_mode (OOCTXT* pctxt, H245FECMode_rfc2733Mode_mode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* redundancyEncoding */
|
|
case 0:
|
|
invokeStartElement (pctxt, "redundancyEncoding", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "redundancyEncoding", -1);
|
|
|
|
break;
|
|
|
|
/* separateStream */
|
|
case 1:
|
|
invokeStartElement (pctxt, "separateStream", -1);
|
|
|
|
pvalue->u.separateStream = ALLOC_ASN1ELEM (pctxt, H245FECMode_rfc2733Mode_mode_separateStream);
|
|
|
|
stat = asn1PD_H245FECMode_rfc2733Mode_mode_separateStream (pctxt, pvalue->u.separateStream);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "separateStream", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FECMode_rfc2733Mode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FECMode_rfc2733Mode (OOCTXT* pctxt, H245FECMode_rfc2733Mode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode mode */
|
|
|
|
invokeStartElement (pctxt, "mode", -1);
|
|
|
|
stat = asn1PD_H245FECMode_rfc2733Mode_mode (pctxt, &pvalue->mode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mode", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FECMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FECMode (OOCTXT* pctxt, H245FECMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* rfc2733Mode */
|
|
case 0:
|
|
invokeStartElement (pctxt, "rfc2733Mode", -1);
|
|
|
|
pvalue->u.rfc2733Mode = ALLOC_ASN1ELEM (pctxt, H245FECMode_rfc2733Mode);
|
|
|
|
stat = asn1PD_H245FECMode_rfc2733Mode (pctxt, pvalue->u.rfc2733Mode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "rfc2733Mode", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 2;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ModeElementType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ModeElementType (OOCTXT* pctxt, H245ModeElementType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* videoMode */
|
|
case 1:
|
|
invokeStartElement (pctxt, "videoMode", -1);
|
|
|
|
pvalue->u.videoMode = ALLOC_ASN1ELEM (pctxt, H245VideoMode);
|
|
|
|
stat = asn1PD_H245VideoMode (pctxt, pvalue->u.videoMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "videoMode", -1);
|
|
|
|
break;
|
|
|
|
/* audioMode */
|
|
case 2:
|
|
invokeStartElement (pctxt, "audioMode", -1);
|
|
|
|
pvalue->u.audioMode = ALLOC_ASN1ELEM (pctxt, H245AudioMode);
|
|
|
|
stat = asn1PD_H245AudioMode (pctxt, pvalue->u.audioMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "audioMode", -1);
|
|
|
|
break;
|
|
|
|
/* dataMode */
|
|
case 3:
|
|
invokeStartElement (pctxt, "dataMode", -1);
|
|
|
|
pvalue->u.dataMode = ALLOC_ASN1ELEM (pctxt, H245DataMode);
|
|
|
|
stat = asn1PD_H245DataMode (pctxt, pvalue->u.dataMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "dataMode", -1);
|
|
|
|
break;
|
|
|
|
/* encryptionMode */
|
|
case 4:
|
|
invokeStartElement (pctxt, "encryptionMode", -1);
|
|
|
|
pvalue->u.encryptionMode = ALLOC_ASN1ELEM (pctxt, H245EncryptionMode);
|
|
|
|
stat = asn1PD_H245EncryptionMode (pctxt, pvalue->u.encryptionMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "encryptionMode", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 6;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* h235Mode */
|
|
case 6:
|
|
invokeStartElement (pctxt, "h235Mode", -1);
|
|
|
|
pvalue->u.h235Mode = ALLOC_ASN1ELEM (pctxt, H245H235Mode);
|
|
|
|
stat = asn1PD_H245H235Mode (pctxt, pvalue->u.h235Mode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h235Mode", -1);
|
|
|
|
break;
|
|
|
|
/* multiplexedStreamMode */
|
|
case 7:
|
|
invokeStartElement (pctxt, "multiplexedStreamMode", -1);
|
|
|
|
pvalue->u.multiplexedStreamMode = ALLOC_ASN1ELEM (pctxt, H245MultiplexedStreamParameter);
|
|
|
|
stat = asn1PD_H245MultiplexedStreamParameter (pctxt, pvalue->u.multiplexedStreamMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexedStreamMode", -1);
|
|
|
|
break;
|
|
|
|
/* redundancyEncodingDTMode */
|
|
case 8:
|
|
invokeStartElement (pctxt, "redundancyEncodingDTMode", -1);
|
|
|
|
pvalue->u.redundancyEncodingDTMode = ALLOC_ASN1ELEM (pctxt, H245RedundancyEncodingDTMode);
|
|
|
|
stat = asn1PD_H245RedundancyEncodingDTMode (pctxt, pvalue->u.redundancyEncodingDTMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "redundancyEncodingDTMode", -1);
|
|
|
|
break;
|
|
|
|
/* multiplePayloadStreamMode */
|
|
case 9:
|
|
invokeStartElement (pctxt, "multiplePayloadStreamMode", -1);
|
|
|
|
pvalue->u.multiplePayloadStreamMode = ALLOC_ASN1ELEM (pctxt, H245MultiplePayloadStreamMode);
|
|
|
|
stat = asn1PD_H245MultiplePayloadStreamMode (pctxt, pvalue->u.multiplePayloadStreamMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplePayloadStreamMode", -1);
|
|
|
|
break;
|
|
|
|
/* fecMode */
|
|
case 10:
|
|
invokeStartElement (pctxt, "fecMode", -1);
|
|
|
|
pvalue->u.fecMode = ALLOC_ASN1ELEM (pctxt, H245FECMode);
|
|
|
|
stat = asn1PD_H245FECMode (pctxt, pvalue->u.fecMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "fecMode", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223ModeParameters_adaptationLayerType_al3 */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223ModeParameters_adaptationLayerType_al3 (OOCTXT* pctxt, H245H223ModeParameters_adaptationLayerType_al3* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* decode controlFieldOctets */
|
|
|
|
invokeStartElement (pctxt, "controlFieldOctets", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->controlFieldOctets, 0U, 2U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->controlFieldOctets);
|
|
|
|
invokeEndElement (pctxt, "controlFieldOctets", -1);
|
|
|
|
/* decode sendBufferSize */
|
|
|
|
invokeStartElement (pctxt, "sendBufferSize", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->sendBufferSize, 0U, 16777215U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sendBufferSize);
|
|
|
|
invokeEndElement (pctxt, "sendBufferSize", -1);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223ModeParameters_adaptationLayerType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223ModeParameters_adaptationLayerType (OOCTXT* pctxt, H245H223ModeParameters_adaptationLayerType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 5);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* al1Framed */
|
|
case 1:
|
|
invokeStartElement (pctxt, "al1Framed", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "al1Framed", -1);
|
|
|
|
break;
|
|
|
|
/* al1NotFramed */
|
|
case 2:
|
|
invokeStartElement (pctxt, "al1NotFramed", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "al1NotFramed", -1);
|
|
|
|
break;
|
|
|
|
/* al2WithoutSequenceNumbers */
|
|
case 3:
|
|
invokeStartElement (pctxt, "al2WithoutSequenceNumbers", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "al2WithoutSequenceNumbers", -1);
|
|
|
|
break;
|
|
|
|
/* al2WithSequenceNumbers */
|
|
case 4:
|
|
invokeStartElement (pctxt, "al2WithSequenceNumbers", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "al2WithSequenceNumbers", -1);
|
|
|
|
break;
|
|
|
|
/* al3 */
|
|
case 5:
|
|
invokeStartElement (pctxt, "al3", -1);
|
|
|
|
pvalue->u.al3 = ALLOC_ASN1ELEM (pctxt, H245H223ModeParameters_adaptationLayerType_al3);
|
|
|
|
stat = asn1PD_H245H223ModeParameters_adaptationLayerType_al3 (pctxt, pvalue->u.al3);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "al3", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 7;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* al1M */
|
|
case 7:
|
|
invokeStartElement (pctxt, "al1M", -1);
|
|
|
|
pvalue->u.al1M = ALLOC_ASN1ELEM (pctxt, H245H223AL1MParameters);
|
|
|
|
stat = asn1PD_H245H223AL1MParameters (pctxt, pvalue->u.al1M);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "al1M", -1);
|
|
|
|
break;
|
|
|
|
/* al2M */
|
|
case 8:
|
|
invokeStartElement (pctxt, "al2M", -1);
|
|
|
|
pvalue->u.al2M = ALLOC_ASN1ELEM (pctxt, H245H223AL2MParameters);
|
|
|
|
stat = asn1PD_H245H223AL2MParameters (pctxt, pvalue->u.al2M);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "al2M", -1);
|
|
|
|
break;
|
|
|
|
/* al3M */
|
|
case 9:
|
|
invokeStartElement (pctxt, "al3M", -1);
|
|
|
|
pvalue->u.al3M = ALLOC_ASN1ELEM (pctxt, H245H223AL3MParameters);
|
|
|
|
stat = asn1PD_H245H223AL3MParameters (pctxt, pvalue->u.al3M);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "al3M", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223ModeParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223ModeParameters (OOCTXT* pctxt, H245H223ModeParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode adaptationLayerType */
|
|
|
|
invokeStartElement (pctxt, "adaptationLayerType", -1);
|
|
|
|
stat = asn1PD_H245H223ModeParameters_adaptationLayerType (pctxt, &pvalue->adaptationLayerType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "adaptationLayerType", -1);
|
|
|
|
/* decode segmentableFlag */
|
|
|
|
invokeStartElement (pctxt, "segmentableFlag", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->segmentableFlag);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->segmentableFlag);
|
|
|
|
invokeEndElement (pctxt, "segmentableFlag", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* V76ModeParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245V76ModeParameters (OOCTXT* pctxt, H245V76ModeParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* suspendResumewAddress */
|
|
case 0:
|
|
invokeStartElement (pctxt, "suspendResumewAddress", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "suspendResumewAddress", -1);
|
|
|
|
break;
|
|
|
|
/* suspendResumewoAddress */
|
|
case 1:
|
|
invokeStartElement (pctxt, "suspendResumewoAddress", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "suspendResumewoAddress", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RedundancyEncodingMode_secondaryEncoding */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RedundancyEncodingMode_secondaryEncoding (OOCTXT* pctxt, H245RedundancyEncodingMode_secondaryEncoding* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* audioData */
|
|
case 1:
|
|
invokeStartElement (pctxt, "audioData", -1);
|
|
|
|
pvalue->u.audioData = ALLOC_ASN1ELEM (pctxt, H245AudioMode);
|
|
|
|
stat = asn1PD_H245AudioMode (pctxt, pvalue->u.audioData);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "audioData", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RedundancyEncodingMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RedundancyEncodingMode (OOCTXT* pctxt, H245RedundancyEncodingMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.secondaryEncodingPresent = optbit;
|
|
|
|
/* decode redundancyEncodingMethod */
|
|
|
|
invokeStartElement (pctxt, "redundancyEncodingMethod", -1);
|
|
|
|
stat = asn1PD_H245RedundancyEncodingMethod (pctxt, &pvalue->redundancyEncodingMethod);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "redundancyEncodingMethod", -1);
|
|
|
|
/* decode secondaryEncoding */
|
|
|
|
if (pvalue->m.secondaryEncodingPresent) {
|
|
invokeStartElement (pctxt, "secondaryEncoding", -1);
|
|
|
|
stat = asn1PD_H245RedundancyEncodingMode_secondaryEncoding (pctxt, &pvalue->secondaryEncoding);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "secondaryEncoding", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H2250ModeParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H2250ModeParameters (OOCTXT* pctxt, H245H2250ModeParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.redundancyEncodingModePresent = optbit;
|
|
|
|
/* decode redundancyEncodingMode */
|
|
|
|
if (pvalue->m.redundancyEncodingModePresent) {
|
|
invokeStartElement (pctxt, "redundancyEncodingMode", -1);
|
|
|
|
stat = asn1PD_H245RedundancyEncodingMode (pctxt, &pvalue->redundancyEncodingMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "redundancyEncodingMode", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexedStreamModeParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexedStreamModeParameters (OOCTXT* pctxt, H245MultiplexedStreamModeParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode logicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->logicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ModeElement */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ModeElement (OOCTXT* pctxt, H245ModeElement* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.h223ModeParametersPresent = optbit;
|
|
|
|
/* decode type */
|
|
|
|
invokeStartElement (pctxt, "type", -1);
|
|
|
|
stat = asn1PD_H245ModeElementType (pctxt, &pvalue->type);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "type", -1);
|
|
|
|
/* decode h223ModeParameters */
|
|
|
|
if (pvalue->m.h223ModeParametersPresent) {
|
|
invokeStartElement (pctxt, "h223ModeParameters", -1);
|
|
|
|
stat = asn1PD_H245H223ModeParameters (pctxt, &pvalue->h223ModeParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h223ModeParameters", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 4 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.v76ModeParametersPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "v76ModeParameters", -1);
|
|
|
|
stat = asn1PD_H245V76ModeParameters (pctxt, &pvalue->v76ModeParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "v76ModeParameters", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.h2250ModeParametersPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "h2250ModeParameters", -1);
|
|
|
|
stat = asn1PD_H245H2250ModeParameters (pctxt, &pvalue->h2250ModeParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h2250ModeParameters", -1);
|
|
break;
|
|
|
|
case 2:
|
|
pvalue->m.genericModeParametersPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "genericModeParameters", -1);
|
|
|
|
stat = asn1PD_H245GenericCapability (pctxt, &pvalue->genericModeParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "genericModeParameters", -1);
|
|
break;
|
|
|
|
case 3:
|
|
pvalue->m.multiplexedStreamModeParametersPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "multiplexedStreamModeParameters", -1);
|
|
|
|
stat = asn1PD_H245MultiplexedStreamModeParameters (pctxt, &pvalue->multiplexedStreamModeParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexedStreamModeParameters", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ModeDescription */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ModeDescription (OOCTXT* pctxt, H245ModeDescription* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245ModeElement* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245ModeElement);
|
|
|
|
stat = asn1PD_H245ModeElement (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestMode_requestedModes */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestMode_requestedModes (OOCTXT* pctxt, H245RequestMode_requestedModes* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245ModeDescription* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245ModeDescription);
|
|
|
|
stat = asn1PD_H245ModeDescription (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestMode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestMode (OOCTXT* pctxt, H245RequestMode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->sequenceNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
/* decode requestedModes */
|
|
|
|
invokeStartElement (pctxt, "requestedModes", -1);
|
|
|
|
stat = asn1PD_H245RequestMode_requestedModes (pctxt, &pvalue->requestedModes);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestedModes", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RoundTripDelayRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RoundTripDelayRequest (OOCTXT* pctxt, H245RoundTripDelayRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->sequenceNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MaintenanceLoopRequest_type */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MaintenanceLoopRequest_type (OOCTXT* pctxt, H245MaintenanceLoopRequest_type* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* systemLoop */
|
|
case 0:
|
|
invokeStartElement (pctxt, "systemLoop", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "systemLoop", -1);
|
|
|
|
break;
|
|
|
|
/* mediaLoop */
|
|
case 1:
|
|
invokeStartElement (pctxt, "mediaLoop", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->u.mediaLoop);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaLoop", -1);
|
|
|
|
break;
|
|
|
|
/* logicalChannelLoop */
|
|
case 2:
|
|
invokeStartElement (pctxt, "logicalChannelLoop", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->u.logicalChannelLoop);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelLoop", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MaintenanceLoopRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MaintenanceLoopRequest (OOCTXT* pctxt, H245MaintenanceLoopRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode type */
|
|
|
|
invokeStartElement (pctxt, "type", -1);
|
|
|
|
stat = asn1PD_H245MaintenanceLoopRequest_type (pctxt, &pvalue->type);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "type", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CommunicationModeRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CommunicationModeRequest (OOCTXT* pctxt, H245CommunicationModeRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Criteria */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245Criteria (OOCTXT* pctxt, H245Criteria* pvalue)
|
|
{
|
|
static Asn1SizeCnst value_lsize1 = { 0, 1, 65535, 0 };
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode field */
|
|
|
|
invokeStartElement (pctxt, "field", -1);
|
|
|
|
stat = decodeObjectIdentifier (pctxt, &pvalue->field);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOidValue (pctxt, pvalue->field.numids, pvalue->field.subid);
|
|
|
|
invokeEndElement (pctxt, "field", -1);
|
|
|
|
/* decode value */
|
|
|
|
invokeStartElement (pctxt, "value", -1);
|
|
|
|
addSizeConstraint (pctxt, &value_lsize1);
|
|
|
|
stat = decodeDynOctetString (pctxt, (ASN1DynOctStr*)&pvalue->value);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->value.numocts, pvalue->value.data);
|
|
|
|
invokeEndElement (pctxt, "value", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CertSelectionCriteria */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CertSelectionCriteria (OOCTXT* pctxt, H245CertSelectionCriteria* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 16, 0 };
|
|
int stat = ASN_OK;
|
|
H245Criteria* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245Criteria);
|
|
|
|
stat = asn1PD_H245Criteria (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceRequest_requestTerminalCertificate */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceRequest_requestTerminalCertificate (OOCTXT* pctxt, H245ConferenceRequest_requestTerminalCertificate* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.terminalLabelPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.certSelectionCriteriaPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.sRandomPresent = optbit;
|
|
|
|
/* decode terminalLabel */
|
|
|
|
if (pvalue->m.terminalLabelPresent) {
|
|
invokeStartElement (pctxt, "terminalLabel", -1);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, &pvalue->terminalLabel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalLabel", -1);
|
|
}
|
|
|
|
/* decode certSelectionCriteria */
|
|
|
|
if (pvalue->m.certSelectionCriteriaPresent) {
|
|
invokeStartElement (pctxt, "certSelectionCriteria", -1);
|
|
|
|
stat = asn1PD_H245CertSelectionCriteria (pctxt, &pvalue->certSelectionCriteria);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "certSelectionCriteria", -1);
|
|
}
|
|
|
|
/* decode sRandom */
|
|
|
|
if (pvalue->m.sRandomPresent) {
|
|
invokeStartElement (pctxt, "sRandom", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->sRandom, 1U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sRandom);
|
|
|
|
invokeEndElement (pctxt, "sRandom", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RemoteMCRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RemoteMCRequest (OOCTXT* pctxt, H245RemoteMCRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* masterActivate */
|
|
case 0:
|
|
invokeStartElement (pctxt, "masterActivate", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "masterActivate", -1);
|
|
|
|
break;
|
|
|
|
/* slaveActivate */
|
|
case 1:
|
|
invokeStartElement (pctxt, "slaveActivate", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "slaveActivate", -1);
|
|
|
|
break;
|
|
|
|
/* deActivate */
|
|
case 2:
|
|
invokeStartElement (pctxt, "deActivate", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "deActivate", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceRequest (OOCTXT* pctxt, H245ConferenceRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* terminalListRequest */
|
|
case 0:
|
|
invokeStartElement (pctxt, "terminalListRequest", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "terminalListRequest", -1);
|
|
|
|
break;
|
|
|
|
/* makeMeChair */
|
|
case 1:
|
|
invokeStartElement (pctxt, "makeMeChair", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "makeMeChair", -1);
|
|
|
|
break;
|
|
|
|
/* cancelMakeMeChair */
|
|
case 2:
|
|
invokeStartElement (pctxt, "cancelMakeMeChair", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "cancelMakeMeChair", -1);
|
|
|
|
break;
|
|
|
|
/* dropTerminal */
|
|
case 3:
|
|
invokeStartElement (pctxt, "dropTerminal", -1);
|
|
|
|
pvalue->u.dropTerminal = ALLOC_ASN1ELEM (pctxt, H245TerminalLabel);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, pvalue->u.dropTerminal);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "dropTerminal", -1);
|
|
|
|
break;
|
|
|
|
/* requestTerminalID */
|
|
case 4:
|
|
invokeStartElement (pctxt, "requestTerminalID", -1);
|
|
|
|
pvalue->u.requestTerminalID = ALLOC_ASN1ELEM (pctxt, H245TerminalLabel);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, pvalue->u.requestTerminalID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestTerminalID", -1);
|
|
|
|
break;
|
|
|
|
/* enterH243Password */
|
|
case 5:
|
|
invokeStartElement (pctxt, "enterH243Password", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "enterH243Password", -1);
|
|
|
|
break;
|
|
|
|
/* enterH243TerminalID */
|
|
case 6:
|
|
invokeStartElement (pctxt, "enterH243TerminalID", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "enterH243TerminalID", -1);
|
|
|
|
break;
|
|
|
|
/* enterH243ConferenceID */
|
|
case 7:
|
|
invokeStartElement (pctxt, "enterH243ConferenceID", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "enterH243ConferenceID", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 9;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* enterExtensionAddress */
|
|
case 9:
|
|
invokeStartElement (pctxt, "enterExtensionAddress", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "enterExtensionAddress", -1);
|
|
|
|
break;
|
|
|
|
/* requestChairTokenOwner */
|
|
case 10:
|
|
invokeStartElement (pctxt, "requestChairTokenOwner", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "requestChairTokenOwner", -1);
|
|
|
|
break;
|
|
|
|
/* requestTerminalCertificate */
|
|
case 11:
|
|
invokeStartElement (pctxt, "requestTerminalCertificate", -1);
|
|
|
|
pvalue->u.requestTerminalCertificate = ALLOC_ASN1ELEM (pctxt, H245ConferenceRequest_requestTerminalCertificate);
|
|
|
|
stat = asn1PD_H245ConferenceRequest_requestTerminalCertificate (pctxt, pvalue->u.requestTerminalCertificate);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestTerminalCertificate", -1);
|
|
|
|
break;
|
|
|
|
/* broadcastMyLogicalChannel */
|
|
case 12:
|
|
invokeStartElement (pctxt, "broadcastMyLogicalChannel", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->u.broadcastMyLogicalChannel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "broadcastMyLogicalChannel", -1);
|
|
|
|
break;
|
|
|
|
/* makeTerminalBroadcaster */
|
|
case 13:
|
|
invokeStartElement (pctxt, "makeTerminalBroadcaster", -1);
|
|
|
|
pvalue->u.makeTerminalBroadcaster = ALLOC_ASN1ELEM (pctxt, H245TerminalLabel);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, pvalue->u.makeTerminalBroadcaster);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "makeTerminalBroadcaster", -1);
|
|
|
|
break;
|
|
|
|
/* sendThisSource */
|
|
case 14:
|
|
invokeStartElement (pctxt, "sendThisSource", -1);
|
|
|
|
pvalue->u.sendThisSource = ALLOC_ASN1ELEM (pctxt, H245TerminalLabel);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, pvalue->u.sendThisSource);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sendThisSource", -1);
|
|
|
|
break;
|
|
|
|
/* requestAllTerminalIDs */
|
|
case 15:
|
|
invokeStartElement (pctxt, "requestAllTerminalIDs", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "requestAllTerminalIDs", -1);
|
|
|
|
break;
|
|
|
|
/* remoteMCRequest */
|
|
case 16:
|
|
invokeStartElement (pctxt, "remoteMCRequest", -1);
|
|
|
|
pvalue->u.remoteMCRequest = ALLOC_ASN1ELEM (pctxt, H245RemoteMCRequest);
|
|
|
|
stat = asn1PD_H245RemoteMCRequest (pctxt, pvalue->u.remoteMCRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "remoteMCRequest", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultilinkRequest_callInformation */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultilinkRequest_callInformation (OOCTXT* pctxt, H245MultilinkRequest_callInformation* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode maxNumberOfAdditionalConnections */
|
|
|
|
invokeStartElement (pctxt, "maxNumberOfAdditionalConnections", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maxNumberOfAdditionalConnections, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maxNumberOfAdditionalConnections);
|
|
|
|
invokeEndElement (pctxt, "maxNumberOfAdditionalConnections", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DialingInformationNetworkType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DialingInformationNetworkType (OOCTXT* pctxt, H245DialingInformationNetworkType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardMessage);
|
|
|
|
stat = asn1PD_H245NonStandardMessage (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* n_isdn */
|
|
case 1:
|
|
invokeStartElement (pctxt, "n_isdn", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "n_isdn", -1);
|
|
|
|
break;
|
|
|
|
/* gstn */
|
|
case 2:
|
|
invokeStartElement (pctxt, "gstn", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "gstn", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* mobile */
|
|
case 4:
|
|
invokeStartElement (pctxt, "mobile", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "mobile", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DialingInformationNumber_networkType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DialingInformationNumber_networkType (OOCTXT* pctxt, H245DialingInformationNumber_networkType* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 255, 0 };
|
|
int stat = ASN_OK;
|
|
H245DialingInformationNetworkType* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245DialingInformationNetworkType);
|
|
|
|
stat = asn1PD_H245DialingInformationNetworkType (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DialingInformationNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DialingInformationNumber (OOCTXT* pctxt, H245DialingInformationNumber* pvalue)
|
|
{
|
|
static Asn1SizeCnst networkAddress_lsize1 = { 0, 0, 40, 0 };
|
|
static Asn1SizeCnst subAddress_lsize1 = { 0, 1, 40, 0 };
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.subAddressPresent = optbit;
|
|
|
|
/* decode networkAddress */
|
|
|
|
invokeStartElement (pctxt, "networkAddress", -1);
|
|
|
|
addSizeConstraint (pctxt, &networkAddress_lsize1);
|
|
|
|
stat = decodeConstrainedStringEx (pctxt, &pvalue->networkAddress, NUM_CANSET, 4, 4, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeCharStrValue (pctxt, pvalue->networkAddress);
|
|
|
|
invokeEndElement (pctxt, "networkAddress", -1);
|
|
|
|
/* decode subAddress */
|
|
|
|
if (pvalue->m.subAddressPresent) {
|
|
invokeStartElement (pctxt, "subAddress", -1);
|
|
|
|
addSizeConstraint (pctxt, &subAddress_lsize1);
|
|
|
|
stat = decodeConstrainedStringEx (pctxt, &pvalue->subAddress, 0, 8, 7, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeCharStrValue (pctxt, pvalue->subAddress);
|
|
|
|
invokeEndElement (pctxt, "subAddress", -1);
|
|
}
|
|
|
|
/* decode networkType */
|
|
|
|
invokeStartElement (pctxt, "networkType", -1);
|
|
|
|
stat = asn1PD_H245DialingInformationNumber_networkType (pctxt, &pvalue->networkType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "networkType", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DialingInformation_differential */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DialingInformation_differential (OOCTXT* pctxt, H245DialingInformation_differential* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 65535, 0 };
|
|
int stat = ASN_OK;
|
|
H245DialingInformationNumber* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245DialingInformationNumber);
|
|
|
|
stat = asn1PD_H245DialingInformationNumber (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* DialingInformation */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245DialingInformation (OOCTXT* pctxt, H245DialingInformation* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardMessage);
|
|
|
|
stat = asn1PD_H245NonStandardMessage (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* differential */
|
|
case 1:
|
|
invokeStartElement (pctxt, "differential", -1);
|
|
|
|
pvalue->u.differential = ALLOC_ASN1ELEM (pctxt, H245DialingInformation_differential);
|
|
|
|
stat = asn1PD_H245DialingInformation_differential (pctxt, pvalue->u.differential);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "differential", -1);
|
|
|
|
break;
|
|
|
|
/* infoNotAvailable */
|
|
case 2:
|
|
invokeStartElement (pctxt, "infoNotAvailable", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.infoNotAvailable, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.infoNotAvailable);
|
|
|
|
invokeEndElement (pctxt, "infoNotAvailable", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultilinkRequest_addConnection */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultilinkRequest_addConnection (OOCTXT* pctxt, H245MultilinkRequest_addConnection* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->sequenceNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
/* decode dialingInformation */
|
|
|
|
invokeStartElement (pctxt, "dialingInformation", -1);
|
|
|
|
stat = asn1PD_H245DialingInformation (pctxt, &pvalue->dialingInformation);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "dialingInformation", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConnectionIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConnectionIdentifier (OOCTXT* pctxt, H245ConnectionIdentifier* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode channelTag */
|
|
|
|
invokeStartElement (pctxt, "channelTag", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->channelTag, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->channelTag);
|
|
|
|
invokeEndElement (pctxt, "channelTag", -1);
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->sequenceNumber, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sequenceNumber);
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultilinkRequest_removeConnection */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultilinkRequest_removeConnection (OOCTXT* pctxt, H245MultilinkRequest_removeConnection* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode connectionIdentifier */
|
|
|
|
invokeStartElement (pctxt, "connectionIdentifier", -1);
|
|
|
|
stat = asn1PD_H245ConnectionIdentifier (pctxt, &pvalue->connectionIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "connectionIdentifier", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultilinkRequest_maximumHeaderInterval_requestType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultilinkRequest_maximumHeaderInterval_requestType (OOCTXT* pctxt, H245MultilinkRequest_maximumHeaderInterval_requestType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* currentIntervalInformation */
|
|
case 0:
|
|
invokeStartElement (pctxt, "currentIntervalInformation", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "currentIntervalInformation", -1);
|
|
|
|
break;
|
|
|
|
/* requestedInterval */
|
|
case 1:
|
|
invokeStartElement (pctxt, "requestedInterval", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.requestedInterval, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.requestedInterval);
|
|
|
|
invokeEndElement (pctxt, "requestedInterval", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultilinkRequest_maximumHeaderInterval */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultilinkRequest_maximumHeaderInterval (OOCTXT* pctxt, H245MultilinkRequest_maximumHeaderInterval* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode requestType */
|
|
|
|
invokeStartElement (pctxt, "requestType", -1);
|
|
|
|
stat = asn1PD_H245MultilinkRequest_maximumHeaderInterval_requestType (pctxt, &pvalue->requestType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestType", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultilinkRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultilinkRequest (OOCTXT* pctxt, H245MultilinkRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardMessage);
|
|
|
|
stat = asn1PD_H245NonStandardMessage (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* callInformation */
|
|
case 1:
|
|
invokeStartElement (pctxt, "callInformation", -1);
|
|
|
|
pvalue->u.callInformation = ALLOC_ASN1ELEM (pctxt, H245MultilinkRequest_callInformation);
|
|
|
|
stat = asn1PD_H245MultilinkRequest_callInformation (pctxt, pvalue->u.callInformation);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "callInformation", -1);
|
|
|
|
break;
|
|
|
|
/* addConnection */
|
|
case 2:
|
|
invokeStartElement (pctxt, "addConnection", -1);
|
|
|
|
pvalue->u.addConnection = ALLOC_ASN1ELEM (pctxt, H245MultilinkRequest_addConnection);
|
|
|
|
stat = asn1PD_H245MultilinkRequest_addConnection (pctxt, pvalue->u.addConnection);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "addConnection", -1);
|
|
|
|
break;
|
|
|
|
/* removeConnection */
|
|
case 3:
|
|
invokeStartElement (pctxt, "removeConnection", -1);
|
|
|
|
pvalue->u.removeConnection = ALLOC_ASN1ELEM (pctxt, H245MultilinkRequest_removeConnection);
|
|
|
|
stat = asn1PD_H245MultilinkRequest_removeConnection (pctxt, pvalue->u.removeConnection);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "removeConnection", -1);
|
|
|
|
break;
|
|
|
|
/* maximumHeaderInterval */
|
|
case 4:
|
|
invokeStartElement (pctxt, "maximumHeaderInterval", -1);
|
|
|
|
pvalue->u.maximumHeaderInterval = ALLOC_ASN1ELEM (pctxt, H245MultilinkRequest_maximumHeaderInterval);
|
|
|
|
stat = asn1PD_H245MultilinkRequest_maximumHeaderInterval (pctxt, pvalue->u.maximumHeaderInterval);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "maximumHeaderInterval", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 6;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MaximumBitRate */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MaximumBitRate (OOCTXT* pctxt, H245MaximumBitRate* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
stat = decodeConsUnsigned (pctxt, pvalue, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, *pvalue);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* LogicalChannelRateRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245LogicalChannelRateRequest (OOCTXT* pctxt, H245LogicalChannelRateRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->sequenceNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
/* decode logicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->logicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
/* decode maximumBitRate */
|
|
|
|
invokeStartElement (pctxt, "maximumBitRate", -1);
|
|
|
|
stat = asn1PD_H245MaximumBitRate (pctxt, &pvalue->maximumBitRate);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "maximumBitRate", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestMessage */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestMessage (OOCTXT* pctxt, H245RequestMessage* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 10);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardMessage);
|
|
|
|
stat = asn1PD_H245NonStandardMessage (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* masterSlaveDetermination */
|
|
case 1:
|
|
invokeStartElement (pctxt, "masterSlaveDetermination", -1);
|
|
|
|
pvalue->u.masterSlaveDetermination = ALLOC_ASN1ELEM (pctxt, H245MasterSlaveDetermination);
|
|
|
|
stat = asn1PD_H245MasterSlaveDetermination (pctxt, pvalue->u.masterSlaveDetermination);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "masterSlaveDetermination", -1);
|
|
|
|
break;
|
|
|
|
/* terminalCapabilitySet */
|
|
case 2:
|
|
invokeStartElement (pctxt, "terminalCapabilitySet", -1);
|
|
|
|
pvalue->u.terminalCapabilitySet = ALLOC_ASN1ELEM (pctxt, H245TerminalCapabilitySet);
|
|
|
|
stat = asn1PD_H245TerminalCapabilitySet (pctxt, pvalue->u.terminalCapabilitySet);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalCapabilitySet", -1);
|
|
|
|
break;
|
|
|
|
/* openLogicalChannel */
|
|
case 3:
|
|
invokeStartElement (pctxt, "openLogicalChannel", -1);
|
|
|
|
pvalue->u.openLogicalChannel = ALLOC_ASN1ELEM (pctxt, H245OpenLogicalChannel);
|
|
|
|
stat = asn1PD_H245OpenLogicalChannel (pctxt, pvalue->u.openLogicalChannel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "openLogicalChannel", -1);
|
|
|
|
break;
|
|
|
|
/* closeLogicalChannel */
|
|
case 4:
|
|
invokeStartElement (pctxt, "closeLogicalChannel", -1);
|
|
|
|
pvalue->u.closeLogicalChannel = ALLOC_ASN1ELEM (pctxt, H245CloseLogicalChannel);
|
|
|
|
stat = asn1PD_H245CloseLogicalChannel (pctxt, pvalue->u.closeLogicalChannel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "closeLogicalChannel", -1);
|
|
|
|
break;
|
|
|
|
/* requestChannelClose */
|
|
case 5:
|
|
invokeStartElement (pctxt, "requestChannelClose", -1);
|
|
|
|
pvalue->u.requestChannelClose = ALLOC_ASN1ELEM (pctxt, H245RequestChannelClose);
|
|
|
|
stat = asn1PD_H245RequestChannelClose (pctxt, pvalue->u.requestChannelClose);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestChannelClose", -1);
|
|
|
|
break;
|
|
|
|
/* multiplexEntrySend */
|
|
case 6:
|
|
invokeStartElement (pctxt, "multiplexEntrySend", -1);
|
|
|
|
pvalue->u.multiplexEntrySend = ALLOC_ASN1ELEM (pctxt, H245MultiplexEntrySend);
|
|
|
|
stat = asn1PD_H245MultiplexEntrySend (pctxt, pvalue->u.multiplexEntrySend);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexEntrySend", -1);
|
|
|
|
break;
|
|
|
|
/* requestMultiplexEntry */
|
|
case 7:
|
|
invokeStartElement (pctxt, "requestMultiplexEntry", -1);
|
|
|
|
pvalue->u.requestMultiplexEntry = ALLOC_ASN1ELEM (pctxt, H245RequestMultiplexEntry);
|
|
|
|
stat = asn1PD_H245RequestMultiplexEntry (pctxt, pvalue->u.requestMultiplexEntry);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestMultiplexEntry", -1);
|
|
|
|
break;
|
|
|
|
/* requestMode */
|
|
case 8:
|
|
invokeStartElement (pctxt, "requestMode", -1);
|
|
|
|
pvalue->u.requestMode = ALLOC_ASN1ELEM (pctxt, H245RequestMode);
|
|
|
|
stat = asn1PD_H245RequestMode (pctxt, pvalue->u.requestMode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestMode", -1);
|
|
|
|
break;
|
|
|
|
/* roundTripDelayRequest */
|
|
case 9:
|
|
invokeStartElement (pctxt, "roundTripDelayRequest", -1);
|
|
|
|
pvalue->u.roundTripDelayRequest = ALLOC_ASN1ELEM (pctxt, H245RoundTripDelayRequest);
|
|
|
|
stat = asn1PD_H245RoundTripDelayRequest (pctxt, pvalue->u.roundTripDelayRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "roundTripDelayRequest", -1);
|
|
|
|
break;
|
|
|
|
/* maintenanceLoopRequest */
|
|
case 10:
|
|
invokeStartElement (pctxt, "maintenanceLoopRequest", -1);
|
|
|
|
pvalue->u.maintenanceLoopRequest = ALLOC_ASN1ELEM (pctxt, H245MaintenanceLoopRequest);
|
|
|
|
stat = asn1PD_H245MaintenanceLoopRequest (pctxt, pvalue->u.maintenanceLoopRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "maintenanceLoopRequest", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 12;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* communicationModeRequest */
|
|
case 12:
|
|
invokeStartElement (pctxt, "communicationModeRequest", -1);
|
|
|
|
pvalue->u.communicationModeRequest = ALLOC_ASN1ELEM (pctxt, H245CommunicationModeRequest);
|
|
|
|
stat = asn1PD_H245CommunicationModeRequest (pctxt, pvalue->u.communicationModeRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "communicationModeRequest", -1);
|
|
|
|
break;
|
|
|
|
/* conferenceRequest */
|
|
case 13:
|
|
invokeStartElement (pctxt, "conferenceRequest", -1);
|
|
|
|
pvalue->u.conferenceRequest = ALLOC_ASN1ELEM (pctxt, H245ConferenceRequest);
|
|
|
|
stat = asn1PD_H245ConferenceRequest (pctxt, pvalue->u.conferenceRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "conferenceRequest", -1);
|
|
|
|
break;
|
|
|
|
/* multilinkRequest */
|
|
case 14:
|
|
invokeStartElement (pctxt, "multilinkRequest", -1);
|
|
|
|
pvalue->u.multilinkRequest = ALLOC_ASN1ELEM (pctxt, H245MultilinkRequest);
|
|
|
|
stat = asn1PD_H245MultilinkRequest (pctxt, pvalue->u.multilinkRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multilinkRequest", -1);
|
|
|
|
break;
|
|
|
|
/* logicalChannelRateRequest */
|
|
case 15:
|
|
invokeStartElement (pctxt, "logicalChannelRateRequest", -1);
|
|
|
|
pvalue->u.logicalChannelRateRequest = ALLOC_ASN1ELEM (pctxt, H245LogicalChannelRateRequest);
|
|
|
|
stat = asn1PD_H245LogicalChannelRateRequest (pctxt, pvalue->u.logicalChannelRateRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelRateRequest", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MasterSlaveDeterminationAck_decision */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MasterSlaveDeterminationAck_decision (OOCTXT* pctxt, H245MasterSlaveDeterminationAck_decision* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* master */
|
|
case 0:
|
|
invokeStartElement (pctxt, "master", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "master", -1);
|
|
|
|
break;
|
|
|
|
/* slave */
|
|
case 1:
|
|
invokeStartElement (pctxt, "slave", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "slave", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MasterSlaveDeterminationAck */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MasterSlaveDeterminationAck (OOCTXT* pctxt, H245MasterSlaveDeterminationAck* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode decision */
|
|
|
|
invokeStartElement (pctxt, "decision", -1);
|
|
|
|
stat = asn1PD_H245MasterSlaveDeterminationAck_decision (pctxt, &pvalue->decision);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "decision", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MasterSlaveDeterminationReject_cause */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MasterSlaveDeterminationReject_cause (OOCTXT* pctxt, H245MasterSlaveDeterminationReject_cause* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* identicalNumbers */
|
|
case 0:
|
|
invokeStartElement (pctxt, "identicalNumbers", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "identicalNumbers", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 2;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MasterSlaveDeterminationReject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MasterSlaveDeterminationReject (OOCTXT* pctxt, H245MasterSlaveDeterminationReject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode cause */
|
|
|
|
invokeStartElement (pctxt, "cause", -1);
|
|
|
|
stat = asn1PD_H245MasterSlaveDeterminationReject_cause (pctxt, &pvalue->cause);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "cause", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TerminalCapabilitySetAck */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TerminalCapabilitySetAck (OOCTXT* pctxt, H245TerminalCapabilitySetAck* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->sequenceNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TerminalCapabilitySetReject_cause_tableEntryCapacityExce */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded (OOCTXT* pctxt, H245TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* highestEntryNumberProcessed */
|
|
case 0:
|
|
invokeStartElement (pctxt, "highestEntryNumberProcessed", -1);
|
|
|
|
stat = asn1PD_H245CapabilityTableEntryNumber (pctxt, &pvalue->u.highestEntryNumberProcessed);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "highestEntryNumberProcessed", -1);
|
|
|
|
break;
|
|
|
|
/* noneProcessed */
|
|
case 1:
|
|
invokeStartElement (pctxt, "noneProcessed", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "noneProcessed", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TerminalCapabilitySetReject_cause */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TerminalCapabilitySetReject_cause (OOCTXT* pctxt, H245TerminalCapabilitySetReject_cause* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* unspecified */
|
|
case 0:
|
|
invokeStartElement (pctxt, "unspecified", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "unspecified", -1);
|
|
|
|
break;
|
|
|
|
/* undefinedTableEntryUsed */
|
|
case 1:
|
|
invokeStartElement (pctxt, "undefinedTableEntryUsed", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "undefinedTableEntryUsed", -1);
|
|
|
|
break;
|
|
|
|
/* descriptorCapacityExceeded */
|
|
case 2:
|
|
invokeStartElement (pctxt, "descriptorCapacityExceeded", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "descriptorCapacityExceeded", -1);
|
|
|
|
break;
|
|
|
|
/* tableEntryCapacityExceeded */
|
|
case 3:
|
|
invokeStartElement (pctxt, "tableEntryCapacityExceeded", -1);
|
|
|
|
pvalue->u.tableEntryCapacityExceeded = ALLOC_ASN1ELEM (pctxt, H245TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded);
|
|
|
|
stat = asn1PD_H245TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded (pctxt, pvalue->u.tableEntryCapacityExceeded);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "tableEntryCapacityExceeded", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 5;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TerminalCapabilitySetReject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TerminalCapabilitySetReject (OOCTXT* pctxt, H245TerminalCapabilitySetReject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->sequenceNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
/* decode cause */
|
|
|
|
invokeStartElement (pctxt, "cause", -1);
|
|
|
|
stat = asn1PD_H245TerminalCapabilitySetReject_cause (pctxt, &pvalue->cause);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "cause", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* OpenLogicalChannelAck_reverseLogicalChannelParameters_mu */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters (OOCTXT* pctxt, H245OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* h222LogicalChannelParameters */
|
|
case 0:
|
|
invokeStartElement (pctxt, "h222LogicalChannelParameters", -1);
|
|
|
|
pvalue->u.h222LogicalChannelParameters = ALLOC_ASN1ELEM (pctxt, H245H222LogicalChannelParameters);
|
|
|
|
stat = asn1PD_H245H222LogicalChannelParameters (pctxt, pvalue->u.h222LogicalChannelParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h222LogicalChannelParameters", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 2;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* h2250LogicalChannelParameters */
|
|
case 2:
|
|
invokeStartElement (pctxt, "h2250LogicalChannelParameters", -1);
|
|
|
|
pvalue->u.h2250LogicalChannelParameters = ALLOC_ASN1ELEM (pctxt, H245H2250LogicalChannelParameters);
|
|
|
|
stat = asn1PD_H245H2250LogicalChannelParameters (pctxt, pvalue->u.h2250LogicalChannelParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h2250LogicalChannelParameters", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* OpenLogicalChannelAck_reverseLogicalChannelParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245OpenLogicalChannelAck_reverseLogicalChannelParameters (OOCTXT* pctxt, H245OpenLogicalChannelAck_reverseLogicalChannelParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.portNumberPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.multiplexParametersPresent = optbit;
|
|
|
|
/* decode reverseLogicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "reverseLogicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->reverseLogicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "reverseLogicalChannelNumber", -1);
|
|
|
|
/* decode portNumber */
|
|
|
|
if (pvalue->m.portNumberPresent) {
|
|
invokeStartElement (pctxt, "portNumber", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->portNumber, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->portNumber);
|
|
|
|
invokeEndElement (pctxt, "portNumber", -1);
|
|
}
|
|
|
|
/* decode multiplexParameters */
|
|
|
|
if (pvalue->m.multiplexParametersPresent) {
|
|
invokeStartElement (pctxt, "multiplexParameters", -1);
|
|
|
|
stat = asn1PD_H245OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters (pctxt, &pvalue->multiplexParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexParameters", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 1 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.replacementForPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "replacementFor", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->replacementFor);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "replacementFor", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H2250LogicalChannelAckParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H2250LogicalChannelAckParameters (OOCTXT* pctxt, H245H2250LogicalChannelAckParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.nonStandardPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.sessionIDPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.mediaChannelPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.mediaControlChannelPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.dynamicRTPPayloadTypePresent = optbit;
|
|
|
|
/* decode nonStandard */
|
|
|
|
if (pvalue->m.nonStandardPresent) {
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
stat = asn1PD_H245_SeqOfH245NonStandardParameter (pctxt, &pvalue->nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
}
|
|
|
|
/* decode sessionID */
|
|
|
|
if (pvalue->m.sessionIDPresent) {
|
|
invokeStartElement (pctxt, "sessionID", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->sessionID, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sessionID);
|
|
|
|
invokeEndElement (pctxt, "sessionID", -1);
|
|
}
|
|
|
|
/* decode mediaChannel */
|
|
|
|
if (pvalue->m.mediaChannelPresent) {
|
|
invokeStartElement (pctxt, "mediaChannel", -1);
|
|
|
|
stat = asn1PD_H245TransportAddress (pctxt, &pvalue->mediaChannel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaChannel", -1);
|
|
}
|
|
|
|
/* decode mediaControlChannel */
|
|
|
|
if (pvalue->m.mediaControlChannelPresent) {
|
|
invokeStartElement (pctxt, "mediaControlChannel", -1);
|
|
|
|
stat = asn1PD_H245TransportAddress (pctxt, &pvalue->mediaControlChannel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaControlChannel", -1);
|
|
}
|
|
|
|
/* decode dynamicRTPPayloadType */
|
|
|
|
if (pvalue->m.dynamicRTPPayloadTypePresent) {
|
|
invokeStartElement (pctxt, "dynamicRTPPayloadType", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->dynamicRTPPayloadType, 96U, 127U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->dynamicRTPPayloadType);
|
|
|
|
invokeEndElement (pctxt, "dynamicRTPPayloadType", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 2 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.flowControlToZeroPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "flowControlToZero", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->flowControlToZero);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->flowControlToZero);
|
|
|
|
invokeEndElement (pctxt, "flowControlToZero", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.portNumberPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "portNumber", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->portNumber, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->portNumber);
|
|
|
|
invokeEndElement (pctxt, "portNumber", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* OpenLogicalChannelAck_forwardMultiplexAckParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245OpenLogicalChannelAck_forwardMultiplexAckParameters (OOCTXT* pctxt, H245OpenLogicalChannelAck_forwardMultiplexAckParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* h2250LogicalChannelAckParameters */
|
|
case 0:
|
|
invokeStartElement (pctxt, "h2250LogicalChannelAckParameters", -1);
|
|
|
|
pvalue->u.h2250LogicalChannelAckParameters = ALLOC_ASN1ELEM (pctxt, H245H2250LogicalChannelAckParameters);
|
|
|
|
stat = asn1PD_H245H2250LogicalChannelAckParameters (pctxt, pvalue->u.h2250LogicalChannelAckParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h2250LogicalChannelAckParameters", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 2;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* OpenLogicalChannelAck */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245OpenLogicalChannelAck (OOCTXT* pctxt, H245OpenLogicalChannelAck* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.reverseLogicalChannelParametersPresent = optbit;
|
|
|
|
/* decode forwardLogicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->forwardLogicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
/* decode reverseLogicalChannelParameters */
|
|
|
|
if (pvalue->m.reverseLogicalChannelParametersPresent) {
|
|
invokeStartElement (pctxt, "reverseLogicalChannelParameters", -1);
|
|
|
|
stat = asn1PD_H245OpenLogicalChannelAck_reverseLogicalChannelParameters (pctxt, &pvalue->reverseLogicalChannelParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "reverseLogicalChannelParameters", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 3 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.separateStackPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "separateStack", -1);
|
|
|
|
stat = asn1PD_H245NetworkAccessParameters (pctxt, &pvalue->separateStack);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "separateStack", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.forwardMultiplexAckParametersPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "forwardMultiplexAckParameters", -1);
|
|
|
|
stat = asn1PD_H245OpenLogicalChannelAck_forwardMultiplexAckParameters (pctxt, &pvalue->forwardMultiplexAckParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "forwardMultiplexAckParameters", -1);
|
|
break;
|
|
|
|
case 2:
|
|
pvalue->m.encryptionSyncPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "encryptionSync", -1);
|
|
|
|
stat = asn1PD_H245EncryptionSync (pctxt, &pvalue->encryptionSync);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "encryptionSync", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* OpenLogicalChannelReject_cause */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245OpenLogicalChannelReject_cause (OOCTXT* pctxt, H245OpenLogicalChannelReject_cause* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 5);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* unspecified */
|
|
case 0:
|
|
invokeStartElement (pctxt, "unspecified", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "unspecified", -1);
|
|
|
|
break;
|
|
|
|
/* unsuitableReverseParameters */
|
|
case 1:
|
|
invokeStartElement (pctxt, "unsuitableReverseParameters", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "unsuitableReverseParameters", -1);
|
|
|
|
break;
|
|
|
|
/* dataTypeNotSupported */
|
|
case 2:
|
|
invokeStartElement (pctxt, "dataTypeNotSupported", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "dataTypeNotSupported", -1);
|
|
|
|
break;
|
|
|
|
/* dataTypeNotAvailable */
|
|
case 3:
|
|
invokeStartElement (pctxt, "dataTypeNotAvailable", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "dataTypeNotAvailable", -1);
|
|
|
|
break;
|
|
|
|
/* unknownDataType */
|
|
case 4:
|
|
invokeStartElement (pctxt, "unknownDataType", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "unknownDataType", -1);
|
|
|
|
break;
|
|
|
|
/* dataTypeALCombinationNotSupported */
|
|
case 5:
|
|
invokeStartElement (pctxt, "dataTypeALCombinationNotSupported", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "dataTypeALCombinationNotSupported", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 7;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* multicastChannelNotAllowed */
|
|
case 7:
|
|
invokeStartElement (pctxt, "multicastChannelNotAllowed", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "multicastChannelNotAllowed", -1);
|
|
|
|
break;
|
|
|
|
/* insufficientBandwidth */
|
|
case 8:
|
|
invokeStartElement (pctxt, "insufficientBandwidth", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "insufficientBandwidth", -1);
|
|
|
|
break;
|
|
|
|
/* separateStackEstablishmentFailed */
|
|
case 9:
|
|
invokeStartElement (pctxt, "separateStackEstablishmentFailed", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "separateStackEstablishmentFailed", -1);
|
|
|
|
break;
|
|
|
|
/* invalidSessionID */
|
|
case 10:
|
|
invokeStartElement (pctxt, "invalidSessionID", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "invalidSessionID", -1);
|
|
|
|
break;
|
|
|
|
/* masterSlaveConflict */
|
|
case 11:
|
|
invokeStartElement (pctxt, "masterSlaveConflict", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "masterSlaveConflict", -1);
|
|
|
|
break;
|
|
|
|
/* waitForCommunicationMode */
|
|
case 12:
|
|
invokeStartElement (pctxt, "waitForCommunicationMode", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "waitForCommunicationMode", -1);
|
|
|
|
break;
|
|
|
|
/* invalidDependentChannel */
|
|
case 13:
|
|
invokeStartElement (pctxt, "invalidDependentChannel", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "invalidDependentChannel", -1);
|
|
|
|
break;
|
|
|
|
/* replacementForRejected */
|
|
case 14:
|
|
invokeStartElement (pctxt, "replacementForRejected", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "replacementForRejected", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* OpenLogicalChannelReject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245OpenLogicalChannelReject (OOCTXT* pctxt, H245OpenLogicalChannelReject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode forwardLogicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->forwardLogicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
/* decode cause */
|
|
|
|
invokeStartElement (pctxt, "cause", -1);
|
|
|
|
stat = asn1PD_H245OpenLogicalChannelReject_cause (pctxt, &pvalue->cause);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "cause", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CloseLogicalChannelAck */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CloseLogicalChannelAck (OOCTXT* pctxt, H245CloseLogicalChannelAck* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode forwardLogicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->forwardLogicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestChannelCloseAck */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestChannelCloseAck (OOCTXT* pctxt, H245RequestChannelCloseAck* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode forwardLogicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->forwardLogicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestChannelCloseReject_cause */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestChannelCloseReject_cause (OOCTXT* pctxt, H245RequestChannelCloseReject_cause* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* unspecified */
|
|
case 0:
|
|
invokeStartElement (pctxt, "unspecified", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "unspecified", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 2;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestChannelCloseReject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestChannelCloseReject (OOCTXT* pctxt, H245RequestChannelCloseReject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode forwardLogicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->forwardLogicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
/* decode cause */
|
|
|
|
invokeStartElement (pctxt, "cause", -1);
|
|
|
|
stat = asn1PD_H245RequestChannelCloseReject_cause (pctxt, &pvalue->cause);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "cause", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexEntrySendAck_multiplexTableEntryNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexEntrySendAck_multiplexTableEntryNumber (OOCTXT* pctxt, H245MultiplexEntrySendAck_multiplexTableEntryNumber* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 15, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &pvalue->n);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
stat = asn1PD_H245MultiplexTableEntryNumber (pctxt, &pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexEntrySendAck */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexEntrySendAck (OOCTXT* pctxt, H245MultiplexEntrySendAck* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->sequenceNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
/* decode multiplexTableEntryNumber */
|
|
|
|
invokeStartElement (pctxt, "multiplexTableEntryNumber", -1);
|
|
|
|
stat = asn1PD_H245MultiplexEntrySendAck_multiplexTableEntryNumber (pctxt, &pvalue->multiplexTableEntryNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexTableEntryNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexEntryRejectionDescriptions_cause */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexEntryRejectionDescriptions_cause (OOCTXT* pctxt, H245MultiplexEntryRejectionDescriptions_cause* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* unspecifiedCause */
|
|
case 0:
|
|
invokeStartElement (pctxt, "unspecifiedCause", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "unspecifiedCause", -1);
|
|
|
|
break;
|
|
|
|
/* descriptorTooComplex */
|
|
case 1:
|
|
invokeStartElement (pctxt, "descriptorTooComplex", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "descriptorTooComplex", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexEntryRejectionDescriptions */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexEntryRejectionDescriptions (OOCTXT* pctxt, H245MultiplexEntryRejectionDescriptions* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode multiplexTableEntryNumber */
|
|
|
|
invokeStartElement (pctxt, "multiplexTableEntryNumber", -1);
|
|
|
|
stat = asn1PD_H245MultiplexTableEntryNumber (pctxt, &pvalue->multiplexTableEntryNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexTableEntryNumber", -1);
|
|
|
|
/* decode cause */
|
|
|
|
invokeStartElement (pctxt, "cause", -1);
|
|
|
|
stat = asn1PD_H245MultiplexEntryRejectionDescriptions_cause (pctxt, &pvalue->cause);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "cause", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexEntrySendReject_rejectionDescriptions */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexEntrySendReject_rejectionDescriptions (OOCTXT* pctxt, H245MultiplexEntrySendReject_rejectionDescriptions* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 15, 0 };
|
|
int stat = ASN_OK;
|
|
H245MultiplexEntryRejectionDescriptions* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245MultiplexEntryRejectionDescriptions);
|
|
|
|
stat = asn1PD_H245MultiplexEntryRejectionDescriptions (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexEntrySendReject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexEntrySendReject (OOCTXT* pctxt, H245MultiplexEntrySendReject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->sequenceNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
/* decode rejectionDescriptions */
|
|
|
|
invokeStartElement (pctxt, "rejectionDescriptions", -1);
|
|
|
|
stat = asn1PD_H245MultiplexEntrySendReject_rejectionDescriptions (pctxt, &pvalue->rejectionDescriptions);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "rejectionDescriptions", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestMultiplexEntryAck_entryNumbers */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestMultiplexEntryAck_entryNumbers (OOCTXT* pctxt, H245RequestMultiplexEntryAck_entryNumbers* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 15, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &pvalue->n);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
stat = asn1PD_H245MultiplexTableEntryNumber (pctxt, &pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestMultiplexEntryAck */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestMultiplexEntryAck (OOCTXT* pctxt, H245RequestMultiplexEntryAck* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode entryNumbers */
|
|
|
|
invokeStartElement (pctxt, "entryNumbers", -1);
|
|
|
|
stat = asn1PD_H245RequestMultiplexEntryAck_entryNumbers (pctxt, &pvalue->entryNumbers);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "entryNumbers", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestMultiplexEntryReject_entryNumbers */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestMultiplexEntryReject_entryNumbers (OOCTXT* pctxt, H245RequestMultiplexEntryReject_entryNumbers* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 15, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &pvalue->n);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
stat = asn1PD_H245MultiplexTableEntryNumber (pctxt, &pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestMultiplexEntryRejectionDescriptions_cause */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestMultiplexEntryRejectionDescriptions_cause (OOCTXT* pctxt, H245RequestMultiplexEntryRejectionDescriptions_cause* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* unspecifiedCause */
|
|
case 0:
|
|
invokeStartElement (pctxt, "unspecifiedCause", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "unspecifiedCause", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 2;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestMultiplexEntryRejectionDescriptions */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestMultiplexEntryRejectionDescriptions (OOCTXT* pctxt, H245RequestMultiplexEntryRejectionDescriptions* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode multiplexTableEntryNumber */
|
|
|
|
invokeStartElement (pctxt, "multiplexTableEntryNumber", -1);
|
|
|
|
stat = asn1PD_H245MultiplexTableEntryNumber (pctxt, &pvalue->multiplexTableEntryNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexTableEntryNumber", -1);
|
|
|
|
/* decode cause */
|
|
|
|
invokeStartElement (pctxt, "cause", -1);
|
|
|
|
stat = asn1PD_H245RequestMultiplexEntryRejectionDescriptions_cause (pctxt, &pvalue->cause);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "cause", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestMultiplexEntryReject_rejectionDescriptions */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestMultiplexEntryReject_rejectionDescriptions (OOCTXT* pctxt, H245RequestMultiplexEntryReject_rejectionDescriptions* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 15, 0 };
|
|
int stat = ASN_OK;
|
|
H245RequestMultiplexEntryRejectionDescriptions* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245RequestMultiplexEntryRejectionDescriptions);
|
|
|
|
stat = asn1PD_H245RequestMultiplexEntryRejectionDescriptions (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestMultiplexEntryReject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestMultiplexEntryReject (OOCTXT* pctxt, H245RequestMultiplexEntryReject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode entryNumbers */
|
|
|
|
invokeStartElement (pctxt, "entryNumbers", -1);
|
|
|
|
stat = asn1PD_H245RequestMultiplexEntryReject_entryNumbers (pctxt, &pvalue->entryNumbers);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "entryNumbers", -1);
|
|
|
|
/* decode rejectionDescriptions */
|
|
|
|
invokeStartElement (pctxt, "rejectionDescriptions", -1);
|
|
|
|
stat = asn1PD_H245RequestMultiplexEntryReject_rejectionDescriptions (pctxt, &pvalue->rejectionDescriptions);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "rejectionDescriptions", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestModeAck_response */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestModeAck_response (OOCTXT* pctxt, H245RequestModeAck_response* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* willTransmitMostPreferredMode */
|
|
case 0:
|
|
invokeStartElement (pctxt, "willTransmitMostPreferredMode", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "willTransmitMostPreferredMode", -1);
|
|
|
|
break;
|
|
|
|
/* willTransmitLessPreferredMode */
|
|
case 1:
|
|
invokeStartElement (pctxt, "willTransmitLessPreferredMode", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "willTransmitLessPreferredMode", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestModeAck */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestModeAck (OOCTXT* pctxt, H245RequestModeAck* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->sequenceNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
/* decode response */
|
|
|
|
invokeStartElement (pctxt, "response", -1);
|
|
|
|
stat = asn1PD_H245RequestModeAck_response (pctxt, &pvalue->response);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "response", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestModeReject_cause */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestModeReject_cause (OOCTXT* pctxt, H245RequestModeReject_cause* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* modeUnavailable */
|
|
case 0:
|
|
invokeStartElement (pctxt, "modeUnavailable", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "modeUnavailable", -1);
|
|
|
|
break;
|
|
|
|
/* multipointConstraint */
|
|
case 1:
|
|
invokeStartElement (pctxt, "multipointConstraint", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "multipointConstraint", -1);
|
|
|
|
break;
|
|
|
|
/* requestDenied */
|
|
case 2:
|
|
invokeStartElement (pctxt, "requestDenied", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "requestDenied", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestModeReject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestModeReject (OOCTXT* pctxt, H245RequestModeReject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->sequenceNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
/* decode cause */
|
|
|
|
invokeStartElement (pctxt, "cause", -1);
|
|
|
|
stat = asn1PD_H245RequestModeReject_cause (pctxt, &pvalue->cause);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "cause", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RoundTripDelayResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RoundTripDelayResponse (OOCTXT* pctxt, H245RoundTripDelayResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->sequenceNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MaintenanceLoopAck_type */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MaintenanceLoopAck_type (OOCTXT* pctxt, H245MaintenanceLoopAck_type* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* systemLoop */
|
|
case 0:
|
|
invokeStartElement (pctxt, "systemLoop", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "systemLoop", -1);
|
|
|
|
break;
|
|
|
|
/* mediaLoop */
|
|
case 1:
|
|
invokeStartElement (pctxt, "mediaLoop", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->u.mediaLoop);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaLoop", -1);
|
|
|
|
break;
|
|
|
|
/* logicalChannelLoop */
|
|
case 2:
|
|
invokeStartElement (pctxt, "logicalChannelLoop", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->u.logicalChannelLoop);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelLoop", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MaintenanceLoopAck */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MaintenanceLoopAck (OOCTXT* pctxt, H245MaintenanceLoopAck* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode type */
|
|
|
|
invokeStartElement (pctxt, "type", -1);
|
|
|
|
stat = asn1PD_H245MaintenanceLoopAck_type (pctxt, &pvalue->type);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "type", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MaintenanceLoopReject_type */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MaintenanceLoopReject_type (OOCTXT* pctxt, H245MaintenanceLoopReject_type* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* systemLoop */
|
|
case 0:
|
|
invokeStartElement (pctxt, "systemLoop", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "systemLoop", -1);
|
|
|
|
break;
|
|
|
|
/* mediaLoop */
|
|
case 1:
|
|
invokeStartElement (pctxt, "mediaLoop", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->u.mediaLoop);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaLoop", -1);
|
|
|
|
break;
|
|
|
|
/* logicalChannelLoop */
|
|
case 2:
|
|
invokeStartElement (pctxt, "logicalChannelLoop", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->u.logicalChannelLoop);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelLoop", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MaintenanceLoopReject_cause */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MaintenanceLoopReject_cause (OOCTXT* pctxt, H245MaintenanceLoopReject_cause* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* canNotPerformLoop */
|
|
case 0:
|
|
invokeStartElement (pctxt, "canNotPerformLoop", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "canNotPerformLoop", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 2;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MaintenanceLoopReject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MaintenanceLoopReject (OOCTXT* pctxt, H245MaintenanceLoopReject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode type */
|
|
|
|
invokeStartElement (pctxt, "type", -1);
|
|
|
|
stat = asn1PD_H245MaintenanceLoopReject_type (pctxt, &pvalue->type);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "type", -1);
|
|
|
|
/* decode cause */
|
|
|
|
invokeStartElement (pctxt, "cause", -1);
|
|
|
|
stat = asn1PD_H245MaintenanceLoopReject_cause (pctxt, &pvalue->cause);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "cause", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CommunicationModeTableEntry_dataType */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CommunicationModeTableEntry_dataType (OOCTXT* pctxt, H245CommunicationModeTableEntry_dataType* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* videoData */
|
|
case 0:
|
|
invokeStartElement (pctxt, "videoData", -1);
|
|
|
|
pvalue->u.videoData = ALLOC_ASN1ELEM (pctxt, H245VideoCapability);
|
|
|
|
stat = asn1PD_H245VideoCapability (pctxt, pvalue->u.videoData);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "videoData", -1);
|
|
|
|
break;
|
|
|
|
/* audioData */
|
|
case 1:
|
|
invokeStartElement (pctxt, "audioData", -1);
|
|
|
|
pvalue->u.audioData = ALLOC_ASN1ELEM (pctxt, H245AudioCapability);
|
|
|
|
stat = asn1PD_H245AudioCapability (pctxt, pvalue->u.audioData);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "audioData", -1);
|
|
|
|
break;
|
|
|
|
/* data */
|
|
case 2:
|
|
invokeStartElement (pctxt, "data", -1);
|
|
|
|
pvalue->u.data = ALLOC_ASN1ELEM (pctxt, H245DataApplicationCapability);
|
|
|
|
stat = asn1PD_H245DataApplicationCapability (pctxt, pvalue->u.data);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "data", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CommunicationModeTableEntry */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CommunicationModeTableEntry (OOCTXT* pctxt, H245CommunicationModeTableEntry* pvalue)
|
|
{
|
|
static Asn1SizeCnst sessionDescription_lsize1 = { 0, 1, 128, 0 };
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.nonStandardPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.associatedSessionIDPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.terminalLabelPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.mediaChannelPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.mediaGuaranteedDeliveryPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.mediaControlChannelPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.mediaControlGuaranteedDeliveryPresent = optbit;
|
|
|
|
/* decode nonStandard */
|
|
|
|
if (pvalue->m.nonStandardPresent) {
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
stat = asn1PD_H245_SeqOfH245NonStandardParameter (pctxt, &pvalue->nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
}
|
|
|
|
/* decode sessionID */
|
|
|
|
invokeStartElement (pctxt, "sessionID", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->sessionID, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sessionID);
|
|
|
|
invokeEndElement (pctxt, "sessionID", -1);
|
|
|
|
/* decode associatedSessionID */
|
|
|
|
if (pvalue->m.associatedSessionIDPresent) {
|
|
invokeStartElement (pctxt, "associatedSessionID", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->associatedSessionID, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->associatedSessionID);
|
|
|
|
invokeEndElement (pctxt, "associatedSessionID", -1);
|
|
}
|
|
|
|
/* decode terminalLabel */
|
|
|
|
if (pvalue->m.terminalLabelPresent) {
|
|
invokeStartElement (pctxt, "terminalLabel", -1);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, &pvalue->terminalLabel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalLabel", -1);
|
|
}
|
|
|
|
/* decode sessionDescription */
|
|
|
|
invokeStartElement (pctxt, "sessionDescription", -1);
|
|
|
|
addSizeConstraint (pctxt, &sessionDescription_lsize1);
|
|
|
|
stat = decodeBMPString (pctxt, &pvalue->sessionDescription, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeCharStr16BitValue (pctxt, pvalue->sessionDescription.nchars, pvalue->sessionDescription.data);
|
|
|
|
invokeEndElement (pctxt, "sessionDescription", -1);
|
|
|
|
/* decode dataType */
|
|
|
|
invokeStartElement (pctxt, "dataType", -1);
|
|
|
|
stat = asn1PD_H245CommunicationModeTableEntry_dataType (pctxt, &pvalue->dataType);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "dataType", -1);
|
|
|
|
/* decode mediaChannel */
|
|
|
|
if (pvalue->m.mediaChannelPresent) {
|
|
invokeStartElement (pctxt, "mediaChannel", -1);
|
|
|
|
stat = asn1PD_H245TransportAddress (pctxt, &pvalue->mediaChannel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaChannel", -1);
|
|
}
|
|
|
|
/* decode mediaGuaranteedDelivery */
|
|
|
|
if (pvalue->m.mediaGuaranteedDeliveryPresent) {
|
|
invokeStartElement (pctxt, "mediaGuaranteedDelivery", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->mediaGuaranteedDelivery);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->mediaGuaranteedDelivery);
|
|
|
|
invokeEndElement (pctxt, "mediaGuaranteedDelivery", -1);
|
|
}
|
|
|
|
/* decode mediaControlChannel */
|
|
|
|
if (pvalue->m.mediaControlChannelPresent) {
|
|
invokeStartElement (pctxt, "mediaControlChannel", -1);
|
|
|
|
stat = asn1PD_H245TransportAddress (pctxt, &pvalue->mediaControlChannel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mediaControlChannel", -1);
|
|
}
|
|
|
|
/* decode mediaControlGuaranteedDelivery */
|
|
|
|
if (pvalue->m.mediaControlGuaranteedDeliveryPresent) {
|
|
invokeStartElement (pctxt, "mediaControlGuaranteedDelivery", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->mediaControlGuaranteedDelivery);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->mediaControlGuaranteedDelivery);
|
|
|
|
invokeEndElement (pctxt, "mediaControlGuaranteedDelivery", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 3 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.redundancyEncodingPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "redundancyEncoding", -1);
|
|
|
|
stat = asn1PD_H245RedundancyEncoding (pctxt, &pvalue->redundancyEncoding);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "redundancyEncoding", -1);
|
|
break;
|
|
|
|
case 1:
|
|
pvalue->m.sessionDependencyPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "sessionDependency", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->sessionDependency, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sessionDependency);
|
|
|
|
invokeEndElement (pctxt, "sessionDependency", -1);
|
|
break;
|
|
|
|
case 2:
|
|
pvalue->m.destinationPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "destination", -1);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, &pvalue->destination);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "destination", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CommunicationModeResponse_communicationModeTable */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CommunicationModeResponse_communicationModeTable (OOCTXT* pctxt, H245CommunicationModeResponse_communicationModeTable* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245CommunicationModeTableEntry* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245CommunicationModeTableEntry);
|
|
|
|
stat = asn1PD_H245CommunicationModeTableEntry (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CommunicationModeResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CommunicationModeResponse (OOCTXT* pctxt, H245CommunicationModeResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 0);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* communicationModeTable */
|
|
case 0:
|
|
invokeStartElement (pctxt, "communicationModeTable", -1);
|
|
|
|
pvalue->u.communicationModeTable = ALLOC_ASN1ELEM (pctxt, H245CommunicationModeResponse_communicationModeTable);
|
|
|
|
stat = asn1PD_H245CommunicationModeResponse_communicationModeTable (pctxt, pvalue->u.communicationModeTable);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "communicationModeTable", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 2;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TerminalID */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TerminalID (OOCTXT* pctxt, H245TerminalID* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 128, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceResponse_mCTerminalIDResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceResponse_mCTerminalIDResponse (OOCTXT* pctxt, H245ConferenceResponse_mCTerminalIDResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode terminalLabel */
|
|
|
|
invokeStartElement (pctxt, "terminalLabel", -1);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, &pvalue->terminalLabel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalLabel", -1);
|
|
|
|
/* decode terminalID */
|
|
|
|
invokeStartElement (pctxt, "terminalID", -1);
|
|
|
|
stat = asn1PD_H245TerminalID (pctxt, &pvalue->terminalID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalID", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceResponse_terminalIDResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceResponse_terminalIDResponse (OOCTXT* pctxt, H245ConferenceResponse_terminalIDResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode terminalLabel */
|
|
|
|
invokeStartElement (pctxt, "terminalLabel", -1);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, &pvalue->terminalLabel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalLabel", -1);
|
|
|
|
/* decode terminalID */
|
|
|
|
invokeStartElement (pctxt, "terminalID", -1);
|
|
|
|
stat = asn1PD_H245TerminalID (pctxt, &pvalue->terminalID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalID", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceID */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceID (OOCTXT* pctxt, H245ConferenceID* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 32, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceResponse_conferenceIDResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceResponse_conferenceIDResponse (OOCTXT* pctxt, H245ConferenceResponse_conferenceIDResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode terminalLabel */
|
|
|
|
invokeStartElement (pctxt, "terminalLabel", -1);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, &pvalue->terminalLabel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalLabel", -1);
|
|
|
|
/* decode conferenceID */
|
|
|
|
invokeStartElement (pctxt, "conferenceID", -1);
|
|
|
|
stat = asn1PD_H245ConferenceID (pctxt, &pvalue->conferenceID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "conferenceID", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* Password */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245Password (OOCTXT* pctxt, H245Password* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 32, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceResponse_passwordResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceResponse_passwordResponse (OOCTXT* pctxt, H245ConferenceResponse_passwordResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode terminalLabel */
|
|
|
|
invokeStartElement (pctxt, "terminalLabel", -1);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, &pvalue->terminalLabel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalLabel", -1);
|
|
|
|
/* decode password */
|
|
|
|
invokeStartElement (pctxt, "password", -1);
|
|
|
|
stat = asn1PD_H245Password (pctxt, &pvalue->password);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "password", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceResponse_terminalListResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceResponse_terminalListResponse (OOCTXT* pctxt, H245ConferenceResponse_terminalListResponse* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245TerminalLabel* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245TerminalLabel);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceResponse_makeMeChairResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceResponse_makeMeChairResponse (OOCTXT* pctxt, H245ConferenceResponse_makeMeChairResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* grantedChairToken */
|
|
case 0:
|
|
invokeStartElement (pctxt, "grantedChairToken", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "grantedChairToken", -1);
|
|
|
|
break;
|
|
|
|
/* deniedChairToken */
|
|
case 1:
|
|
invokeStartElement (pctxt, "deniedChairToken", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "deniedChairToken", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceResponse_extensionAddressResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceResponse_extensionAddressResponse (OOCTXT* pctxt, H245ConferenceResponse_extensionAddressResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode extensionAddress */
|
|
|
|
invokeStartElement (pctxt, "extensionAddress", -1);
|
|
|
|
stat = asn1PD_H245TerminalID (pctxt, &pvalue->extensionAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "extensionAddress", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceResponse_chairTokenOwnerResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceResponse_chairTokenOwnerResponse (OOCTXT* pctxt, H245ConferenceResponse_chairTokenOwnerResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode terminalLabel */
|
|
|
|
invokeStartElement (pctxt, "terminalLabel", -1);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, &pvalue->terminalLabel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalLabel", -1);
|
|
|
|
/* decode terminalID */
|
|
|
|
invokeStartElement (pctxt, "terminalID", -1);
|
|
|
|
stat = asn1PD_H245TerminalID (pctxt, &pvalue->terminalID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalID", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceResponse_terminalCertificateResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceResponse_terminalCertificateResponse (OOCTXT* pctxt, H245ConferenceResponse_terminalCertificateResponse* pvalue)
|
|
{
|
|
static Asn1SizeCnst certificateResponse_lsize1 = { 0, 1, 65535, 0 };
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.terminalLabelPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.certificateResponsePresent = optbit;
|
|
|
|
/* decode terminalLabel */
|
|
|
|
if (pvalue->m.terminalLabelPresent) {
|
|
invokeStartElement (pctxt, "terminalLabel", -1);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, &pvalue->terminalLabel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalLabel", -1);
|
|
}
|
|
|
|
/* decode certificateResponse */
|
|
|
|
if (pvalue->m.certificateResponsePresent) {
|
|
invokeStartElement (pctxt, "certificateResponse", -1);
|
|
|
|
addSizeConstraint (pctxt, &certificateResponse_lsize1);
|
|
|
|
stat = decodeDynOctetString (pctxt, (ASN1DynOctStr*)&pvalue->certificateResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->certificateResponse.numocts, pvalue->certificateResponse.data);
|
|
|
|
invokeEndElement (pctxt, "certificateResponse", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceResponse_broadcastMyLogicalChannelResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceResponse_broadcastMyLogicalChannelResponse (OOCTXT* pctxt, H245ConferenceResponse_broadcastMyLogicalChannelResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* grantedBroadcastMyLogicalChannel */
|
|
case 0:
|
|
invokeStartElement (pctxt, "grantedBroadcastMyLogicalChannel", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "grantedBroadcastMyLogicalChannel", -1);
|
|
|
|
break;
|
|
|
|
/* deniedBroadcastMyLogicalChannel */
|
|
case 1:
|
|
invokeStartElement (pctxt, "deniedBroadcastMyLogicalChannel", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "deniedBroadcastMyLogicalChannel", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceResponse_makeTerminalBroadcasterResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceResponse_makeTerminalBroadcasterResponse (OOCTXT* pctxt, H245ConferenceResponse_makeTerminalBroadcasterResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* grantedMakeTerminalBroadcaster */
|
|
case 0:
|
|
invokeStartElement (pctxt, "grantedMakeTerminalBroadcaster", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "grantedMakeTerminalBroadcaster", -1);
|
|
|
|
break;
|
|
|
|
/* deniedMakeTerminalBroadcaster */
|
|
case 1:
|
|
invokeStartElement (pctxt, "deniedMakeTerminalBroadcaster", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "deniedMakeTerminalBroadcaster", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceResponse_sendThisSourceResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceResponse_sendThisSourceResponse (OOCTXT* pctxt, H245ConferenceResponse_sendThisSourceResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* grantedSendThisSource */
|
|
case 0:
|
|
invokeStartElement (pctxt, "grantedSendThisSource", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "grantedSendThisSource", -1);
|
|
|
|
break;
|
|
|
|
/* deniedSendThisSource */
|
|
case 1:
|
|
invokeStartElement (pctxt, "deniedSendThisSource", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "deniedSendThisSource", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TerminalInformation */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TerminalInformation (OOCTXT* pctxt, H245TerminalInformation* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode terminalLabel */
|
|
|
|
invokeStartElement (pctxt, "terminalLabel", -1);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, &pvalue->terminalLabel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalLabel", -1);
|
|
|
|
/* decode terminalID */
|
|
|
|
invokeStartElement (pctxt, "terminalID", -1);
|
|
|
|
stat = asn1PD_H245TerminalID (pctxt, &pvalue->terminalID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalID", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH245TerminalInformation */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245_SeqOfH245TerminalInformation (OOCTXT* pctxt, H245_SeqOfH245TerminalInformation* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
H245TerminalInformation* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
int lstat;
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (;;) {
|
|
/* decode length determinant */
|
|
|
|
lstat = decodeLength (pctxt, &count);
|
|
if (lstat != ASN_OK && lstat != ASN_OK_FRAG) {
|
|
return lstat;
|
|
}
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245TerminalInformation);
|
|
|
|
stat = asn1PD_H245TerminalInformation (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
if(lstat == ASN_OK) break;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestAllTerminalIDsResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestAllTerminalIDsResponse (OOCTXT* pctxt, H245RequestAllTerminalIDsResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode terminalInformation */
|
|
|
|
invokeStartElement (pctxt, "terminalInformation", -1);
|
|
|
|
stat = asn1PD_H245_SeqOfH245TerminalInformation (pctxt, &pvalue->terminalInformation);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalInformation", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RemoteMCResponse_reject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RemoteMCResponse_reject (OOCTXT* pctxt, H245RemoteMCResponse_reject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* unspecified */
|
|
case 0:
|
|
invokeStartElement (pctxt, "unspecified", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "unspecified", -1);
|
|
|
|
break;
|
|
|
|
/* functionNotSupported */
|
|
case 1:
|
|
invokeStartElement (pctxt, "functionNotSupported", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "functionNotSupported", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RemoteMCResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RemoteMCResponse (OOCTXT* pctxt, H245RemoteMCResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* accept */
|
|
case 0:
|
|
invokeStartElement (pctxt, "accept", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "accept", -1);
|
|
|
|
break;
|
|
|
|
/* reject */
|
|
case 1:
|
|
invokeStartElement (pctxt, "reject", -1);
|
|
|
|
pvalue->u.reject = ALLOC_ASN1ELEM (pctxt, H245RemoteMCResponse_reject);
|
|
|
|
stat = asn1PD_H245RemoteMCResponse_reject (pctxt, pvalue->u.reject);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "reject", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceResponse (OOCTXT* pctxt, H245ConferenceResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* mCTerminalIDResponse */
|
|
case 0:
|
|
invokeStartElement (pctxt, "mCTerminalIDResponse", -1);
|
|
|
|
pvalue->u.mCTerminalIDResponse = ALLOC_ASN1ELEM (pctxt, H245ConferenceResponse_mCTerminalIDResponse);
|
|
|
|
stat = asn1PD_H245ConferenceResponse_mCTerminalIDResponse (pctxt, pvalue->u.mCTerminalIDResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mCTerminalIDResponse", -1);
|
|
|
|
break;
|
|
|
|
/* terminalIDResponse */
|
|
case 1:
|
|
invokeStartElement (pctxt, "terminalIDResponse", -1);
|
|
|
|
pvalue->u.terminalIDResponse = ALLOC_ASN1ELEM (pctxt, H245ConferenceResponse_terminalIDResponse);
|
|
|
|
stat = asn1PD_H245ConferenceResponse_terminalIDResponse (pctxt, pvalue->u.terminalIDResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalIDResponse", -1);
|
|
|
|
break;
|
|
|
|
/* conferenceIDResponse */
|
|
case 2:
|
|
invokeStartElement (pctxt, "conferenceIDResponse", -1);
|
|
|
|
pvalue->u.conferenceIDResponse = ALLOC_ASN1ELEM (pctxt, H245ConferenceResponse_conferenceIDResponse);
|
|
|
|
stat = asn1PD_H245ConferenceResponse_conferenceIDResponse (pctxt, pvalue->u.conferenceIDResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "conferenceIDResponse", -1);
|
|
|
|
break;
|
|
|
|
/* passwordResponse */
|
|
case 3:
|
|
invokeStartElement (pctxt, "passwordResponse", -1);
|
|
|
|
pvalue->u.passwordResponse = ALLOC_ASN1ELEM (pctxt, H245ConferenceResponse_passwordResponse);
|
|
|
|
stat = asn1PD_H245ConferenceResponse_passwordResponse (pctxt, pvalue->u.passwordResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "passwordResponse", -1);
|
|
|
|
break;
|
|
|
|
/* terminalListResponse */
|
|
case 4:
|
|
invokeStartElement (pctxt, "terminalListResponse", -1);
|
|
|
|
pvalue->u.terminalListResponse = ALLOC_ASN1ELEM (pctxt, H245ConferenceResponse_terminalListResponse);
|
|
|
|
stat = asn1PD_H245ConferenceResponse_terminalListResponse (pctxt, pvalue->u.terminalListResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalListResponse", -1);
|
|
|
|
break;
|
|
|
|
/* videoCommandReject */
|
|
case 5:
|
|
invokeStartElement (pctxt, "videoCommandReject", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "videoCommandReject", -1);
|
|
|
|
break;
|
|
|
|
/* terminalDropReject */
|
|
case 6:
|
|
invokeStartElement (pctxt, "terminalDropReject", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "terminalDropReject", -1);
|
|
|
|
break;
|
|
|
|
/* makeMeChairResponse */
|
|
case 7:
|
|
invokeStartElement (pctxt, "makeMeChairResponse", -1);
|
|
|
|
pvalue->u.makeMeChairResponse = ALLOC_ASN1ELEM (pctxt, H245ConferenceResponse_makeMeChairResponse);
|
|
|
|
stat = asn1PD_H245ConferenceResponse_makeMeChairResponse (pctxt, pvalue->u.makeMeChairResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "makeMeChairResponse", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 9;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* extensionAddressResponse */
|
|
case 9:
|
|
invokeStartElement (pctxt, "extensionAddressResponse", -1);
|
|
|
|
pvalue->u.extensionAddressResponse = ALLOC_ASN1ELEM (pctxt, H245ConferenceResponse_extensionAddressResponse);
|
|
|
|
stat = asn1PD_H245ConferenceResponse_extensionAddressResponse (pctxt, pvalue->u.extensionAddressResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "extensionAddressResponse", -1);
|
|
|
|
break;
|
|
|
|
/* chairTokenOwnerResponse */
|
|
case 10:
|
|
invokeStartElement (pctxt, "chairTokenOwnerResponse", -1);
|
|
|
|
pvalue->u.chairTokenOwnerResponse = ALLOC_ASN1ELEM (pctxt, H245ConferenceResponse_chairTokenOwnerResponse);
|
|
|
|
stat = asn1PD_H245ConferenceResponse_chairTokenOwnerResponse (pctxt, pvalue->u.chairTokenOwnerResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "chairTokenOwnerResponse", -1);
|
|
|
|
break;
|
|
|
|
/* terminalCertificateResponse */
|
|
case 11:
|
|
invokeStartElement (pctxt, "terminalCertificateResponse", -1);
|
|
|
|
pvalue->u.terminalCertificateResponse = ALLOC_ASN1ELEM (pctxt, H245ConferenceResponse_terminalCertificateResponse);
|
|
|
|
stat = asn1PD_H245ConferenceResponse_terminalCertificateResponse (pctxt, pvalue->u.terminalCertificateResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalCertificateResponse", -1);
|
|
|
|
break;
|
|
|
|
/* broadcastMyLogicalChannelResponse */
|
|
case 12:
|
|
invokeStartElement (pctxt, "broadcastMyLogicalChannelResponse", -1);
|
|
|
|
pvalue->u.broadcastMyLogicalChannelResponse = ALLOC_ASN1ELEM (pctxt, H245ConferenceResponse_broadcastMyLogicalChannelResponse);
|
|
|
|
stat = asn1PD_H245ConferenceResponse_broadcastMyLogicalChannelResponse (pctxt, pvalue->u.broadcastMyLogicalChannelResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "broadcastMyLogicalChannelResponse", -1);
|
|
|
|
break;
|
|
|
|
/* makeTerminalBroadcasterResponse */
|
|
case 13:
|
|
invokeStartElement (pctxt, "makeTerminalBroadcasterResponse", -1);
|
|
|
|
pvalue->u.makeTerminalBroadcasterResponse = ALLOC_ASN1ELEM (pctxt, H245ConferenceResponse_makeTerminalBroadcasterResponse);
|
|
|
|
stat = asn1PD_H245ConferenceResponse_makeTerminalBroadcasterResponse (pctxt, pvalue->u.makeTerminalBroadcasterResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "makeTerminalBroadcasterResponse", -1);
|
|
|
|
break;
|
|
|
|
/* sendThisSourceResponse */
|
|
case 14:
|
|
invokeStartElement (pctxt, "sendThisSourceResponse", -1);
|
|
|
|
pvalue->u.sendThisSourceResponse = ALLOC_ASN1ELEM (pctxt, H245ConferenceResponse_sendThisSourceResponse);
|
|
|
|
stat = asn1PD_H245ConferenceResponse_sendThisSourceResponse (pctxt, pvalue->u.sendThisSourceResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sendThisSourceResponse", -1);
|
|
|
|
break;
|
|
|
|
/* requestAllTerminalIDsResponse */
|
|
case 15:
|
|
invokeStartElement (pctxt, "requestAllTerminalIDsResponse", -1);
|
|
|
|
pvalue->u.requestAllTerminalIDsResponse = ALLOC_ASN1ELEM (pctxt, H245RequestAllTerminalIDsResponse);
|
|
|
|
stat = asn1PD_H245RequestAllTerminalIDsResponse (pctxt, pvalue->u.requestAllTerminalIDsResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestAllTerminalIDsResponse", -1);
|
|
|
|
break;
|
|
|
|
/* remoteMCResponse */
|
|
case 16:
|
|
invokeStartElement (pctxt, "remoteMCResponse", -1);
|
|
|
|
pvalue->u.remoteMCResponse = ALLOC_ASN1ELEM (pctxt, H245RemoteMCResponse);
|
|
|
|
stat = asn1PD_H245RemoteMCResponse (pctxt, pvalue->u.remoteMCResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "remoteMCResponse", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultilinkResponse_callInformation */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultilinkResponse_callInformation (OOCTXT* pctxt, H245MultilinkResponse_callInformation* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode dialingInformation */
|
|
|
|
invokeStartElement (pctxt, "dialingInformation", -1);
|
|
|
|
stat = asn1PD_H245DialingInformation (pctxt, &pvalue->dialingInformation);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "dialingInformation", -1);
|
|
|
|
/* decode callAssociationNumber */
|
|
|
|
invokeStartElement (pctxt, "callAssociationNumber", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->callAssociationNumber, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->callAssociationNumber);
|
|
|
|
invokeEndElement (pctxt, "callAssociationNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultilinkResponse_addConnection_responseCode_rejected */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultilinkResponse_addConnection_responseCode_rejected (OOCTXT* pctxt, H245MultilinkResponse_addConnection_responseCode_rejected* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* connectionsNotAvailable */
|
|
case 0:
|
|
invokeStartElement (pctxt, "connectionsNotAvailable", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "connectionsNotAvailable", -1);
|
|
|
|
break;
|
|
|
|
/* userRejected */
|
|
case 1:
|
|
invokeStartElement (pctxt, "userRejected", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "userRejected", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultilinkResponse_addConnection_responseCode */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultilinkResponse_addConnection_responseCode (OOCTXT* pctxt, H245MultilinkResponse_addConnection_responseCode* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* accepted */
|
|
case 0:
|
|
invokeStartElement (pctxt, "accepted", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "accepted", -1);
|
|
|
|
break;
|
|
|
|
/* rejected */
|
|
case 1:
|
|
invokeStartElement (pctxt, "rejected", -1);
|
|
|
|
pvalue->u.rejected = ALLOC_ASN1ELEM (pctxt, H245MultilinkResponse_addConnection_responseCode_rejected);
|
|
|
|
stat = asn1PD_H245MultilinkResponse_addConnection_responseCode_rejected (pctxt, pvalue->u.rejected);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "rejected", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultilinkResponse_addConnection */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultilinkResponse_addConnection (OOCTXT* pctxt, H245MultilinkResponse_addConnection* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->sequenceNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
/* decode responseCode */
|
|
|
|
invokeStartElement (pctxt, "responseCode", -1);
|
|
|
|
stat = asn1PD_H245MultilinkResponse_addConnection_responseCode (pctxt, &pvalue->responseCode);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "responseCode", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultilinkResponse_removeConnection */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultilinkResponse_removeConnection (OOCTXT* pctxt, H245MultilinkResponse_removeConnection* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode connectionIdentifier */
|
|
|
|
invokeStartElement (pctxt, "connectionIdentifier", -1);
|
|
|
|
stat = asn1PD_H245ConnectionIdentifier (pctxt, &pvalue->connectionIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "connectionIdentifier", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultilinkResponse_maximumHeaderInterval */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultilinkResponse_maximumHeaderInterval (OOCTXT* pctxt, H245MultilinkResponse_maximumHeaderInterval* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode currentInterval */
|
|
|
|
invokeStartElement (pctxt, "currentInterval", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->currentInterval, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->currentInterval);
|
|
|
|
invokeEndElement (pctxt, "currentInterval", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultilinkResponse */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultilinkResponse (OOCTXT* pctxt, H245MultilinkResponse* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardMessage);
|
|
|
|
stat = asn1PD_H245NonStandardMessage (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* callInformation */
|
|
case 1:
|
|
invokeStartElement (pctxt, "callInformation", -1);
|
|
|
|
pvalue->u.callInformation = ALLOC_ASN1ELEM (pctxt, H245MultilinkResponse_callInformation);
|
|
|
|
stat = asn1PD_H245MultilinkResponse_callInformation (pctxt, pvalue->u.callInformation);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "callInformation", -1);
|
|
|
|
break;
|
|
|
|
/* addConnection */
|
|
case 2:
|
|
invokeStartElement (pctxt, "addConnection", -1);
|
|
|
|
pvalue->u.addConnection = ALLOC_ASN1ELEM (pctxt, H245MultilinkResponse_addConnection);
|
|
|
|
stat = asn1PD_H245MultilinkResponse_addConnection (pctxt, pvalue->u.addConnection);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "addConnection", -1);
|
|
|
|
break;
|
|
|
|
/* removeConnection */
|
|
case 3:
|
|
invokeStartElement (pctxt, "removeConnection", -1);
|
|
|
|
pvalue->u.removeConnection = ALLOC_ASN1ELEM (pctxt, H245MultilinkResponse_removeConnection);
|
|
|
|
stat = asn1PD_H245MultilinkResponse_removeConnection (pctxt, pvalue->u.removeConnection);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "removeConnection", -1);
|
|
|
|
break;
|
|
|
|
/* maximumHeaderInterval */
|
|
case 4:
|
|
invokeStartElement (pctxt, "maximumHeaderInterval", -1);
|
|
|
|
pvalue->u.maximumHeaderInterval = ALLOC_ASN1ELEM (pctxt, H245MultilinkResponse_maximumHeaderInterval);
|
|
|
|
stat = asn1PD_H245MultilinkResponse_maximumHeaderInterval (pctxt, pvalue->u.maximumHeaderInterval);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "maximumHeaderInterval", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 6;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* LogicalChannelRateAcknowledge */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245LogicalChannelRateAcknowledge (OOCTXT* pctxt, H245LogicalChannelRateAcknowledge* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->sequenceNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
/* decode logicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->logicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
/* decode maximumBitRate */
|
|
|
|
invokeStartElement (pctxt, "maximumBitRate", -1);
|
|
|
|
stat = asn1PD_H245MaximumBitRate (pctxt, &pvalue->maximumBitRate);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "maximumBitRate", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* LogicalChannelRateRejectReason */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245LogicalChannelRateRejectReason (OOCTXT* pctxt, H245LogicalChannelRateRejectReason* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* undefinedReason */
|
|
case 0:
|
|
invokeStartElement (pctxt, "undefinedReason", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "undefinedReason", -1);
|
|
|
|
break;
|
|
|
|
/* insufficientResources */
|
|
case 1:
|
|
invokeStartElement (pctxt, "insufficientResources", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "insufficientResources", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* LogicalChannelRateReject */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245LogicalChannelRateReject (OOCTXT* pctxt, H245LogicalChannelRateReject* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.currentMaximumBitRatePresent = optbit;
|
|
|
|
/* decode sequenceNumber */
|
|
|
|
invokeStartElement (pctxt, "sequenceNumber", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->sequenceNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sequenceNumber", -1);
|
|
|
|
/* decode logicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->logicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
/* decode rejectReason */
|
|
|
|
invokeStartElement (pctxt, "rejectReason", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelRateRejectReason (pctxt, &pvalue->rejectReason);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "rejectReason", -1);
|
|
|
|
/* decode currentMaximumBitRate */
|
|
|
|
if (pvalue->m.currentMaximumBitRatePresent) {
|
|
invokeStartElement (pctxt, "currentMaximumBitRate", -1);
|
|
|
|
stat = asn1PD_H245MaximumBitRate (pctxt, &pvalue->currentMaximumBitRate);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "currentMaximumBitRate", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ResponseMessage */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ResponseMessage (OOCTXT* pctxt, H245ResponseMessage* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 18);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardMessage);
|
|
|
|
stat = asn1PD_H245NonStandardMessage (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* masterSlaveDeterminationAck */
|
|
case 1:
|
|
invokeStartElement (pctxt, "masterSlaveDeterminationAck", -1);
|
|
|
|
pvalue->u.masterSlaveDeterminationAck = ALLOC_ASN1ELEM (pctxt, H245MasterSlaveDeterminationAck);
|
|
|
|
stat = asn1PD_H245MasterSlaveDeterminationAck (pctxt, pvalue->u.masterSlaveDeterminationAck);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "masterSlaveDeterminationAck", -1);
|
|
|
|
break;
|
|
|
|
/* masterSlaveDeterminationReject */
|
|
case 2:
|
|
invokeStartElement (pctxt, "masterSlaveDeterminationReject", -1);
|
|
|
|
pvalue->u.masterSlaveDeterminationReject = ALLOC_ASN1ELEM (pctxt, H245MasterSlaveDeterminationReject);
|
|
|
|
stat = asn1PD_H245MasterSlaveDeterminationReject (pctxt, pvalue->u.masterSlaveDeterminationReject);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "masterSlaveDeterminationReject", -1);
|
|
|
|
break;
|
|
|
|
/* terminalCapabilitySetAck */
|
|
case 3:
|
|
invokeStartElement (pctxt, "terminalCapabilitySetAck", -1);
|
|
|
|
pvalue->u.terminalCapabilitySetAck = ALLOC_ASN1ELEM (pctxt, H245TerminalCapabilitySetAck);
|
|
|
|
stat = asn1PD_H245TerminalCapabilitySetAck (pctxt, pvalue->u.terminalCapabilitySetAck);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalCapabilitySetAck", -1);
|
|
|
|
break;
|
|
|
|
/* terminalCapabilitySetReject */
|
|
case 4:
|
|
invokeStartElement (pctxt, "terminalCapabilitySetReject", -1);
|
|
|
|
pvalue->u.terminalCapabilitySetReject = ALLOC_ASN1ELEM (pctxt, H245TerminalCapabilitySetReject);
|
|
|
|
stat = asn1PD_H245TerminalCapabilitySetReject (pctxt, pvalue->u.terminalCapabilitySetReject);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalCapabilitySetReject", -1);
|
|
|
|
break;
|
|
|
|
/* openLogicalChannelAck */
|
|
case 5:
|
|
invokeStartElement (pctxt, "openLogicalChannelAck", -1);
|
|
|
|
pvalue->u.openLogicalChannelAck = ALLOC_ASN1ELEM (pctxt, H245OpenLogicalChannelAck);
|
|
|
|
stat = asn1PD_H245OpenLogicalChannelAck (pctxt, pvalue->u.openLogicalChannelAck);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "openLogicalChannelAck", -1);
|
|
|
|
break;
|
|
|
|
/* openLogicalChannelReject */
|
|
case 6:
|
|
invokeStartElement (pctxt, "openLogicalChannelReject", -1);
|
|
|
|
pvalue->u.openLogicalChannelReject = ALLOC_ASN1ELEM (pctxt, H245OpenLogicalChannelReject);
|
|
|
|
stat = asn1PD_H245OpenLogicalChannelReject (pctxt, pvalue->u.openLogicalChannelReject);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "openLogicalChannelReject", -1);
|
|
|
|
break;
|
|
|
|
/* closeLogicalChannelAck */
|
|
case 7:
|
|
invokeStartElement (pctxt, "closeLogicalChannelAck", -1);
|
|
|
|
pvalue->u.closeLogicalChannelAck = ALLOC_ASN1ELEM (pctxt, H245CloseLogicalChannelAck);
|
|
|
|
stat = asn1PD_H245CloseLogicalChannelAck (pctxt, pvalue->u.closeLogicalChannelAck);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "closeLogicalChannelAck", -1);
|
|
|
|
break;
|
|
|
|
/* requestChannelCloseAck */
|
|
case 8:
|
|
invokeStartElement (pctxt, "requestChannelCloseAck", -1);
|
|
|
|
pvalue->u.requestChannelCloseAck = ALLOC_ASN1ELEM (pctxt, H245RequestChannelCloseAck);
|
|
|
|
stat = asn1PD_H245RequestChannelCloseAck (pctxt, pvalue->u.requestChannelCloseAck);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestChannelCloseAck", -1);
|
|
|
|
break;
|
|
|
|
/* requestChannelCloseReject */
|
|
case 9:
|
|
invokeStartElement (pctxt, "requestChannelCloseReject", -1);
|
|
|
|
pvalue->u.requestChannelCloseReject = ALLOC_ASN1ELEM (pctxt, H245RequestChannelCloseReject);
|
|
|
|
stat = asn1PD_H245RequestChannelCloseReject (pctxt, pvalue->u.requestChannelCloseReject);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestChannelCloseReject", -1);
|
|
|
|
break;
|
|
|
|
/* multiplexEntrySendAck */
|
|
case 10:
|
|
invokeStartElement (pctxt, "multiplexEntrySendAck", -1);
|
|
|
|
pvalue->u.multiplexEntrySendAck = ALLOC_ASN1ELEM (pctxt, H245MultiplexEntrySendAck);
|
|
|
|
stat = asn1PD_H245MultiplexEntrySendAck (pctxt, pvalue->u.multiplexEntrySendAck);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexEntrySendAck", -1);
|
|
|
|
break;
|
|
|
|
/* multiplexEntrySendReject */
|
|
case 11:
|
|
invokeStartElement (pctxt, "multiplexEntrySendReject", -1);
|
|
|
|
pvalue->u.multiplexEntrySendReject = ALLOC_ASN1ELEM (pctxt, H245MultiplexEntrySendReject);
|
|
|
|
stat = asn1PD_H245MultiplexEntrySendReject (pctxt, pvalue->u.multiplexEntrySendReject);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexEntrySendReject", -1);
|
|
|
|
break;
|
|
|
|
/* requestMultiplexEntryAck */
|
|
case 12:
|
|
invokeStartElement (pctxt, "requestMultiplexEntryAck", -1);
|
|
|
|
pvalue->u.requestMultiplexEntryAck = ALLOC_ASN1ELEM (pctxt, H245RequestMultiplexEntryAck);
|
|
|
|
stat = asn1PD_H245RequestMultiplexEntryAck (pctxt, pvalue->u.requestMultiplexEntryAck);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestMultiplexEntryAck", -1);
|
|
|
|
break;
|
|
|
|
/* requestMultiplexEntryReject */
|
|
case 13:
|
|
invokeStartElement (pctxt, "requestMultiplexEntryReject", -1);
|
|
|
|
pvalue->u.requestMultiplexEntryReject = ALLOC_ASN1ELEM (pctxt, H245RequestMultiplexEntryReject);
|
|
|
|
stat = asn1PD_H245RequestMultiplexEntryReject (pctxt, pvalue->u.requestMultiplexEntryReject);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestMultiplexEntryReject", -1);
|
|
|
|
break;
|
|
|
|
/* requestModeAck */
|
|
case 14:
|
|
invokeStartElement (pctxt, "requestModeAck", -1);
|
|
|
|
pvalue->u.requestModeAck = ALLOC_ASN1ELEM (pctxt, H245RequestModeAck);
|
|
|
|
stat = asn1PD_H245RequestModeAck (pctxt, pvalue->u.requestModeAck);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestModeAck", -1);
|
|
|
|
break;
|
|
|
|
/* requestModeReject */
|
|
case 15:
|
|
invokeStartElement (pctxt, "requestModeReject", -1);
|
|
|
|
pvalue->u.requestModeReject = ALLOC_ASN1ELEM (pctxt, H245RequestModeReject);
|
|
|
|
stat = asn1PD_H245RequestModeReject (pctxt, pvalue->u.requestModeReject);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestModeReject", -1);
|
|
|
|
break;
|
|
|
|
/* roundTripDelayResponse */
|
|
case 16:
|
|
invokeStartElement (pctxt, "roundTripDelayResponse", -1);
|
|
|
|
pvalue->u.roundTripDelayResponse = ALLOC_ASN1ELEM (pctxt, H245RoundTripDelayResponse);
|
|
|
|
stat = asn1PD_H245RoundTripDelayResponse (pctxt, pvalue->u.roundTripDelayResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "roundTripDelayResponse", -1);
|
|
|
|
break;
|
|
|
|
/* maintenanceLoopAck */
|
|
case 17:
|
|
invokeStartElement (pctxt, "maintenanceLoopAck", -1);
|
|
|
|
pvalue->u.maintenanceLoopAck = ALLOC_ASN1ELEM (pctxt, H245MaintenanceLoopAck);
|
|
|
|
stat = asn1PD_H245MaintenanceLoopAck (pctxt, pvalue->u.maintenanceLoopAck);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "maintenanceLoopAck", -1);
|
|
|
|
break;
|
|
|
|
/* maintenanceLoopReject */
|
|
case 18:
|
|
invokeStartElement (pctxt, "maintenanceLoopReject", -1);
|
|
|
|
pvalue->u.maintenanceLoopReject = ALLOC_ASN1ELEM (pctxt, H245MaintenanceLoopReject);
|
|
|
|
stat = asn1PD_H245MaintenanceLoopReject (pctxt, pvalue->u.maintenanceLoopReject);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "maintenanceLoopReject", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 20;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* communicationModeResponse */
|
|
case 20:
|
|
invokeStartElement (pctxt, "communicationModeResponse", -1);
|
|
|
|
pvalue->u.communicationModeResponse = ALLOC_ASN1ELEM (pctxt, H245CommunicationModeResponse);
|
|
|
|
stat = asn1PD_H245CommunicationModeResponse (pctxt, pvalue->u.communicationModeResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "communicationModeResponse", -1);
|
|
|
|
break;
|
|
|
|
/* conferenceResponse */
|
|
case 21:
|
|
invokeStartElement (pctxt, "conferenceResponse", -1);
|
|
|
|
pvalue->u.conferenceResponse = ALLOC_ASN1ELEM (pctxt, H245ConferenceResponse);
|
|
|
|
stat = asn1PD_H245ConferenceResponse (pctxt, pvalue->u.conferenceResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "conferenceResponse", -1);
|
|
|
|
break;
|
|
|
|
/* multilinkResponse */
|
|
case 22:
|
|
invokeStartElement (pctxt, "multilinkResponse", -1);
|
|
|
|
pvalue->u.multilinkResponse = ALLOC_ASN1ELEM (pctxt, H245MultilinkResponse);
|
|
|
|
stat = asn1PD_H245MultilinkResponse (pctxt, pvalue->u.multilinkResponse);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multilinkResponse", -1);
|
|
|
|
break;
|
|
|
|
/* logicalChannelRateAcknowledge */
|
|
case 23:
|
|
invokeStartElement (pctxt, "logicalChannelRateAcknowledge", -1);
|
|
|
|
pvalue->u.logicalChannelRateAcknowledge = ALLOC_ASN1ELEM (pctxt, H245LogicalChannelRateAcknowledge);
|
|
|
|
stat = asn1PD_H245LogicalChannelRateAcknowledge (pctxt, pvalue->u.logicalChannelRateAcknowledge);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelRateAcknowledge", -1);
|
|
|
|
break;
|
|
|
|
/* logicalChannelRateReject */
|
|
case 24:
|
|
invokeStartElement (pctxt, "logicalChannelRateReject", -1);
|
|
|
|
pvalue->u.logicalChannelRateReject = ALLOC_ASN1ELEM (pctxt, H245LogicalChannelRateReject);
|
|
|
|
stat = asn1PD_H245LogicalChannelRateReject (pctxt, pvalue->u.logicalChannelRateReject);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelRateReject", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MaintenanceLoopOffCommand */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MaintenanceLoopOffCommand (OOCTXT* pctxt, H245MaintenanceLoopOffCommand* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* SendTerminalCapabilitySet_specificRequest_capabilityTabl */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245SendTerminalCapabilitySet_specificRequest_capabilityTableEntryNumbers (OOCTXT* pctxt, H245SendTerminalCapabilitySet_specificRequest_capabilityTableEntryNumbers* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 65535, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &pvalue->n);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
ALLOC_ASN1ARRAY (pctxt, pvalue, H245CapabilityTableEntryNumber);
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
stat = asn1PD_H245CapabilityTableEntryNumber (pctxt, &pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* SendTerminalCapabilitySet_specificRequest_capabilityDesc */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245SendTerminalCapabilitySet_specificRequest_capabilityDescriptorNumbers (OOCTXT* pctxt, H245SendTerminalCapabilitySet_specificRequest_capabilityDescriptorNumbers* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &pvalue->n);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
stat = asn1PD_H245CapabilityDescriptorNumber (pctxt, &pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* SendTerminalCapabilitySet_specificRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245SendTerminalCapabilitySet_specificRequest (OOCTXT* pctxt, H245SendTerminalCapabilitySet_specificRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.capabilityTableEntryNumbersPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.capabilityDescriptorNumbersPresent = optbit;
|
|
|
|
/* decode multiplexCapability */
|
|
|
|
invokeStartElement (pctxt, "multiplexCapability", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->multiplexCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->multiplexCapability);
|
|
|
|
invokeEndElement (pctxt, "multiplexCapability", -1);
|
|
|
|
/* decode capabilityTableEntryNumbers */
|
|
|
|
if (pvalue->m.capabilityTableEntryNumbersPresent) {
|
|
invokeStartElement (pctxt, "capabilityTableEntryNumbers", -1);
|
|
|
|
stat = asn1PD_H245SendTerminalCapabilitySet_specificRequest_capabilityTableEntryNumbers (pctxt, &pvalue->capabilityTableEntryNumbers);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "capabilityTableEntryNumbers", -1);
|
|
}
|
|
|
|
/* decode capabilityDescriptorNumbers */
|
|
|
|
if (pvalue->m.capabilityDescriptorNumbersPresent) {
|
|
invokeStartElement (pctxt, "capabilityDescriptorNumbers", -1);
|
|
|
|
stat = asn1PD_H245SendTerminalCapabilitySet_specificRequest_capabilityDescriptorNumbers (pctxt, &pvalue->capabilityDescriptorNumbers);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "capabilityDescriptorNumbers", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* SendTerminalCapabilitySet */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245SendTerminalCapabilitySet (OOCTXT* pctxt, H245SendTerminalCapabilitySet* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* specificRequest */
|
|
case 0:
|
|
invokeStartElement (pctxt, "specificRequest", -1);
|
|
|
|
pvalue->u.specificRequest = ALLOC_ASN1ELEM (pctxt, H245SendTerminalCapabilitySet_specificRequest);
|
|
|
|
stat = asn1PD_H245SendTerminalCapabilitySet_specificRequest (pctxt, pvalue->u.specificRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "specificRequest", -1);
|
|
|
|
break;
|
|
|
|
/* genericRequest */
|
|
case 1:
|
|
invokeStartElement (pctxt, "genericRequest", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "genericRequest", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EncryptionCommand_encryptionAlgorithmID */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EncryptionCommand_encryptionAlgorithmID (OOCTXT* pctxt, H245EncryptionCommand_encryptionAlgorithmID* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* decode h233AlgorithmIdentifier */
|
|
|
|
invokeStartElement (pctxt, "h233AlgorithmIdentifier", -1);
|
|
|
|
stat = asn1PD_H245SequenceNumber (pctxt, &pvalue->h233AlgorithmIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h233AlgorithmIdentifier", -1);
|
|
|
|
/* decode associatedAlgorithm */
|
|
|
|
invokeStartElement (pctxt, "associatedAlgorithm", -1);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, &pvalue->associatedAlgorithm);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "associatedAlgorithm", -1);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EncryptionCommand */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EncryptionCommand (OOCTXT* pctxt, H245EncryptionCommand* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* encryptionSE */
|
|
case 0:
|
|
invokeStartElement (pctxt, "encryptionSE", -1);
|
|
|
|
pvalue->u.encryptionSE = ALLOC_ASN1ELEM (pctxt, ASN1DynOctStr);
|
|
|
|
stat = decodeDynOctetString (pctxt, (ASN1DynOctStr*)pvalue->u.encryptionSE);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->u.encryptionSE->numocts, pvalue->u.encryptionSE->data);
|
|
|
|
invokeEndElement (pctxt, "encryptionSE", -1);
|
|
|
|
break;
|
|
|
|
/* encryptionIVRequest */
|
|
case 1:
|
|
invokeStartElement (pctxt, "encryptionIVRequest", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "encryptionIVRequest", -1);
|
|
|
|
break;
|
|
|
|
/* encryptionAlgorithmID */
|
|
case 2:
|
|
invokeStartElement (pctxt, "encryptionAlgorithmID", -1);
|
|
|
|
pvalue->u.encryptionAlgorithmID = ALLOC_ASN1ELEM (pctxt, H245EncryptionCommand_encryptionAlgorithmID);
|
|
|
|
stat = asn1PD_H245EncryptionCommand_encryptionAlgorithmID (pctxt, pvalue->u.encryptionAlgorithmID);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "encryptionAlgorithmID", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FlowControlCommand_scope */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FlowControlCommand_scope (OOCTXT* pctxt, H245FlowControlCommand_scope* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* logicalChannelNumber */
|
|
case 0:
|
|
invokeStartElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->u.logicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
break;
|
|
|
|
/* resourceID */
|
|
case 1:
|
|
invokeStartElement (pctxt, "resourceID", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.resourceID, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.resourceID);
|
|
|
|
invokeEndElement (pctxt, "resourceID", -1);
|
|
|
|
break;
|
|
|
|
/* wholeMultiplex */
|
|
case 2:
|
|
invokeStartElement (pctxt, "wholeMultiplex", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "wholeMultiplex", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FlowControlCommand_restriction */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FlowControlCommand_restriction (OOCTXT* pctxt, H245FlowControlCommand_restriction* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* maximumBitRate */
|
|
case 0:
|
|
invokeStartElement (pctxt, "maximumBitRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->u.maximumBitRate, 0U, 16777215U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.maximumBitRate);
|
|
|
|
invokeEndElement (pctxt, "maximumBitRate", -1);
|
|
|
|
break;
|
|
|
|
/* noRestriction */
|
|
case 1:
|
|
invokeStartElement (pctxt, "noRestriction", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "noRestriction", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FlowControlCommand */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FlowControlCommand (OOCTXT* pctxt, H245FlowControlCommand* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode scope */
|
|
|
|
invokeStartElement (pctxt, "scope", -1);
|
|
|
|
stat = asn1PD_H245FlowControlCommand_scope (pctxt, &pvalue->scope);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "scope", -1);
|
|
|
|
/* decode restriction */
|
|
|
|
invokeStartElement (pctxt, "restriction", -1);
|
|
|
|
stat = asn1PD_H245FlowControlCommand_restriction (pctxt, &pvalue->restriction);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "restriction", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EndSessionCommand_gstnOptions */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EndSessionCommand_gstnOptions (OOCTXT* pctxt, H245EndSessionCommand_gstnOptions* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 4);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* telephonyMode */
|
|
case 0:
|
|
invokeStartElement (pctxt, "telephonyMode", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "telephonyMode", -1);
|
|
|
|
break;
|
|
|
|
/* v8bis */
|
|
case 1:
|
|
invokeStartElement (pctxt, "v8bis", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "v8bis", -1);
|
|
|
|
break;
|
|
|
|
/* v34DSVD */
|
|
case 2:
|
|
invokeStartElement (pctxt, "v34DSVD", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "v34DSVD", -1);
|
|
|
|
break;
|
|
|
|
/* v34DuplexFAX */
|
|
case 3:
|
|
invokeStartElement (pctxt, "v34DuplexFAX", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "v34DuplexFAX", -1);
|
|
|
|
break;
|
|
|
|
/* v34H324 */
|
|
case 4:
|
|
invokeStartElement (pctxt, "v34H324", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "v34H324", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 6;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EndSessionCommand_isdnOptions */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EndSessionCommand_isdnOptions (OOCTXT* pctxt, H245EndSessionCommand_isdnOptions* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* telephonyMode */
|
|
case 0:
|
|
invokeStartElement (pctxt, "telephonyMode", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "telephonyMode", -1);
|
|
|
|
break;
|
|
|
|
/* v140 */
|
|
case 1:
|
|
invokeStartElement (pctxt, "v140", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "v140", -1);
|
|
|
|
break;
|
|
|
|
/* terminalOnHold */
|
|
case 2:
|
|
invokeStartElement (pctxt, "terminalOnHold", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "terminalOnHold", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EndSessionCommand */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EndSessionCommand (OOCTXT* pctxt, H245EndSessionCommand* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* disconnect */
|
|
case 1:
|
|
invokeStartElement (pctxt, "disconnect", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "disconnect", -1);
|
|
|
|
break;
|
|
|
|
/* gstnOptions */
|
|
case 2:
|
|
invokeStartElement (pctxt, "gstnOptions", -1);
|
|
|
|
pvalue->u.gstnOptions = ALLOC_ASN1ELEM (pctxt, H245EndSessionCommand_gstnOptions);
|
|
|
|
stat = asn1PD_H245EndSessionCommand_gstnOptions (pctxt, pvalue->u.gstnOptions);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "gstnOptions", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* isdnOptions */
|
|
case 4:
|
|
invokeStartElement (pctxt, "isdnOptions", -1);
|
|
|
|
pvalue->u.isdnOptions = ALLOC_ASN1ELEM (pctxt, H245EndSessionCommand_isdnOptions);
|
|
|
|
stat = asn1PD_H245EndSessionCommand_isdnOptions (pctxt, pvalue->u.isdnOptions);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "isdnOptions", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MiscellaneousCommand_type_videoFastUpdateGOB */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MiscellaneousCommand_type_videoFastUpdateGOB (OOCTXT* pctxt, H245MiscellaneousCommand_type_videoFastUpdateGOB* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
|
|
/* decode firstGOB */
|
|
|
|
invokeStartElement (pctxt, "firstGOB", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->firstGOB, 0U, 17U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->firstGOB);
|
|
|
|
invokeEndElement (pctxt, "firstGOB", -1);
|
|
|
|
/* decode numberOfGOBs */
|
|
|
|
invokeStartElement (pctxt, "numberOfGOBs", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->numberOfGOBs, 1U, 18U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->numberOfGOBs);
|
|
|
|
invokeEndElement (pctxt, "numberOfGOBs", -1);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MiscellaneousCommand_type_videoFastUpdateMB */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MiscellaneousCommand_type_videoFastUpdateMB (OOCTXT* pctxt, H245MiscellaneousCommand_type_videoFastUpdateMB* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.firstGOBPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.firstMBPresent = optbit;
|
|
|
|
/* decode firstGOB */
|
|
|
|
if (pvalue->m.firstGOBPresent) {
|
|
invokeStartElement (pctxt, "firstGOB", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->firstGOB, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->firstGOB);
|
|
|
|
invokeEndElement (pctxt, "firstGOB", -1);
|
|
}
|
|
|
|
/* decode firstMB */
|
|
|
|
if (pvalue->m.firstMBPresent) {
|
|
invokeStartElement (pctxt, "firstMB", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->firstMB, 1U, 8192U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->firstMB);
|
|
|
|
invokeEndElement (pctxt, "firstMB", -1);
|
|
}
|
|
|
|
/* decode numberOfMBs */
|
|
|
|
invokeStartElement (pctxt, "numberOfMBs", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->numberOfMBs, 1U, 8192U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->numberOfMBs);
|
|
|
|
invokeEndElement (pctxt, "numberOfMBs", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* KeyProtectionMethod */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245KeyProtectionMethod (OOCTXT* pctxt, H245KeyProtectionMethod* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode secureChannel */
|
|
|
|
invokeStartElement (pctxt, "secureChannel", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->secureChannel);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->secureChannel);
|
|
|
|
invokeEndElement (pctxt, "secureChannel", -1);
|
|
|
|
/* decode sharedSecret */
|
|
|
|
invokeStartElement (pctxt, "sharedSecret", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->sharedSecret);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->sharedSecret);
|
|
|
|
invokeEndElement (pctxt, "sharedSecret", -1);
|
|
|
|
/* decode certProtectedKey */
|
|
|
|
invokeStartElement (pctxt, "certProtectedKey", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->certProtectedKey);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->certProtectedKey);
|
|
|
|
invokeEndElement (pctxt, "certProtectedKey", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* EncryptionUpdateRequest */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245EncryptionUpdateRequest (OOCTXT* pctxt, H245EncryptionUpdateRequest* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.keyProtectionMethodPresent = optbit;
|
|
|
|
/* decode keyProtectionMethod */
|
|
|
|
if (pvalue->m.keyProtectionMethodPresent) {
|
|
invokeStartElement (pctxt, "keyProtectionMethod", -1);
|
|
|
|
stat = asn1PD_H245KeyProtectionMethod (pctxt, &pvalue->keyProtectionMethod);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "keyProtectionMethod", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MiscellaneousCommand_type_progressiveRefinementStart_rep */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MiscellaneousCommand_type_progressiveRefinementStart_repeatCount (OOCTXT* pctxt, H245MiscellaneousCommand_type_progressiveRefinementStart_repeatCount* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* doOneProgression */
|
|
case 0:
|
|
invokeStartElement (pctxt, "doOneProgression", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "doOneProgression", -1);
|
|
|
|
break;
|
|
|
|
/* doContinuousProgressions */
|
|
case 1:
|
|
invokeStartElement (pctxt, "doContinuousProgressions", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "doContinuousProgressions", -1);
|
|
|
|
break;
|
|
|
|
/* doOneIndependentProgression */
|
|
case 2:
|
|
invokeStartElement (pctxt, "doOneIndependentProgression", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "doOneIndependentProgression", -1);
|
|
|
|
break;
|
|
|
|
/* doContinuousIndependentProgressions */
|
|
case 3:
|
|
invokeStartElement (pctxt, "doContinuousIndependentProgressions", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "doContinuousIndependentProgressions", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 5;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MiscellaneousCommand_type_progressiveRefinementStart */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MiscellaneousCommand_type_progressiveRefinementStart (OOCTXT* pctxt, H245MiscellaneousCommand_type_progressiveRefinementStart* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode repeatCount */
|
|
|
|
invokeStartElement (pctxt, "repeatCount", -1);
|
|
|
|
stat = asn1PD_H245MiscellaneousCommand_type_progressiveRefinementStart_repeatCount (pctxt, &pvalue->repeatCount);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "repeatCount", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MiscellaneousCommand_type_videoBadMBs */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MiscellaneousCommand_type_videoBadMBs (OOCTXT* pctxt, H245MiscellaneousCommand_type_videoBadMBs* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode firstMB */
|
|
|
|
invokeStartElement (pctxt, "firstMB", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->firstMB, 1U, 9216U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->firstMB);
|
|
|
|
invokeEndElement (pctxt, "firstMB", -1);
|
|
|
|
/* decode numberOfMBs */
|
|
|
|
invokeStartElement (pctxt, "numberOfMBs", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->numberOfMBs, 1U, 9216U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->numberOfMBs);
|
|
|
|
invokeEndElement (pctxt, "numberOfMBs", -1);
|
|
|
|
/* decode temporalReference */
|
|
|
|
invokeStartElement (pctxt, "temporalReference", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->temporalReference, 0U, 1023U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->temporalReference);
|
|
|
|
invokeEndElement (pctxt, "temporalReference", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* PictureReference */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245PictureReference (OOCTXT* pctxt, H245PictureReference* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* pictureNumber */
|
|
case 0:
|
|
invokeStartElement (pctxt, "pictureNumber", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.pictureNumber, 0U, 1023U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.pictureNumber);
|
|
|
|
invokeEndElement (pctxt, "pictureNumber", -1);
|
|
|
|
break;
|
|
|
|
/* longTermPictureIndex */
|
|
case 1:
|
|
invokeStartElement (pctxt, "longTermPictureIndex", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->u.longTermPictureIndex, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.longTermPictureIndex);
|
|
|
|
invokeEndElement (pctxt, "longTermPictureIndex", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* _SeqOfH245PictureReference */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245_SeqOfH245PictureReference (OOCTXT* pctxt, H245_SeqOfH245PictureReference* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
H245PictureReference* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
int lstat;
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (;;) {
|
|
/* decode length determinant */
|
|
|
|
lstat = decodeLength (pctxt, &count);
|
|
if (lstat != ASN_OK && lstat != ASN_OK_FRAG) {
|
|
return lstat;
|
|
}
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245PictureReference);
|
|
|
|
stat = asn1PD_H245PictureReference (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
if(lstat == ASN_OK) break;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MiscellaneousCommand_type_lostPartialPicture */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MiscellaneousCommand_type_lostPartialPicture (OOCTXT* pctxt, H245MiscellaneousCommand_type_lostPartialPicture* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode pictureReference */
|
|
|
|
invokeStartElement (pctxt, "pictureReference", -1);
|
|
|
|
stat = asn1PD_H245PictureReference (pctxt, &pvalue->pictureReference);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "pictureReference", -1);
|
|
|
|
/* decode firstMB */
|
|
|
|
invokeStartElement (pctxt, "firstMB", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->firstMB, 1U, 9216U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->firstMB);
|
|
|
|
invokeEndElement (pctxt, "firstMB", -1);
|
|
|
|
/* decode numberOfMBs */
|
|
|
|
invokeStartElement (pctxt, "numberOfMBs", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->numberOfMBs, 1U, 9216U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->numberOfMBs);
|
|
|
|
invokeEndElement (pctxt, "numberOfMBs", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MiscellaneousCommand_type */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MiscellaneousCommand_type (OOCTXT* pctxt, H245MiscellaneousCommand_type* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 9);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* equaliseDelay */
|
|
case 0:
|
|
invokeStartElement (pctxt, "equaliseDelay", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "equaliseDelay", -1);
|
|
|
|
break;
|
|
|
|
/* zeroDelay */
|
|
case 1:
|
|
invokeStartElement (pctxt, "zeroDelay", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "zeroDelay", -1);
|
|
|
|
break;
|
|
|
|
/* multipointModeCommand */
|
|
case 2:
|
|
invokeStartElement (pctxt, "multipointModeCommand", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "multipointModeCommand", -1);
|
|
|
|
break;
|
|
|
|
/* cancelMultipointModeCommand */
|
|
case 3:
|
|
invokeStartElement (pctxt, "cancelMultipointModeCommand", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "cancelMultipointModeCommand", -1);
|
|
|
|
break;
|
|
|
|
/* videoFreezePicture */
|
|
case 4:
|
|
invokeStartElement (pctxt, "videoFreezePicture", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "videoFreezePicture", -1);
|
|
|
|
break;
|
|
|
|
/* videoFastUpdatePicture */
|
|
case 5:
|
|
invokeStartElement (pctxt, "videoFastUpdatePicture", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "videoFastUpdatePicture", -1);
|
|
|
|
break;
|
|
|
|
/* videoFastUpdateGOB */
|
|
case 6:
|
|
invokeStartElement (pctxt, "videoFastUpdateGOB", -1);
|
|
|
|
pvalue->u.videoFastUpdateGOB = ALLOC_ASN1ELEM (pctxt, H245MiscellaneousCommand_type_videoFastUpdateGOB);
|
|
|
|
stat = asn1PD_H245MiscellaneousCommand_type_videoFastUpdateGOB (pctxt, pvalue->u.videoFastUpdateGOB);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "videoFastUpdateGOB", -1);
|
|
|
|
break;
|
|
|
|
/* videoTemporalSpatialTradeOff */
|
|
case 7:
|
|
invokeStartElement (pctxt, "videoTemporalSpatialTradeOff", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->u.videoTemporalSpatialTradeOff, 0U, 31U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.videoTemporalSpatialTradeOff);
|
|
|
|
invokeEndElement (pctxt, "videoTemporalSpatialTradeOff", -1);
|
|
|
|
break;
|
|
|
|
/* videoSendSyncEveryGOB */
|
|
case 8:
|
|
invokeStartElement (pctxt, "videoSendSyncEveryGOB", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "videoSendSyncEveryGOB", -1);
|
|
|
|
break;
|
|
|
|
/* videoSendSyncEveryGOBCancel */
|
|
case 9:
|
|
invokeStartElement (pctxt, "videoSendSyncEveryGOBCancel", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "videoSendSyncEveryGOBCancel", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 11;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* videoFastUpdateMB */
|
|
case 11:
|
|
invokeStartElement (pctxt, "videoFastUpdateMB", -1);
|
|
|
|
pvalue->u.videoFastUpdateMB = ALLOC_ASN1ELEM (pctxt, H245MiscellaneousCommand_type_videoFastUpdateMB);
|
|
|
|
stat = asn1PD_H245MiscellaneousCommand_type_videoFastUpdateMB (pctxt, pvalue->u.videoFastUpdateMB);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "videoFastUpdateMB", -1);
|
|
|
|
break;
|
|
|
|
/* maxH223MUXPDUsize */
|
|
case 12:
|
|
invokeStartElement (pctxt, "maxH223MUXPDUsize", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.maxH223MUXPDUsize, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.maxH223MUXPDUsize);
|
|
|
|
invokeEndElement (pctxt, "maxH223MUXPDUsize", -1);
|
|
|
|
break;
|
|
|
|
/* encryptionUpdate */
|
|
case 13:
|
|
invokeStartElement (pctxt, "encryptionUpdate", -1);
|
|
|
|
pvalue->u.encryptionUpdate = ALLOC_ASN1ELEM (pctxt, H245EncryptionSync);
|
|
|
|
stat = asn1PD_H245EncryptionSync (pctxt, pvalue->u.encryptionUpdate);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "encryptionUpdate", -1);
|
|
|
|
break;
|
|
|
|
/* encryptionUpdateRequest */
|
|
case 14:
|
|
invokeStartElement (pctxt, "encryptionUpdateRequest", -1);
|
|
|
|
pvalue->u.encryptionUpdateRequest = ALLOC_ASN1ELEM (pctxt, H245EncryptionUpdateRequest);
|
|
|
|
stat = asn1PD_H245EncryptionUpdateRequest (pctxt, pvalue->u.encryptionUpdateRequest);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "encryptionUpdateRequest", -1);
|
|
|
|
break;
|
|
|
|
/* switchReceiveMediaOff */
|
|
case 15:
|
|
invokeStartElement (pctxt, "switchReceiveMediaOff", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "switchReceiveMediaOff", -1);
|
|
|
|
break;
|
|
|
|
/* switchReceiveMediaOn */
|
|
case 16:
|
|
invokeStartElement (pctxt, "switchReceiveMediaOn", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "switchReceiveMediaOn", -1);
|
|
|
|
break;
|
|
|
|
/* progressiveRefinementStart */
|
|
case 17:
|
|
invokeStartElement (pctxt, "progressiveRefinementStart", -1);
|
|
|
|
pvalue->u.progressiveRefinementStart = ALLOC_ASN1ELEM (pctxt, H245MiscellaneousCommand_type_progressiveRefinementStart);
|
|
|
|
stat = asn1PD_H245MiscellaneousCommand_type_progressiveRefinementStart (pctxt, pvalue->u.progressiveRefinementStart);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "progressiveRefinementStart", -1);
|
|
|
|
break;
|
|
|
|
/* progressiveRefinementAbortOne */
|
|
case 18:
|
|
invokeStartElement (pctxt, "progressiveRefinementAbortOne", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "progressiveRefinementAbortOne", -1);
|
|
|
|
break;
|
|
|
|
/* progressiveRefinementAbortContinuous */
|
|
case 19:
|
|
invokeStartElement (pctxt, "progressiveRefinementAbortContinuous", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "progressiveRefinementAbortContinuous", -1);
|
|
|
|
break;
|
|
|
|
/* videoBadMBs */
|
|
case 20:
|
|
invokeStartElement (pctxt, "videoBadMBs", -1);
|
|
|
|
pvalue->u.videoBadMBs = ALLOC_ASN1ELEM (pctxt, H245MiscellaneousCommand_type_videoBadMBs);
|
|
|
|
stat = asn1PD_H245MiscellaneousCommand_type_videoBadMBs (pctxt, pvalue->u.videoBadMBs);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "videoBadMBs", -1);
|
|
|
|
break;
|
|
|
|
/* lostPicture */
|
|
case 21:
|
|
invokeStartElement (pctxt, "lostPicture", -1);
|
|
|
|
pvalue->u.lostPicture = ALLOC_ASN1ELEM (pctxt, H245_SeqOfH245PictureReference);
|
|
|
|
stat = asn1PD_H245_SeqOfH245PictureReference (pctxt, pvalue->u.lostPicture);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "lostPicture", -1);
|
|
|
|
break;
|
|
|
|
/* lostPartialPicture */
|
|
case 22:
|
|
invokeStartElement (pctxt, "lostPartialPicture", -1);
|
|
|
|
pvalue->u.lostPartialPicture = ALLOC_ASN1ELEM (pctxt, H245MiscellaneousCommand_type_lostPartialPicture);
|
|
|
|
stat = asn1PD_H245MiscellaneousCommand_type_lostPartialPicture (pctxt, pvalue->u.lostPartialPicture);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "lostPartialPicture", -1);
|
|
|
|
break;
|
|
|
|
/* recoveryReferencePicture */
|
|
case 23:
|
|
invokeStartElement (pctxt, "recoveryReferencePicture", -1);
|
|
|
|
pvalue->u.recoveryReferencePicture = ALLOC_ASN1ELEM (pctxt, H245_SeqOfH245PictureReference);
|
|
|
|
stat = asn1PD_H245_SeqOfH245PictureReference (pctxt, pvalue->u.recoveryReferencePicture);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "recoveryReferencePicture", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MiscellaneousCommand */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MiscellaneousCommand (OOCTXT* pctxt, H245MiscellaneousCommand* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode logicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->logicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
/* decode type */
|
|
|
|
invokeStartElement (pctxt, "type", -1);
|
|
|
|
stat = asn1PD_H245MiscellaneousCommand_type (pctxt, &pvalue->type);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "type", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CommunicationModeCommand_communicationModeTable */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CommunicationModeCommand_communicationModeTable (OOCTXT* pctxt, H245CommunicationModeCommand_communicationModeTable* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
H245CommunicationModeTableEntry* pdata;
|
|
ASN1UINT count = 0;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &count);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
dListInit (pvalue);
|
|
|
|
for (xx1 = 0; xx1 < count; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
pdata = ALLOC_ASN1ELEMDNODE (pctxt, H245CommunicationModeTableEntry);
|
|
|
|
stat = asn1PD_H245CommunicationModeTableEntry (pctxt, pdata);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
dListAppendNode (pctxt, pvalue, pdata);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CommunicationModeCommand */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CommunicationModeCommand (OOCTXT* pctxt, H245CommunicationModeCommand* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode communicationModeTable */
|
|
|
|
invokeStartElement (pctxt, "communicationModeTable", -1);
|
|
|
|
stat = asn1PD_H245CommunicationModeCommand_communicationModeTable (pctxt, &pvalue->communicationModeTable);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "communicationModeTable", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* SubstituteConferenceIDCommand_conferenceIdentifier */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245SubstituteConferenceIDCommand_conferenceIdentifier (OOCTXT* pctxt, H245SubstituteConferenceIDCommand_conferenceIdentifier* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 16, 16, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* SubstituteConferenceIDCommand */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245SubstituteConferenceIDCommand (OOCTXT* pctxt, H245SubstituteConferenceIDCommand* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode conferenceIdentifier */
|
|
|
|
invokeStartElement (pctxt, "conferenceIdentifier", -1);
|
|
|
|
stat = asn1PD_H245SubstituteConferenceIDCommand_conferenceIdentifier (pctxt, &pvalue->conferenceIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "conferenceIdentifier", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceCommand */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceCommand (OOCTXT* pctxt, H245ConferenceCommand* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 6);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* broadcastMyLogicalChannel */
|
|
case 0:
|
|
invokeStartElement (pctxt, "broadcastMyLogicalChannel", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->u.broadcastMyLogicalChannel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "broadcastMyLogicalChannel", -1);
|
|
|
|
break;
|
|
|
|
/* cancelBroadcastMyLogicalChannel */
|
|
case 1:
|
|
invokeStartElement (pctxt, "cancelBroadcastMyLogicalChannel", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->u.cancelBroadcastMyLogicalChannel);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "cancelBroadcastMyLogicalChannel", -1);
|
|
|
|
break;
|
|
|
|
/* makeTerminalBroadcaster */
|
|
case 2:
|
|
invokeStartElement (pctxt, "makeTerminalBroadcaster", -1);
|
|
|
|
pvalue->u.makeTerminalBroadcaster = ALLOC_ASN1ELEM (pctxt, H245TerminalLabel);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, pvalue->u.makeTerminalBroadcaster);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "makeTerminalBroadcaster", -1);
|
|
|
|
break;
|
|
|
|
/* cancelMakeTerminalBroadcaster */
|
|
case 3:
|
|
invokeStartElement (pctxt, "cancelMakeTerminalBroadcaster", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "cancelMakeTerminalBroadcaster", -1);
|
|
|
|
break;
|
|
|
|
/* sendThisSource */
|
|
case 4:
|
|
invokeStartElement (pctxt, "sendThisSource", -1);
|
|
|
|
pvalue->u.sendThisSource = ALLOC_ASN1ELEM (pctxt, H245TerminalLabel);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, pvalue->u.sendThisSource);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sendThisSource", -1);
|
|
|
|
break;
|
|
|
|
/* cancelSendThisSource */
|
|
case 5:
|
|
invokeStartElement (pctxt, "cancelSendThisSource", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "cancelSendThisSource", -1);
|
|
|
|
break;
|
|
|
|
/* dropConference */
|
|
case 6:
|
|
invokeStartElement (pctxt, "dropConference", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "dropConference", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 8;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* substituteConferenceIDCommand */
|
|
case 8:
|
|
invokeStartElement (pctxt, "substituteConferenceIDCommand", -1);
|
|
|
|
pvalue->u.substituteConferenceIDCommand = ALLOC_ASN1ELEM (pctxt, H245SubstituteConferenceIDCommand);
|
|
|
|
stat = asn1PD_H245SubstituteConferenceIDCommand (pctxt, pvalue->u.substituteConferenceIDCommand);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "substituteConferenceIDCommand", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223MultiplexReconfiguration_h223ModeChange */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223MultiplexReconfiguration_h223ModeChange (OOCTXT* pctxt, H245H223MultiplexReconfiguration_h223ModeChange* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* toLevel0 */
|
|
case 0:
|
|
invokeStartElement (pctxt, "toLevel0", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "toLevel0", -1);
|
|
|
|
break;
|
|
|
|
/* toLevel1 */
|
|
case 1:
|
|
invokeStartElement (pctxt, "toLevel1", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "toLevel1", -1);
|
|
|
|
break;
|
|
|
|
/* toLevel2 */
|
|
case 2:
|
|
invokeStartElement (pctxt, "toLevel2", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "toLevel2", -1);
|
|
|
|
break;
|
|
|
|
/* toLevel2withOptionalHeader */
|
|
case 3:
|
|
invokeStartElement (pctxt, "toLevel2withOptionalHeader", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "toLevel2withOptionalHeader", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 5;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223MultiplexReconfiguration_h223AnnexADoubleFlag */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223MultiplexReconfiguration_h223AnnexADoubleFlag (OOCTXT* pctxt, H245H223MultiplexReconfiguration_h223AnnexADoubleFlag* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* start */
|
|
case 0:
|
|
invokeStartElement (pctxt, "start", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "start", -1);
|
|
|
|
break;
|
|
|
|
/* stop */
|
|
case 1:
|
|
invokeStartElement (pctxt, "stop", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "stop", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223MultiplexReconfiguration */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223MultiplexReconfiguration (OOCTXT* pctxt, H245H223MultiplexReconfiguration* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* h223ModeChange */
|
|
case 0:
|
|
invokeStartElement (pctxt, "h223ModeChange", -1);
|
|
|
|
pvalue->u.h223ModeChange = ALLOC_ASN1ELEM (pctxt, H245H223MultiplexReconfiguration_h223ModeChange);
|
|
|
|
stat = asn1PD_H245H223MultiplexReconfiguration_h223ModeChange (pctxt, pvalue->u.h223ModeChange);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h223ModeChange", -1);
|
|
|
|
break;
|
|
|
|
/* h223AnnexADoubleFlag */
|
|
case 1:
|
|
invokeStartElement (pctxt, "h223AnnexADoubleFlag", -1);
|
|
|
|
pvalue->u.h223AnnexADoubleFlag = ALLOC_ASN1ELEM (pctxt, H245H223MultiplexReconfiguration_h223AnnexADoubleFlag);
|
|
|
|
stat = asn1PD_H245H223MultiplexReconfiguration_h223AnnexADoubleFlag (pctxt, pvalue->u.h223AnnexADoubleFlag);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h223AnnexADoubleFlag", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCCommand_aal_aal1_clockRecovery */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCCommand_aal_aal1_clockRecovery (OOCTXT* pctxt, H245NewATMVCCommand_aal_aal1_clockRecovery* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nullClockRecovery */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nullClockRecovery", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "nullClockRecovery", -1);
|
|
|
|
break;
|
|
|
|
/* srtsClockRecovery */
|
|
case 1:
|
|
invokeStartElement (pctxt, "srtsClockRecovery", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "srtsClockRecovery", -1);
|
|
|
|
break;
|
|
|
|
/* adaptiveClockRecovery */
|
|
case 2:
|
|
invokeStartElement (pctxt, "adaptiveClockRecovery", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "adaptiveClockRecovery", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCCommand_aal_aal1_errorCorrection */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCCommand_aal_aal1_errorCorrection (OOCTXT* pctxt, H245NewATMVCCommand_aal_aal1_errorCorrection* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nullErrorCorrection */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nullErrorCorrection", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "nullErrorCorrection", -1);
|
|
|
|
break;
|
|
|
|
/* longInterleaver */
|
|
case 1:
|
|
invokeStartElement (pctxt, "longInterleaver", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "longInterleaver", -1);
|
|
|
|
break;
|
|
|
|
/* shortInterleaver */
|
|
case 2:
|
|
invokeStartElement (pctxt, "shortInterleaver", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "shortInterleaver", -1);
|
|
|
|
break;
|
|
|
|
/* errorCorrectionOnly */
|
|
case 3:
|
|
invokeStartElement (pctxt, "errorCorrectionOnly", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "errorCorrectionOnly", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 5;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCCommand_aal_aal1 */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCCommand_aal_aal1 (OOCTXT* pctxt, H245NewATMVCCommand_aal_aal1* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode clockRecovery */
|
|
|
|
invokeStartElement (pctxt, "clockRecovery", -1);
|
|
|
|
stat = asn1PD_H245NewATMVCCommand_aal_aal1_clockRecovery (pctxt, &pvalue->clockRecovery);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "clockRecovery", -1);
|
|
|
|
/* decode errorCorrection */
|
|
|
|
invokeStartElement (pctxt, "errorCorrection", -1);
|
|
|
|
stat = asn1PD_H245NewATMVCCommand_aal_aal1_errorCorrection (pctxt, &pvalue->errorCorrection);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "errorCorrection", -1);
|
|
|
|
/* decode structuredDataTransfer */
|
|
|
|
invokeStartElement (pctxt, "structuredDataTransfer", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->structuredDataTransfer);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->structuredDataTransfer);
|
|
|
|
invokeEndElement (pctxt, "structuredDataTransfer", -1);
|
|
|
|
/* decode partiallyFilledCells */
|
|
|
|
invokeStartElement (pctxt, "partiallyFilledCells", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->partiallyFilledCells);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->partiallyFilledCells);
|
|
|
|
invokeEndElement (pctxt, "partiallyFilledCells", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCCommand_aal_aal5 */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCCommand_aal_aal5 (OOCTXT* pctxt, H245NewATMVCCommand_aal_aal5* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode forwardMaximumSDUSize */
|
|
|
|
invokeStartElement (pctxt, "forwardMaximumSDUSize", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->forwardMaximumSDUSize, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->forwardMaximumSDUSize);
|
|
|
|
invokeEndElement (pctxt, "forwardMaximumSDUSize", -1);
|
|
|
|
/* decode backwardMaximumSDUSize */
|
|
|
|
invokeStartElement (pctxt, "backwardMaximumSDUSize", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->backwardMaximumSDUSize, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->backwardMaximumSDUSize);
|
|
|
|
invokeEndElement (pctxt, "backwardMaximumSDUSize", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCCommand_aal */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCCommand_aal (OOCTXT* pctxt, H245NewATMVCCommand_aal* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* aal1 */
|
|
case 0:
|
|
invokeStartElement (pctxt, "aal1", -1);
|
|
|
|
pvalue->u.aal1 = ALLOC_ASN1ELEM (pctxt, H245NewATMVCCommand_aal_aal1);
|
|
|
|
stat = asn1PD_H245NewATMVCCommand_aal_aal1 (pctxt, pvalue->u.aal1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "aal1", -1);
|
|
|
|
break;
|
|
|
|
/* aal5 */
|
|
case 1:
|
|
invokeStartElement (pctxt, "aal5", -1);
|
|
|
|
pvalue->u.aal5 = ALLOC_ASN1ELEM (pctxt, H245NewATMVCCommand_aal_aal5);
|
|
|
|
stat = asn1PD_H245NewATMVCCommand_aal_aal5 (pctxt, pvalue->u.aal5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "aal5", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCCommand_multiplex */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCCommand_multiplex (OOCTXT* pctxt, H245NewATMVCCommand_multiplex* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* noMultiplex */
|
|
case 0:
|
|
invokeStartElement (pctxt, "noMultiplex", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "noMultiplex", -1);
|
|
|
|
break;
|
|
|
|
/* transportStream */
|
|
case 1:
|
|
invokeStartElement (pctxt, "transportStream", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "transportStream", -1);
|
|
|
|
break;
|
|
|
|
/* programStream */
|
|
case 2:
|
|
invokeStartElement (pctxt, "programStream", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "programStream", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCCommand_reverseParameters_multiplex */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCCommand_reverseParameters_multiplex (OOCTXT* pctxt, H245NewATMVCCommand_reverseParameters_multiplex* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* noMultiplex */
|
|
case 0:
|
|
invokeStartElement (pctxt, "noMultiplex", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "noMultiplex", -1);
|
|
|
|
break;
|
|
|
|
/* transportStream */
|
|
case 1:
|
|
invokeStartElement (pctxt, "transportStream", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "transportStream", -1);
|
|
|
|
break;
|
|
|
|
/* programStream */
|
|
case 2:
|
|
invokeStartElement (pctxt, "programStream", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "programStream", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCCommand_reverseParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCCommand_reverseParameters (OOCTXT* pctxt, H245NewATMVCCommand_reverseParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode bitRate */
|
|
|
|
invokeStartElement (pctxt, "bitRate", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->bitRate, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->bitRate);
|
|
|
|
invokeEndElement (pctxt, "bitRate", -1);
|
|
|
|
/* decode bitRateLockedToPCRClock */
|
|
|
|
invokeStartElement (pctxt, "bitRateLockedToPCRClock", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->bitRateLockedToPCRClock);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->bitRateLockedToPCRClock);
|
|
|
|
invokeEndElement (pctxt, "bitRateLockedToPCRClock", -1);
|
|
|
|
/* decode bitRateLockedToNetworkClock */
|
|
|
|
invokeStartElement (pctxt, "bitRateLockedToNetworkClock", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->bitRateLockedToNetworkClock);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->bitRateLockedToNetworkClock);
|
|
|
|
invokeEndElement (pctxt, "bitRateLockedToNetworkClock", -1);
|
|
|
|
/* decode multiplex */
|
|
|
|
invokeStartElement (pctxt, "multiplex", -1);
|
|
|
|
stat = asn1PD_H245NewATMVCCommand_reverseParameters_multiplex (pctxt, &pvalue->multiplex);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplex", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCCommand */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCCommand (OOCTXT* pctxt, H245NewATMVCCommand* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode resourceID */
|
|
|
|
invokeStartElement (pctxt, "resourceID", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->resourceID, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->resourceID);
|
|
|
|
invokeEndElement (pctxt, "resourceID", -1);
|
|
|
|
/* decode bitRate */
|
|
|
|
invokeStartElement (pctxt, "bitRate", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->bitRate, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->bitRate);
|
|
|
|
invokeEndElement (pctxt, "bitRate", -1);
|
|
|
|
/* decode bitRateLockedToPCRClock */
|
|
|
|
invokeStartElement (pctxt, "bitRateLockedToPCRClock", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->bitRateLockedToPCRClock);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->bitRateLockedToPCRClock);
|
|
|
|
invokeEndElement (pctxt, "bitRateLockedToPCRClock", -1);
|
|
|
|
/* decode bitRateLockedToNetworkClock */
|
|
|
|
invokeStartElement (pctxt, "bitRateLockedToNetworkClock", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->bitRateLockedToNetworkClock);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->bitRateLockedToNetworkClock);
|
|
|
|
invokeEndElement (pctxt, "bitRateLockedToNetworkClock", -1);
|
|
|
|
/* decode aal */
|
|
|
|
invokeStartElement (pctxt, "aal", -1);
|
|
|
|
stat = asn1PD_H245NewATMVCCommand_aal (pctxt, &pvalue->aal);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "aal", -1);
|
|
|
|
/* decode multiplex */
|
|
|
|
invokeStartElement (pctxt, "multiplex", -1);
|
|
|
|
stat = asn1PD_H245NewATMVCCommand_multiplex (pctxt, &pvalue->multiplex);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplex", -1);
|
|
|
|
/* decode reverseParameters */
|
|
|
|
invokeStartElement (pctxt, "reverseParameters", -1);
|
|
|
|
stat = asn1PD_H245NewATMVCCommand_reverseParameters (pctxt, &pvalue->reverseParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "reverseParameters", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MobileMultilinkReconfigurationCommand_status */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MobileMultilinkReconfigurationCommand_status (OOCTXT* pctxt, H245MobileMultilinkReconfigurationCommand_status* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* synchronized_ */
|
|
case 0:
|
|
invokeStartElement (pctxt, "synchronized_", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "synchronized_", -1);
|
|
|
|
break;
|
|
|
|
/* reconfiguration */
|
|
case 1:
|
|
invokeStartElement (pctxt, "reconfiguration", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "reconfiguration", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MobileMultilinkReconfigurationCommand */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MobileMultilinkReconfigurationCommand (OOCTXT* pctxt, H245MobileMultilinkReconfigurationCommand* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode sampleSize */
|
|
|
|
invokeStartElement (pctxt, "sampleSize", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->sampleSize, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sampleSize);
|
|
|
|
invokeEndElement (pctxt, "sampleSize", -1);
|
|
|
|
/* decode samplesPerFrame */
|
|
|
|
invokeStartElement (pctxt, "samplesPerFrame", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->samplesPerFrame, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->samplesPerFrame);
|
|
|
|
invokeEndElement (pctxt, "samplesPerFrame", -1);
|
|
|
|
/* decode status */
|
|
|
|
invokeStartElement (pctxt, "status", -1);
|
|
|
|
stat = asn1PD_H245MobileMultilinkReconfigurationCommand_status (pctxt, &pvalue->status);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "status", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* CommandMessage */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245CommandMessage (OOCTXT* pctxt, H245CommandMessage* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 6);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardMessage);
|
|
|
|
stat = asn1PD_H245NonStandardMessage (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* maintenanceLoopOffCommand */
|
|
case 1:
|
|
invokeStartElement (pctxt, "maintenanceLoopOffCommand", -1);
|
|
|
|
pvalue->u.maintenanceLoopOffCommand = ALLOC_ASN1ELEM (pctxt, H245MaintenanceLoopOffCommand);
|
|
|
|
stat = asn1PD_H245MaintenanceLoopOffCommand (pctxt, pvalue->u.maintenanceLoopOffCommand);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "maintenanceLoopOffCommand", -1);
|
|
|
|
break;
|
|
|
|
/* sendTerminalCapabilitySet */
|
|
case 2:
|
|
invokeStartElement (pctxt, "sendTerminalCapabilitySet", -1);
|
|
|
|
pvalue->u.sendTerminalCapabilitySet = ALLOC_ASN1ELEM (pctxt, H245SendTerminalCapabilitySet);
|
|
|
|
stat = asn1PD_H245SendTerminalCapabilitySet (pctxt, pvalue->u.sendTerminalCapabilitySet);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "sendTerminalCapabilitySet", -1);
|
|
|
|
break;
|
|
|
|
/* encryptionCommand */
|
|
case 3:
|
|
invokeStartElement (pctxt, "encryptionCommand", -1);
|
|
|
|
pvalue->u.encryptionCommand = ALLOC_ASN1ELEM (pctxt, H245EncryptionCommand);
|
|
|
|
stat = asn1PD_H245EncryptionCommand (pctxt, pvalue->u.encryptionCommand);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "encryptionCommand", -1);
|
|
|
|
break;
|
|
|
|
/* flowControlCommand */
|
|
case 4:
|
|
invokeStartElement (pctxt, "flowControlCommand", -1);
|
|
|
|
pvalue->u.flowControlCommand = ALLOC_ASN1ELEM (pctxt, H245FlowControlCommand);
|
|
|
|
stat = asn1PD_H245FlowControlCommand (pctxt, pvalue->u.flowControlCommand);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "flowControlCommand", -1);
|
|
|
|
break;
|
|
|
|
/* endSessionCommand */
|
|
case 5:
|
|
invokeStartElement (pctxt, "endSessionCommand", -1);
|
|
|
|
pvalue->u.endSessionCommand = ALLOC_ASN1ELEM (pctxt, H245EndSessionCommand);
|
|
|
|
stat = asn1PD_H245EndSessionCommand (pctxt, pvalue->u.endSessionCommand);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "endSessionCommand", -1);
|
|
|
|
break;
|
|
|
|
/* miscellaneousCommand */
|
|
case 6:
|
|
invokeStartElement (pctxt, "miscellaneousCommand", -1);
|
|
|
|
pvalue->u.miscellaneousCommand = ALLOC_ASN1ELEM (pctxt, H245MiscellaneousCommand);
|
|
|
|
stat = asn1PD_H245MiscellaneousCommand (pctxt, pvalue->u.miscellaneousCommand);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "miscellaneousCommand", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 8;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* communicationModeCommand */
|
|
case 8:
|
|
invokeStartElement (pctxt, "communicationModeCommand", -1);
|
|
|
|
pvalue->u.communicationModeCommand = ALLOC_ASN1ELEM (pctxt, H245CommunicationModeCommand);
|
|
|
|
stat = asn1PD_H245CommunicationModeCommand (pctxt, pvalue->u.communicationModeCommand);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "communicationModeCommand", -1);
|
|
|
|
break;
|
|
|
|
/* conferenceCommand */
|
|
case 9:
|
|
invokeStartElement (pctxt, "conferenceCommand", -1);
|
|
|
|
pvalue->u.conferenceCommand = ALLOC_ASN1ELEM (pctxt, H245ConferenceCommand);
|
|
|
|
stat = asn1PD_H245ConferenceCommand (pctxt, pvalue->u.conferenceCommand);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "conferenceCommand", -1);
|
|
|
|
break;
|
|
|
|
/* h223MultiplexReconfiguration */
|
|
case 10:
|
|
invokeStartElement (pctxt, "h223MultiplexReconfiguration", -1);
|
|
|
|
pvalue->u.h223MultiplexReconfiguration = ALLOC_ASN1ELEM (pctxt, H245H223MultiplexReconfiguration);
|
|
|
|
stat = asn1PD_H245H223MultiplexReconfiguration (pctxt, pvalue->u.h223MultiplexReconfiguration);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h223MultiplexReconfiguration", -1);
|
|
|
|
break;
|
|
|
|
/* newATMVCCommand */
|
|
case 11:
|
|
invokeStartElement (pctxt, "newATMVCCommand", -1);
|
|
|
|
pvalue->u.newATMVCCommand = ALLOC_ASN1ELEM (pctxt, H245NewATMVCCommand);
|
|
|
|
stat = asn1PD_H245NewATMVCCommand (pctxt, pvalue->u.newATMVCCommand);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "newATMVCCommand", -1);
|
|
|
|
break;
|
|
|
|
/* mobileMultilinkReconfigurationCommand */
|
|
case 12:
|
|
invokeStartElement (pctxt, "mobileMultilinkReconfigurationCommand", -1);
|
|
|
|
pvalue->u.mobileMultilinkReconfigurationCommand = ALLOC_ASN1ELEM (pctxt, H245MobileMultilinkReconfigurationCommand);
|
|
|
|
stat = asn1PD_H245MobileMultilinkReconfigurationCommand (pctxt, pvalue->u.mobileMultilinkReconfigurationCommand);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mobileMultilinkReconfigurationCommand", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FunctionNotUnderstood */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FunctionNotUnderstood (OOCTXT* pctxt, H245FunctionNotUnderstood* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* request */
|
|
case 0:
|
|
invokeStartElement (pctxt, "request", -1);
|
|
|
|
pvalue->u.request = ALLOC_ASN1ELEM (pctxt, H245RequestMessage);
|
|
|
|
stat = asn1PD_H245RequestMessage (pctxt, pvalue->u.request);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "request", -1);
|
|
|
|
break;
|
|
|
|
/* response */
|
|
case 1:
|
|
invokeStartElement (pctxt, "response", -1);
|
|
|
|
pvalue->u.response = ALLOC_ASN1ELEM (pctxt, H245ResponseMessage);
|
|
|
|
stat = asn1PD_H245ResponseMessage (pctxt, pvalue->u.response);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "response", -1);
|
|
|
|
break;
|
|
|
|
/* command */
|
|
case 2:
|
|
invokeStartElement (pctxt, "command", -1);
|
|
|
|
pvalue->u.command = ALLOC_ASN1ELEM (pctxt, H245CommandMessage);
|
|
|
|
stat = asn1PD_H245CommandMessage (pctxt, pvalue->u.command);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "command", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MasterSlaveDeterminationRelease */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MasterSlaveDeterminationRelease (OOCTXT* pctxt, H245MasterSlaveDeterminationRelease* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TerminalCapabilitySetRelease */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TerminalCapabilitySetRelease (OOCTXT* pctxt, H245TerminalCapabilitySetRelease* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* OpenLogicalChannelConfirm */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245OpenLogicalChannelConfirm (OOCTXT* pctxt, H245OpenLogicalChannelConfirm* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode forwardLogicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->forwardLogicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestChannelCloseRelease */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestChannelCloseRelease (OOCTXT* pctxt, H245RequestChannelCloseRelease* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode forwardLogicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->forwardLogicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "forwardLogicalChannelNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexEntrySendRelease_multiplexTableEntryNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexEntrySendRelease_multiplexTableEntryNumber (OOCTXT* pctxt, H245MultiplexEntrySendRelease_multiplexTableEntryNumber* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 15, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &pvalue->n);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
stat = asn1PD_H245MultiplexTableEntryNumber (pctxt, &pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultiplexEntrySendRelease */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultiplexEntrySendRelease (OOCTXT* pctxt, H245MultiplexEntrySendRelease* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode multiplexTableEntryNumber */
|
|
|
|
invokeStartElement (pctxt, "multiplexTableEntryNumber", -1);
|
|
|
|
stat = asn1PD_H245MultiplexEntrySendRelease_multiplexTableEntryNumber (pctxt, &pvalue->multiplexTableEntryNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexTableEntryNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestMultiplexEntryRelease_entryNumbers */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestMultiplexEntryRelease_entryNumbers (OOCTXT* pctxt, H245RequestMultiplexEntryRelease_entryNumbers* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 15, 0 };
|
|
int stat = ASN_OK;
|
|
ASN1UINT xx1;
|
|
|
|
/* decode length determinant */
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeLength (pctxt, &pvalue->n);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
/* decode elements */
|
|
|
|
for (xx1 = 0; xx1 < pvalue->n; xx1++) {
|
|
invokeStartElement (pctxt, "elem", xx1);
|
|
|
|
stat = asn1PD_H245MultiplexTableEntryNumber (pctxt, &pvalue->elem[xx1]);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeEndElement (pctxt, "elem", xx1);
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestMultiplexEntryRelease */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestMultiplexEntryRelease (OOCTXT* pctxt, H245RequestMultiplexEntryRelease* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode entryNumbers */
|
|
|
|
invokeStartElement (pctxt, "entryNumbers", -1);
|
|
|
|
stat = asn1PD_H245RequestMultiplexEntryRelease_entryNumbers (pctxt, &pvalue->entryNumbers);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "entryNumbers", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* RequestModeRelease */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245RequestModeRelease (OOCTXT* pctxt, H245RequestModeRelease* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MiscellaneousIndication_type_videoNotDecodedMBs */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MiscellaneousIndication_type_videoNotDecodedMBs (OOCTXT* pctxt, H245MiscellaneousIndication_type_videoNotDecodedMBs* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode firstMB */
|
|
|
|
invokeStartElement (pctxt, "firstMB", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->firstMB, 1U, 8192U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->firstMB);
|
|
|
|
invokeEndElement (pctxt, "firstMB", -1);
|
|
|
|
/* decode numberOfMBs */
|
|
|
|
invokeStartElement (pctxt, "numberOfMBs", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->numberOfMBs, 1U, 8192U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->numberOfMBs);
|
|
|
|
invokeEndElement (pctxt, "numberOfMBs", -1);
|
|
|
|
/* decode temporalReference */
|
|
|
|
invokeStartElement (pctxt, "temporalReference", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->temporalReference, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->temporalReference);
|
|
|
|
invokeEndElement (pctxt, "temporalReference", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MiscellaneousIndication_type */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MiscellaneousIndication_type (OOCTXT* pctxt, H245MiscellaneousIndication_type* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 9);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* logicalChannelActive */
|
|
case 0:
|
|
invokeStartElement (pctxt, "logicalChannelActive", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "logicalChannelActive", -1);
|
|
|
|
break;
|
|
|
|
/* logicalChannelInactive */
|
|
case 1:
|
|
invokeStartElement (pctxt, "logicalChannelInactive", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "logicalChannelInactive", -1);
|
|
|
|
break;
|
|
|
|
/* multipointConference */
|
|
case 2:
|
|
invokeStartElement (pctxt, "multipointConference", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "multipointConference", -1);
|
|
|
|
break;
|
|
|
|
/* cancelMultipointConference */
|
|
case 3:
|
|
invokeStartElement (pctxt, "cancelMultipointConference", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "cancelMultipointConference", -1);
|
|
|
|
break;
|
|
|
|
/* multipointZeroComm */
|
|
case 4:
|
|
invokeStartElement (pctxt, "multipointZeroComm", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "multipointZeroComm", -1);
|
|
|
|
break;
|
|
|
|
/* cancelMultipointZeroComm */
|
|
case 5:
|
|
invokeStartElement (pctxt, "cancelMultipointZeroComm", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "cancelMultipointZeroComm", -1);
|
|
|
|
break;
|
|
|
|
/* multipointSecondaryStatus */
|
|
case 6:
|
|
invokeStartElement (pctxt, "multipointSecondaryStatus", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "multipointSecondaryStatus", -1);
|
|
|
|
break;
|
|
|
|
/* cancelMultipointSecondaryStatus */
|
|
case 7:
|
|
invokeStartElement (pctxt, "cancelMultipointSecondaryStatus", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "cancelMultipointSecondaryStatus", -1);
|
|
|
|
break;
|
|
|
|
/* videoIndicateReadyToActivate */
|
|
case 8:
|
|
invokeStartElement (pctxt, "videoIndicateReadyToActivate", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "videoIndicateReadyToActivate", -1);
|
|
|
|
break;
|
|
|
|
/* videoTemporalSpatialTradeOff */
|
|
case 9:
|
|
invokeStartElement (pctxt, "videoTemporalSpatialTradeOff", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->u.videoTemporalSpatialTradeOff, 0U, 31U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.videoTemporalSpatialTradeOff);
|
|
|
|
invokeEndElement (pctxt, "videoTemporalSpatialTradeOff", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 11;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* videoNotDecodedMBs */
|
|
case 11:
|
|
invokeStartElement (pctxt, "videoNotDecodedMBs", -1);
|
|
|
|
pvalue->u.videoNotDecodedMBs = ALLOC_ASN1ELEM (pctxt, H245MiscellaneousIndication_type_videoNotDecodedMBs);
|
|
|
|
stat = asn1PD_H245MiscellaneousIndication_type_videoNotDecodedMBs (pctxt, pvalue->u.videoNotDecodedMBs);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "videoNotDecodedMBs", -1);
|
|
|
|
break;
|
|
|
|
/* transportCapability */
|
|
case 12:
|
|
invokeStartElement (pctxt, "transportCapability", -1);
|
|
|
|
pvalue->u.transportCapability = ALLOC_ASN1ELEM (pctxt, H245TransportCapability);
|
|
|
|
stat = asn1PD_H245TransportCapability (pctxt, pvalue->u.transportCapability);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "transportCapability", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MiscellaneousIndication */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MiscellaneousIndication (OOCTXT* pctxt, H245MiscellaneousIndication* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode logicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->logicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
/* decode type */
|
|
|
|
invokeStartElement (pctxt, "type", -1);
|
|
|
|
stat = asn1PD_H245MiscellaneousIndication_type (pctxt, &pvalue->type);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "type", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* JitterIndication_scope */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245JitterIndication_scope (OOCTXT* pctxt, H245JitterIndication_scope* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* logicalChannelNumber */
|
|
case 0:
|
|
invokeStartElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->u.logicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
break;
|
|
|
|
/* resourceID */
|
|
case 1:
|
|
invokeStartElement (pctxt, "resourceID", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.resourceID, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.resourceID);
|
|
|
|
invokeEndElement (pctxt, "resourceID", -1);
|
|
|
|
break;
|
|
|
|
/* wholeMultiplex */
|
|
case 2:
|
|
invokeStartElement (pctxt, "wholeMultiplex", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "wholeMultiplex", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* JitterIndication */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245JitterIndication (OOCTXT* pctxt, H245JitterIndication* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.skippedFrameCountPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.additionalDecoderBufferPresent = optbit;
|
|
|
|
/* decode scope */
|
|
|
|
invokeStartElement (pctxt, "scope", -1);
|
|
|
|
stat = asn1PD_H245JitterIndication_scope (pctxt, &pvalue->scope);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "scope", -1);
|
|
|
|
/* decode estimatedReceivedJitterMantissa */
|
|
|
|
invokeStartElement (pctxt, "estimatedReceivedJitterMantissa", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->estimatedReceivedJitterMantissa, 0U, 3U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->estimatedReceivedJitterMantissa);
|
|
|
|
invokeEndElement (pctxt, "estimatedReceivedJitterMantissa", -1);
|
|
|
|
/* decode estimatedReceivedJitterExponent */
|
|
|
|
invokeStartElement (pctxt, "estimatedReceivedJitterExponent", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->estimatedReceivedJitterExponent, 0U, 7U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->estimatedReceivedJitterExponent);
|
|
|
|
invokeEndElement (pctxt, "estimatedReceivedJitterExponent", -1);
|
|
|
|
/* decode skippedFrameCount */
|
|
|
|
if (pvalue->m.skippedFrameCountPresent) {
|
|
invokeStartElement (pctxt, "skippedFrameCount", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->skippedFrameCount, 0U, 15U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->skippedFrameCount);
|
|
|
|
invokeEndElement (pctxt, "skippedFrameCount", -1);
|
|
}
|
|
|
|
/* decode additionalDecoderBuffer */
|
|
|
|
if (pvalue->m.additionalDecoderBufferPresent) {
|
|
invokeStartElement (pctxt, "additionalDecoderBuffer", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->additionalDecoderBuffer, 0U, 262143U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->additionalDecoderBuffer);
|
|
|
|
invokeEndElement (pctxt, "additionalDecoderBuffer", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H223SkewIndication */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H223SkewIndication (OOCTXT* pctxt, H245H223SkewIndication* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode logicalChannelNumber1 */
|
|
|
|
invokeStartElement (pctxt, "logicalChannelNumber1", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->logicalChannelNumber1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelNumber1", -1);
|
|
|
|
/* decode logicalChannelNumber2 */
|
|
|
|
invokeStartElement (pctxt, "logicalChannelNumber2", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->logicalChannelNumber2);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelNumber2", -1);
|
|
|
|
/* decode skew */
|
|
|
|
invokeStartElement (pctxt, "skew", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->skew, 0U, 4095U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->skew);
|
|
|
|
invokeEndElement (pctxt, "skew", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCIndication_aal_aal1_clockRecovery */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCIndication_aal_aal1_clockRecovery (OOCTXT* pctxt, H245NewATMVCIndication_aal_aal1_clockRecovery* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nullClockRecovery */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nullClockRecovery", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "nullClockRecovery", -1);
|
|
|
|
break;
|
|
|
|
/* srtsClockRecovery */
|
|
case 1:
|
|
invokeStartElement (pctxt, "srtsClockRecovery", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "srtsClockRecovery", -1);
|
|
|
|
break;
|
|
|
|
/* adaptiveClockRecovery */
|
|
case 2:
|
|
invokeStartElement (pctxt, "adaptiveClockRecovery", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "adaptiveClockRecovery", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCIndication_aal_aal1_errorCorrection */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCIndication_aal_aal1_errorCorrection (OOCTXT* pctxt, H245NewATMVCIndication_aal_aal1_errorCorrection* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nullErrorCorrection */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nullErrorCorrection", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "nullErrorCorrection", -1);
|
|
|
|
break;
|
|
|
|
/* longInterleaver */
|
|
case 1:
|
|
invokeStartElement (pctxt, "longInterleaver", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "longInterleaver", -1);
|
|
|
|
break;
|
|
|
|
/* shortInterleaver */
|
|
case 2:
|
|
invokeStartElement (pctxt, "shortInterleaver", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "shortInterleaver", -1);
|
|
|
|
break;
|
|
|
|
/* errorCorrectionOnly */
|
|
case 3:
|
|
invokeStartElement (pctxt, "errorCorrectionOnly", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "errorCorrectionOnly", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 5;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCIndication_aal_aal1 */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCIndication_aal_aal1 (OOCTXT* pctxt, H245NewATMVCIndication_aal_aal1* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode clockRecovery */
|
|
|
|
invokeStartElement (pctxt, "clockRecovery", -1);
|
|
|
|
stat = asn1PD_H245NewATMVCIndication_aal_aal1_clockRecovery (pctxt, &pvalue->clockRecovery);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "clockRecovery", -1);
|
|
|
|
/* decode errorCorrection */
|
|
|
|
invokeStartElement (pctxt, "errorCorrection", -1);
|
|
|
|
stat = asn1PD_H245NewATMVCIndication_aal_aal1_errorCorrection (pctxt, &pvalue->errorCorrection);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "errorCorrection", -1);
|
|
|
|
/* decode structuredDataTransfer */
|
|
|
|
invokeStartElement (pctxt, "structuredDataTransfer", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->structuredDataTransfer);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->structuredDataTransfer);
|
|
|
|
invokeEndElement (pctxt, "structuredDataTransfer", -1);
|
|
|
|
/* decode partiallyFilledCells */
|
|
|
|
invokeStartElement (pctxt, "partiallyFilledCells", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->partiallyFilledCells);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->partiallyFilledCells);
|
|
|
|
invokeEndElement (pctxt, "partiallyFilledCells", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCIndication_aal_aal5 */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCIndication_aal_aal5 (OOCTXT* pctxt, H245NewATMVCIndication_aal_aal5* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode forwardMaximumSDUSize */
|
|
|
|
invokeStartElement (pctxt, "forwardMaximumSDUSize", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->forwardMaximumSDUSize, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->forwardMaximumSDUSize);
|
|
|
|
invokeEndElement (pctxt, "forwardMaximumSDUSize", -1);
|
|
|
|
/* decode backwardMaximumSDUSize */
|
|
|
|
invokeStartElement (pctxt, "backwardMaximumSDUSize", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->backwardMaximumSDUSize, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->backwardMaximumSDUSize);
|
|
|
|
invokeEndElement (pctxt, "backwardMaximumSDUSize", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCIndication_aal */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCIndication_aal (OOCTXT* pctxt, H245NewATMVCIndication_aal* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* aal1 */
|
|
case 0:
|
|
invokeStartElement (pctxt, "aal1", -1);
|
|
|
|
pvalue->u.aal1 = ALLOC_ASN1ELEM (pctxt, H245NewATMVCIndication_aal_aal1);
|
|
|
|
stat = asn1PD_H245NewATMVCIndication_aal_aal1 (pctxt, pvalue->u.aal1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "aal1", -1);
|
|
|
|
break;
|
|
|
|
/* aal5 */
|
|
case 1:
|
|
invokeStartElement (pctxt, "aal5", -1);
|
|
|
|
pvalue->u.aal5 = ALLOC_ASN1ELEM (pctxt, H245NewATMVCIndication_aal_aal5);
|
|
|
|
stat = asn1PD_H245NewATMVCIndication_aal_aal5 (pctxt, pvalue->u.aal5);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "aal5", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCIndication_multiplex */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCIndication_multiplex (OOCTXT* pctxt, H245NewATMVCIndication_multiplex* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* noMultiplex */
|
|
case 0:
|
|
invokeStartElement (pctxt, "noMultiplex", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "noMultiplex", -1);
|
|
|
|
break;
|
|
|
|
/* transportStream */
|
|
case 1:
|
|
invokeStartElement (pctxt, "transportStream", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "transportStream", -1);
|
|
|
|
break;
|
|
|
|
/* programStream */
|
|
case 2:
|
|
invokeStartElement (pctxt, "programStream", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "programStream", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCIndication_reverseParameters_multiplex */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCIndication_reverseParameters_multiplex (OOCTXT* pctxt, H245NewATMVCIndication_reverseParameters_multiplex* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* noMultiplex */
|
|
case 0:
|
|
invokeStartElement (pctxt, "noMultiplex", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "noMultiplex", -1);
|
|
|
|
break;
|
|
|
|
/* transportStream */
|
|
case 1:
|
|
invokeStartElement (pctxt, "transportStream", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "transportStream", -1);
|
|
|
|
break;
|
|
|
|
/* programStream */
|
|
case 2:
|
|
invokeStartElement (pctxt, "programStream", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "programStream", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCIndication_reverseParameters */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCIndication_reverseParameters (OOCTXT* pctxt, H245NewATMVCIndication_reverseParameters* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode bitRate */
|
|
|
|
invokeStartElement (pctxt, "bitRate", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->bitRate, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->bitRate);
|
|
|
|
invokeEndElement (pctxt, "bitRate", -1);
|
|
|
|
/* decode bitRateLockedToPCRClock */
|
|
|
|
invokeStartElement (pctxt, "bitRateLockedToPCRClock", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->bitRateLockedToPCRClock);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->bitRateLockedToPCRClock);
|
|
|
|
invokeEndElement (pctxt, "bitRateLockedToPCRClock", -1);
|
|
|
|
/* decode bitRateLockedToNetworkClock */
|
|
|
|
invokeStartElement (pctxt, "bitRateLockedToNetworkClock", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->bitRateLockedToNetworkClock);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->bitRateLockedToNetworkClock);
|
|
|
|
invokeEndElement (pctxt, "bitRateLockedToNetworkClock", -1);
|
|
|
|
/* decode multiplex */
|
|
|
|
invokeStartElement (pctxt, "multiplex", -1);
|
|
|
|
stat = asn1PD_H245NewATMVCIndication_reverseParameters_multiplex (pctxt, &pvalue->multiplex);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplex", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* NewATMVCIndication */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245NewATMVCIndication (OOCTXT* pctxt, H245NewATMVCIndication* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
/* decode resourceID */
|
|
|
|
invokeStartElement (pctxt, "resourceID", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->resourceID, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->resourceID);
|
|
|
|
invokeEndElement (pctxt, "resourceID", -1);
|
|
|
|
/* decode bitRate */
|
|
|
|
invokeStartElement (pctxt, "bitRate", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->bitRate, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->bitRate);
|
|
|
|
invokeEndElement (pctxt, "bitRate", -1);
|
|
|
|
/* decode bitRateLockedToPCRClock */
|
|
|
|
invokeStartElement (pctxt, "bitRateLockedToPCRClock", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->bitRateLockedToPCRClock);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->bitRateLockedToPCRClock);
|
|
|
|
invokeEndElement (pctxt, "bitRateLockedToPCRClock", -1);
|
|
|
|
/* decode bitRateLockedToNetworkClock */
|
|
|
|
invokeStartElement (pctxt, "bitRateLockedToNetworkClock", -1);
|
|
|
|
stat = DECODEBIT (pctxt, &pvalue->bitRateLockedToNetworkClock);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeBoolValue (pctxt, pvalue->bitRateLockedToNetworkClock);
|
|
|
|
invokeEndElement (pctxt, "bitRateLockedToNetworkClock", -1);
|
|
|
|
/* decode aal */
|
|
|
|
invokeStartElement (pctxt, "aal", -1);
|
|
|
|
stat = asn1PD_H245NewATMVCIndication_aal (pctxt, &pvalue->aal);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "aal", -1);
|
|
|
|
/* decode multiplex */
|
|
|
|
invokeStartElement (pctxt, "multiplex", -1);
|
|
|
|
stat = asn1PD_H245NewATMVCIndication_multiplex (pctxt, &pvalue->multiplex);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplex", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 1 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.reverseParametersPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "reverseParameters", -1);
|
|
|
|
stat = asn1PD_H245NewATMVCIndication_reverseParameters (pctxt, &pvalue->reverseParameters);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "reverseParameters", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UserInputIndication_userInputSupportIndication */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UserInputIndication_userInputSupportIndication (OOCTXT* pctxt, H245UserInputIndication_userInputSupportIndication* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* basicString */
|
|
case 1:
|
|
invokeStartElement (pctxt, "basicString", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "basicString", -1);
|
|
|
|
break;
|
|
|
|
/* iA5String */
|
|
case 2:
|
|
invokeStartElement (pctxt, "iA5String", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "iA5String", -1);
|
|
|
|
break;
|
|
|
|
/* generalString */
|
|
case 3:
|
|
invokeStartElement (pctxt, "generalString", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "generalString", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 5;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UserInputIndication_signal_rtp */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UserInputIndication_signal_rtp (OOCTXT* pctxt, H245UserInputIndication_signal_rtp* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.timestampPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.expirationTimePresent = optbit;
|
|
|
|
/* decode timestamp */
|
|
|
|
if (pvalue->m.timestampPresent) {
|
|
invokeStartElement (pctxt, "timestamp", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->timestamp, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->timestamp);
|
|
|
|
invokeEndElement (pctxt, "timestamp", -1);
|
|
}
|
|
|
|
/* decode expirationTime */
|
|
|
|
if (pvalue->m.expirationTimePresent) {
|
|
invokeStartElement (pctxt, "expirationTime", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->expirationTime, 0U, ASN1UINT_MAX);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->expirationTime);
|
|
|
|
invokeEndElement (pctxt, "expirationTime", -1);
|
|
}
|
|
|
|
/* decode logicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->logicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UserInputIndication_signal */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
extern EXTERN const char* gs_MULTIMEDIA_SYSTEM_CONTROL_UserInputIndication_signal_signalType_CharSet;
|
|
|
|
EXTERN int asn1PD_H245UserInputIndication_signal (OOCTXT* pctxt, H245UserInputIndication_signal* pvalue)
|
|
{
|
|
static Asn1SizeCnst signalType_lsize1 = { 0, 1, 1, 0 };
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
OOCTXT lctxt2;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.durationPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.rtpPresent = optbit;
|
|
|
|
/* decode signalType */
|
|
|
|
invokeStartElement (pctxt, "signalType", -1);
|
|
|
|
addSizeConstraint (pctxt, &signalType_lsize1);
|
|
|
|
stat = decodeConstrainedStringEx (pctxt, &pvalue->signalType, gs_MULTIMEDIA_SYSTEM_CONTROL_UserInputIndication_signal_signalType_CharSet, 8, 5, 7);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeCharStrValue (pctxt, pvalue->signalType);
|
|
|
|
invokeEndElement (pctxt, "signalType", -1);
|
|
|
|
/* decode duration */
|
|
|
|
if (pvalue->m.durationPresent) {
|
|
invokeStartElement (pctxt, "duration", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->duration, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->duration);
|
|
|
|
invokeEndElement (pctxt, "duration", -1);
|
|
}
|
|
|
|
/* decode rtp */
|
|
|
|
if (pvalue->m.rtpPresent) {
|
|
invokeStartElement (pctxt, "rtp", -1);
|
|
|
|
stat = asn1PD_H245UserInputIndication_signal_rtp (pctxt, &pvalue->rtp);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "rtp", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
if (i < 1 && openType.numocts > 0) { /* known element */
|
|
copyContext (&lctxt2, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (i) {
|
|
case 0:
|
|
pvalue->m.rtpPayloadIndicationPresent = 1;
|
|
|
|
invokeStartElement (pctxt, "rtpPayloadIndication", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "rtpPayloadIndication", -1);
|
|
break;
|
|
|
|
default:
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
copyContext (pctxt, &lctxt2);
|
|
}
|
|
else { /* unknown element */
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UserInputIndication_signalUpdate_rtp */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UserInputIndication_signalUpdate_rtp (OOCTXT* pctxt, H245UserInputIndication_signalUpdate_rtp* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode logicalChannelNumber */
|
|
|
|
invokeStartElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->logicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UserInputIndication_signalUpdate */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UserInputIndication_signalUpdate (OOCTXT* pctxt, H245UserInputIndication_signalUpdate* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.rtpPresent = optbit;
|
|
|
|
/* decode duration */
|
|
|
|
invokeStartElement (pctxt, "duration", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->duration, 1U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->duration);
|
|
|
|
invokeEndElement (pctxt, "duration", -1);
|
|
|
|
/* decode rtp */
|
|
|
|
if (pvalue->m.rtpPresent) {
|
|
invokeStartElement (pctxt, "rtp", -1);
|
|
|
|
stat = asn1PD_H245UserInputIndication_signalUpdate_rtp (pctxt, &pvalue->rtp);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "rtp", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UserInputIndication_extendedAlphanumeric */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UserInputIndication_extendedAlphanumeric (OOCTXT* pctxt, H245UserInputIndication_extendedAlphanumeric* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.rtpPayloadIndicationPresent = optbit;
|
|
|
|
/* decode alphanumeric */
|
|
|
|
invokeStartElement (pctxt, "alphanumeric", -1);
|
|
|
|
stat = decodeVarWidthCharString (pctxt, &pvalue->alphanumeric);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeCharStrValue (pctxt, pvalue->alphanumeric);
|
|
|
|
invokeEndElement (pctxt, "alphanumeric", -1);
|
|
|
|
/* decode rtpPayloadIndication */
|
|
|
|
if (pvalue->m.rtpPayloadIndicationPresent) {
|
|
invokeStartElement (pctxt, "rtpPayloadIndication", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "rtpPayloadIndication", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* UserInputIndication */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245UserInputIndication (OOCTXT* pctxt, H245UserInputIndication* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardParameter);
|
|
|
|
stat = asn1PD_H245NonStandardParameter (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* alphanumeric */
|
|
case 1:
|
|
invokeStartElement (pctxt, "alphanumeric", -1);
|
|
|
|
stat = decodeVarWidthCharString (pctxt, &pvalue->u.alphanumeric);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeCharStrValue (pctxt, pvalue->u.alphanumeric);
|
|
|
|
invokeEndElement (pctxt, "alphanumeric", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 3;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* userInputSupportIndication */
|
|
case 3:
|
|
invokeStartElement (pctxt, "userInputSupportIndication", -1);
|
|
|
|
pvalue->u.userInputSupportIndication = ALLOC_ASN1ELEM (pctxt, H245UserInputIndication_userInputSupportIndication);
|
|
|
|
stat = asn1PD_H245UserInputIndication_userInputSupportIndication (pctxt, pvalue->u.userInputSupportIndication);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "userInputSupportIndication", -1);
|
|
|
|
break;
|
|
|
|
/* signal */
|
|
case 4:
|
|
invokeStartElement (pctxt, "signal", -1);
|
|
|
|
pvalue->u.signal = ALLOC_ASN1ELEM (pctxt, H245UserInputIndication_signal);
|
|
|
|
stat = asn1PD_H245UserInputIndication_signal (pctxt, pvalue->u.signal);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "signal", -1);
|
|
|
|
break;
|
|
|
|
/* signalUpdate */
|
|
case 5:
|
|
invokeStartElement (pctxt, "signalUpdate", -1);
|
|
|
|
pvalue->u.signalUpdate = ALLOC_ASN1ELEM (pctxt, H245UserInputIndication_signalUpdate);
|
|
|
|
stat = asn1PD_H245UserInputIndication_signalUpdate (pctxt, pvalue->u.signalUpdate);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "signalUpdate", -1);
|
|
|
|
break;
|
|
|
|
/* extendedAlphanumeric */
|
|
case 6:
|
|
invokeStartElement (pctxt, "extendedAlphanumeric", -1);
|
|
|
|
pvalue->u.extendedAlphanumeric = ALLOC_ASN1ELEM (pctxt, H245UserInputIndication_extendedAlphanumeric);
|
|
|
|
stat = asn1PD_H245UserInputIndication_extendedAlphanumeric (pctxt, pvalue->u.extendedAlphanumeric);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "extendedAlphanumeric", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* H2250MaximumSkewIndication */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245H2250MaximumSkewIndication (OOCTXT* pctxt, H245H2250MaximumSkewIndication* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode logicalChannelNumber1 */
|
|
|
|
invokeStartElement (pctxt, "logicalChannelNumber1", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->logicalChannelNumber1);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelNumber1", -1);
|
|
|
|
/* decode logicalChannelNumber2 */
|
|
|
|
invokeStartElement (pctxt, "logicalChannelNumber2", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->logicalChannelNumber2);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelNumber2", -1);
|
|
|
|
/* decode maximumSkew */
|
|
|
|
invokeStartElement (pctxt, "maximumSkew", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->maximumSkew, 0U, 4095U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->maximumSkew);
|
|
|
|
invokeEndElement (pctxt, "maximumSkew", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MCLocationIndication */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MCLocationIndication (OOCTXT* pctxt, H245MCLocationIndication* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode signalAddress */
|
|
|
|
invokeStartElement (pctxt, "signalAddress", -1);
|
|
|
|
stat = asn1PD_H245TransportAddress (pctxt, &pvalue->signalAddress);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "signalAddress", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* TerminalYouAreSeeingInSubPictureNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245TerminalYouAreSeeingInSubPictureNumber (OOCTXT* pctxt, H245TerminalYouAreSeeingInSubPictureNumber* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode terminalNumber */
|
|
|
|
invokeStartElement (pctxt, "terminalNumber", -1);
|
|
|
|
stat = asn1PD_H245TerminalNumber (pctxt, &pvalue->terminalNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalNumber", -1);
|
|
|
|
/* decode subPictureNumber */
|
|
|
|
invokeStartElement (pctxt, "subPictureNumber", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->subPictureNumber, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->subPictureNumber);
|
|
|
|
invokeEndElement (pctxt, "subPictureNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VideoIndicateCompose */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245VideoIndicateCompose (OOCTXT* pctxt, H245VideoIndicateCompose* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode compositionNumber */
|
|
|
|
invokeStartElement (pctxt, "compositionNumber", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->compositionNumber, 0U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->compositionNumber);
|
|
|
|
invokeEndElement (pctxt, "compositionNumber", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* ConferenceIndication */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245ConferenceIndication (OOCTXT* pctxt, H245ConferenceIndication* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 9);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* sbeNumber */
|
|
case 0:
|
|
invokeStartElement (pctxt, "sbeNumber", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->u.sbeNumber, 0U, 9U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.sbeNumber);
|
|
|
|
invokeEndElement (pctxt, "sbeNumber", -1);
|
|
|
|
break;
|
|
|
|
/* terminalNumberAssign */
|
|
case 1:
|
|
invokeStartElement (pctxt, "terminalNumberAssign", -1);
|
|
|
|
pvalue->u.terminalNumberAssign = ALLOC_ASN1ELEM (pctxt, H245TerminalLabel);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, pvalue->u.terminalNumberAssign);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalNumberAssign", -1);
|
|
|
|
break;
|
|
|
|
/* terminalJoinedConference */
|
|
case 2:
|
|
invokeStartElement (pctxt, "terminalJoinedConference", -1);
|
|
|
|
pvalue->u.terminalJoinedConference = ALLOC_ASN1ELEM (pctxt, H245TerminalLabel);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, pvalue->u.terminalJoinedConference);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalJoinedConference", -1);
|
|
|
|
break;
|
|
|
|
/* terminalLeftConference */
|
|
case 3:
|
|
invokeStartElement (pctxt, "terminalLeftConference", -1);
|
|
|
|
pvalue->u.terminalLeftConference = ALLOC_ASN1ELEM (pctxt, H245TerminalLabel);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, pvalue->u.terminalLeftConference);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalLeftConference", -1);
|
|
|
|
break;
|
|
|
|
/* seenByAtLeastOneOther */
|
|
case 4:
|
|
invokeStartElement (pctxt, "seenByAtLeastOneOther", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "seenByAtLeastOneOther", -1);
|
|
|
|
break;
|
|
|
|
/* cancelSeenByAtLeastOneOther */
|
|
case 5:
|
|
invokeStartElement (pctxt, "cancelSeenByAtLeastOneOther", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "cancelSeenByAtLeastOneOther", -1);
|
|
|
|
break;
|
|
|
|
/* seenByAll */
|
|
case 6:
|
|
invokeStartElement (pctxt, "seenByAll", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "seenByAll", -1);
|
|
|
|
break;
|
|
|
|
/* cancelSeenByAll */
|
|
case 7:
|
|
invokeStartElement (pctxt, "cancelSeenByAll", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "cancelSeenByAll", -1);
|
|
|
|
break;
|
|
|
|
/* terminalYouAreSeeing */
|
|
case 8:
|
|
invokeStartElement (pctxt, "terminalYouAreSeeing", -1);
|
|
|
|
pvalue->u.terminalYouAreSeeing = ALLOC_ASN1ELEM (pctxt, H245TerminalLabel);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, pvalue->u.terminalYouAreSeeing);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalYouAreSeeing", -1);
|
|
|
|
break;
|
|
|
|
/* requestForFloor */
|
|
case 9:
|
|
invokeStartElement (pctxt, "requestForFloor", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "requestForFloor", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 11;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* withdrawChairToken */
|
|
case 11:
|
|
invokeStartElement (pctxt, "withdrawChairToken", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "withdrawChairToken", -1);
|
|
|
|
break;
|
|
|
|
/* floorRequested */
|
|
case 12:
|
|
invokeStartElement (pctxt, "floorRequested", -1);
|
|
|
|
pvalue->u.floorRequested = ALLOC_ASN1ELEM (pctxt, H245TerminalLabel);
|
|
|
|
stat = asn1PD_H245TerminalLabel (pctxt, pvalue->u.floorRequested);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "floorRequested", -1);
|
|
|
|
break;
|
|
|
|
/* terminalYouAreSeeingInSubPictureNumber */
|
|
case 13:
|
|
invokeStartElement (pctxt, "terminalYouAreSeeingInSubPictureNumber", -1);
|
|
|
|
pvalue->u.terminalYouAreSeeingInSubPictureNumber = ALLOC_ASN1ELEM (pctxt, H245TerminalYouAreSeeingInSubPictureNumber);
|
|
|
|
stat = asn1PD_H245TerminalYouAreSeeingInSubPictureNumber (pctxt, pvalue->u.terminalYouAreSeeingInSubPictureNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalYouAreSeeingInSubPictureNumber", -1);
|
|
|
|
break;
|
|
|
|
/* videoIndicateCompose */
|
|
case 14:
|
|
invokeStartElement (pctxt, "videoIndicateCompose", -1);
|
|
|
|
pvalue->u.videoIndicateCompose = ALLOC_ASN1ELEM (pctxt, H245VideoIndicateCompose);
|
|
|
|
stat = asn1PD_H245VideoIndicateCompose (pctxt, pvalue->u.videoIndicateCompose);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "videoIndicateCompose", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VendorIdentification_productNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245VendorIdentification_productNumber (OOCTXT* pctxt, H245VendorIdentification_productNumber* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VendorIdentification_versionNumber */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245VendorIdentification_versionNumber (OOCTXT* pctxt, H245VendorIdentification_versionNumber* pvalue)
|
|
{
|
|
static Asn1SizeCnst lsize1 = { 0, 1, 256, 0 };
|
|
int stat = ASN_OK;
|
|
|
|
addSizeConstraint (pctxt, &lsize1);
|
|
|
|
stat = decodeOctetString (pctxt,
|
|
&pvalue->numocts,
|
|
pvalue->data,
|
|
sizeof(pvalue->data));
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->numocts, pvalue->data);
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* VendorIdentification */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245VendorIdentification (OOCTXT* pctxt, H245VendorIdentification* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.productNumberPresent = optbit;
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.versionNumberPresent = optbit;
|
|
|
|
/* decode vendor */
|
|
|
|
invokeStartElement (pctxt, "vendor", -1);
|
|
|
|
stat = asn1PD_H245NonStandardIdentifier (pctxt, &pvalue->vendor);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "vendor", -1);
|
|
|
|
/* decode productNumber */
|
|
|
|
if (pvalue->m.productNumberPresent) {
|
|
invokeStartElement (pctxt, "productNumber", -1);
|
|
|
|
stat = asn1PD_H245VendorIdentification_productNumber (pctxt, &pvalue->productNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "productNumber", -1);
|
|
}
|
|
|
|
/* decode versionNumber */
|
|
|
|
if (pvalue->m.versionNumberPresent) {
|
|
invokeStartElement (pctxt, "versionNumber", -1);
|
|
|
|
stat = asn1PD_H245VendorIdentification_versionNumber (pctxt, &pvalue->versionNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "versionNumber", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FunctionNotSupported_cause */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FunctionNotSupported_cause (OOCTXT* pctxt, H245FunctionNotSupported_cause* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* syntaxError */
|
|
case 0:
|
|
invokeStartElement (pctxt, "syntaxError", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "syntaxError", -1);
|
|
|
|
break;
|
|
|
|
/* semanticError */
|
|
case 1:
|
|
invokeStartElement (pctxt, "semanticError", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "semanticError", -1);
|
|
|
|
break;
|
|
|
|
/* unknownFunction */
|
|
case 2:
|
|
invokeStartElement (pctxt, "unknownFunction", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "unknownFunction", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FunctionNotSupported */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FunctionNotSupported (OOCTXT* pctxt, H245FunctionNotSupported* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* optional bits */
|
|
|
|
memset (&pvalue->m, 0, sizeof(pvalue->m));
|
|
|
|
DECODEBIT (pctxt, &optbit);
|
|
pvalue->m.returnedFunctionPresent = optbit;
|
|
|
|
/* decode cause */
|
|
|
|
invokeStartElement (pctxt, "cause", -1);
|
|
|
|
stat = asn1PD_H245FunctionNotSupported_cause (pctxt, &pvalue->cause);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "cause", -1);
|
|
|
|
/* decode returnedFunction */
|
|
|
|
if (pvalue->m.returnedFunctionPresent) {
|
|
invokeStartElement (pctxt, "returnedFunction", -1);
|
|
|
|
stat = decodeDynOctetString (pctxt, (ASN1DynOctStr*)&pvalue->returnedFunction);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeOctStrValue (pctxt, pvalue->returnedFunction.numocts, pvalue->returnedFunction.data);
|
|
|
|
invokeEndElement (pctxt, "returnedFunction", -1);
|
|
}
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultilinkIndication_crcDesired */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultilinkIndication_crcDesired (OOCTXT* pctxt, H245MultilinkIndication_crcDesired* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultilinkIndication_excessiveError */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultilinkIndication_excessiveError (OOCTXT* pctxt, H245MultilinkIndication_excessiveError* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode connectionIdentifier */
|
|
|
|
invokeStartElement (pctxt, "connectionIdentifier", -1);
|
|
|
|
stat = asn1PD_H245ConnectionIdentifier (pctxt, &pvalue->connectionIdentifier);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "connectionIdentifier", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultilinkIndication */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultilinkIndication (OOCTXT* pctxt, H245MultilinkIndication* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardMessage);
|
|
|
|
stat = asn1PD_H245NonStandardMessage (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* crcDesired */
|
|
case 1:
|
|
invokeStartElement (pctxt, "crcDesired", -1);
|
|
|
|
pvalue->u.crcDesired = ALLOC_ASN1ELEM (pctxt, H245MultilinkIndication_crcDesired);
|
|
|
|
stat = asn1PD_H245MultilinkIndication_crcDesired (pctxt, pvalue->u.crcDesired);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "crcDesired", -1);
|
|
|
|
break;
|
|
|
|
/* excessiveError */
|
|
case 2:
|
|
invokeStartElement (pctxt, "excessiveError", -1);
|
|
|
|
pvalue->u.excessiveError = ALLOC_ASN1ELEM (pctxt, H245MultilinkIndication_excessiveError);
|
|
|
|
stat = asn1PD_H245MultilinkIndication_excessiveError (pctxt, pvalue->u.excessiveError);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "excessiveError", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 4;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* LogicalChannelRateRelease */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245LogicalChannelRateRelease (OOCTXT* pctxt, H245LogicalChannelRateRelease* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FlowControlIndication_scope */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FlowControlIndication_scope (OOCTXT* pctxt, H245FlowControlIndication_scope* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 2);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* logicalChannelNumber */
|
|
case 0:
|
|
invokeStartElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
stat = asn1PD_H245LogicalChannelNumber (pctxt, &pvalue->u.logicalChannelNumber);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelNumber", -1);
|
|
|
|
break;
|
|
|
|
/* resourceID */
|
|
case 1:
|
|
invokeStartElement (pctxt, "resourceID", -1);
|
|
|
|
stat = decodeConsUInt16 (pctxt, &pvalue->u.resourceID, 0U, 65535U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.resourceID);
|
|
|
|
invokeEndElement (pctxt, "resourceID", -1);
|
|
|
|
break;
|
|
|
|
/* wholeMultiplex */
|
|
case 2:
|
|
invokeStartElement (pctxt, "wholeMultiplex", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "wholeMultiplex", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FlowControlIndication_restriction */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FlowControlIndication_restriction (OOCTXT* pctxt, H245FlowControlIndication_restriction* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* maximumBitRate */
|
|
case 0:
|
|
invokeStartElement (pctxt, "maximumBitRate", -1);
|
|
|
|
stat = decodeConsUnsigned (pctxt, &pvalue->u.maximumBitRate, 0U, 16777215U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->u.maximumBitRate);
|
|
|
|
invokeEndElement (pctxt, "maximumBitRate", -1);
|
|
|
|
break;
|
|
|
|
/* noRestriction */
|
|
case 1:
|
|
invokeStartElement (pctxt, "noRestriction", -1);
|
|
|
|
/* NULL */
|
|
invokeNullValue (pctxt);
|
|
|
|
invokeEndElement (pctxt, "noRestriction", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* FlowControlIndication */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245FlowControlIndication (OOCTXT* pctxt, H245FlowControlIndication* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode scope */
|
|
|
|
invokeStartElement (pctxt, "scope", -1);
|
|
|
|
stat = asn1PD_H245FlowControlIndication_scope (pctxt, &pvalue->scope);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "scope", -1);
|
|
|
|
/* decode restriction */
|
|
|
|
invokeStartElement (pctxt, "restriction", -1);
|
|
|
|
stat = asn1PD_H245FlowControlIndication_restriction (pctxt, &pvalue->restriction);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "restriction", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MobileMultilinkReconfigurationIndication */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MobileMultilinkReconfigurationIndication (OOCTXT* pctxt, H245MobileMultilinkReconfigurationIndication* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
OOCTXT lctxt;
|
|
ASN1OpenType openType;
|
|
ASN1UINT bitcnt;
|
|
ASN1UINT i;
|
|
ASN1BOOL optbit;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
/* decode sampleSize */
|
|
|
|
invokeStartElement (pctxt, "sampleSize", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->sampleSize, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->sampleSize);
|
|
|
|
invokeEndElement (pctxt, "sampleSize", -1);
|
|
|
|
/* decode samplesPerFrame */
|
|
|
|
invokeStartElement (pctxt, "samplesPerFrame", -1);
|
|
|
|
stat = decodeConsUInt8 (pctxt, &pvalue->samplesPerFrame, 1U, 255U);
|
|
if (stat != ASN_OK) return stat;
|
|
invokeUIntValue (pctxt, pvalue->samplesPerFrame);
|
|
|
|
invokeEndElement (pctxt, "samplesPerFrame", -1);
|
|
|
|
if (extbit) {
|
|
|
|
/* decode extension optional bits length */
|
|
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
bitcnt += 1;
|
|
|
|
ZEROCONTEXT (&lctxt);
|
|
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = moveBitCursor (pctxt, bitcnt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
for (i = 0; i < bitcnt; i++) {
|
|
DECODEBIT (&lctxt, &optbit);
|
|
|
|
if (optbit) {
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
pctxt->buffer.byteIndex += openType.numocts;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* IndicationMessage */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245IndicationMessage (OOCTXT* pctxt, H245IndicationMessage* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
OOCTXT lctxt;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 13);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* nonStandard */
|
|
case 0:
|
|
invokeStartElement (pctxt, "nonStandard", -1);
|
|
|
|
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H245NonStandardMessage);
|
|
|
|
stat = asn1PD_H245NonStandardMessage (pctxt, pvalue->u.nonStandard);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "nonStandard", -1);
|
|
|
|
break;
|
|
|
|
/* functionNotUnderstood */
|
|
case 1:
|
|
invokeStartElement (pctxt, "functionNotUnderstood", -1);
|
|
|
|
pvalue->u.functionNotUnderstood = ALLOC_ASN1ELEM (pctxt, H245FunctionNotUnderstood);
|
|
|
|
stat = asn1PD_H245FunctionNotUnderstood (pctxt, pvalue->u.functionNotUnderstood);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "functionNotUnderstood", -1);
|
|
|
|
break;
|
|
|
|
/* masterSlaveDeterminationRelease */
|
|
case 2:
|
|
invokeStartElement (pctxt, "masterSlaveDeterminationRelease", -1);
|
|
|
|
pvalue->u.masterSlaveDeterminationRelease = ALLOC_ASN1ELEM (pctxt, H245MasterSlaveDeterminationRelease);
|
|
|
|
stat = asn1PD_H245MasterSlaveDeterminationRelease (pctxt, pvalue->u.masterSlaveDeterminationRelease);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "masterSlaveDeterminationRelease", -1);
|
|
|
|
break;
|
|
|
|
/* terminalCapabilitySetRelease */
|
|
case 3:
|
|
invokeStartElement (pctxt, "terminalCapabilitySetRelease", -1);
|
|
|
|
pvalue->u.terminalCapabilitySetRelease = ALLOC_ASN1ELEM (pctxt, H245TerminalCapabilitySetRelease);
|
|
|
|
stat = asn1PD_H245TerminalCapabilitySetRelease (pctxt, pvalue->u.terminalCapabilitySetRelease);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "terminalCapabilitySetRelease", -1);
|
|
|
|
break;
|
|
|
|
/* openLogicalChannelConfirm */
|
|
case 4:
|
|
invokeStartElement (pctxt, "openLogicalChannelConfirm", -1);
|
|
|
|
pvalue->u.openLogicalChannelConfirm = ALLOC_ASN1ELEM (pctxt, H245OpenLogicalChannelConfirm);
|
|
|
|
stat = asn1PD_H245OpenLogicalChannelConfirm (pctxt, pvalue->u.openLogicalChannelConfirm);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "openLogicalChannelConfirm", -1);
|
|
|
|
break;
|
|
|
|
/* requestChannelCloseRelease */
|
|
case 5:
|
|
invokeStartElement (pctxt, "requestChannelCloseRelease", -1);
|
|
|
|
pvalue->u.requestChannelCloseRelease = ALLOC_ASN1ELEM (pctxt, H245RequestChannelCloseRelease);
|
|
|
|
stat = asn1PD_H245RequestChannelCloseRelease (pctxt, pvalue->u.requestChannelCloseRelease);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestChannelCloseRelease", -1);
|
|
|
|
break;
|
|
|
|
/* multiplexEntrySendRelease */
|
|
case 6:
|
|
invokeStartElement (pctxt, "multiplexEntrySendRelease", -1);
|
|
|
|
pvalue->u.multiplexEntrySendRelease = ALLOC_ASN1ELEM (pctxt, H245MultiplexEntrySendRelease);
|
|
|
|
stat = asn1PD_H245MultiplexEntrySendRelease (pctxt, pvalue->u.multiplexEntrySendRelease);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multiplexEntrySendRelease", -1);
|
|
|
|
break;
|
|
|
|
/* requestMultiplexEntryRelease */
|
|
case 7:
|
|
invokeStartElement (pctxt, "requestMultiplexEntryRelease", -1);
|
|
|
|
pvalue->u.requestMultiplexEntryRelease = ALLOC_ASN1ELEM (pctxt, H245RequestMultiplexEntryRelease);
|
|
|
|
stat = asn1PD_H245RequestMultiplexEntryRelease (pctxt, pvalue->u.requestMultiplexEntryRelease);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestMultiplexEntryRelease", -1);
|
|
|
|
break;
|
|
|
|
/* requestModeRelease */
|
|
case 8:
|
|
invokeStartElement (pctxt, "requestModeRelease", -1);
|
|
|
|
pvalue->u.requestModeRelease = ALLOC_ASN1ELEM (pctxt, H245RequestModeRelease);
|
|
|
|
stat = asn1PD_H245RequestModeRelease (pctxt, pvalue->u.requestModeRelease);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "requestModeRelease", -1);
|
|
|
|
break;
|
|
|
|
/* miscellaneousIndication */
|
|
case 9:
|
|
invokeStartElement (pctxt, "miscellaneousIndication", -1);
|
|
|
|
pvalue->u.miscellaneousIndication = ALLOC_ASN1ELEM (pctxt, H245MiscellaneousIndication);
|
|
|
|
stat = asn1PD_H245MiscellaneousIndication (pctxt, pvalue->u.miscellaneousIndication);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "miscellaneousIndication", -1);
|
|
|
|
break;
|
|
|
|
/* jitterIndication */
|
|
case 10:
|
|
invokeStartElement (pctxt, "jitterIndication", -1);
|
|
|
|
pvalue->u.jitterIndication = ALLOC_ASN1ELEM (pctxt, H245JitterIndication);
|
|
|
|
stat = asn1PD_H245JitterIndication (pctxt, pvalue->u.jitterIndication);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "jitterIndication", -1);
|
|
|
|
break;
|
|
|
|
/* h223SkewIndication */
|
|
case 11:
|
|
invokeStartElement (pctxt, "h223SkewIndication", -1);
|
|
|
|
pvalue->u.h223SkewIndication = ALLOC_ASN1ELEM (pctxt, H245H223SkewIndication);
|
|
|
|
stat = asn1PD_H245H223SkewIndication (pctxt, pvalue->u.h223SkewIndication);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h223SkewIndication", -1);
|
|
|
|
break;
|
|
|
|
/* newATMVCIndication */
|
|
case 12:
|
|
invokeStartElement (pctxt, "newATMVCIndication", -1);
|
|
|
|
pvalue->u.newATMVCIndication = ALLOC_ASN1ELEM (pctxt, H245NewATMVCIndication);
|
|
|
|
stat = asn1PD_H245NewATMVCIndication (pctxt, pvalue->u.newATMVCIndication);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "newATMVCIndication", -1);
|
|
|
|
break;
|
|
|
|
/* userInput */
|
|
case 13:
|
|
invokeStartElement (pctxt, "userInput", -1);
|
|
|
|
pvalue->u.userInput = ALLOC_ASN1ELEM (pctxt, H245UserInputIndication);
|
|
|
|
stat = asn1PD_H245UserInputIndication (pctxt, pvalue->u.userInput);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "userInput", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 15;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
copyContext (&lctxt, pctxt);
|
|
initContextBuffer (pctxt, openType.data, openType.numocts);
|
|
|
|
switch (pvalue->t) {
|
|
/* h2250MaximumSkewIndication */
|
|
case 15:
|
|
invokeStartElement (pctxt, "h2250MaximumSkewIndication", -1);
|
|
|
|
pvalue->u.h2250MaximumSkewIndication = ALLOC_ASN1ELEM (pctxt, H245H2250MaximumSkewIndication);
|
|
|
|
stat = asn1PD_H245H2250MaximumSkewIndication (pctxt, pvalue->u.h2250MaximumSkewIndication);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "h2250MaximumSkewIndication", -1);
|
|
|
|
break;
|
|
|
|
/* mcLocationIndication */
|
|
case 16:
|
|
invokeStartElement (pctxt, "mcLocationIndication", -1);
|
|
|
|
pvalue->u.mcLocationIndication = ALLOC_ASN1ELEM (pctxt, H245MCLocationIndication);
|
|
|
|
stat = asn1PD_H245MCLocationIndication (pctxt, pvalue->u.mcLocationIndication);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mcLocationIndication", -1);
|
|
|
|
break;
|
|
|
|
/* conferenceIndication */
|
|
case 17:
|
|
invokeStartElement (pctxt, "conferenceIndication", -1);
|
|
|
|
pvalue->u.conferenceIndication = ALLOC_ASN1ELEM (pctxt, H245ConferenceIndication);
|
|
|
|
stat = asn1PD_H245ConferenceIndication (pctxt, pvalue->u.conferenceIndication);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "conferenceIndication", -1);
|
|
|
|
break;
|
|
|
|
/* vendorIdentification */
|
|
case 18:
|
|
invokeStartElement (pctxt, "vendorIdentification", -1);
|
|
|
|
pvalue->u.vendorIdentification = ALLOC_ASN1ELEM (pctxt, H245VendorIdentification);
|
|
|
|
stat = asn1PD_H245VendorIdentification (pctxt, pvalue->u.vendorIdentification);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "vendorIdentification", -1);
|
|
|
|
break;
|
|
|
|
/* functionNotSupported */
|
|
case 19:
|
|
invokeStartElement (pctxt, "functionNotSupported", -1);
|
|
|
|
pvalue->u.functionNotSupported = ALLOC_ASN1ELEM (pctxt, H245FunctionNotSupported);
|
|
|
|
stat = asn1PD_H245FunctionNotSupported (pctxt, pvalue->u.functionNotSupported);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "functionNotSupported", -1);
|
|
|
|
break;
|
|
|
|
/* multilinkIndication */
|
|
case 20:
|
|
invokeStartElement (pctxt, "multilinkIndication", -1);
|
|
|
|
pvalue->u.multilinkIndication = ALLOC_ASN1ELEM (pctxt, H245MultilinkIndication);
|
|
|
|
stat = asn1PD_H245MultilinkIndication (pctxt, pvalue->u.multilinkIndication);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "multilinkIndication", -1);
|
|
|
|
break;
|
|
|
|
/* logicalChannelRateRelease */
|
|
case 21:
|
|
invokeStartElement (pctxt, "logicalChannelRateRelease", -1);
|
|
|
|
pvalue->u.logicalChannelRateRelease = ALLOC_ASN1ELEM (pctxt, H245LogicalChannelRateRelease);
|
|
|
|
stat = asn1PD_H245LogicalChannelRateRelease (pctxt, pvalue->u.logicalChannelRateRelease);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "logicalChannelRateRelease", -1);
|
|
|
|
break;
|
|
|
|
/* flowControlIndication */
|
|
case 22:
|
|
invokeStartElement (pctxt, "flowControlIndication", -1);
|
|
|
|
pvalue->u.flowControlIndication = ALLOC_ASN1ELEM (pctxt, H245FlowControlIndication);
|
|
|
|
stat = asn1PD_H245FlowControlIndication (pctxt, pvalue->u.flowControlIndication);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "flowControlIndication", -1);
|
|
|
|
break;
|
|
|
|
/* mobileMultilinkReconfigurationIndication */
|
|
case 23:
|
|
invokeStartElement (pctxt, "mobileMultilinkReconfigurationIndication", -1);
|
|
|
|
pvalue->u.mobileMultilinkReconfigurationIndication = ALLOC_ASN1ELEM (pctxt, H245MobileMultilinkReconfigurationIndication);
|
|
|
|
stat = asn1PD_H245MobileMultilinkReconfigurationIndication (pctxt, pvalue->u.mobileMultilinkReconfigurationIndication);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "mobileMultilinkReconfigurationIndication", -1);
|
|
|
|
break;
|
|
|
|
default:;
|
|
}
|
|
|
|
copyContext (pctxt, &lctxt);
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* */
|
|
/* MultimediaSystemControlMessage */
|
|
/* */
|
|
/**************************************************************/
|
|
|
|
EXTERN int asn1PD_H245MultimediaSystemControlMessage (OOCTXT* pctxt, H245MultimediaSystemControlMessage* pvalue)
|
|
{
|
|
int stat = ASN_OK;
|
|
ASN1UINT ui;
|
|
ASN1OpenType openType;
|
|
ASN1BOOL extbit;
|
|
|
|
/* extension bit */
|
|
|
|
DECODEBIT (pctxt, &extbit);
|
|
|
|
if (!extbit) {
|
|
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 1;
|
|
|
|
switch (ui) {
|
|
/* request */
|
|
case 0:
|
|
invokeStartElement (pctxt, "request", -1);
|
|
|
|
pvalue->u.request = ALLOC_ASN1ELEM (pctxt, H245RequestMessage);
|
|
|
|
stat = asn1PD_H245RequestMessage (pctxt, pvalue->u.request);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "request", -1);
|
|
|
|
break;
|
|
|
|
/* response */
|
|
case 1:
|
|
invokeStartElement (pctxt, "response", -1);
|
|
|
|
pvalue->u.response = ALLOC_ASN1ELEM (pctxt, H245ResponseMessage);
|
|
|
|
stat = asn1PD_H245ResponseMessage (pctxt, pvalue->u.response);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "response", -1);
|
|
|
|
break;
|
|
|
|
/* command */
|
|
case 2:
|
|
invokeStartElement (pctxt, "command", -1);
|
|
|
|
pvalue->u.command = ALLOC_ASN1ELEM (pctxt, H245CommandMessage);
|
|
|
|
stat = asn1PD_H245CommandMessage (pctxt, pvalue->u.command);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "command", -1);
|
|
|
|
break;
|
|
|
|
/* indication */
|
|
case 3:
|
|
invokeStartElement (pctxt, "indication", -1);
|
|
|
|
pvalue->u.indication = ALLOC_ASN1ELEM (pctxt, H245IndicationMessage);
|
|
|
|
stat = asn1PD_H245IndicationMessage (pctxt, pvalue->u.indication);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
invokeEndElement (pctxt, "indication", -1);
|
|
|
|
break;
|
|
|
|
default:
|
|
return ASN_E_INVOPT;
|
|
}
|
|
}
|
|
else {
|
|
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
|
|
if (stat != ASN_OK) return stat;
|
|
else pvalue->t = ui + 5;
|
|
|
|
stat = decodeByteAlign (pctxt);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
|
|
if (stat != ASN_OK) return stat;
|
|
|
|
}
|
|
|
|
return (stat);
|
|
}
|
|
|