143 handlers.writeNull(); |
143 handlers.writeNull(); |
144 } else if (typeHeader.tag == 1) { |
144 } else if (typeHeader.tag == 1) { |
145 bool value; |
145 bool value; |
146 read((uint8_t*) & value, 1); |
146 read((uint8_t*) & value, 1); |
147 handlers.writeBoolean(value); |
147 handlers.writeBoolean(value); |
148 } else if (typeHeader.tag == 12 && typeHeader.tagClass == TagClass::Universal) { |
148 } else if (typeHeader.tag == 2 && typeHeader.tagClass == TagClass::Universal && typeHeader.definiteLength) { |
|
149 // TODO: check available bytes before allocating buffer |
|
150 std::vector<uint8_t> value(typeHeader.length, 0x00); |
|
151 read(value.data(), typeHeader.length); |
|
152 handlers.writeInteger(ASN1ContentHandler::Integer(value)); |
|
153 } else if (typeHeader.tag == 12 && typeHeader.tagClass == TagClass::Universal && typeHeader.definiteLength) { |
|
154 // TODO: check available bytes before allocating buffer |
149 std::string s; |
155 std::string s; |
150 s.resize(typeHeader.length); |
156 s.resize(typeHeader.length); |
151 read((uint8_t*) s.data(), typeHeader.length); |
157 read((uint8_t*) s.data(), typeHeader.length); |
152 handlers.writeString(ASN1ContentHandler::StringType::UTF8String, s); |
158 handlers.writeString(ASN1ContentHandler::StringType::UTF8String, s); |
153 } else if (typeHeader.tag == 19 && typeHeader.tagClass == TagClass::Universal) { |
159 } else if (typeHeader.tag == 19 && typeHeader.tagClass == TagClass::Universal && typeHeader.definiteLength) { |
154 // TODO: check encoding |
160 // TODO: check encoding |
|
161 // TODO: check available bytes before allocating buffer |
155 std::string s; |
162 std::string s; |
156 s.resize(typeHeader.length); |
163 s.resize(typeHeader.length); |
157 read((uint8_t*) s.data(), typeHeader.length); |
164 read((uint8_t*) s.data(), typeHeader.length); |
158 handlers.writeString(ASN1ContentHandler::StringType::PrintableString, s); |
165 handlers.writeString(ASN1ContentHandler::StringType::PrintableString, s); |
159 } else { |
166 } else { |
172 |
179 |
173 handlers.writeString(ASN1ContentHandler::StringType::UTF8String, description.str()); |
180 handlers.writeString(ASN1ContentHandler::StringType::UTF8String, description.str()); |
174 } |
181 } |
175 |
182 |
176 commit(); |
183 commit(); |
177 |
|
178 |
|
179 // TODO: remove debug/demo output: |
|
180 return; |
|
181 handlers.writeCollectionStart(ASN1ContentHandler::CollectionType::Sequence); |
|
182 handlers.writeNull(); |
|
183 handlers.writeBoolean(true); |
|
184 |
|
185 handlers.writeString(ASN1ContentHandler::StringType::UTF8String, "tagClass:"); |
|
186 handlers.writeInteger((int64_t) typeHeader.tagClass); |
|
187 handlers.writeString(ASN1ContentHandler::StringType::UTF8String, "pc:"); |
|
188 handlers.writeInteger((int64_t) typeHeader.pc); |
|
189 handlers.writeString(ASN1ContentHandler::StringType::UTF8String, "tag:"); |
|
190 handlers.writeInteger((int64_t) typeHeader.tag); |
|
191 handlers.writeString(ASN1ContentHandler::StringType::UTF8String, "definiteLength:"); |
|
192 handlers.writeBoolean(typeHeader.definiteLength); |
|
193 handlers.writeString(ASN1ContentHandler::StringType::UTF8String, "length:"); |
|
194 handlers.writeInteger((int64_t) typeHeader.length); |
|
195 |
|
196 handlers.writeString(ASN1ContentHandler::StringType::UTF8String, "relational pipes"); |
|
197 handlers.writeCollectionEnd(); |
|
198 } |
184 } |
199 |
185 |
200 protected: |
186 protected: |
201 |
187 |
202 void update() override { |
188 void update() override { |