/* This file is part of Metaproxy.
- Copyright (C) 2005-2011 Index Data
+ Copyright (C) 2005-2012 Index Data
Metaproxy is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
#include <metaproxy/util.hpp>
#include <yaz/odr.h>
+#include <yaz/comstack.h>
#include <yaz/pquery.h>
#include <yaz/otherinfo.h>
#include <yaz/querytowrbuf.h>
{
std::string query_str = "";
- if (query && query->which == Z_Query_type_1){
+ if (query && query->which == Z_Query_type_1)
+ {
Z_RPNQuery *rpn = query->u.type_1;
- if (rpn){
-
- // allocate wrbuf (strings in YAZ!)
- WRBUF w = wrbuf_alloc();
+ if (rpn)
+ {
+ mp::wrbuf w;
// put query in w
yaz_rpnquery_to_wrbuf(w, rpn);
// from w to std::string
- query_str = std::string(wrbuf_buf(w), wrbuf_len(w));
-
- // destroy wrbuf
- wrbuf_destroy(w);
+ query_str = std::string(w.buf(), w.len());
}
}
std::list<std::string> &db)
{
const char *zurl_cstr = zurl.c_str();
- const char *sep = strchr(zurl_cstr, '/');
-
- if (sep)
- {
- host = std::string(zurl_cstr, sep - zurl_cstr);
+ const char *args = 0;
+ cs_get_host_args(zurl_cstr, &args);
+
+ if (args && *args)
+ {
+ host = std::string(zurl_cstr, args - zurl_cstr);
- const char *cp1 = sep+1;
- while(1)
+ const char *cp1 = args + 1;
+ while (1)
{
const char *cp2 = strchr(cp1, '+');
if (cp2)
}
}
else
- {
host = zurl;
- }
}
bool mp_util::set_databases_from_zurl(
char *x = (char *) xmalloc(1 + s.length() * 3);
yaz_encode_uri_component(x, s.c_str());
std::string result(x);
+ xfree(x);
+ return result;
+}
+
+
+std::string mp_util::uri_decode(std::string s)
+{
+ char *x = (char *) xmalloc(1 + s.length());
+ yaz_decode_uri_component(x, s.c_str(), s.length());
+ std::string result(x);
+ xfree(x);
return result;
}
+mp::wrbuf::wrbuf()
+{
+ m_wrbuf = wrbuf_alloc();
+}
+
+mp::wrbuf::~wrbuf()
+{
+ wrbuf_destroy(m_wrbuf);
+}
+
+mp::wrbuf::operator WRBUF() const
+{
+ return m_wrbuf;
+}
+
+size_t mp::wrbuf::len()
+{
+ return wrbuf_len(m_wrbuf);
+}
+
+const char *mp::wrbuf::buf()
+{
+ return wrbuf_buf(m_wrbuf);
+}
+
/*
* Local variables: