diff options
author | Russell Bryant <russell@russellbryant.com> | 2009-06-30 16:40:38 +0000 |
---|---|---|
committer | Russell Bryant <russell@russellbryant.com> | 2009-06-30 16:40:38 +0000 |
commit | c511a2674906fd93470f0a9b77340041771466e1 (patch) | |
tree | d3d6aa7ea86d11ecaa6e88efbc46a5dde1c63ea5 /addons/ooh323c/src/h323/MULTIMEDIA-SYSTEM-CONTROLDec.c | |
parent | 62d3f1dfd9632f18c4f7c12e44af30f4cc08c292 (diff) |
Move Asterisk-addons modules into the main Asterisk source tree.
Someone asked yesterday, "is there a good reason why we can't just put these
modules in Asterisk?". After a brief discussion, as long as the modules are
clearly set aside in their own directory and not enabled by default, it is
perfectly fine.
For more information about why a module goes in addons, see README-addons.txt.
chan_ooh323 does not currently compile as it is behind some trunk API updates.
However, it will not build by default, so it should be okay for now.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@204413 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'addons/ooh323c/src/h323/MULTIMEDIA-SYSTEM-CONTROLDec.c')
-rw-r--r-- | addons/ooh323c/src/h323/MULTIMEDIA-SYSTEM-CONTROLDec.c | 42170 |
1 files changed, 42170 insertions, 0 deletions
diff --git a/addons/ooh323c/src/h323/MULTIMEDIA-SYSTEM-CONTROLDec.c b/addons/ooh323c/src/h323/MULTIMEDIA-SYSTEM-CONTROLDec.c new file mode 100644 index 000000000..0ec58a82e --- /dev/null +++ b/addons/ooh323c/src/h323/MULTIMEDIA-SYSTEM-CONTROLDec.c @@ -0,0 +1,42170 @@ +/* + * 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); +} + |