+ struct conf_service *service;
+
+ if (content_type && !yaz_strcmp_del("text/xml", content_type, "; "))
+ {
+ xmlDoc *doc = xmlParseMemory(r->content_buf, r->content_len);
+ xmlNode *root_n;
+ if (!doc)
+ {
+ error(rs, PAZPAR2_MALFORMED_SETTING, 0);
+ return;
+ }
+ root_n = xmlDocGetRootElement(doc);
+ service = service_create(c->server, root_n);
+ xmlFreeDoc(doc);
+ }
+ else
+ {
+ const char *service_name = http_argbyname(c->request, "service");
+ service = locate_service(c->server, service_name);
+ if (!service)
+ {
+ error(rs, PAZPAR2_MALFORMED_PARAMETER_VALUE, "service");
+ return;
+ }
+ service_incref(service);
+ }
+ s = http_session_create(service);
+