⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asner.h

📁 radius协议源码÷The Radius Stack will connect to a Radius Server. This stack implementation is built upo
💻 H
📖 第 1 页 / 共 3 页
字号:
/* * 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 + -