Started work on shared session filter.
[metaproxy-moved-to-github.git] / src / util.cpp
index a5eda13..479aebf 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: util.cpp,v 1.1 2005-10-26 18:53:49 adam Exp $
+/* $Id: util.cpp,v 1.3 2005-10-30 18:51:21 adam Exp $
    Copyright (c) 2005, Index Data.
 
 %LICENSE%
@@ -6,6 +6,7 @@
 
 #include "config.hpp"
 
+#include <yaz/odr.h>
 #include <yaz/pquery.h>
 #include "util.hpp"
 
@@ -26,6 +27,49 @@ bool yp2::util::pqf(ODR odr, Z_APDU *apdu, const std::string &q) {
     apdu->u.searchRequest->query = query;
     return true;
 }
+
+yp2::odr::odr(int type)
+{
+    m_odr = odr_createmem(type);
+}
+
+yp2::odr::odr()
+{
+    m_odr = odr_createmem(ODR_ENCODE);
+}
+
+yp2::odr::~odr()
+{
+    odr_destroy(m_odr);
+}
+
+yp2::odr::operator ODR() const
+{
+    return m_odr;
+}
+
+Z_APDU *yp2::odr::create_close(int reason, const char *addinfo)
+{
+    Z_APDU *apdu = zget_APDU(m_odr, Z_APDU_close);
+    
+    *apdu->u.close->closeReason = reason;
+    if (addinfo)
+        apdu->u.close->diagnosticInformation = odr_strdup(m_odr, addinfo);
+    return apdu;
+}
+
+Z_APDU *yp2::odr::create_initResponse(int error, const char *addinfo)
+{
+    Z_APDU *apdu = zget_APDU(m_odr, Z_APDU_initResponse);
+    if (error)
+    {
+        apdu->u.initResponse->userInformationField =
+            zget_init_diagnostics(m_odr, error, addinfo);
+        *apdu->u.initResponse->result = 0;
+    }
+    return apdu;
+}
+
 /*
  * Local variables:
  * c-basic-offset: 4