diff -r 6ef41443211e -r 85b6f13f1088 src/XMLDocumentConstructor.h --- a/src/XMLDocumentConstructor.h Thu Jul 22 01:06:14 2021 +0200 +++ b/src/XMLDocumentConstructor.h Thu Jul 22 20:01:03 2021 +0200 @@ -34,24 +34,27 @@ private: std::istream* input = nullptr; xmlpp::DomParser* parser = nullptr; + relpipe::in::asn1::lib::BasicASN1Reader reader; + std::shared_ptr asn1handler; + std::shared_ptr saxHandler; public: XMLDocumentConstructor(std::istream* input, xmlpp::DomParser* parser) : input(input), parser(parser) { + asn1handler = make_shared(); + saxHandler = make_shared(parser->get_document()); + asn1handler->addHandler(saxHandler); + reader.addHandler(asn1handler); } void setOption(const std::string& uri, const std::string& value) { + int n = 0; + n += reader.setOption(uri, value); + n += asn1handler->setOption(uri, value); + n += saxHandler->setOption(uri, value); + if (n == 0) throw std::invalid_argument(std::string("Invalid parser option: „") + uri + "“ with value: „" + value + "“"); } void process() { - - relpipe::in::asn1::lib::BasicASN1Reader reader; - std::shared_ptr asn1handler = make_shared(); - std::shared_ptr saxHandler = make_shared(parser->get_document()); - - asn1handler->addHandler(saxHandler); - reader.addHandler(asn1handler); - - try { // TODO: buffering? (reader itself also buffers) for (uint8_t b = input->get(); input->good(); b = input->get()) reader.write(&b, 1);