--- 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<relpipe::in::asn1::lib::GenericASN1ContentHandler> asn1handler;
+ std::shared_ptr<relpipe::in::asn1::lib::DOMBuildingXMLContentHandler> saxHandler;
public:
XMLDocumentConstructor(std::istream* input, xmlpp::DomParser* parser) : input(input), parser(parser) {
+ asn1handler = make_shared<relpipe::in::asn1::lib::GenericASN1ContentHandler>();
+ saxHandler = make_shared<relpipe::in::asn1::lib::DOMBuildingXMLContentHandler>(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<relpipe::in::asn1::lib::GenericASN1ContentHandler> asn1handler = make_shared<relpipe::in::asn1::lib::GenericASN1ContentHandler>();
- std::shared_ptr<relpipe::in::asn1::lib::DOMBuildingXMLContentHandler> saxHandler = make_shared<relpipe::in::asn1::lib::DOMBuildingXMLContentHandler>(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);