📄 asner.h
字号:
/* * asner.h * * Abstract Syntax Notation Encoding Rules classes * * Portable Windows Library * * Copyright (c) 1993-1998 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions are Copyright (C) 1993 Free Software Foundation, Inc. * All Rights Reserved. * * Contributor(s): ______________________________________. * * $Log: asner.h,v $ * Revision 1.13 2000/07/11 18:23:03 robertj * Added ability to set/get BMP string data as PWORDArray. * * Revision 1.12 2000/04/10 17:30:42 robertj * Added [] operator for char access on ASN string classes. * * Revision 1.11 2000/02/29 06:32:12 robertj * Added ability to remove optional field in sequence, thanks Dave Harvey. * * Revision 1.10 1999/08/09 13:02:45 robertj * dded ASN compiler #defines for backward support of pre GCC 2.9 compilers. * Added ASN compiler #defines to reduce its memory footprint. * * Revision 1.9 1999/07/22 06:48:51 robertj * Added comparison operation to base ASN classes and compiled ASN code. * Added support for ANY type in ASN parser. * * Revision 1.8 1999/03/09 09:34:05 robertj * Fixed typo's. * * Revision 1.7 1999/03/09 08:01:46 robertj * Changed comments for doc++ support (more to come). * * Revision 1.6 1998/09/23 06:19:21 robertj * Added open source copyright license. * * Revision 1.5 1998/05/21 04:26:53 robertj * Fixed numerous PER problems. * * Revision 1.4 1998/05/07 05:19:28 robertj * Fixed problems with using copy constructor/assignment oeprator on PASN_Objects. * * Revision 1.3 1997/12/18 05:08:13 robertj * Added function to get choice discriminator name. * * Revision 1.2 1997/12/11 10:35:42 robertj * Support for new ASN file parser. * */#ifndef _ASNER_H#define _ASNER_H#ifdef __GNUC__#pragma interface#endifclass PASN_Stream;class PBER_Stream;class PPER_Stream;//////////////////////////////////////////////////////////////////////////////** Base class for ASN encoding/decoding.*/class PASN_Object : public PObject{ PCLASSINFO(PASN_Object, PObject); public: /** Return a string giving the type of the object */ virtual PString GetTypeAsString() const = 0; PINDEX GetObjectLength() const; virtual PINDEX GetDataLength() const = 0; virtual BOOL IsPrimitive() const { return TRUE; } virtual BOOL Decode(PASN_Stream &) = 0; virtual void Encode(PASN_Stream &) const = 0; BOOL IsExtendable() const { return extendable; } void SetExtendable(BOOL ext = TRUE) { extendable = ext; } enum TagClass { UniversalTagClass, ApplicationTagClass, ContextSpecificTagClass, PrivateTagClass, DefaultTagClass }; TagClass GetTagClass() const { return tagClass; } enum UniversalTags { InvalidUniversalTag, UniversalBoolean, UniversalInteger, UniversalBitString, UniversalOctetString, UniversalNull, UniversalObjectId, UniversalObjectDescriptor, UniversalExternalType, UniversalReal, UniversalEnumeration, UniversalEmbeddedPDV, UniversalSequence = 16, UniversalSet, UniversalNumericString, UniversalPrintableString, UniversalTeletexString, UniversalVideotexString, UniversalIA5String, UniversalUTCTime, UniversalGeneralisedTime, UniversalGraphicString, UniversalVisibleString, UniversalGeneralString, UniversalUniversalString, UniversalBMPString = 30 }; unsigned GetTag() const { return tag; } virtual void SetTag(unsigned newTag, TagClass tagClass = DefaultTagClass); enum ConstraintType { Unconstrained, PartiallyConstrained, FixedConstraint, ExtendableConstraint }; enum MinimumValueTag { MinimumValue = INT_MIN }; enum MaximumValueTag { MaximumValue = INT_MAX }; void SetConstraints(ConstraintType type, int lower, MaximumValueTag upper); void SetConstraints(ConstraintType type, MinimumValueTag lower, unsigned upper); void SetConstraints(ConstraintType type, MinimumValueTag lower, MaximumValueTag upper); virtual void SetConstraints(ConstraintType type, int lower = 0, unsigned upper = UINT_MAX); virtual void SetCharacterSet(ConstraintType ctype, const char * charSet); virtual void SetCharacterSet(ConstraintType ctype, unsigned firstChar, unsigned lastChar); protected: PASN_Object(unsigned tag, TagClass tagClass, BOOL extend = FALSE); /// PER extension capability BOOL extendable; /// BER tag class TagClass tagClass; /// ASN object tag unsigned tag;};/** Base class for constrained ASN encoding/decoding.*/class PASN_ConstrainedObject : public PASN_Object{ PCLASSINFO(PASN_ConstrainedObject, PASN_Object); public: virtual void SetConstraints(ConstraintType type, int lower = 0, unsigned upper = UINT_MAX); BOOL IsConstrained() const { return constraint != Unconstrained; } int GetLowerLimit() const { return lowerLimit; } unsigned GetUpperLimit() const { return upperLimit; } int ConstrainedLengthDecode(PPER_Stream & strm, unsigned & length); void ConstrainedLengthEncode(PPER_Stream & strm, unsigned length) const; BOOL ConstraintEncode(PPER_Stream & strm, unsigned value) const; protected: PASN_ConstrainedObject(unsigned tag, TagClass tagClass); ConstraintType constraint; int lowerLimit; unsigned upperLimit;};/** Class for ASN Null type.*/class PASN_Null : public PASN_Object{ PCLASSINFO(PASN_Null, PASN_Object); public: PASN_Null(unsigned tag = UniversalNull, TagClass tagClass = UniversalTagClass); virtual Comparison Compare(const PObject & obj) const; virtual PObject * Clone() const; virtual void PrintOn(ostream & strm) const; virtual PString GetTypeAsString() const; virtual PINDEX GetDataLength() const; virtual BOOL Decode(PASN_Stream &); virtual void Encode(PASN_Stream &) const;};/** Class for ASN Boolean type.*/class PASN_Boolean : public PASN_Object{ PCLASSINFO(PASN_Boolean, PASN_Object); public: PASN_Boolean(BOOL val = FALSE, unsigned tag = UniversalBoolean, TagClass tagClass = UniversalTagClass); PASN_Boolean & operator=(BOOL v) { value = v; return *this; } operator BOOL() const { return value; } BOOL GetValue() const { return value; } void SetValue(BOOL v) { value = v; } virtual Comparison Compare(const PObject & obj) const; virtual PObject * Clone() const; virtual void PrintOn(ostream & strm) const; virtual PString GetTypeAsString() const; virtual PINDEX GetDataLength() const; virtual BOOL Decode(PASN_Stream &); virtual void Encode(PASN_Stream &) const; protected: BOOL value;};/** Class for ASN Integer type.*/class PASN_Integer : public PASN_ConstrainedObject{ PCLASSINFO(PASN_Integer, PASN_ConstrainedObject); public: PASN_Integer(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass, unsigned val = 0); PASN_Integer & operator=(unsigned value); operator unsigned() const { return value; } unsigned GetValue() const { return value; } void SetValue(unsigned v) { operator=(v); } virtual Comparison Compare(const PObject & obj) const; virtual PObject * Clone() const; virtual void PrintOn(ostream & strm) const; virtual PString GetTypeAsString() const; virtual PINDEX GetDataLength() const; virtual BOOL Decode(PASN_Stream &); virtual void Encode(PASN_Stream &) const; BOOL DecodePER(PPER_Stream & strm); void EncodePER(PPER_Stream & strm) const; protected: unsigned value;};/** Class for ASN Enumerated type.*/class PASN_Enumeration : public PASN_Object{ PCLASSINFO(PASN_Enumeration, PASN_Object); public: PASN_Enumeration(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass, unsigned nEnums = P_MAX_INDEX, BOOL extendable = FALSE, unsigned val = 0); PASN_Enumeration(unsigned tag, TagClass tagClass, unsigned nEnums, BOOL extendable, const PString & nameSpec, unsigned val = 0); PASN_Enumeration & operator=(unsigned v) { value = v; return *this; } operator unsigned() const { return value; } unsigned GetValue() const { return value; } void SetValue(unsigned v) { value = v; } unsigned GetMaximum() const { return maxEnumValue; } virtual Comparison Compare(const PObject & obj) const; virtual PObject * Clone() const; virtual void PrintOn(ostream & strm) const; virtual PString GetTypeAsString() const; virtual PINDEX GetDataLength() const; virtual BOOL Decode(PASN_Stream &); virtual void Encode(PASN_Stream &) const; BOOL DecodePER(PPER_Stream & strm); void EncodePER(PPER_Stream & strm) const; protected: unsigned maxEnumValue; unsigned value; POrdinalToString names;};/** Class for ASN floating point type.*/class PASN_Real : public PASN_Object{ PCLASSINFO(PASN_Real, PASN_Object); public: PASN_Real(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass, double val = 0); PASN_Real & operator=(double val) { value = val; return *this; } operator double() const { return value; } double GetValue() const { return value; } void SetValue(double v) { value = v; } virtual Comparison Compare(const PObject & obj) const; virtual PObject * Clone() const;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -