diff --git a/src/cfgfile.c b/src/cfgfile.c index a140576a..39748a43 100644 --- a/src/cfgfile.c +++ b/src/cfgfile.c @@ -25,6 +25,7 @@ #endif #include #include +#include #include "common/thread/thread.h" #include "cfgfile.h" @@ -626,6 +627,27 @@ int config_initial_parse_file(const char *filename) return config_parse_file(filename, &_current_configuration); } +/* Has to be called after xmlParseFile(...) */ +int config_validate(const xmlDocPtr doc) +{ + int status; + xmlRelaxNGPtr schema; + xmlRelaxNGValidCtxtPtr validctxt; + xmlRelaxNGParserCtxtPtr rngparser; + + rngparser = xmlRelaxNGNewParserCtxt("icecast.rng"); + schema = xmlRelaxNGParse(rngparser); + validctxt = xmlRelaxNGNewValidCtxt(schema); + + status = xmlRelaxNGValidateDoc(validctxt, doc); + + xmlRelaxNGFree(schema); + xmlRelaxNGFreeValidCtxt(validctxt); + xmlRelaxNGFreeParserCtxt(rngparser); + + return status; +} + int config_parse_file(const char *filename, ice_config_t *configuration) { xmlDocPtr doc;