📄 asner.h
字号:
virtual BOOL DecodePER(PPER_Stream &); virtual void EncodePER(PPER_Stream &) const; protected: PASN_Choice(unsigned nChoices = UINT_MAX, BOOL extend = FALSE); PASN_Choice(unsigned tag, TagClass tagClass, unsigned nChoices, BOOL extend); PASN_Choice(unsigned tag, TagClass tagClass, unsigned nChoices, BOOL extend, const PString & nameSpec); PASN_Choice(const PASN_Choice & other); PASN_Choice & operator=(const PASN_Choice & other); unsigned numChoices; PASN_Object * choice; POrdinalToString names;};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(); } void 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; 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; 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; 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(); } void SetSize(PINDEX newSize); PASN_Object & operator[](PINDEX i) const { return array[i]; } 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 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; protected: PASN_Array(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass); PASN_Array(const PASN_Array & other); PASN_Array & operator=(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();};/** Class for ASN basic Encoding Rules stream.*/class PBER_Stream : public PASN_Stream{ PCLASSINFO(PBER_Stream, PASN_Stream); public: PBER_Stream(); PBER_Stream(const PBYTEArray & bytes); PBER_Stream(const BYTE * buf, PINDEX size); PBER_Stream & operator=(const PBYTEArray & bytes); virtual BOOL Read(PChannel & chan); virtual BOOL Write(PChannel & chan); virtual BOOL NullDecode(PASN_Null &); virtual void NullEncode(const PASN_Null &); virtual BOOL BooleanDecode(PASN_Boolean &); virtual void BooleanEncode(const PASN_Boolean &); virtual BOOL IntegerDecode(PASN_Integer &); virtual void IntegerEncode(const PASN_Integer &); virtual BOOL EnumerationDecode(PASN_Enumeration &); virtual void EnumerationEncode(const PASN_Enumeration &); virtual BOOL RealDecode(PASN_Real &); virtual void RealEncode(const PASN_Real &); virtual BOOL ObjectIdDecode(PASN_ObjectId &); virtual void ObjectIdEncode(const PASN_ObjectId &); virtual BOOL BitStringDecode(PASN_BitString &); virtual void BitStringEncode(const PASN_BitString &); virtual BOOL OctetStringDecode(PASN_OctetString &); virtual void OctetStringEncode(const PASN_OctetString &); virtual BOOL ConstrainedStringDecode(PASN_ConstrainedString &); virtual void ConstrainedStringEncode(const PASN_ConstrainedString &); virtual BOOL BMPStringDecode(PASN_BMPString &); virtual void BMPStringEncode(const PASN_BMPString &); virtual BOOL ChoiceDecode(PASN_Choice &); virtual void ChoiceEncode(const PASN_Choice &); virtual BOOL ArrayDecode(PASN_Array &); virtual void ArrayEncode(const PASN_Array &); virtual BOOL SequencePreambleDecode(PASN_Sequence &); virtual void SequencePreambleEncode(const PASN_Sequence &); virtual BOOL SequenceKnownDecode(PASN_Sequence &, PINDEX, PASN_Object &); virtual void SequenceKnownEncode(const PASN_Sequence &, PINDEX, const PASN_Object &); virtual BOOL SequenceUnknownDecode(PASN_Sequence &); virtual void SequenceUnknownEncode(const PASN_Sequence &); virtual PASN_Object * CreateObject(unsigned tag, PASN_Object::TagClass tagClass, BOOL primitive) const; BOOL HeaderDecode(unsigned & tagVal, PASN_Object::TagClass & tagClass, BOOL & primitive, unsigned & len); BOOL HeaderDecode(PASN_Object & obj, unsigned & len); void HeaderEncode(const PASN_Object & obj);};/** Class for ASN Packed Encoding Rules stream.*/class PPER_Stream : public PASN_Stream{ PCLASSINFO(PPER_Stream, PASN_Stream); public: PPER_Stream(BOOL aligned = TRUE); PPER_Stream(const PBYTEArray & bytes, BOOL aligned = TRUE); PPER_Stream(const BYTE * buf, PINDEX size, BOOL aligned = TRUE); PPER_Stream & operator=(const PBYTEArray & bytes); unsigned GetBitsLeft() const; virtual BOOL Read(PChannel & chan); virtual BOOL Write(PChannel & chan); virtual BOOL NullDecode(PASN_Null &); virtual void NullEncode(const PASN_Null &); virtual BOOL BooleanDecode(PASN_Boolean &); virtual void BooleanEncode(const PASN_Boolean &); virtual BOOL IntegerDecode(PASN_Integer &); virtual void IntegerEncode(const PASN_Integer &); virtual BOOL EnumerationDecode(PASN_Enumeration &); virtual void EnumerationEncode(const PASN_Enumeration &); virtual BOOL RealDecode(PASN_Real &); virtual void RealEncode(const PASN_Real &); virtual BOOL ObjectIdDecode(PASN_ObjectId &); virtual void ObjectIdEncode(const PASN_ObjectId &); virtual BOOL BitStringDecode(PASN_BitString &); virtual void BitStringEncode(const PASN_BitString &); virtual BOOL OctetStringDecode(PASN_OctetString &); virtual void OctetStringEncode(const PASN_OctetString &); virtual BOOL ConstrainedStringDecode(PASN_ConstrainedString &); virtual void ConstrainedStringEncode(const PASN_ConstrainedString &); virtual BOOL BMPStringDecode(PASN_BMPString &); virtual void BMPStringEncode(const PASN_BMPString &); virtual BOOL ChoiceDecode(PASN_Choice &); virtual void ChoiceEncode(const PASN_Choice &); virtual BOOL ArrayDecode(PASN_Array &); virtual void ArrayEncode(const PASN_Array &); virtual BOOL SequencePreambleDecode(PASN_Sequence &); virtual void SequencePreambleEncode(const PASN_Sequence &); virtual BOOL SequenceKnownDecode(PASN_Sequence &, PINDEX, PASN_Object &); virtual void SequenceKnownEncode(const PASN_Sequence &, PINDEX, const PASN_Object &); virtual BOOL SequenceUnknownDecode(PASN_Sequence &); virtual void SequenceUnknownEncode(const PASN_Sequence &); BOOL IsAligned() const { return aligned; } BOOL SingleBitDecode(); void SingleBitEncode(BOOL value); int MultiBitDecode(unsigned nBits); void MultiBitEncode(int value, unsigned nBits); unsigned SmallUnsignedDecode(); void SmallUnsignedEncode(unsigned val); int LengthDecode(unsigned lower, unsigned upper, unsigned & len); void LengthEncode(unsigned len, unsigned lower, unsigned upper); int UnsignedDecode(unsigned lower, unsigned upper, unsigned & value); void UnsignedEncode(int value, unsigned lower, unsigned upper); void AnyTypeEncode(const PASN_Object * value); protected: BOOL aligned;};#endif // _ASNER_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -