📄 asner.h
字号:
*/
class PASN_Integer : public PASN_ConstrainedObject
{
PCLASSINFO(PASN_Integer, PASN_ConstrainedObject);
public:
PASN_Integer(unsigned val = 0);
PASN_Integer(unsigned tag, TagClass tagClass, 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 void SetConstraintBounds(ConstraintType type, int lower, unsigned upper);
virtual PString GetTypeAsString() const;
virtual PINDEX GetDataLength() const;
virtual BOOL Decode(PASN_Stream &);
virtual void Encode(PASN_Stream &) const;
#ifdef P_INCLUDE_PER
BOOL DecodePER(PPER_Stream & strm);
void EncodePER(PPER_Stream & strm) const;
#endif
BOOL IsUnsigned() const;
protected:
unsigned value;
};
struct PASN_Names{
char * name;
PINDEX value;
};
/** Class for ASN Enumerated type.
*/
class PASN_Enumeration : public PASN_Object
{
PCLASSINFO(PASN_Enumeration, PASN_Object);
public:
PASN_Enumeration(unsigned val = 0);
PASN_Enumeration(unsigned tag,
TagClass tagClass,
unsigned nEnums = P_MAX_INDEX,
BOOL extendable = FALSE,
unsigned val = 0);
PASN_Enumeration(unsigned tag,
TagClass tagClass,
unsigned nEnums,
BOOL extendable,
const PASN_Names * nameSpec,
unsigned namesCnt,
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;
#ifdef P_INCLUDE_PER
BOOL DecodePER(PPER_Stream & strm);
void EncodePER(PPER_Stream & strm) const;
#endif
#ifdef P_INCLUDE_XER
virtual BOOL DecodeXER(PXER_Stream & strm);
virtual void EncodeXER(PXER_Stream & strm) const;
#endif
PINDEX GetValueByName(PString name) const;
protected:
unsigned maxEnumValue;
unsigned value;
const PASN_Names *names;
unsigned namesCount;
};
/** Class for ASN floating point type.
*/
class PASN_Real : public PASN_Object
{
PCLASSINFO(PASN_Real, PASN_Object);
public:
PASN_Real(double val = 0);
PASN_Real(unsigned tag, TagClass tagClass, 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;
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:
double value;
};
/** Class for ASN Object Identifier type.
*/
class PASN_ObjectId : public PASN_Object
{
PCLASSINFO(PASN_ObjectId, PASN_Object);
public:
PASN_ObjectId(const char * dotstr = NULL);
PASN_ObjectId(unsigned tag, TagClass tagClass);
PASN_ObjectId(const PASN_ObjectId & other);
PASN_ObjectId & operator=(const PASN_ObjectId & other);
PASN_ObjectId & operator=(const char * dotstr);
PASN_ObjectId & operator=(const PString & dotstr);
PASN_ObjectId & operator=(const PUnsignedArray & numbers);
void SetValue(const PString & dotstr);
void SetValue(const PUnsignedArray & numbers) { value = numbers; }
void SetValue(const unsigned * numbers, PINDEX size);
bool operator==(const char * dotstr) const;
bool operator!=(const char * dotstr) const { return !operator==(dotstr); }
bool operator==(const PString & dotstr) const { return operator==((const char *)dotstr); }
bool operator!=(const PString & dotstr) const { return !operator==((const char *)dotstr); }
bool operator==(const PASN_ObjectId & id) const { return value == id.value; }
PINDEX GetSize() const { return value.GetSize(); }
unsigned operator[](PINDEX idx) const { return value[idx]; }
const PUnsignedArray & GetValue() const { return value; }
PString AsString() const;
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 CommonDecode(PASN_Stream & strm, unsigned dataLen);
void CommonEncode(PBYTEArray & eObjId) const;
protected:
PUnsignedArray value;
};
/** Class for ASN Bit String type.
*/
class PASN_BitString : public PASN_ConstrainedObject
{
PCLASSINFO(PASN_BitString, PASN_ConstrainedObject);
public:
PASN_BitString(unsigned nBits = 0, const BYTE * buf = NULL);
PASN_BitString(unsigned tag, TagClass tagClass, unsigned nBits = 0);
PASN_BitString(const PASN_BitString & other);
PASN_BitString & operator=(const PASN_BitString & other);
void SetData(unsigned nBits, const PBYTEArray & bytes);
void SetData(unsigned nBits, const BYTE * buf, PINDEX size = 0);
const BYTE * GetDataPointer() const { return bitData; }
unsigned GetSize() const { return totalBits; }
BOOL SetSize(unsigned nBits);
bool operator[](PINDEX bit) const;
void Set(unsigned bit);
void Clear(unsigned bit);
void Invert(unsigned bit);
virtual Comparison Compare(const PObject & obj) const;
virtual PObject * Clone() 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 Decode(PASN_Stream &);
virtual void Encode(PASN_Stream &) const;
#ifdef P_INCLUDE_BER
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
BOOL DecodeSequenceExtensionBitmap(PPER_Stream & strm);
void EncodeSequenceExtensionBitmap(PPER_Stream & strm) const;
protected:
unsigned totalBits;
PBYTEArray bitData;
};
/** Class for ASN Octet String type.
*/
class PASN_OctetString : public PASN_ConstrainedObject
{
PCLASSINFO(PASN_OctetString, PASN_ConstrainedObject);
public:
PASN_OctetString(const char * str = NULL, PINDEX size = 0);
PASN_OctetString(unsigned tag, TagClass tagClass);
PASN_OctetString(const PASN_OctetString & other);
PASN_OctetString & operator=(const PASN_OctetString & other);
PASN_OctetString & operator=(const char * str);
PASN_OctetString & operator=(const PString & str);
PASN_OctetString & operator=(const PBYTEArray & arr);
void SetValue(const char * str) { operator=(str); }
void SetValue(const PString & str) { operator=(str); }
void SetValue(const PBYTEArray & arr) { operator=(arr); }
void SetValue(const BYTE * data, PINDEX len);
const PBYTEArray & GetValue() const { return value; }
operator const PBYTEArray &() const { return value; }
operator const BYTE *() const { return value; }
PString AsString() const;
BYTE operator[](PINDEX i) const { return value[i]; }
BYTE & operator[](PINDEX i) { return value[i]; }
BYTE * GetPointer(PINDEX sz = 0) { return value.GetPointer(sz); }
PINDEX GetSize() const { return value.GetSize(); }
BOOL SetSize(PINDEX newSize);
virtual Comparison Compare(const PObject & obj) const;
virtual PObject * Clone() 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 Decode(PASN_Stream &);
virtual void Encode(PASN_Stream &) const;
#ifdef P_INCLUDE_PER
BOOL DecodePER(PPER_Stream & strm);
void EncodePER(PPER_Stream & strm) const;
#endif
BOOL DecodeSubType(PASN_Object &) const;
void EncodeSubType(const PASN_Object &);
protected:
PBYTEArray value;
};
/** Base class for ASN String types.
*/
class PASN_ConstrainedString : public PASN_ConstrainedObject
{
PCLASSINFO(PASN_ConstrainedString, PASN_ConstrainedObject);
public:
PASN_ConstrainedString & operator=(const char * str);
PASN_ConstrainedString & operator=(const PString & str) { return operator=((const char *)str); }
operator const PString &() const { return value; }
const PString & GetValue() const { return value; }
void SetValue(const char * v) { operator=(v); }
void SetValue(const PString & v) { operator=(v); }
char operator[](PINDEX idx) const { return value[idx]; }
void SetCharacterSet(ConstraintType ctype, const char * charSet);
void SetCharacterSet(ConstraintType ctype, unsigned firstChar = 0, unsigned lastChar = 255);
void SetCharacterSet(const char * charSet, PINDEX size, ConstraintType ctype);
virtual Comparison Compare(const PObject & obj) const;
virtual void PrintOn(ostream & strm) const;
virtual void SetConstraintBounds(ConstraintType type, int lower, unsigned upper);
virtual PINDEX GetDataLength() const;
virtual BOOL Decode(PASN_Stream &);
virtual void Encode(PASN_Stream &) const;
#ifdef P_INCLUDE_BER
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:
PASN_ConstrainedString(const char * canonicalSet, PINDEX setSize,
unsigned tag, TagClass tagClass);
PString value;
PCharArray characterSet;
const char * canonicalSet;
PINDEX canonicalSetSize;
unsigned canonicalSetBits;
unsigned charSetUnalignedBits;
unsigned charSetAlignedBits;
};
#define DECLARE_STRING_CLASS(name) \
class PASN_##name##String : public PASN_ConstrainedString { \
PCLASSINFO(PASN_##name##String, PASN_ConstrainedString); \
public: \
PASN_##name##String(const char * str = NULL); \
PASN_##name##String(unsigned tag, TagClass tagClass); \
PASN_##name##String & operator=(const char * str); \
PASN_##name##String & operator=(const PString & str); \
virtual PObject * Clone() const; \
virtual PString GetTypeAsString() const; \
}
DECLARE_STRING_CLASS(Numeric);
DECLARE_STRING_CLASS(Printable);
DECLARE_STRING_CLASS(Visible);
DECLARE_STRING_CLASS(IA5);
DECLARE_STRING_CLASS(General);
/** Class for ASN BMP (16 bit) String type.
*/
class PASN_BMPString : public PASN_ConstrainedObject
{
PCLASSINFO(PASN_BMPString, PASN_ConstrainedObject);
public:
PASN_BMPString(const char * str = NULL);
PASN_BMPString(const PWORDArray & wstr);
PASN_BMPString(unsigned tag, TagClass tagClass);
PASN_BMPString(const PASN_BMPString & other);
PASN_BMPString & operator=(const PASN_BMPString & other);
PASN_BMPString & operator=(const char * v) { return operator=(PString(v).AsUCS2()); }
PASN_BMPString & operator=(const PString & v) { return operator=(v.AsUCS2()); }
PASN_BMPString & operator=(const PWORDArray & v);
operator PString() const { return GetValue(); }
operator PWORDArray() const { return value; }
PString GetValue() const { return value; }
void GetValue(PWORDArray & v) const { v = value; }
void SetValue(const char * v) { operator=(PString(v).AsUCS2()); }
void SetValue(const PString & v) { operator=(v.AsUCS2()); }
void SetValue(const PWORDArray & v) { operator=(v); }
void SetValue(const PASN_BMPString & v) { operator=(v.value); }
void SetCharacterSet(ConstraintType ctype, const char * charSet);
void SetCharacterSet(ConstraintType ctype, const PWORDArray & charSet);
void SetCharacterSet(ConstraintType ctype, unsigned firstChar, unsigned lastChar);
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;
#ifdef P_INCLUDE_BER
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -