35 Sequence = 16, |
35 Sequence = 16, |
36 Set = 17 |
36 Set = 17 |
37 }; |
37 }; |
38 |
38 |
39 enum class StringType : uint64_t { |
39 enum class StringType : uint64_t { |
40 OctetString, |
40 UTF8String = 0xC, |
41 UTF8String, |
41 NumericString = 0x12, |
42 NumericString, |
42 PrintableString = 0x13, |
43 PrintableString, |
43 T61String = 0x14, |
44 T61String, |
44 VideotexString = 0x15, |
45 VideotexString, |
45 IA5String = 0x16, |
46 IA5String, |
46 GraphicString = 0x19, |
47 GraphicString, |
47 VisibleString = 0x1A, |
48 VisibleString, |
48 GeneralString = 0x1B, |
49 GeneralString, |
49 UniversalString = 0x1C, |
50 UniversalString, |
50 CharacterString = 0x1D, |
51 CharacterString, |
51 BMPString = 0x1E, |
52 BMPString, |
|
53 }; |
52 }; |
54 |
53 |
55 enum class DateTimeType : uint64_t { |
54 enum class DateTimeType : uint64_t { |
56 UTCTime, |
55 UTCTime, |
57 GeneralizedTime, |
56 GeneralizedTime, |
236 virtual void writeCollectionStart(CollectionType type) = 0; |
235 virtual void writeCollectionStart(CollectionType type) = 0; |
237 virtual void writeCollectionEnd() = 0; |
236 virtual void writeCollectionEnd() = 0; |
238 virtual void writeBoolean(bool value) = 0; |
237 virtual void writeBoolean(bool value) = 0; |
239 virtual void writeNull() = 0; |
238 virtual void writeNull() = 0; |
240 virtual void writeInteger(Integer value) = 0; |
239 virtual void writeInteger(Integer value) = 0; |
241 virtual void writeString(StringType type, std::string value) = 0; |
240 /** |
|
241 * @param type original type in ASN.1 |
|
242 * @param value original text converted to UTF-8 |
|
243 */ |
|
244 virtual void writeTextString(StringType type, std::string value) = 0; |
|
245 /** |
|
246 * @param value arbitrary sequence of octets (bytes), usually not a human-readable text |
|
247 */ |
|
248 virtual void writeOctetString(std::string value) = 0; |
|
249 /** |
|
250 * @param value arbitrary sequence of bits (booleans), usually not a human-readable text |
|
251 */ |
|
252 virtual void writeBitString(std::vector<bool> value) = 0; |
242 virtual void writeOID(ObjectIdentifier value) = 0; |
253 virtual void writeOID(ObjectIdentifier value) = 0; |
243 virtual void writeDateTime(DateTimeType type, DateTime value) = 0; |
254 virtual void writeDateTime(DateTimeType type, DateTime value) = 0; |
244 // Object descriptor |
255 // Object descriptor |
245 // virtual void writeReal(float value) = 0; |
256 // virtual void writeReal(float value) = 0; |
246 // Enumerated |
257 // Enumerated |
288 |
299 |
289 void writeInteger(Integer value) override { |
300 void writeInteger(Integer value) override { |
290 handler->writeInteger(value); |
301 handler->writeInteger(value); |
291 } |
302 } |
292 |
303 |
293 void writeString(StringType type, std::string value) override { |
304 void writeTextString(StringType type, std::string value) override { |
294 handler->writeString(type, value); |
305 handler->writeTextString(type, value); |
|
306 } |
|
307 |
|
308 void writeOctetString(std::string value) override { |
|
309 handler->writeOctetString(value); |
|
310 } |
|
311 |
|
312 void writeBitString(std::vector<bool> value) override { |
|
313 handler->writeBitString(value); |
295 } |
314 } |
296 |
315 |
297 void writeOID(ObjectIdentifier value) override { |
316 void writeOID(ObjectIdentifier value) override { |
298 handler->writeOID(value); |
317 handler->writeOID(value); |
299 } |
318 } |