Year 2007.
[metaproxy-moved-to-github.git] / src / util.cpp
index 0783b1d..cf9a6a0 100644 (file)
@@ -1,5 +1,5 @@
-/* $Id: util.cpp,v 1.21 2006-10-02 13:44:48 marc Exp $
-   Copyright (c) 2005-2006, Index Data.
+/* $Id: util.cpp,v 1.25 2007-01-25 14:05:54 adam Exp $
+   Copyright (c) 2005-2007, Index Data.
 
    See the LICENSE file for details
  */
@@ -19,6 +19,24 @@ namespace mp = metaproxy_1;
 // Doxygen doesn't like mp::util, so we use this instead
 namespace mp_util = metaproxy_1::util;
 
+const char * 
+mp_util::record_composition_to_esn(Z_RecordComposition *comp)
+{
+    if (comp && comp->which == Z_RecordComp_complex)
+    {
+        if (comp->u.complex->generic 
+            && comp->u.complex->generic->elementSpec
+            && (comp->u.complex->generic->elementSpec->which == 
+                Z_ElementSpec_elementSetName))
+            return comp->u.complex->generic->elementSpec->u.elementSetName;
+    }
+    else if (comp && comp->which == Z_RecordComp_simple &&
+             comp->u.simple->which == Z_ElementSetNames_generic)
+        return comp->u.simple->u.generic;
+    return 0;
+}
+
+
 
 std::string mp_util::http_header_value(const Z_HTTP_Header* header, 
                                        const std::string name)
@@ -69,6 +87,32 @@ std::string mp_util::http_headers_debug(const Z_HTTP_Request &http_req)
 }
 
 
+void mp_util::http_response(metaproxy_1::Package &package, 
+                     const std::string &content, 
+                     int http_code)
+{
+
+    Z_GDU *zgdu_req = package.request().get(); 
+    Z_GDU *zgdu_res = 0; 
+    mp::odr odr;
+    zgdu_res 
+       = odr.create_HTTP_Response(package.session(), 
+                                  zgdu_req->u.HTTP_Request, 
+                                  http_code);
+        
+    zgdu_res->u.HTTP_Response->content_len = content.size();
+    zgdu_res->u.HTTP_Response->content_buf 
+        = (char*) odr_malloc(odr, zgdu_res->u.HTTP_Response->content_len);
+    
+    strncpy(zgdu_res->u.HTTP_Response->content_buf, 
+            content.c_str(),  zgdu_res->u.HTTP_Response->content_len);
+    
+    //z_HTTP_header_add(odr, &hres->headers,
+    //                  "Content-Type", content_type.c_str());
+    package.response() = zgdu_res;
+}
+
+
 int mp_util::memcmp2(const void *buf1, int len1,
                      const void *buf2, int len2)
 {
@@ -290,6 +334,14 @@ void mp_util::set_vhost_otherinfo(
     }
 }
 
+void mp_util::set_vhost_otherinfo(
+    Z_OtherInformation **otherInformation, ODR odr,
+    const std::string vhost, const int cat)
+{
+        yaz_oi_set_string_oidval(otherInformation, odr,
+                                 VAL_PROXY, cat, vhost.c_str());
+}
+
 void mp_util::split_zurl(std::string zurl, std::string &host,
                                    std::list<std::string> &db)
 {