|
|
/*
* Copyright (C) 1995-1999 Open Systems Solutions, Inc. All rights reserved. * * FILE: @(#)iaapi.h 5.3.1.1 97/03/18 */
/* THIS FILE IS PROPRIETARY MATERIAL OF OPEN SYSTEMS SOLUTIONS, INC. AND
* MAY BE USED ONLY BY DIRECT LICENSEES OF OPEN SYSTEMS SOLUTIONS, INC. * THIS FILE MAY NOT BE DISTRIBUTED. */
/*****************************************************************************/ /* */ /* Declare the types used in the Interpretive ASN.1 API */ /* */ /*****************************************************************************/ #ifndef IAAPI_H
#define IAAPI_H
#if _MSC_VER > 1000
#pragma once
#endif
#ifndef ASN1CODE_H
#include "asn1code.h"
#endif
#ifndef ASN1HDR_H
#include "asn1hdr.h"
#endif
typedef void *TypeHndl; /* handle used in referencing types */
#define INDEFLENGTH -1 /* This value is returned by encodingLength()
* for INDEFINITE length encoded values. */
/* ASN.1 builtin types sorted alphabetically and assigned an enumerator */
typedef enum ASN1Type { asn1UnknownType = 0, asn1ANY = 1, asn1NumericString = 17, asn1BIT_STRING = 2, asn1OBJECT_IDENTIFIER = 18, asn1BMPString = 3, asn1OCTET_STRING = 19, asn1BOOLEAN = 4, asn1ObjectDescriptor = 20, asn1CHARACTER_STRING = 5, asn1OpenType = 21, asn1CHOICE = 6, asn1PrintableString = 22, asn1EMBEDDED_PDV = 7, asn1REAL = 23, asn1ENUMERATED = 8, asn1SEQUENCE = 24, asn1EXTERNAL = 9, asn1SEQUENCE_OF = 25, asn1GeneralString = 10, asn1SET = 26, asn1GeneralizedTime = 11, asn1SET_OF = 27, asn1GraphicString = 12, asn1TeletexString = 28, asn1IA5String = 13, asn1UTCTime = 29, asn1INSTANCE_OF = 14, asn1UniversalString = 30, asn1INTEGER = 15, asn1VideotexString = 31, asn1NULL = 16, asn1VisibleString = 32 } ASN1Type;
/* Types compatible codes */ typedef enum TypesCompatibilityCodes { compatible = 0, /* Types are compatible */ differentTypes = 1, /* Types are not identical */ defaultsDifferent = 2, /* Default values are not the same */ onlyOneHasDefault = 3, /* Only one type has a default value */ oneHasPointerOtherDoesnt = 4, /* Only one type has a POINTER directive */ numberOfComponentsDifferent = 5, /* Different number of components */ oneIsOptionalOtherIsnt = 6, /* Only one type is OPTIONAL */ oneIsExtensibleOtherIsnt = 7, /* Only one type is extensible */ differentNamedItems = 8, /* Different component identifiers */ differentKinds = 9, /* Different type representations */ componentsHaveDifferentKinds = 10,/* Different component representations */ differentSubIdNumber = 11, /* Different number of sub-identifiers in
* an OBJECT IDENTIFIER with the OBJECTID * directive */ differentSubIdTypes = 12, /* Different types of sub-identifiers in
* an OBJECT IDENTIFIER with the OBJECTID * directive */ differentSize = 13, /* Different size of INTEGER or REAL values */ type1IsPointerOfTypeRef2 = 14, /* Two types reference the other
* type but the first one has the * POINTER directive */ type2IsPointerOfTypeRef1 = 15, /* Two types reference the other type
* but the second one has the POINTER * directive */ differentSizeOfLengthField = 16 /* Different sizes of the length field in
* type representations */ } TypesCompatibilityCodes;
/* ASN.1 tag classes */ typedef enum ASN1TagClass { UNIVERSAL, APPLICATION, CONTEXT_SPECIFIC, PRIVATE, NULLENCODING } ASN1TagClass;
typedef int IAAPI_ERRTYPE; /* Datatype for IAAPI error codes */
/* IAAPI ERROR CODES */ #define IAAPI_NOERROR 0 /* No error occurred */
#define IAAPI_OUTMEMORY 1 /* No more memory can be allocated */
#define IAAPI_BADBIT 2 /* Bad bit string or hex string */
#define IAAPI_BADBOOLEAN 3 /* Not TRUE or FALSE value */
#define IAAPI_BADNULL 4 /* Not "NULL" value */
#define IAAPI_TOOBIG 5 /* Value exceeds size constraint */
#define IAAPI_BADREAL 6 /* Not a valid REAL value */
#define IAAPI_BADTIME 7 /* Not a valid UTCTime or GeneralizedTime */
#define IAAPI_BADOBJID 8 /* Not a valid OBJECT IDENTIFIER value */
#define IAAPI_BADANY 9 /* Bad ANY value */
#define IAAPI_BADNAME 10 /* Bad INTEGER or ENUMERATED name */
#define IAAPI_BADNMD 11 /* Bad BIT STRING NAMED NUMBER value */
#define IAAPI_NOTSUP 12 /* Type not supported */
#define IAAPI_BADNUM 13 /* Bad INTEGER or ENUMERATED number */
#define IAAPI_BADINDX 14 /* Bad component index into a structured type */
#define IAAPI_BADDEC 15 /* Bad decoded value, possibly NULL */
#define IAAPI_ENCFAL 16 /* Failure to encode value */
#define IAAPI_NLENC 17 /* Null encoding or length is 0 */
#define IAAPI_DECFAL 18 /* Decoding failed */
#define IAAPI_BADTGINDX 19 /* Bad tag number index into encoded value */
#define IAAPI_BADTYPE 20 /* Incorrect type handle for the function */
#define IAAPI_CPYFAIL 21 /* Copying a decoded value failed */
#define IAAPI_NOTCOMPATIBLE 22 /* Types are not compatible */
#define IAAPI_BADDISPLAYVALUE 23 /* Failure to parse a PDU display value */
#define IAAPI_BADIDENTIFIER 24 /* Bad identifier in a parsing display value */
#define IAAPI_DUPLCOMPVALUE 25 /* Duplicate value for one component in a parsing value*/
#define IAAPI_ENCOPENTYPEORANYFAILED 26 /* Encoding failed for ANY or open type value*/
#define IAAPI_FREETPFAL 27 /* Failure to free decoded value */
#define IAAPI_BADENC 28 /* Error exists in the encoded data */
#define IAAPI_BADHINT 29 /* Bad HUGE INTEGER value */
#define IAAPI_BADENCOID 30 /* Bad ENCODED OBJECT IDENTIFIER value */
#define IAAPI_BADOBJ 31 /* Object can not be marked */
#define IAAPI_UNKNOWNOBJ 32 /* Invalid object handle */
#define IAAPI_MEM_ERROR 33 /* Memory violation error occurred */
#define IAAPI_ACCESS_SERIALIZATION 34 /* Access serialization error occurred */
#if defined(_MSC_VER) && (defined(_WIN32) || defined(WIN32))
#pragma pack(push, ossPacking, 4)
#elif defined(_MSC_VER) && (defined(_WINDOWS) || defined(_MSDOS))
#pragma pack(1)
#elif defined(__BORLANDC__) && defined(__MSDOS__)
#pragma option -a1
#elif defined(__BORLANDC__) && defined(__WIN32__)
#pragma option -a4
#elif defined(__IBMC__)
#pragma pack(4)
#elif defined(__WATCOMC__) && defined(__NT__)
#pragma pack(push, 4)
#elif defined(__WATCOMC__) && (defined(__WINDOWS__) || defined(__DOS__))
#pragma pack(push, 1)
#endif /* _MSC_VER && _WIN32 */
#ifdef macintosh
#pragma options align=mac68k
#endif
/* Structure for holding values of type INTEGER */ typedef struct IntValue { enum {signedNumber, unsignedNumber} sign; union { LONG_LONG signedInt; ULONG_LONG unsignedInt; } value; } IntValue;
/* Structure for IAAPI initialization values */ typedef struct IAAPI_initializers { char charInitializer; short shortInitializer; int intInitializer; long longInitializer; LONG_LONG llongInitializer; void * pointerInitializer; char * floatInitializer; char * doubleInitializer; } IAAPI_initializers;
/*
* Type definition for a value reference structure. */ typedef struct ValRef { char *name; /* value reference name */ void *address; /* pointer to decoded value */ unsigned short etype; /* index into etype array */ } ValRef;
/* Union containing the different types for an object value */ typedef union IaapiObjValType { char * fileName; int socketIdentifier; } IaapiObjValType;
#if defined(_MSC_VER) && (defined(_WIN32) || defined(WIN32))
#pragma pack(pop, ossPacking)
#elif defined(_MSC_VER) && (defined(_WINDOWS) || defined(_MSDOS))
#pragma pack()
#elif defined(__BORLANDC__) && (defined(__WIN32__) || defined(__MSDOS__))
#pragma option -a.
#elif defined(__IBMC__)
#pragma pack()
#elif defined(__WATCOMC__)
#pragma pack(pop)
#endif /* _MSC_VER && _WIN32 */
#ifdef macintosh
#pragma options align=reset
#endif
#ifdef __cplusplus
extern "C" { #endif
/***************************************************/ /* Functions defined by the Interpretive ASN.1 API */ /***************************************************/
extern int DLL_ENTRY ossDefaultIAAPI_ERR(OssGlobal *world, int return_code); extern void *DLL_ENTRY ossGetIaapiErrorHandlingFunction(OssGlobal *world); extern void DLL_ENTRY ossSetIaapiErrorHandlingFunction(OssGlobal *world, int (DLL_ENTRY_FPTR *_System func) (OssGlobal *, int error_code)); extern void DLL_ENTRY ossSetInitializationValues(OssGlobal *world, IAAPI_initializers *initStruct); extern void DLL_ENTRY ossTermIAAPI(OssGlobal *world);
extern unsigned short DLL_ENTRY ossCtlTblVersionNumber(OssGlobal *world); extern ossBoolean DLL_ENTRY ossCtlTblUsableOnlyByPER(OssGlobal *world); extern ossBoolean DLL_ENTRY ossCtlTblUsableOnlyByBER(OssGlobal *world); extern ossBoolean DLL_ENTRY ossDebugWasSpecified(OssGlobal *world); extern ossBoolean DLL_ENTRY ossConstrainWasSpecified(OssGlobal *world); extern int DLL_ENTRY ossNumberOfPDUs(OssGlobal *world);
extern TypeHndl DLL_ENTRY ossTypeHandleOfPDU(OssGlobal *world, int pduNum); extern TypeHndl DLL_ENTRY ossPduTypeHandleByName(OssGlobal *world, const char *name); extern int DLL_ENTRY ossPduNumberByType(OssGlobal *world, TypeHndl type);
extern ossBoolean DLL_ENTRY ossTypeIsConstrained(OssGlobal *world, TypeHndl type); extern ASN1Type DLL_ENTRY ossAsn1TypeId(OssGlobal *world, TypeHndl type); extern const char *DLL_ENTRY ossBuiltinTypeName(OssGlobal *world, ASN1Type typeId); extern const char *DLL_ENTRY ossTypeReferenceName(OssGlobal *world, TypeHndl type); extern TypesCompatibilityCodes DLL_ENTRY ossTypesCompatible(OssGlobal *world, TypeHndl type1, TypeHndl type2);
extern int DLL_ENTRY ossNumberOfNamedItems(OssGlobal *world, TypeHndl type); extern TypeHndl DLL_ENTRY ossTypeHandleOfComponent(OssGlobal *world, TypeHndl parent, unsigned int ix); extern ossBoolean DLL_ENTRY ossComponentIsOptional(OssGlobal *world, TypeHndl type, unsigned int ix); extern ossBoolean DLL_ENTRY ossComponentHasDefaultValue(OssGlobal *world, TypeHndl parentType, unsigned int ix); extern void *DLL_ENTRY ossComponentDefaultValue(OssGlobal *world, TypeHndl parentType, unsigned int ix); extern ossBoolean DLL_ENTRY ossComponentValueIsPresent(OssGlobal *world, TypeHndl parentType, unsigned int ix, void *parentValue); extern ossBoolean DLL_ENTRY ossComponentIsInitializationValue(OssGlobal *world, TypeHndl chldType, void *compAddress); extern unsigned int DLL_ENTRY ossItemIndexByName(OssGlobal *world, TypeHndl type, const char *name); extern const char *DLL_ENTRY ossAsn1ItemName(OssGlobal *world, TypeHndl type, unsigned int ix); extern long DLL_ENTRY ossItemIntValue(OssGlobal *world, TypeHndl type, unsigned int ix);
extern ossBoolean DLL_ENTRY ossExtensionMarkerIsPresent(OssGlobal *world, TypeHndl type); extern int DLL_ENTRY ossNumberOfRootItems(OssGlobal *world, TypeHndl type); extern ossBoolean DLL_ENTRY ossCompAppearsAfterExtensionMarker(OssGlobal *world, TypeHndl type, unsigned int ix); extern int DLL_ENTRY ossNumberOfTags(OssGlobal *world, TypeHndl type); extern int DLL_ENTRY ossAsn1TagNumber(OssGlobal *world, TypeHndl type, unsigned int ix); extern ASN1TagClass DLL_ENTRY ossAsn1TagClass(OssGlobal *world, TypeHndl type, unsigned int ix);
extern ossBoolean DLL_ENTRY ossUpperBoundIsPresent(OssGlobal *world, TypeHndl type); extern ossBoolean DLL_ENTRY ossLowerBoundIsPresent(OssGlobal *world, TypeHndl type); extern unsigned long DLL_ENTRY ossLowerBoundOfSizeConstraint(OssGlobal *world, TypeHndl type); extern unsigned long DLL_ENTRY ossUpperBoundOfSizeConstraint(OssGlobal *world, TypeHndl type);
extern IntValue DLL_ENTRY ossMinValueOfInteger(OssGlobal *world, TypeHndl type); extern IntValue DLL_ENTRY ossMaxValueOfInteger(OssGlobal *world, TypeHndl type);
extern unsigned long DLL_ENTRY ossPermittedAlphabetLength(OssGlobal *world, TypeHndl type); extern const long *DLL_ENTRY ossPermittedAlphabetConstraint(OssGlobal *world, TypeHndl type);
extern unsigned short DLL_ENTRY ossGetNumberOfValueReferences(OssGlobal *world); extern const char *DLL_ENTRY ossGetNameOfValueReference(OssGlobal *world, unsigned short int compIndex); extern const void *DLL_ENTRY ossGetDecodedValueOfValueReference(OssGlobal *world, unsigned short int compIndex); extern TypeHndl DLL_ENTRY ossGetTypeHandleOfValueReference(OssGlobal *world, unsigned short int compIndex);
extern IAAPI_ERRTYPE DLL_ENTRY ossPutDecodedValueOfPDU(OssGlobal *world, int pduNum, char *remainingBuf, void **pduVal); extern IAAPI_ERRTYPE DLL_ENTRY ossPutSimpleTypeValue(OssGlobal *world, TypeHndl type, char *userTypedvalue, void **decodedValue); extern IAAPI_ERRTYPE DLL_ENTRY ossPutStructTypeValue(OssGlobal *world, TypeHndl parent, void *compValue, unsigned int compIndex, void **structToUpdate); extern IAAPI_ERRTYPE DLL_ENTRY ossDeleteComponent(OssGlobal *world, TypeHndl parentType, unsigned int compIndex, void **parentValue); extern IAAPI_ERRTYPE DLL_ENTRY ossPutOpenTypeDecodedValue(OssGlobal *world, TypeHndl type, int pduNum, void *decodedValue, OpenType **openValue); extern IAAPI_ERRTYPE DLL_ENTRY ossPutEncodedValue(OssGlobal *world, TypeHndl type, OssBuf encodedValue, void **decodedValue);
extern char *DLL_ENTRY ossGetValueOfSimpleType(OssGlobal *world, TypeHndl type, void *decodedValue); extern void *DLL_ENTRY ossUpdateValueOfSimpleType(OssGlobal *world,TypeHndl type, char *userTypedValue, void *oldValue); extern IAAPI_ERRTYPE DLL_ENTRY ossGetDecodedValueOfComponent(OssGlobal *world, TypeHndl parentType, void *parentDecodedValue, unsigned int compIndex, void **componentValue); extern IAAPI_ERRTYPE DLL_ENTRY ossGetOpenTypeValue(OssGlobal *world, TypeHndl type, void *openValue, int *pduNum, void **decodedValue, OssBuf *encodedValue);
extern IAAPI_ERRTYPE DLL_ENTRY ossIaapiMarkObject(OssGlobal *world, TypeHndl type, OssObjType objectType, void *object); extern OssObjType DLL_ENTRY ossGetObjectType(OssGlobal *world, TypeHndl type, void *object); extern ossBoolean DLL_ENTRY ossTypeIsExternalObject(OssGlobal *world, TypeHndl type); extern IAAPI_ERRTYPE DLL_ENTRY ossSetTypeAsExternalObject(OssGlobal *world, TypeHndl type, ossBoolean marked); extern void *DLL_ENTRY ossPutObjectValue(OssGlobal *world, TypeHndl type, void *objectValue, OssObjType objectType); extern IAAPI_ERRTYPE DLL_ENTRY ossGetObjectValue(OssGlobal *world, TypeHndl type, void *object, OssObjType objType, IaapiObjValType *objVal);
extern ossBoolean DLL_ENTRY ossValueIsValid(OssGlobal *world, TypeHndl type, void *value); extern unsigned long DLL_ENTRY ossGetValueLength(OssGlobal *world, TypeHndl type, void *value); extern IAAPI_ERRTYPE DLL_ENTRY ossCopyTypeValue(OssGlobal *world, TypeHndl type, void *valueIn, void **valueOut); extern IAAPI_ERRTYPE DLL_ENTRY ossValueEncode(OssGlobal *world, TypeHndl type, void *value, OssBuf *encodedValue);
extern IAAPI_ERRTYPE DLL_ENTRY ossFreeDecodedValue(OssGlobal *world, TypeHndl type, void *valPtr); extern void DLL_ENTRY ossFreeDisplayString(OssGlobal *world, char *dsplString); extern void DLL_ENTRY ossFreeIaapiObjectValue(OssGlobal *world, OssObjType objType, IaapiObjValType *objVal);
extern ossBoolean DLL_ENTRY ossEncodingIsConstructed(OssGlobal *world, unsigned char *curEnc, long bufLength); extern unsigned char *DLL_ENTRY ossGetNextBEREncoding(OssGlobal *world, unsigned char *curEnc, long *remBufLen); extern unsigned char *DLL_ENTRY ossGetNestedBEREncoding(OssGlobal *world, unsigned char *curEnc, long *remBufLen); extern long DLL_ENTRY ossNumberOfEncodingTags(OssGlobal *world, unsigned char *curEnc, long bufLength); extern ASN1TagClass DLL_ENTRY ossEncodingASN1Class(OssGlobal *world, unsigned char *curEnc, long bufLength, int ix); extern long DLL_ENTRY ossEncodingASN1Tag(OssGlobal *world, unsigned char *curEnc, long bufLength, int ix); extern char *DLL_ENTRY ossEncodingASN1Type(OssGlobal *world, unsigned char *curEnc, long bufLength); extern long DLL_ENTRY ossEncodingLength(OssGlobal *world, unsigned char *curEnc, long bufLength); extern char *DLL_ENTRY ossEncodingContents(OssGlobal *world, unsigned char *curEnc, long bufLength);
extern char *DLL_ENTRY ossConvertEncodingIntoDisplayHexFmt(OssGlobal *world, unsigned char *encodedBufin, long bufLength); extern char *DLL_ENTRY ossConvertEncodingIntoDisplayBinFmt(OssGlobal *world, unsigned char *encodedBufin, long bufLength); extern OssBuf DLL_ENTRY ossConvertHexFmtToEncoding(OssGlobal *world, char *hexBufin, long bufLength); extern OssBuf DLL_ENTRY ossConvertBinFmtToEncoding(OssGlobal *world, char *binBufin, long bufLength);
/***************************************************************************
* Functions for printing ASN.1 types and values * ***************************************************************************/ extern void DLL_ENTRY ossPrintPDUs(OssGlobal *world); extern void DLL_ENTRY ossPrintASN1DescriptionOfPDU(OssGlobal *world, int pduNum, ossBoolean refTypes); extern void DLL_ENTRY ossPrintASN1DescriptionOfType(OssGlobal *world, TypeHndl type, ossBoolean refTypes);
extern void DLL_ENTRY ossPrintDecodedValuesOfPDUs(OssGlobal *world); extern void DLL_ENTRY ossPrintDecodedValueOfPDU(OssGlobal *world, int pduNum, void *decodedValue); extern void DLL_ENTRY ossPrintDecodedValueOfPDUByName(OssGlobal *world, TypeHndl type, char *name, void *decodedValue); extern void DLL_ENTRY ossPrintDecodedValueOfType(OssGlobal *world, TypeHndl type, void *decodedValue);
extern void DLL_ENTRY ossPrintBEREncoding(OssGlobal *world, OssBuf *encValue); extern unsigned int DLL_ENTRY ossEncodingHeaderLength(OssGlobal *world, unsigned char *curEnc, long remBufLength); extern void DLL_ENTRY ossPrintBEREncodedValueInTLV(OssGlobal *world, OssBuf *encodedValue);
#ifdef __cplusplus
} #endif /* __cplusplus */
#endif /* #ifndef IAAPI_H */
|