40 #if !PTRACING && !defined(PASN_NOPRINTON)
41 #define PASN_NOPRINTON 1
65 class PASN_Object :
public PObject
70 virtual PString GetTypeAsString()
const = 0;
72 PINDEX GetObjectLength()
const;
73 virtual PINDEX GetDataLength()
const = 0;
74 virtual PBoolean IsPrimitive()
const {
return true; }
76 virtual PBoolean Decode(PASN_Stream &) = 0;
77 virtual void Encode(PASN_Stream &)
const = 0;
79 PBoolean IsExtendable()
const {
return extendable; }
80 void SetExtendable(
PBoolean ext =
true) { extendable = ext; }
85 ContextSpecificTagClass,
89 TagClass GetTagClass()
const {
return tagClass; }
99 UniversalObjectDescriptor,
100 UniversalExternalType,
102 UniversalEnumeration,
103 UniversalEmbeddedPDV,
104 UniversalSequence = 16,
106 UniversalNumericString,
107 UniversalPrintableString,
108 UniversalTeletexString,
109 UniversalVideotexString,
112 UniversalGeneralisedTime,
113 UniversalGeneralizedTime = UniversalGeneralisedTime,
114 UniversalGraphicString,
115 UniversalVisibleString,
116 UniversalGeneralString,
117 UniversalUniversalString,
118 UniversalBMPString = 30
121 unsigned GetTag()
const {
return tag; }
122 virtual void SetTag(
unsigned newTag, TagClass tagClass = DefaultTagClass);
124 enum ConstraintType {
126 PartiallyConstrained,
131 enum MinimumValueTag { MinimumValue = INT_MIN };
132 enum MaximumValueTag { MaximumValue = INT_MAX };
133 void SetConstraints(ConstraintType type,
int value)
134 { SetConstraintBounds(type, value, value); }
135 void SetConstraints(ConstraintType,
int lower, MaximumValueTag )
136 { SetConstraintBounds(PartiallyConstrained, (
int)lower, lower < 0 ? INT_MAX : UINT_MAX); }
137 void SetConstraints(ConstraintType, MinimumValueTag lower,
unsigned upper)
138 { SetConstraintBounds(PartiallyConstrained, (
int)lower, (
unsigned)upper); }
139 void SetConstraints(ConstraintType, MinimumValueTag lower, MaximumValueTag upper)
140 { SetConstraintBounds(PartiallyConstrained, (
int)lower, (
unsigned)upper); }
141 void SetConstraints(ConstraintType type,
int lower,
unsigned upper)
142 { SetConstraintBounds(type, lower, upper); }
144 virtual void SetConstraintBounds(ConstraintType type,
int lower,
unsigned upper);
145 virtual void SetCharacterSet(ConstraintType ctype,
const char * charSet);
146 virtual void SetCharacterSet(ConstraintType ctype,
unsigned firstChar,
unsigned lastChar);
148 static PINDEX GetMaximumArraySize();
149 static void SetMaximumArraySize(PINDEX sz);
150 static PINDEX GetMaximumStringSize();
151 static void SetMaximumStringSize(PINDEX sz);
154 PASN_Object(
unsigned tag, TagClass tagClass,
PBoolean extend =
false);
167 class PASN_ConstrainedObject :
public PASN_Object
169 PCLASSINFO(PASN_ConstrainedObject, PASN_Object);
171 PBoolean IsConstrained()
const {
return constraint != Unconstrained; }
172 int GetLowerLimit()
const {
return lowerLimit; }
173 unsigned GetUpperLimit()
const {
return upperLimit; }
175 PBoolean ConstrainedLengthDecode(PPER_Stream & strm,
unsigned & length);
176 void ConstrainedLengthEncode(PPER_Stream & strm,
unsigned length)
const;
178 PBoolean ConstraintEncode(PPER_Stream & strm,
unsigned value)
const;
181 virtual void SetConstraintBounds(ConstraintType type,
int lower,
unsigned upper);
182 PASN_ConstrainedObject(
unsigned tag, TagClass tagClass);
184 ConstraintType constraint;
192 class PASN_Null :
public PASN_Object
196 PASN_Null(
unsigned tag = UniversalNull,
197 TagClass tagClass = UniversalTagClass);
199 virtual Comparison Compare(
const PObject & obj)
const;
200 virtual PObject * Clone()
const;
201 virtual void PrintOn(ostream & strm)
const;
203 virtual PString GetTypeAsString()
const;
204 virtual PINDEX GetDataLength()
const;
205 virtual PBoolean Decode(PASN_Stream &);
206 virtual void Encode(PASN_Stream &)
const;
212 class PASN_Boolean :
public PASN_Object
217 PASN_Boolean(
unsigned tag, TagClass tagClass,
PBoolean val =
false);
219 PASN_Boolean & operator=(
PBoolean v) { value = v;
return *
this; }
220 operator PBoolean()
const {
return value; }
221 PBoolean GetValue()
const {
return value; }
222 void SetValue(
PBoolean v) { value = v; }
224 virtual Comparison Compare(
const PObject & obj)
const;
225 virtual PObject * Clone()
const;
226 virtual void PrintOn(ostream & strm)
const;
228 virtual PString GetTypeAsString()
const;
229 virtual PINDEX GetDataLength()
const;
230 virtual PBoolean Decode(PASN_Stream &);
231 virtual void Encode(PASN_Stream &)
const;
240 class PASN_Integer :
public PASN_ConstrainedObject
242 PCLASSINFO(PASN_Integer, PASN_ConstrainedObject);
244 PASN_Integer(
unsigned val = 0);
245 PASN_Integer(
unsigned tag, TagClass tagClass,
unsigned val = 0);
247 PASN_Integer & operator=(
unsigned value);
248 operator unsigned()
const {
return value; }
249 unsigned GetValue()
const {
return value; }
250 void SetValue(
unsigned v) { operator=(v); }
252 virtual Comparison Compare(
const PObject & obj)
const;
253 virtual PObject * Clone()
const;
254 virtual void PrintOn(ostream & strm)
const;
256 virtual void SetConstraintBounds(ConstraintType type,
int lower,
unsigned upper);
257 virtual PString GetTypeAsString()
const;
258 virtual PINDEX GetDataLength()
const;
259 virtual PBoolean Decode(PASN_Stream &);
260 virtual void Encode(PASN_Stream &)
const;
263 PBoolean DecodePER(PPER_Stream & strm);
264 void EncodePER(PPER_Stream & strm)
const;
280 class PASN_Enumeration :
public PASN_Object
284 PASN_Enumeration(
unsigned val = 0);
285 PASN_Enumeration(
unsigned tag,
287 unsigned nEnums = UINT_MAX,
290 PASN_Enumeration(
unsigned tag,
294 const PASN_Names * nameSpec,
298 PASN_Enumeration & operator=(
unsigned v) { value = v;
return *
this; }
299 operator unsigned()
const {
return value; }
300 unsigned GetValue()
const {
return value; }
301 void SetValue(
unsigned v) { value = v; }
303 unsigned GetMaximum()
const {
return maxEnumValue; }
305 virtual Comparison Compare(
const PObject & obj)
const;
306 virtual PObject * Clone()
const;
307 virtual void PrintOn(ostream & strm)
const;
309 virtual PString GetTypeAsString()
const;
310 virtual PINDEX GetDataLength()
const;
311 virtual PBoolean Decode(PASN_Stream &);
312 virtual void Encode(PASN_Stream &)
const;
315 PBoolean DecodePER(PPER_Stream & strm);
316 void EncodePER(PPER_Stream & strm)
const;
320 virtual PBoolean DecodeXER(PXER_Stream & strm);
321 virtual void EncodeXER(PXER_Stream & strm)
const;
324 PINDEX GetValueByName(
PString name)
const;
326 unsigned maxEnumValue;
328 const PASN_Names *names;
335 class PASN_Real :
public PASN_Object
339 PASN_Real(
double val = 0);
340 PASN_Real(
unsigned tag, TagClass tagClass,
double val = 0);
342 PASN_Real & operator=(
double val) { value = val;
return *
this; }
343 operator double()
const {
return value; }
344 double GetValue()
const {
return value; }
345 void SetValue(
double v) { value = v; }
347 virtual Comparison Compare(
const PObject & obj)
const;
348 virtual PObject * Clone()
const;
349 virtual void PrintOn(ostream & strm)
const;
351 virtual PString GetTypeAsString()
const;
352 virtual PINDEX GetDataLength()
const;
353 virtual PBoolean Decode(PASN_Stream &);
354 virtual void Encode(PASN_Stream &)
const;
363 class PASN_ObjectId :
public PASN_Object
367 PASN_ObjectId(
const char * dotstr = NULL);
368 PASN_ObjectId(
unsigned tag, TagClass tagClass);
370 PASN_ObjectId(
const PASN_ObjectId & other);
371 PASN_ObjectId & operator=(
const PASN_ObjectId & other);
373 PASN_ObjectId & operator=(
const char * dotstr);
374 PASN_ObjectId & operator=(
const PString & dotstr);
376 void SetValue(
const PString & dotstr);
377 void SetValue(
const PUnsignedArray & numbers) { value = numbers; }
378 void SetValue(
const unsigned * numbers, PINDEX size);
380 bool operator==(
const char * dotstr)
const;
381 bool operator!=(
const char * dotstr)
const {
return !operator==(dotstr); }
382 bool operator==(
const PString & dotstr)
const {
return operator==((
const char *)dotstr); }
383 bool operator!=(
const PString & dotstr)
const {
return !operator==((
const char *)dotstr); }
384 bool operator==(
const PASN_ObjectId &
id)
const {
return value ==
id.value; }
386 PINDEX GetSize()
const {
return value.GetSize(); }
387 unsigned operator[](PINDEX idx)
const {
return value[idx]; }
391 virtual Comparison Compare(
const PObject & obj)
const;
392 virtual PObject * Clone()
const;
393 virtual void PrintOn(ostream & strm)
const;
395 virtual PString GetTypeAsString()
const;
396 virtual PINDEX GetDataLength()
const;
397 virtual PBoolean Decode(PASN_Stream &);
398 virtual void Encode(PASN_Stream &)
const;
400 PBoolean CommonDecode(PASN_Stream & strm,
unsigned dataLen);
410 class PASN_BitString :
public PASN_ConstrainedObject
412 PCLASSINFO(PASN_BitString, PASN_ConstrainedObject);
414 PASN_BitString(
unsigned nBits = 0,
const BYTE * buf = NULL);
415 PASN_BitString(
unsigned tag, TagClass tagClass,
unsigned nBits = 0);
417 PASN_BitString(
const PASN_BitString & other);
418 PASN_BitString & operator=(
const PASN_BitString & other);
421 void SetData(
const BYTE * buf, PINDEX size) { SetData(size*8, buf, size); }
422 void SetData(
unsigned nBits,
const PBYTEArray & bytes);
423 void SetData(
unsigned nBits,
const BYTE * buf, PINDEX size = 0);
425 const PBYTEArray & GetData()
const {
return bitData; }
426 const BYTE * GetDataPointer()
const {
return bitData; }
428 unsigned GetSize()
const {
return totalBits; }
431 bool operator[](PINDEX bit)
const;
432 void Set(
unsigned bit);
433 void Clear(
unsigned bit);
434 void Invert(
unsigned bit);
436 virtual Comparison Compare(
const PObject & obj)
const;
437 virtual PObject * Clone()
const;
438 virtual void PrintOn(ostream & strm)
const;
440 virtual void SetConstraintBounds(ConstraintType type,
int lower,
unsigned upper);
441 virtual PString GetTypeAsString()
const;
442 virtual PINDEX GetDataLength()
const;
443 virtual PBoolean Decode(PASN_Stream &);
444 virtual void Encode(PASN_Stream &)
const;
447 PBoolean DecodeBER(PBER_Stream & strm,
unsigned len);
448 void EncodeBER(PBER_Stream & strm)
const;
452 PBoolean DecodePER(PPER_Stream & strm);
453 void EncodePER(PPER_Stream & strm)
const;
456 PBoolean DecodeSequenceExtensionBitmap(PPER_Stream & strm);
457 void EncodeSequenceExtensionBitmap(PPER_Stream & strm)
const;
467 class PASN_OctetString :
public PASN_ConstrainedObject
469 PCLASSINFO(PASN_OctetString, PASN_ConstrainedObject);
471 PASN_OctetString(
const char * str = NULL, PINDEX size = 0);
472 PASN_OctetString(
unsigned tag, TagClass tagClass);
474 PASN_OctetString(
const PASN_OctetString & other);
475 PASN_OctetString & operator=(
const PASN_OctetString & other);
477 PASN_OctetString & operator=(
const char * str);
478 PASN_OctetString & operator=(
const PString & str);
479 PASN_OctetString & operator=(
const PBYTEArray & arr);
480 void SetValue(
const char * str) { operator=(str); }
481 void SetValue(
const PString & str) { operator=(str); }
482 void SetValue(
const PBYTEArray & arr) { operator=(arr); }
483 void SetValue(
const BYTE * data, PINDEX len);
484 const PBYTEArray & GetValue()
const {
return value; }
485 PBYTEArray & GetWritableValue() {
return value; }
486 operator const PBYTEArray &()
const {
return value; }
487 operator const BYTE *()
const {
return value; }
489 BYTE operator[](PINDEX i)
const {
return value[i]; }
490 BYTE & operator[](PINDEX i) {
return value[i]; }
491 BYTE * GetPointer(PINDEX sz = 0) {
return value.GetPointer(sz); }
492 PINDEX GetSize()
const {
return value.GetSize(); }
495 virtual Comparison Compare(
const PObject & obj)
const;
496 virtual PObject * Clone()
const;
497 virtual void PrintOn(ostream & strm)
const;
499 virtual void SetConstraintBounds(ConstraintType type,
int lower,
unsigned upper);
500 virtual PString GetTypeAsString()
const;
501 virtual PINDEX GetDataLength()
const;
502 virtual PBoolean Decode(PASN_Stream &);
503 virtual void Encode(PASN_Stream &)
const;
506 PBoolean DecodePER(PPER_Stream & strm);
507 void EncodePER(PPER_Stream & strm)
const;
510 PBoolean DecodeSubType(PASN_Object &)
const;
511 void EncodeSubType(
const PASN_Object &);
520 class PASN_ConstrainedString :
public PASN_ConstrainedObject
522 PCLASSINFO(PASN_ConstrainedString, PASN_ConstrainedObject);
524 PASN_ConstrainedString & operator=(
const char * str);
525 PASN_ConstrainedString & operator=(
const PString & str) {
return operator=((
const char *)str); }
526 operator const PString &()
const {
return value; }
527 const PString & GetValue()
const {
return value; }
528 void SetValue(
const char * v) { operator=(v); }
529 void SetValue(
const PString & v) { operator=(v); }
530 char operator[](PINDEX idx)
const {
return value[idx]; }
532 void SetCharacterSet(ConstraintType ctype,
const char * charSet);
533 void SetCharacterSet(ConstraintType ctype,
unsigned firstChar = 0,
unsigned lastChar = 255);
534 void SetCharacterSet(
const char * charSet, PINDEX size, ConstraintType ctype);
536 virtual Comparison Compare(
const PObject & obj)
const;
537 virtual void PrintOn(ostream & strm)
const;
539 virtual void SetConstraintBounds(ConstraintType type,
int lower,
unsigned upper);
540 virtual PINDEX GetDataLength()
const;
541 virtual PBoolean Decode(PASN_Stream &);
542 virtual void Encode(PASN_Stream &)
const;
545 PBoolean DecodeBER(PBER_Stream & strm,
unsigned len);
546 void EncodeBER(PBER_Stream & strm)
const;
550 PBoolean DecodePER(PPER_Stream & strm);
551 void EncodePER(PPER_Stream & strm)
const;
555 PASN_ConstrainedString(
const char * canonicalSet, PINDEX setSize,
556 unsigned tag, TagClass tagClass);
560 const char * canonicalSet;
561 PINDEX canonicalSetSize;
562 unsigned canonicalSetBits;
563 unsigned charSetUnalignedBits;
564 unsigned charSetAlignedBits;
568 #define DECLARE_STRING_CLASS(name) \
569 class PASN_##name##String : public PASN_ConstrainedString { \
570 PCLASSINFO(PASN_##name##String, PASN_ConstrainedString); \
572 PASN_##name##String(const char * str = NULL); \
573 PASN_##name##String(unsigned tag, TagClass tagClass); \
574 PASN_##name##String & operator=(const char * str); \
575 PASN_##name##String & operator=(const PString & str); \
576 virtual PObject * Clone() const; \
577 virtual PString GetTypeAsString() const; \
580 DECLARE_STRING_CLASS(Numeric);
581 DECLARE_STRING_CLASS(Printable);
582 DECLARE_STRING_CLASS(Visible);
583 DECLARE_STRING_CLASS(IA5);
584 DECLARE_STRING_CLASS(General);
589 class PASN_BMPString :
public PASN_ConstrainedObject
591 PCLASSINFO(PASN_BMPString, PASN_ConstrainedObject);
593 PASN_BMPString(
const char * str = NULL);
594 PASN_BMPString(
const PWCharArray & wstr);
595 PASN_BMPString(
unsigned tag, TagClass tagClass);
597 PASN_BMPString(
const PASN_BMPString & other);
598 PASN_BMPString & operator=(
const PASN_BMPString & other);
600 PASN_BMPString & operator=(
const char * v) {
return operator=(
PString(v).AsUCS2()); }
601 PASN_BMPString & operator=(
const PString & v) {
return operator=(v.AsUCS2()); }
602 PASN_BMPString & operator=(
const PWCharArray & v);
603 operator PString()
const {
return GetValue(); }
604 operator PWCharArray()
const {
return value; }
605 PString GetValue()
const {
return value; }
606 void GetValue(PWCharArray & v)
const { v = value; }
607 void SetValue(
const char * v) { operator=(
PString(v).AsUCS2()); }
608 void SetValue(
const PString & v) { operator=(v.AsUCS2()); }
609 void SetValue(
const PWCharArray & v) { operator=(v); }
610 void SetValue(
const PASN_BMPString & v) { operator=(v.value); }
611 void SetValueRaw(
const PWCharArray & v) { SetValueRaw(v, v.GetSize()); }
612 void SetValueRaw(
const wchar_t * val, PINDEX len);
614 void SetCharacterSet(ConstraintType ctype,
const char * charSet);
615 void SetCharacterSet(ConstraintType ctype,
const PWCharArray & charSet);
616 void SetCharacterSet(ConstraintType ctype,
unsigned firstChar,
unsigned lastChar);
618 virtual Comparison Compare(
const PObject & obj)
const;
619 virtual PObject * Clone()
const;
620 virtual void PrintOn(ostream & strm)
const;
622 virtual PString GetTypeAsString()
const;
623 virtual PINDEX GetDataLength()
const;
624 virtual PBoolean Decode(PASN_Stream &);
625 virtual void Encode(PASN_Stream &)
const;
628 PBoolean DecodeBER(PBER_Stream & strm,
unsigned len);
629 void EncodeBER(PBER_Stream & strm)
const;
633 PBoolean DecodePER(PPER_Stream & strm);
634 void EncodePER(PPER_Stream & strm)
const;
642 PWCharArray characterSet;
643 wchar_t firstChar, lastChar;
644 unsigned charSetUnalignedBits;
645 unsigned charSetAlignedBits;
649 class PASN_GeneralisedTime :
public PASN_VisibleString
651 PCLASSINFO(PASN_GeneralisedTime, PASN_VisibleString);
653 PASN_GeneralisedTime()
654 : PASN_VisibleString(UniversalGeneralisedTime, UniversalTagClass) { }
655 PASN_GeneralisedTime(
const PTime & time)
656 : PASN_VisibleString(UniversalGeneralisedTime, UniversalTagClass) { SetValue(time); }
657 PASN_GeneralisedTime(
unsigned theTag, TagClass theTagClass)
658 : PASN_VisibleString(theTag, theTagClass) { }
660 PASN_GeneralisedTime & operator=(
const PTime & time);
661 void SetValue(
const PTime & time) { operator=(time); }
662 PTime GetValue()
const;
666 class PASN_UniversalTime :
public PASN_VisibleString
668 PCLASSINFO(PASN_UniversalTime, PASN_VisibleString);
671 : PASN_VisibleString(UniversalUTCTime, UniversalTagClass) { }
672 PASN_UniversalTime(
const PTime & time)
673 : PASN_VisibleString(UniversalUTCTime, UniversalTagClass) { SetValue(time); }
674 PASN_UniversalTime(
unsigned theTag, TagClass theTagClass)
675 : PASN_VisibleString(theTag, theTagClass) { }
677 PASN_UniversalTime & operator=(
const PTime & time);
678 void SetValue(
const PTime & time) { operator=(time); }
679 PTime GetValue()
const;
687 class PASN_Choice :
public PASN_Object
693 virtual void SetTag(
unsigned newTag, TagClass tagClass = DefaultTagClass);
695 PASN_Object & GetObject()
const;
696 PBoolean IsValid()
const {
return choice != NULL; }
698 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
700 operator PASN_Null &()
const;
701 operator PASN_Boolean &()
const;
702 operator PASN_Integer &()
const;
703 operator PASN_Enumeration &()
const;
704 operator PASN_Real &()
const;
705 operator PASN_ObjectId &()
const;
706 operator PASN_BitString &()
const;
707 operator PASN_OctetString &()
const;
708 operator PASN_NumericString &()
const;
709 operator PASN_PrintableString &()
const;
710 operator PASN_VisibleString &()
const;
711 operator PASN_IA5String &()
const;
712 operator PASN_GeneralString &()
const;
713 operator PASN_BMPString &()
const;
714 operator PASN_Sequence &()
const;
718 operator PASN_Null &();
719 operator PASN_Boolean &();
720 operator PASN_Integer &();
721 operator PASN_Enumeration &();
722 operator PASN_Real &();
723 operator PASN_ObjectId &();
724 operator PASN_BitString &();
725 operator PASN_OctetString &();
726 operator PASN_NumericString &();
727 operator PASN_PrintableString &();
728 operator PASN_VisibleString &();
729 operator PASN_IA5String &();
730 operator PASN_GeneralString &();
731 operator PASN_BMPString &();
732 operator PASN_Sequence &();
734 operator const PASN_Null &()
const;
735 operator const PASN_Boolean &()
const;
736 operator const PASN_Integer &()
const;
737 operator const PASN_Enumeration &()
const;
738 operator const PASN_Real &()
const;
739 operator const PASN_ObjectId &()
const;
740 operator const PASN_BitString &()
const;
741 operator const PASN_OctetString &()
const;
742 operator const PASN_NumericString &()
const;
743 operator const PASN_PrintableString &()
const;
744 operator const PASN_VisibleString &()
const;
745 operator const PASN_IA5String &()
const;
746 operator const PASN_GeneralString &()
const;
747 operator const PASN_BMPString &()
const;
748 operator const PASN_Sequence &()
const;
752 virtual PBoolean CreateObject() = 0;
754 virtual Comparison Compare(
const PObject & obj)
const;
755 virtual void PrintOn(ostream & strm)
const;
757 virtual PString GetTypeAsString()
const;
758 virtual PINDEX GetDataLength()
const;
759 virtual PBoolean IsPrimitive()
const;
760 virtual PBoolean Decode(PASN_Stream &);
761 virtual void Encode(PASN_Stream &)
const;
764 virtual PBoolean DecodePER(PPER_Stream &);
765 virtual void EncodePER(PPER_Stream &)
const;
770 void EncodeXER(PXER_Stream &)
const;
773 PASN_Choice & operator=(
const PASN_Choice & other);
775 PINDEX GetValueByName(
PString name)
const;
777 PASN_Choice(
unsigned nChoices = 0,
PBoolean extend =
false);
778 PASN_Choice(
unsigned tag, TagClass tagClass,
unsigned nChoices,
PBoolean extend);
779 PASN_Choice(
unsigned tag, TagClass tagClass,
unsigned nChoices,
PBoolean extend,
const PASN_Names * nameSpec,
unsigned namesCnt);
781 PASN_Choice(
const PASN_Choice & other);
786 PASN_Object * choice;
787 const PASN_Names *names;
792 PARRAY(PASN_ObjectArray, PASN_Object);
797 class PASN_Sequence :
public PASN_Object
801 PASN_Sequence(
unsigned tag = UniversalSequence,
802 TagClass tagClass = UniversalTagClass,
803 unsigned nOpts = 0,
PBoolean extend =
false,
unsigned nExtend = 0);
805 PASN_Sequence(
const PASN_Sequence & other);
806 PASN_Sequence & operator=(
const PASN_Sequence & other);
808 PINDEX GetSize()
const {
return fields.GetSize(); }
810 PASN_Object & operator[](PINDEX i)
const {
return fields[i]; }
812 PBoolean HasOptionalField(PINDEX opt)
const;
813 void IncludeOptionalField(PINDEX opt);
814 void RemoveOptionalField(PINDEX opt);
816 virtual Comparison Compare(
const PObject & obj)
const;
817 virtual PObject * Clone()
const;
818 virtual void PrintOn(ostream & strm)
const;
820 virtual PString GetTypeAsString()
const;
821 virtual PINDEX GetDataLength()
const;
822 virtual PBoolean IsPrimitive()
const;
823 virtual PBoolean Decode(PASN_Stream &);
824 virtual void Encode(PASN_Stream &)
const;
826 PBoolean PreambleDecode(PASN_Stream & strm);
827 void PreambleEncode(PASN_Stream & strm)
const;
828 PBoolean KnownExtensionDecode(PASN_Stream & strm, PINDEX fld, PASN_Object & field);
829 void KnownExtensionEncode(PASN_Stream & strm, PINDEX fld,
const PASN_Object & field)
const;
830 PBoolean UnknownExtensionsDecode(PASN_Stream & strm);
831 void UnknownExtensionsEncode(PASN_Stream & strm)
const;
834 PBoolean PreambleDecodeBER(PBER_Stream & strm);
835 void PreambleEncodeBER(PBER_Stream & strm)
const;
836 PBoolean KnownExtensionDecodeBER(PBER_Stream & strm, PINDEX fld, PASN_Object & field);
837 void KnownExtensionEncodeBER(PBER_Stream & strm, PINDEX fld,
const PASN_Object & field)
const;
838 PBoolean UnknownExtensionsDecodeBER(PBER_Stream & strm);
839 void UnknownExtensionsEncodeBER(PBER_Stream & strm)
const;
843 PBoolean PreambleDecodePER(PPER_Stream & strm);
844 void PreambleEncodePER(PPER_Stream & strm)
const;
845 PBoolean KnownExtensionDecodePER(PPER_Stream & strm, PINDEX fld, PASN_Object & field);
846 void KnownExtensionEncodePER(PPER_Stream & strm, PINDEX fld,
const PASN_Object & field)
const;
847 PBoolean UnknownExtensionsDecodePER(PPER_Stream & strm);
848 void UnknownExtensionsEncodePER(PPER_Stream & strm)
const;
852 virtual PBoolean PreambleDecodeXER(PXER_Stream & strm);
853 virtual void PreambleEncodeXER(PXER_Stream & strm)
const;
854 virtual PBoolean KnownExtensionDecodeXER(PXER_Stream & strm, PINDEX fld, PASN_Object & field);
855 virtual void KnownExtensionEncodeXER(PXER_Stream & strm, PINDEX fld,
const PASN_Object & field)
const;
856 virtual PBoolean UnknownExtensionsDecodeXER(PXER_Stream & strm);
857 virtual void UnknownExtensionsEncodeXER(PXER_Stream & strm)
const;
861 PBoolean NoExtensionsToDecode(PPER_Stream & strm);
862 PBoolean NoExtensionsToEncode(PPER_Stream & strm);
864 PASN_ObjectArray fields;
865 PASN_BitString optionMap;
868 PASN_BitString extensionMap;
869 PINDEX endBasicEncoding;
875 class PASN_Set :
public PASN_Sequence
879 PASN_Set(
unsigned tag = UniversalSet,
880 TagClass tagClass = UniversalTagClass,
881 unsigned nOpts = 0,
PBoolean extend =
false,
unsigned nExtend = 0);
883 virtual PObject * Clone()
const;
884 virtual PString GetTypeAsString()
const;
890 class PASN_Array :
public PASN_ConstrainedObject
892 PCLASSINFO(PASN_Array, PASN_ConstrainedObject);
894 PINDEX GetSize()
const {
return array.GetSize(); }
896 PASN_Object & operator[](PINDEX i)
const {
return array[i]; }
897 void Append(PASN_Object * obj) { array.SetAt(array.GetSize(), obj); }
898 void RemoveAt(PINDEX i) { array.RemoveAt(i); }
899 void RemoveAll() { array.RemoveAll(); }
901 virtual Comparison Compare(
const PObject & obj)
const;
902 virtual void PrintOn(ostream & strm)
const;
904 virtual void SetConstraintBounds(ConstraintType type,
int lower,
unsigned upper);
905 virtual PString GetTypeAsString()
const;
906 virtual PINDEX GetDataLength()
const;
907 virtual PBoolean IsPrimitive()
const;
908 virtual PBoolean Decode(PASN_Stream &);
909 virtual void Encode(PASN_Stream &)
const;
911 virtual PASN_Object * CreateObject()
const = 0;
913 PASN_Array & operator=(
const PASN_Array & other);
916 PASN_Array(
unsigned tag = UniversalSequence,
917 TagClass tagClass = UniversalTagClass);
919 PASN_Array(
const PASN_Array & other);
921 PASN_ObjectArray array;
935 PASN_Stream(
const BYTE * buf, PINDEX size);
937 void PrintOn(ostream & strm)
const;
939 PINDEX GetPosition()
const {
return byteOffset; }
940 void SetPosition(PINDEX newPos);
943 void BeginEncoding();
944 void CompleteEncoding();
949 virtual PBoolean NullDecode(PASN_Null &) = 0;
950 virtual void NullEncode(
const PASN_Null &) = 0;
951 virtual PBoolean BooleanDecode(PASN_Boolean &) = 0;
952 virtual void BooleanEncode(
const PASN_Boolean &) = 0;
953 virtual PBoolean IntegerDecode(PASN_Integer &) = 0;
954 virtual void IntegerEncode(
const PASN_Integer &) = 0;
955 virtual PBoolean EnumerationDecode(PASN_Enumeration &) = 0;
956 virtual void EnumerationEncode(
const PASN_Enumeration &) = 0;
957 virtual PBoolean RealDecode(PASN_Real &) = 0;
958 virtual void RealEncode(
const PASN_Real &) = 0;
959 virtual PBoolean ObjectIdDecode(PASN_ObjectId &) = 0;
960 virtual void ObjectIdEncode(
const PASN_ObjectId &) = 0;
961 virtual PBoolean BitStringDecode(PASN_BitString &) = 0;
962 virtual void BitStringEncode(
const PASN_BitString &) = 0;
963 virtual PBoolean OctetStringDecode(PASN_OctetString &) = 0;
964 virtual void OctetStringEncode(
const PASN_OctetString &) = 0;
965 virtual PBoolean ConstrainedStringDecode(PASN_ConstrainedString &) = 0;
966 virtual void ConstrainedStringEncode(
const PASN_ConstrainedString &) = 0;
967 virtual PBoolean BMPStringDecode(PASN_BMPString &) = 0;
968 virtual void BMPStringEncode(
const PASN_BMPString &) = 0;
969 virtual PBoolean ChoiceDecode(PASN_Choice &) = 0;
970 virtual void ChoiceEncode(
const PASN_Choice &) = 0;
971 virtual PBoolean ArrayDecode(PASN_Array &) = 0;
972 virtual void ArrayEncode(
const PASN_Array &) = 0;
973 virtual PBoolean SequencePreambleDecode(PASN_Sequence &) = 0;
974 virtual void SequencePreambleEncode(
const PASN_Sequence &) = 0;
975 virtual PBoolean SequenceKnownDecode(PASN_Sequence &, PINDEX, PASN_Object &) = 0;
976 virtual void SequenceKnownEncode(
const PASN_Sequence &, PINDEX,
const PASN_Object &) = 0;
977 virtual PBoolean SequenceUnknownDecode(PASN_Sequence &) = 0;
978 virtual void SequenceUnknownEncode(
const PASN_Sequence &) = 0;
981 void ByteEncode(
unsigned value);
983 unsigned BlockDecode(BYTE * bufptr,
unsigned nBytes);
984 void BlockEncode(
const BYTE * bufptr, PINDEX nBytes);
1000 #ifdef P_INCLUDE_BER
1004 #ifdef P_INCLUDE_XER
1010 #endif // PTLIB_ASNER_H