61 class PASN_Object :
public PObject
66 virtual PString GetTypeAsString()
const = 0;
68 PINDEX GetObjectLength()
const;
69 virtual PINDEX GetDataLength()
const = 0;
70 virtual PBoolean IsPrimitive()
const {
return true; }
72 virtual PBoolean Decode(PASN_Stream &) = 0;
73 virtual void Encode(PASN_Stream &)
const = 0;
75 PBoolean IsExtendable()
const {
return extendable; }
76 void SetExtendable(
PBoolean ext =
true) { extendable = ext; }
81 ContextSpecificTagClass,
85 TagClass GetTagClass()
const {
return tagClass; }
95 UniversalObjectDescriptor,
96 UniversalExternalType,
100 UniversalSequence = 16,
102 UniversalNumericString,
103 UniversalPrintableString,
104 UniversalTeletexString,
105 UniversalVideotexString,
108 UniversalGeneralisedTime,
109 UniversalGeneralizedTime = UniversalGeneralisedTime,
110 UniversalGraphicString,
111 UniversalVisibleString,
112 UniversalGeneralString,
113 UniversalUniversalString,
114 UniversalBMPString = 30
117 unsigned GetTag()
const {
return tag; }
118 virtual void SetTag(
unsigned newTag, TagClass tagClass = DefaultTagClass);
120 enum ConstraintType {
122 PartiallyConstrained,
127 enum MinimumValueTag { MinimumValue = INT_MIN };
128 enum MaximumValueTag { MaximumValue = INT_MAX };
129 void SetConstraints(ConstraintType type,
int value)
130 { SetConstraintBounds(type, value, value); }
131 void SetConstraints(ConstraintType,
int lower, MaximumValueTag )
132 { SetConstraintBounds(PartiallyConstrained, (
int)lower, lower < 0 ? INT_MAX : UINT_MAX); }
133 void SetConstraints(ConstraintType, MinimumValueTag lower,
unsigned upper)
134 { SetConstraintBounds(PartiallyConstrained, (
int)lower, (
unsigned)upper); }
135 void SetConstraints(ConstraintType, MinimumValueTag lower, MaximumValueTag upper)
136 { SetConstraintBounds(PartiallyConstrained, (
int)lower, (
unsigned)upper); }
137 void SetConstraints(ConstraintType type,
int lower,
unsigned upper)
138 { SetConstraintBounds(type, lower, upper); }
140 virtual void SetConstraintBounds(ConstraintType type,
int lower,
unsigned upper);
141 virtual void SetCharacterSet(ConstraintType ctype,
const char * charSet);
142 virtual void SetCharacterSet(ConstraintType ctype,
unsigned firstChar,
unsigned lastChar);
144 static PINDEX GetMaximumArraySize();
145 static void SetMaximumArraySize(PINDEX sz);
146 static PINDEX GetMaximumStringSize();
147 static void SetMaximumStringSize(PINDEX sz);
150 PASN_Object(
unsigned tag, TagClass tagClass,
PBoolean extend =
false);
163 class PASN_ConstrainedObject :
public PASN_Object
165 PCLASSINFO(PASN_ConstrainedObject, PASN_Object);
167 PBoolean IsConstrained()
const {
return constraint != Unconstrained; }
168 int GetLowerLimit()
const {
return lowerLimit; }
169 unsigned GetUpperLimit()
const {
return upperLimit; }
171 PBoolean ConstrainedLengthDecode(PPER_Stream & strm,
unsigned & length);
172 void ConstrainedLengthEncode(PPER_Stream & strm,
unsigned length)
const;
174 PBoolean ConstraintEncode(PPER_Stream & strm,
unsigned value)
const;
177 virtual void SetConstraintBounds(ConstraintType type,
int lower,
unsigned upper);
178 PASN_ConstrainedObject(
unsigned tag, TagClass tagClass);
180 ConstraintType constraint;
188 class PASN_Null :
public PASN_Object
192 PASN_Null(
unsigned tag = UniversalNull,
193 TagClass tagClass = UniversalTagClass);
195 virtual Comparison Compare(
const PObject & obj)
const;
196 virtual PObject * Clone()
const;
197 virtual void PrintOn(ostream & strm)
const;
199 virtual PString GetTypeAsString()
const;
200 virtual PINDEX GetDataLength()
const;
201 virtual PBoolean Decode(PASN_Stream &);
202 virtual void Encode(PASN_Stream &)
const;
208 class PASN_Boolean :
public PASN_Object
213 PASN_Boolean(
unsigned tag, TagClass tagClass,
PBoolean val =
false);
215 PASN_Boolean & operator=(
PBoolean v) { value = v;
return *
this; }
216 operator PBoolean()
const {
return value; }
217 PBoolean GetValue()
const {
return value; }
218 void SetValue(
PBoolean v) { value = v; }
220 virtual Comparison Compare(
const PObject & obj)
const;
221 virtual PObject * Clone()
const;
222 virtual void PrintOn(ostream & strm)
const;
224 virtual PString GetTypeAsString()
const;
225 virtual PINDEX GetDataLength()
const;
226 virtual PBoolean Decode(PASN_Stream &);
227 virtual void Encode(PASN_Stream &)
const;
236 class PASN_Integer :
public PASN_ConstrainedObject
238 PCLASSINFO(PASN_Integer, PASN_ConstrainedObject);
240 PASN_Integer(
unsigned val = 0);
241 PASN_Integer(
unsigned tag, TagClass tagClass,
unsigned val = 0);
243 PASN_Integer & operator=(
unsigned value);
244 operator unsigned()
const {
return value; }
245 unsigned GetValue()
const {
return value; }
246 void SetValue(
unsigned v) { operator=(v); }
248 virtual Comparison Compare(
const PObject & obj)
const;
249 virtual PObject * Clone()
const;
250 virtual void PrintOn(ostream & strm)
const;
252 virtual void SetConstraintBounds(ConstraintType type,
int lower,
unsigned upper);
253 virtual PString GetTypeAsString()
const;
254 virtual PINDEX GetDataLength()
const;
255 virtual PBoolean Decode(PASN_Stream &);
256 virtual void Encode(PASN_Stream &)
const;
259 PBoolean DecodePER(PPER_Stream & strm);
260 void EncodePER(PPER_Stream & strm)
const;
276 class PASN_Enumeration :
public PASN_Object
280 PASN_Enumeration(
unsigned val = 0);
281 PASN_Enumeration(
unsigned tag,
283 unsigned nEnums = UINT_MAX,
286 PASN_Enumeration(
unsigned tag,
290 const PASN_Names * nameSpec,
294 PASN_Enumeration & operator=(
unsigned v) { value = v;
return *
this; }
295 operator unsigned()
const {
return value; }
296 unsigned GetValue()
const {
return value; }
297 void SetValue(
unsigned v) { value = v; }
299 unsigned GetMaximum()
const {
return maxEnumValue; }
301 virtual Comparison Compare(
const PObject & obj)
const;
302 virtual PObject * Clone()
const;
303 virtual void PrintOn(ostream & strm)
const;
305 virtual PString GetTypeAsString()
const;
306 virtual PINDEX GetDataLength()
const;
307 virtual PBoolean Decode(PASN_Stream &);
308 virtual void Encode(PASN_Stream &)
const;
311 PBoolean DecodePER(PPER_Stream & strm);
312 void EncodePER(PPER_Stream & strm)
const;
316 virtual PBoolean DecodeXER(PXER_Stream & strm);
317 virtual void EncodeXER(PXER_Stream & strm)
const;
320 PINDEX GetValueByName(
PString name)
const;
322 unsigned maxEnumValue;
324 const PASN_Names *names;
331 class PASN_Real :
public PASN_Object
335 PASN_Real(
double val = 0);
336 PASN_Real(
unsigned tag, TagClass tagClass,
double val = 0);
338 PASN_Real & operator=(
double val) { value = val;
return *
this; }
339 operator double()
const {
return value; }
340 double GetValue()
const {
return value; }
341 void SetValue(
double v) { value = v; }
343 virtual Comparison Compare(
const PObject & obj)
const;
344 virtual PObject * Clone()
const;
345 virtual void PrintOn(ostream & strm)
const;
347 virtual PString GetTypeAsString()
const;
348 virtual PINDEX GetDataLength()
const;
349 virtual PBoolean Decode(PASN_Stream &);
350 virtual void Encode(PASN_Stream &)
const;
359 class PASN_ObjectId :
public PASN_Object
363 PASN_ObjectId(
const char * dotstr = NULL);
364 PASN_ObjectId(
unsigned tag, TagClass tagClass);
366 PASN_ObjectId(
const PASN_ObjectId & other);
367 PASN_ObjectId & operator=(
const PASN_ObjectId & other);
369 PASN_ObjectId & operator=(
const char * dotstr);
370 PASN_ObjectId & operator=(
const PString & dotstr);
372 void SetValue(
const PString & dotstr);
373 void SetValue(
const PUnsignedArray & numbers) { value = numbers; }
374 void SetValue(
const unsigned * numbers, PINDEX size);
376 bool operator==(
const char * dotstr)
const;
377 bool operator!=(
const char * dotstr)
const {
return !operator==(dotstr); }
378 bool operator==(
const PString & dotstr)
const {
return operator==((
const char *)dotstr); }
379 bool operator!=(
const PString & dotstr)
const {
return !operator==((
const char *)dotstr); }
380 bool operator==(
const PASN_ObjectId &
id)
const {
return value ==
id.value; }
382 PINDEX GetSize()
const {
return value.GetSize(); }
383 unsigned operator[](PINDEX idx)
const {
return value[idx]; }
387 virtual Comparison Compare(
const PObject & obj)
const;
388 virtual PObject * Clone()
const;
389 virtual void PrintOn(ostream & strm)
const;
391 virtual PString GetTypeAsString()
const;
392 virtual PINDEX GetDataLength()
const;
393 virtual PBoolean Decode(PASN_Stream &);
394 virtual void Encode(PASN_Stream &)
const;
396 PBoolean CommonDecode(PASN_Stream & strm,
unsigned dataLen);
406 class PASN_BitString :
public PASN_ConstrainedObject
408 PCLASSINFO(PASN_BitString, PASN_ConstrainedObject);
410 PASN_BitString(
unsigned nBits = 0,
const BYTE * buf = NULL);
411 PASN_BitString(
unsigned tag, TagClass tagClass,
unsigned nBits = 0);
413 PASN_BitString(
const PASN_BitString & other);
414 PASN_BitString & operator=(
const PASN_BitString & other);
416 void SetData(
unsigned nBits,
const PBYTEArray & bytes);
417 void SetData(
unsigned nBits,
const BYTE * buf, PINDEX size = 0);
419 const BYTE * GetDataPointer()
const {
return bitData; }
421 unsigned GetSize()
const {
return totalBits; }
424 bool operator[](PINDEX bit)
const;
425 void Set(
unsigned bit);
426 void Clear(
unsigned bit);
427 void Invert(
unsigned bit);
429 virtual Comparison Compare(
const PObject & obj)
const;
430 virtual PObject * Clone()
const;
431 virtual void PrintOn(ostream & strm)
const;
433 virtual void SetConstraintBounds(ConstraintType type,
int lower,
unsigned upper);
434 virtual PString GetTypeAsString()
const;
435 virtual PINDEX GetDataLength()
const;
436 virtual PBoolean Decode(PASN_Stream &);
437 virtual void Encode(PASN_Stream &)
const;
440 PBoolean DecodeBER(PBER_Stream & strm,
unsigned len);
441 void EncodeBER(PBER_Stream & strm)
const;
445 PBoolean DecodePER(PPER_Stream & strm);
446 void EncodePER(PPER_Stream & strm)
const;
449 PBoolean DecodeSequenceExtensionBitmap(PPER_Stream & strm);
450 void EncodeSequenceExtensionBitmap(PPER_Stream & strm)
const;
460 class PASN_OctetString :
public PASN_ConstrainedObject
462 PCLASSINFO(PASN_OctetString, PASN_ConstrainedObject);
464 PASN_OctetString(
const char * str = NULL, PINDEX size = 0);
465 PASN_OctetString(
unsigned tag, TagClass tagClass);
467 PASN_OctetString(
const PASN_OctetString & other);
468 PASN_OctetString & operator=(
const PASN_OctetString & other);
470 PASN_OctetString & operator=(
const char * str);
471 PASN_OctetString & operator=(
const PString & str);
472 PASN_OctetString & operator=(
const PBYTEArray & arr);
473 void SetValue(
const char * str) { operator=(str); }
474 void SetValue(
const PString & str) { operator=(str); }
475 void SetValue(
const PBYTEArray & arr) { operator=(arr); }
476 void SetValue(
const BYTE * data, PINDEX len);
477 const PBYTEArray & GetValue()
const {
return value; }
478 operator const PBYTEArray &()
const {
return value; }
479 operator const BYTE *()
const {
return value; }
481 BYTE operator[](PINDEX i)
const {
return value[i]; }
482 BYTE & operator[](PINDEX i) {
return value[i]; }
483 BYTE * GetPointer(PINDEX sz = 0) {
return value.GetPointer(sz); }
484 PINDEX GetSize()
const {
return value.GetSize(); }
487 virtual Comparison Compare(
const PObject & obj)
const;
488 virtual PObject * Clone()
const;
489 virtual void PrintOn(ostream & strm)
const;
491 virtual void SetConstraintBounds(ConstraintType type,
int lower,
unsigned upper);
492 virtual PString GetTypeAsString()
const;
493 virtual PINDEX GetDataLength()
const;
494 virtual PBoolean Decode(PASN_Stream &);
495 virtual void Encode(PASN_Stream &)
const;
498 PBoolean DecodePER(PPER_Stream & strm);
499 void EncodePER(PPER_Stream & strm)
const;
502 PBoolean DecodeSubType(PASN_Object &)
const;
503 void EncodeSubType(
const PASN_Object &);
512 class PASN_ConstrainedString :
public PASN_ConstrainedObject
514 PCLASSINFO(PASN_ConstrainedString, PASN_ConstrainedObject);
516 PASN_ConstrainedString & operator=(
const char * str);
517 PASN_ConstrainedString & operator=(
const PString & str) {
return operator=((
const char *)str); }
518 operator const PString &()
const {
return value; }
519 const PString & GetValue()
const {
return value; }
520 void SetValue(
const char * v) { operator=(v); }
521 void SetValue(
const PString & v) { operator=(v); }
522 char operator[](PINDEX idx)
const {
return value[idx]; }
524 void SetCharacterSet(ConstraintType ctype,
const char * charSet);
525 void SetCharacterSet(ConstraintType ctype,
unsigned firstChar = 0,
unsigned lastChar = 255);
526 void SetCharacterSet(
const char * charSet, PINDEX size, ConstraintType ctype);
528 virtual Comparison Compare(
const PObject & obj)
const;
529 virtual void PrintOn(ostream & strm)
const;
531 virtual void SetConstraintBounds(ConstraintType type,
int lower,
unsigned upper);
532 virtual PINDEX GetDataLength()
const;
533 virtual PBoolean Decode(PASN_Stream &);
534 virtual void Encode(PASN_Stream &)
const;
537 PBoolean DecodeBER(PBER_Stream & strm,
unsigned len);
538 void EncodeBER(PBER_Stream & strm)
const;
542 PBoolean DecodePER(PPER_Stream & strm);
543 void EncodePER(PPER_Stream & strm)
const;
547 PASN_ConstrainedString(
const char * canonicalSet, PINDEX setSize,
548 unsigned tag, TagClass tagClass);
552 const char * canonicalSet;
553 PINDEX canonicalSetSize;
554 unsigned canonicalSetBits;
555 unsigned charSetUnalignedBits;
556 unsigned charSetAlignedBits;
560 #define DECLARE_STRING_CLASS(name) \
561 class PASN_##name##String : public PASN_ConstrainedString { \
562 PCLASSINFO(PASN_##name##String, PASN_ConstrainedString); \
564 PASN_##name##String(const char * str = NULL); \
565 PASN_##name##String(unsigned tag, TagClass tagClass); \
566 PASN_##name##String & operator=(const char * str); \
567 PASN_##name##String & operator=(const PString & str); \
568 virtual PObject * Clone() const; \
569 virtual PString GetTypeAsString() const; \
572 DECLARE_STRING_CLASS(Numeric);
573 DECLARE_STRING_CLASS(Printable);
574 DECLARE_STRING_CLASS(Visible);
575 DECLARE_STRING_CLASS(IA5);
576 DECLARE_STRING_CLASS(General);
581 class PASN_BMPString :
public PASN_ConstrainedObject
583 PCLASSINFO(PASN_BMPString, PASN_ConstrainedObject);
585 PASN_BMPString(
const char * str = NULL);
586 PASN_BMPString(
const PWCharArray & wstr);
587 PASN_BMPString(
unsigned tag, TagClass tagClass);
589 PASN_BMPString(
const PASN_BMPString & other);
590 PASN_BMPString & operator=(
const PASN_BMPString & other);
592 PASN_BMPString & operator=(
const char * v) {
return operator=(
PString(v).AsUCS2()); }
593 PASN_BMPString & operator=(
const PString & v) {
return operator=(v.AsUCS2()); }
594 PASN_BMPString & operator=(
const PWCharArray & v);
595 operator PString()
const {
return GetValue(); }
596 operator PWCharArray()
const {
return value; }
597 PString GetValue()
const {
return value; }
598 void GetValue(PWCharArray & v)
const { v = value; }
599 void SetValue(
const char * v) { operator=(
PString(v).AsUCS2()); }
600 void SetValue(
const PString & v) { operator=(v.AsUCS2()); }
601 void SetValue(
const PWCharArray & v) { operator=(v); }
602 void SetValue(
const PASN_BMPString & v) { operator=(v.value); }
603 void SetValueRaw(
const PWCharArray & v) { SetValueRaw(v, v.GetSize()); }
604 void SetValueRaw(
const wchar_t * val, PINDEX len);
606 void SetCharacterSet(ConstraintType ctype,
const char * charSet);
607 void SetCharacterSet(ConstraintType ctype,
const PWCharArray & charSet);
608 void SetCharacterSet(ConstraintType ctype,
unsigned firstChar,
unsigned lastChar);
610 virtual Comparison Compare(
const PObject & obj)
const;
611 virtual PObject * Clone()
const;
612 virtual void PrintOn(ostream & strm)
const;
614 virtual PString GetTypeAsString()
const;
615 virtual PINDEX GetDataLength()
const;
616 virtual PBoolean Decode(PASN_Stream &);
617 virtual void Encode(PASN_Stream &)
const;
620 PBoolean DecodeBER(PBER_Stream & strm,
unsigned len);
621 void EncodeBER(PBER_Stream & strm)
const;
625 PBoolean DecodePER(PPER_Stream & strm);
626 void EncodePER(PPER_Stream & strm)
const;
634 PWCharArray characterSet;
635 wchar_t firstChar, lastChar;
636 unsigned charSetUnalignedBits;
637 unsigned charSetAlignedBits;
641 class PASN_GeneralisedTime :
public PASN_VisibleString
643 PCLASSINFO(PASN_GeneralisedTime, PASN_VisibleString);
645 PASN_GeneralisedTime()
646 : PASN_VisibleString(UniversalGeneralisedTime, UniversalTagClass) { }
647 PASN_GeneralisedTime(
const PTime & time)
648 : PASN_VisibleString(UniversalGeneralisedTime, UniversalTagClass) { SetValue(time); }
649 PASN_GeneralisedTime(
unsigned theTag, TagClass theTagClass)
650 : PASN_VisibleString(theTag, theTagClass) { }
652 PASN_GeneralisedTime & operator=(
const PTime & time);
653 void SetValue(
const PTime & time) { operator=(time); }
654 PTime GetValue()
const;
658 class PASN_UniversalTime :
public PASN_VisibleString
660 PCLASSINFO(PASN_UniversalTime, PASN_VisibleString);
663 : PASN_VisibleString(UniversalUTCTime, UniversalTagClass) { }
664 PASN_UniversalTime(
const PTime & time)
665 : PASN_VisibleString(UniversalUTCTime, UniversalTagClass) { SetValue(time); }
666 PASN_UniversalTime(
unsigned theTag, TagClass theTagClass)
667 : PASN_VisibleString(theTag, theTagClass) { }
669 PASN_UniversalTime & operator=(
const PTime & time);
670 void SetValue(
const PTime & time) { operator=(time); }
671 PTime GetValue()
const;
679 class PASN_Choice :
public PASN_Object
685 virtual void SetTag(
unsigned newTag, TagClass tagClass = DefaultTagClass);
687 PASN_Object & GetObject()
const;
688 PBoolean IsValid()
const {
return choice != NULL; }
690 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
692 operator PASN_Null &()
const;
693 operator PASN_Boolean &()
const;
694 operator PASN_Integer &()
const;
695 operator PASN_Enumeration &()
const;
696 operator PASN_Real &()
const;
697 operator PASN_ObjectId &()
const;
698 operator PASN_BitString &()
const;
699 operator PASN_OctetString &()
const;
700 operator PASN_NumericString &()
const;
701 operator PASN_PrintableString &()
const;
702 operator PASN_VisibleString &()
const;
703 operator PASN_IA5String &()
const;
704 operator PASN_GeneralString &()
const;
705 operator PASN_BMPString &()
const;
706 operator PASN_Sequence &()
const;
710 operator PASN_Null &();
711 operator PASN_Boolean &();
712 operator PASN_Integer &();
713 operator PASN_Enumeration &();
714 operator PASN_Real &();
715 operator PASN_ObjectId &();
716 operator PASN_BitString &();
717 operator PASN_OctetString &();
718 operator PASN_NumericString &();
719 operator PASN_PrintableString &();
720 operator PASN_VisibleString &();
721 operator PASN_IA5String &();
722 operator PASN_GeneralString &();
723 operator PASN_BMPString &();
724 operator PASN_Sequence &();
726 operator const PASN_Null &()
const;
727 operator const PASN_Boolean &()
const;
728 operator const PASN_Integer &()
const;
729 operator const PASN_Enumeration &()
const;
730 operator const PASN_Real &()
const;
731 operator const PASN_ObjectId &()
const;
732 operator const PASN_BitString &()
const;
733 operator const PASN_OctetString &()
const;
734 operator const PASN_NumericString &()
const;
735 operator const PASN_PrintableString &()
const;
736 operator const PASN_VisibleString &()
const;
737 operator const PASN_IA5String &()
const;
738 operator const PASN_GeneralString &()
const;
739 operator const PASN_BMPString &()
const;
740 operator const PASN_Sequence &()
const;
744 virtual PBoolean CreateObject() = 0;
746 virtual Comparison Compare(
const PObject & obj)
const;
747 virtual void PrintOn(ostream & strm)
const;
749 virtual PString GetTypeAsString()
const;
750 virtual PINDEX GetDataLength()
const;
751 virtual PBoolean IsPrimitive()
const;
752 virtual PBoolean Decode(PASN_Stream &);
753 virtual void Encode(PASN_Stream &)
const;
756 virtual PBoolean DecodePER(PPER_Stream &);
757 virtual void EncodePER(PPER_Stream &)
const;
762 void EncodeXER(PXER_Stream &)
const;
765 PASN_Choice & operator=(
const PASN_Choice & other);
767 PINDEX GetValueByName(
PString name)
const;
769 PASN_Choice(
unsigned nChoices = 0,
PBoolean extend =
false);
770 PASN_Choice(
unsigned tag, TagClass tagClass,
unsigned nChoices,
PBoolean extend);
771 PASN_Choice(
unsigned tag, TagClass tagClass,
unsigned nChoices,
PBoolean extend,
const PASN_Names * nameSpec,
unsigned namesCnt);
773 PASN_Choice(
const PASN_Choice & other);
778 PASN_Object * choice;
779 const PASN_Names *names;
784 PARRAY(PASN_ObjectArray, PASN_Object);
789 class PASN_Sequence :
public PASN_Object
793 PASN_Sequence(
unsigned tag = UniversalSequence,
794 TagClass tagClass = UniversalTagClass,
795 unsigned nOpts = 0,
PBoolean extend =
false,
unsigned nExtend = 0);
797 PASN_Sequence(
const PASN_Sequence & other);
798 PASN_Sequence & operator=(
const PASN_Sequence & other);
800 PINDEX GetSize()
const {
return fields.GetSize(); }
802 PASN_Object & operator[](PINDEX i)
const {
return fields[i]; }
804 PBoolean HasOptionalField(PINDEX opt)
const;
805 void IncludeOptionalField(PINDEX opt);
806 void RemoveOptionalField(PINDEX opt);
808 virtual Comparison Compare(
const PObject & obj)
const;
809 virtual PObject * Clone()
const;
810 virtual void PrintOn(ostream & strm)
const;
812 virtual PString GetTypeAsString()
const;
813 virtual PINDEX GetDataLength()
const;
814 virtual PBoolean IsPrimitive()
const;
815 virtual PBoolean Decode(PASN_Stream &);
816 virtual void Encode(PASN_Stream &)
const;
818 PBoolean PreambleDecode(PASN_Stream & strm);
819 void PreambleEncode(PASN_Stream & strm)
const;
820 PBoolean KnownExtensionDecode(PASN_Stream & strm, PINDEX fld, PASN_Object & field);
821 void KnownExtensionEncode(PASN_Stream & strm, PINDEX fld,
const PASN_Object & field)
const;
822 PBoolean UnknownExtensionsDecode(PASN_Stream & strm);
823 void UnknownExtensionsEncode(PASN_Stream & strm)
const;
826 PBoolean PreambleDecodeBER(PBER_Stream & strm);
827 void PreambleEncodeBER(PBER_Stream & strm)
const;
828 PBoolean KnownExtensionDecodeBER(PBER_Stream & strm, PINDEX fld, PASN_Object & field);
829 void KnownExtensionEncodeBER(PBER_Stream & strm, PINDEX fld,
const PASN_Object & field)
const;
830 PBoolean UnknownExtensionsDecodeBER(PBER_Stream & strm);
831 void UnknownExtensionsEncodeBER(PBER_Stream & strm)
const;
835 PBoolean PreambleDecodePER(PPER_Stream & strm);
836 void PreambleEncodePER(PPER_Stream & strm)
const;
837 PBoolean KnownExtensionDecodePER(PPER_Stream & strm, PINDEX fld, PASN_Object & field);
838 void KnownExtensionEncodePER(PPER_Stream & strm, PINDEX fld,
const PASN_Object & field)
const;
839 PBoolean UnknownExtensionsDecodePER(PPER_Stream & strm);
840 void UnknownExtensionsEncodePER(PPER_Stream & strm)
const;
844 virtual PBoolean PreambleDecodeXER(PXER_Stream & strm);
845 virtual void PreambleEncodeXER(PXER_Stream & strm)
const;
846 virtual PBoolean KnownExtensionDecodeXER(PXER_Stream & strm, PINDEX fld, PASN_Object & field);
847 virtual void KnownExtensionEncodeXER(PXER_Stream & strm, PINDEX fld,
const PASN_Object & field)
const;
848 virtual PBoolean UnknownExtensionsDecodeXER(PXER_Stream & strm);
849 virtual void UnknownExtensionsEncodeXER(PXER_Stream & strm)
const;
853 PBoolean NoExtensionsToDecode(PPER_Stream & strm);
854 PBoolean NoExtensionsToEncode(PPER_Stream & strm);
856 PASN_ObjectArray fields;
857 PASN_BitString optionMap;
860 PASN_BitString extensionMap;
861 PINDEX endBasicEncoding;
867 class PASN_Set :
public PASN_Sequence
871 PASN_Set(
unsigned tag = UniversalSet,
872 TagClass tagClass = UniversalTagClass,
873 unsigned nOpts = 0,
PBoolean extend =
false,
unsigned nExtend = 0);
875 virtual PObject * Clone()
const;
876 virtual PString GetTypeAsString()
const;
882 class PASN_Array :
public PASN_ConstrainedObject
884 PCLASSINFO(PASN_Array, PASN_ConstrainedObject);
886 PINDEX GetSize()
const {
return array.GetSize(); }
888 PASN_Object & operator[](PINDEX i)
const {
return array[i]; }
889 void Append(PASN_Object * obj) { array.SetAt(array.GetSize(), obj); }
890 void RemoveAt(PINDEX i) { array.RemoveAt(i); }
891 void RemoveAll() { array.RemoveAll(); }
893 virtual Comparison Compare(
const PObject & obj)
const;
894 virtual void PrintOn(ostream & strm)
const;
896 virtual void SetConstraintBounds(ConstraintType type,
int lower,
unsigned upper);
897 virtual PString GetTypeAsString()
const;
898 virtual PINDEX GetDataLength()
const;
899 virtual PBoolean IsPrimitive()
const;
900 virtual PBoolean Decode(PASN_Stream &);
901 virtual void Encode(PASN_Stream &)
const;
903 virtual PASN_Object * CreateObject()
const = 0;
905 PASN_Array & operator=(
const PASN_Array & other);
908 PASN_Array(
unsigned tag = UniversalSequence,
909 TagClass tagClass = UniversalTagClass);
911 PASN_Array(
const PASN_Array & other);
913 PASN_ObjectArray array;
927 PASN_Stream(
const BYTE * buf, PINDEX size);
929 void PrintOn(ostream & strm)
const;
931 PINDEX GetPosition()
const {
return byteOffset; }
932 void SetPosition(PINDEX newPos);
935 void BeginEncoding();
936 void CompleteEncoding();
941 virtual PBoolean NullDecode(PASN_Null &) = 0;
942 virtual void NullEncode(
const PASN_Null &) = 0;
943 virtual PBoolean BooleanDecode(PASN_Boolean &) = 0;
944 virtual void BooleanEncode(
const PASN_Boolean &) = 0;
945 virtual PBoolean IntegerDecode(PASN_Integer &) = 0;
946 virtual void IntegerEncode(
const PASN_Integer &) = 0;
947 virtual PBoolean EnumerationDecode(PASN_Enumeration &) = 0;
948 virtual void EnumerationEncode(
const PASN_Enumeration &) = 0;
949 virtual PBoolean RealDecode(PASN_Real &) = 0;
950 virtual void RealEncode(
const PASN_Real &) = 0;
951 virtual PBoolean ObjectIdDecode(PASN_ObjectId &) = 0;
952 virtual void ObjectIdEncode(
const PASN_ObjectId &) = 0;
953 virtual PBoolean BitStringDecode(PASN_BitString &) = 0;
954 virtual void BitStringEncode(
const PASN_BitString &) = 0;
955 virtual PBoolean OctetStringDecode(PASN_OctetString &) = 0;
956 virtual void OctetStringEncode(
const PASN_OctetString &) = 0;
957 virtual PBoolean ConstrainedStringDecode(PASN_ConstrainedString &) = 0;
958 virtual void ConstrainedStringEncode(
const PASN_ConstrainedString &) = 0;
959 virtual PBoolean BMPStringDecode(PASN_BMPString &) = 0;
960 virtual void BMPStringEncode(
const PASN_BMPString &) = 0;
961 virtual PBoolean ChoiceDecode(PASN_Choice &) = 0;
962 virtual void ChoiceEncode(
const PASN_Choice &) = 0;
963 virtual PBoolean ArrayDecode(PASN_Array &) = 0;
964 virtual void ArrayEncode(
const PASN_Array &) = 0;
965 virtual PBoolean SequencePreambleDecode(PASN_Sequence &) = 0;
966 virtual void SequencePreambleEncode(
const PASN_Sequence &) = 0;
967 virtual PBoolean SequenceKnownDecode(PASN_Sequence &, PINDEX, PASN_Object &) = 0;
968 virtual void SequenceKnownEncode(
const PASN_Sequence &, PINDEX,
const PASN_Object &) = 0;
969 virtual PBoolean SequenceUnknownDecode(PASN_Sequence &) = 0;
970 virtual void SequenceUnknownEncode(
const PASN_Sequence &) = 0;
973 void ByteEncode(
unsigned value);
975 unsigned BlockDecode(BYTE * bufptr,
unsigned nBytes);
976 void BlockEncode(
const BYTE * bufptr, PINDEX nBytes);
1002 #endif // PTLIB_ASNER_H