+#if HAVE_XSLT
+void Yaz_ProxyConfigP::unload_modules()
+{
+ yaz_log(YLOG_WARN, "unload_modules not implemented yet");
+}
+#endif
+
+#if HAVE_XSLT
+void Yaz_ProxyConfigP::load_modules()
+{
+ if (!m_proxyPtr)
+ return;
+ xmlNodePtr ptr;
+ for (ptr = m_proxyPtr->children; ptr; ptr = ptr->next)
+ {
+ const char *fname;
+ if (ptr->type == XML_ELEMENT_NODE
+ && !strcmp((const char *) ptr->name, "module")
+ && (fname = get_text(ptr)))
+ {
+#if HAVE_DLFCN_H
+ void *dl_handle = dlopen(fname, RTLD_NOW|RTLD_GLOBAL);
+ if (dl_handle)
+ {
+ Yaz_ProxyModule_entry *fl_ptr = 0;
+ fl_ptr = reinterpret_cast<Yaz_ProxyModule_entry *>
+ (dlsym(dl_handle, "yazproxy_module"));
+ if (fl_ptr)
+ {
+ Yaz_ProxyModule *m = new Yaz_ProxyModule(dl_handle,
+ fl_ptr,
+ m_modules);
+ m_modules = m;
+ yaz_log(YLOG_LOG, "Loading %s OK", fname);
+ }
+ else
+ {
+ yaz_log(YLOG_WARN, "Loading %s FAIL: missing yazproxy_module symbol", fname);
+ dlclose(dl_handle);
+ }
+ }
+ else
+ yaz_log(YLOG_WARN, "Loading %s FAIL: dlopen failed", fname);
+#else
+ yaz_log(YLOG_WARN, "Loading &s FAIL: dl unsupported", fname);
+#endif
+ }
+ }
+}
+#endif
+