📄 asner.h
字号:
BOOL DecodeBER(PBER_Stream & strm, unsigned len);
void EncodeBER(PBER_Stream & strm) const;
#endif
#ifdef P_INCLUDE_PER
BOOL DecodePER(PPER_Stream & strm);
void EncodePER(PPER_Stream & strm) const;
#endif
protected:
void Construct();
BOOL IsLegalCharacter(WORD ch);
PWORDArray value;
PWORDArray characterSet;
WORD firstChar, lastChar;
unsigned charSetUnalignedBits;
unsigned charSetAlignedBits;
};
class PASN_GeneralisedTime : public PASN_VisibleString
{
PCLASSINFO(PASN_GeneralisedTime, PASN_VisibleString);
public:
PASN_GeneralisedTime()
: PASN_VisibleString(UniversalGeneralisedTime, UniversalTagClass) { }
PASN_GeneralisedTime(const PTime & time)
: PASN_VisibleString(UniversalGeneralisedTime, UniversalTagClass) { SetValue(time); }
PASN_GeneralisedTime(unsigned tag, TagClass tagClass)
: PASN_VisibleString(tag, tagClass) { }
PASN_GeneralisedTime & operator=(const PTime & time);
void SetValue(const PTime & time) { operator=(time); }
PTime GetValue() const;
};
class PASN_UniversalTime : public PASN_VisibleString
{
PCLASSINFO(PASN_UniversalTime, PASN_VisibleString);
public:
PASN_UniversalTime()
: PASN_VisibleString(UniversalUTCTime, UniversalTagClass) { }
PASN_UniversalTime(const PTime & time)
: PASN_VisibleString(UniversalUTCTime, UniversalTagClass) { SetValue(time); }
PASN_UniversalTime(unsigned tag, TagClass tagClass)
: PASN_VisibleString(tag, tagClass) { }
PASN_UniversalTime & operator=(const PTime & time);
void SetValue(const PTime & time) { operator=(time); }
PTime GetValue() const;
};
class PASN_Sequence;
/** Class for ASN Choice type.
*/
class PASN_Choice : public PASN_Object
{
PCLASSINFO(PASN_Choice, PASN_Object);
public:
~PASN_Choice();
virtual void SetTag(unsigned newTag, TagClass tagClass = DefaultTagClass);
PString GetTagName() const;
PASN_Object & GetObject() const;
BOOL IsValid() const { return choice != NULL; }
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
operator PASN_Null &() const;
operator PASN_Boolean &() const;
operator PASN_Integer &() const;
operator PASN_Enumeration &() const;
operator PASN_Real &() const;
operator PASN_ObjectId &() const;
operator PASN_BitString &() const;
operator PASN_OctetString &() const;
operator PASN_NumericString &() const;
operator PASN_PrintableString &() const;
operator PASN_VisibleString &() const;
operator PASN_IA5String &() const;
operator PASN_GeneralString &() const;
operator PASN_BMPString &() const;
operator PASN_Sequence &() const;
#else
operator PASN_Null &();
operator PASN_Boolean &();
operator PASN_Integer &();
operator PASN_Enumeration &();
operator PASN_Real &();
operator PASN_ObjectId &();
operator PASN_BitString &();
operator PASN_OctetString &();
operator PASN_NumericString &();
operator PASN_PrintableString &();
operator PASN_VisibleString &();
operator PASN_IA5String &();
operator PASN_GeneralString &();
operator PASN_BMPString &();
operator PASN_Sequence &();
operator const PASN_Null &() const;
operator const PASN_Boolean &() const;
operator const PASN_Integer &() const;
operator const PASN_Enumeration &() const;
operator const PASN_Real &() const;
operator const PASN_ObjectId &() const;
operator const PASN_BitString &() const;
operator const PASN_OctetString &() const;
operator const PASN_NumericString &() const;
operator const PASN_PrintableString &() const;
operator const PASN_VisibleString &() const;
operator const PASN_IA5String &() const;
operator const PASN_GeneralString &() const;
operator const PASN_BMPString &() const;
operator const PASN_Sequence &() const;
#endif
virtual BOOL CreateObject() = 0;
virtual Comparison Compare(const PObject & obj) const;
virtual void PrintOn(ostream & strm) const;
virtual PString GetTypeAsString() const;
virtual PINDEX GetDataLength() const;
virtual BOOL IsPrimitive() const;
virtual BOOL Decode(PASN_Stream &);
virtual void Encode(PASN_Stream &) const;
#ifdef P_INCLUDE_PER
virtual BOOL DecodePER(PPER_Stream &);
virtual void EncodePER(PPER_Stream &) const;
#endif
#ifdef P_INCLUDE_XER
BOOL DecodeXER(PXER_Stream &);
void EncodeXER(PXER_Stream &) const;
#endif
PASN_Choice & operator=(const PASN_Choice & other);
PINDEX GetValueByName(PString name) const;
protected:
PASN_Choice(unsigned nChoices = 0, BOOL extend = FALSE);
PASN_Choice(unsigned tag, TagClass tagClass, unsigned nChoices, BOOL extend);
PASN_Choice(unsigned tag, TagClass tagClass, unsigned nChoices, BOOL extend, const PASN_Names * nameSpec,unsigned namesCnt);
PASN_Choice(const PASN_Choice & other);
BOOL CheckCreate() const;
unsigned numChoices;
PASN_Object * choice;
const PASN_Names *names;
unsigned namesCount;
};
PARRAY(PASN_ObjectArray, PASN_Object);
/** Class for ASN Sequence type.
*/
class PASN_Sequence : public PASN_Object
{
PCLASSINFO(PASN_Sequence, PASN_Object);
public:
PASN_Sequence(unsigned tag = UniversalSequence,
TagClass tagClass = UniversalTagClass,
unsigned nOpts = 0, BOOL extend = FALSE, unsigned nExtend = 0);
PASN_Sequence(const PASN_Sequence & other);
PASN_Sequence & operator=(const PASN_Sequence & other);
PINDEX GetSize() const { return fields.GetSize(); }
BOOL SetSize(PINDEX newSize);
PASN_Object & operator[](PINDEX i) const { return fields[i]; }
BOOL HasOptionalField(PINDEX opt) const;
void IncludeOptionalField(PINDEX opt);
void RemoveOptionalField(PINDEX opt);
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 IsPrimitive() const;
virtual BOOL Decode(PASN_Stream &);
virtual void Encode(PASN_Stream &) const;
BOOL PreambleDecode(PASN_Stream & strm);
void PreambleEncode(PASN_Stream & strm) const;
BOOL KnownExtensionDecode(PASN_Stream & strm, PINDEX fld, PASN_Object & field);
void KnownExtensionEncode(PASN_Stream & strm, PINDEX fld, const PASN_Object & field) const;
BOOL UnknownExtensionsDecode(PASN_Stream & strm);
void UnknownExtensionsEncode(PASN_Stream & strm) const;
#ifdef P_INCLUDE_BER
BOOL PreambleDecodeBER(PBER_Stream & strm);
void PreambleEncodeBER(PBER_Stream & strm) const;
BOOL KnownExtensionDecodeBER(PBER_Stream & strm, PINDEX fld, PASN_Object & field);
void KnownExtensionEncodeBER(PBER_Stream & strm, PINDEX fld, const PASN_Object & field) const;
BOOL UnknownExtensionsDecodeBER(PBER_Stream & strm);
void UnknownExtensionsEncodeBER(PBER_Stream & strm) const;
#endif
#ifdef P_INCLUDE_PER
BOOL PreambleDecodePER(PPER_Stream & strm);
void PreambleEncodePER(PPER_Stream & strm) const;
BOOL KnownExtensionDecodePER(PPER_Stream & strm, PINDEX fld, PASN_Object & field);
void KnownExtensionEncodePER(PPER_Stream & strm, PINDEX fld, const PASN_Object & field) const;
BOOL UnknownExtensionsDecodePER(PPER_Stream & strm);
void UnknownExtensionsEncodePER(PPER_Stream & strm) const;
#endif
#ifdef P_INCLUDE_XER
virtual BOOL PreambleDecodeXER(PXER_Stream & strm);
virtual void PreambleEncodeXER(PXER_Stream & strm) const;
virtual BOOL KnownExtensionDecodeXER(PXER_Stream & strm, PINDEX fld, PASN_Object & field);
virtual void KnownExtensionEncodeXER(PXER_Stream & strm, PINDEX fld, const PASN_Object & field) const;
virtual BOOL UnknownExtensionsDecodeXER(PXER_Stream & strm);
virtual void UnknownExtensionsEncodeXER(PXER_Stream & strm) const;
#endif
protected:
BOOL NoExtensionsToDecode(PPER_Stream & strm);
BOOL NoExtensionsToEncode(PPER_Stream & strm);
PASN_ObjectArray fields;
PASN_BitString optionMap;
int knownExtensions;
int totalExtensions;
PASN_BitString extensionMap;
PINDEX endBasicEncoding;
};
/** Class for ASN Set type.
*/
class PASN_Set : public PASN_Sequence
{
PCLASSINFO(PASN_Set, PASN_Sequence);
public:
PASN_Set(unsigned tag = UniversalSet,
TagClass tagClass = UniversalTagClass,
unsigned nOpts = 0, BOOL extend = FALSE, unsigned nExtend = 0);
virtual PObject * Clone() const;
virtual PString GetTypeAsString() const;
};
/** Class for ASN Array type.
*/
class PASN_Array : public PASN_ConstrainedObject
{
PCLASSINFO(PASN_Array, PASN_ConstrainedObject);
public:
PINDEX GetSize() const { return array.GetSize(); }
BOOL SetSize(PINDEX newSize);
PASN_Object & operator[](PINDEX i) const { return array[i]; }
void Append(PASN_Object * obj) { array.SetAt(array.GetSize(), obj); }
void RemoveAt(PINDEX i) { array.RemoveAt(i); }
void RemoveAll() { array.RemoveAll(); }
virtual Comparison Compare(const PObject & obj) const;
virtual void PrintOn(ostream & strm) const;
virtual void SetConstraintBounds(ConstraintType type, int lower, unsigned upper);
virtual PString GetTypeAsString() const;
virtual PINDEX GetDataLength() const;
virtual BOOL IsPrimitive() const;
virtual BOOL Decode(PASN_Stream &);
virtual void Encode(PASN_Stream &) const;
virtual PASN_Object * CreateObject() const = 0;
PASN_Array & operator=(const PASN_Array & other);
protected:
PASN_Array(unsigned tag = UniversalSequence,
TagClass tagClass = UniversalTagClass);
PASN_Array(const PASN_Array & other);
PASN_ObjectArray array;
};
/////////////////////////////////////////////////////////////////////////////
/** Base class for ASN decoder/encoder stream.
*/
class PASN_Stream : public PBYTEArray
{
PCLASSINFO(PASN_Stream, PBYTEArray);
public:
PASN_Stream();
PASN_Stream(const PBYTEArray & bytes);
PASN_Stream(const BYTE * buf, PINDEX size);
void PrintOn(ostream & strm) const;
PINDEX GetPosition() const { return byteOffset; }
void SetPosition(PINDEX newPos);
BOOL IsAtEnd() { return byteOffset >= GetSize(); }
void ResetDecoder();
void BeginEncoding();
void CompleteEncoding();
virtual BOOL Read(PChannel & chan) = 0;
virtual BOOL Write(PChannel & chan) = 0;
virtual BOOL NullDecode(PASN_Null &) = 0;
virtual void NullEncode(const PASN_Null &) = 0;
virtual BOOL BooleanDecode(PASN_Boolean &) = 0;
virtual void BooleanEncode(const PASN_Boolean &) = 0;
virtual BOOL IntegerDecode(PASN_Integer &) = 0;
virtual void IntegerEncode(const PASN_Integer &) = 0;
virtual BOOL EnumerationDecode(PASN_Enumeration &) = 0;
virtual void EnumerationEncode(const PASN_Enumeration &) = 0;
virtual BOOL RealDecode(PASN_Real &) = 0;
virtual void RealEncode(const PASN_Real &) = 0;
virtual BOOL ObjectIdDecode(PASN_ObjectId &) = 0;
virtual void ObjectIdEncode(const PASN_ObjectId &) = 0;
virtual BOOL BitStringDecode(PASN_BitString &) = 0;
virtual void BitStringEncode(const PASN_BitString &) = 0;
virtual BOOL OctetStringDecode(PASN_OctetString &) = 0;
virtual void OctetStringEncode(const PASN_OctetString &) = 0;
virtual BOOL ConstrainedStringDecode(PASN_ConstrainedString &) = 0;
virtual void ConstrainedStringEncode(const PASN_ConstrainedString &) = 0;
virtual BOOL BMPStringDecode(PASN_BMPString &) = 0;
virtual void BMPStringEncode(const PASN_BMPString &) = 0;
virtual BOOL ChoiceDecode(PASN_Choice &) = 0;
virtual void ChoiceEncode(const PASN_Choice &) = 0;
virtual BOOL ArrayDecode(PASN_Array &) = 0;
virtual void ArrayEncode(const PASN_Array &) = 0;
virtual BOOL SequencePreambleDecode(PASN_Sequence &) = 0;
virtual void SequencePreambleEncode(const PASN_Sequence &) = 0;
virtual BOOL SequenceKnownDecode(PASN_Sequence &, PINDEX, PASN_Object &) = 0;
virtual void SequenceKnownEncode(const PASN_Sequence &, PINDEX, const PASN_Object &) = 0;
virtual BOOL SequenceUnknownDecode(PASN_Sequence &) = 0;
virtual void SequenceUnknownEncode(const PASN_Sequence &) = 0;
BYTE ByteDecode();
void ByteEncode(unsigned value);
unsigned BlockDecode(BYTE * bufptr, unsigned nBytes);
void BlockEncode(const BYTE * bufptr, PINDEX nBytes);
void ByteAlign();
protected:
PINDEX byteOffset;
unsigned bitOffset;
private:
void Construct();
};
#ifdef P_INCLUDE_PER
#include "asnper.h"
#endif
#ifdef P_INCLUDE_BER
#include "asnber.h"
#endif
#ifdef P_INCLUDE_XER
#include "asnxer.h"
#endif
#endif // _ASNER_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -