summaryrefslogtreecommitdiff
path: root/server/src/artefact.cc
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/artefact.cc')
-rw-r--r--server/src/artefact.cc62
1 files changed, 60 insertions, 2 deletions
diff --git a/server/src/artefact.cc b/server/src/artefact.cc
index 836e5a9..cc29b77 100644
--- a/server/src/artefact.cc
+++ b/server/src/artefact.cc
@@ -30,13 +30,71 @@
#include "debug.h"
#include "configuration.h"
+#include "queryparser.h"
+
Artefact::Artefact()
{
#ifndef WITHOUT_PENTOMINOS
PRACRO_DEBUG(artefact, "Creating artefact connection %s : %d",
- Conf::artefact_addr.c_str(), Conf::artefact_port)
- socket.connect(Conf::artefact_addr, Conf::artefact_port);
+ Conf::artefact_addr.c_str(), Conf::artefact_port);
#endif/*WITHOUT_PENTOMINOS*/
+
+ atfh = atf_init();
+ if(!atfh) PRACRO_ERR(artefact, "Out of memory!\n");
+
+ conn = atf_connect(atfh,
+ Conf::artefact_addr.c_str(),
+ Conf::artefact_port,
+ Conf::artefact_use_ssl);
+}
+
+Artefact::~Artefact()
+{
+ atf_disconnect(conn);
+ atf_close(atfh);
+}
+
+QueryResult Artefact::exec(Query &query,
+ std::string patientid,
+ std::string user)
+{
+ QueryParser parser;
+
+ atf_transaction_t *trans = atf_new_transaction(conn, patientid.c_str());
+ atf_querylist_t *qlist = atf_new_querylist(trans, user.c_str());
+
+ atf_id id = atf_add_query(qlist,
+ query.attributes["class"].c_str(),
+ 0/*oldest*/, "xml"/*replyformat*/);
+
+ atf_reply_t *reply = atf_commit(trans, NULL, qlist);
+
+ atf_status_t status = atf_get_reply_status(reply, id);
+
+ switch(status) {
+ case ATF_STATUS_OK:
+ {
+ size_t bufsize = atf_get_reply_size(reply, id);
+ char *buf = new char[bufsize];
+
+ ssize_t size = atf_get_reply_data(reply, id, buf, size);
+ parser.parse(buf, size);
+
+ delete[] buf;
+ }
+ break;
+
+ case ATF_STATUS_ERROR:
+ PRACRO_ERR(artefact, "Error in artefact query.\n");
+ break;
+ }
+
+ atf_free_reply(reply);
+
+ atf_free_querylist(qlist);
+ atf_free_transaction(trans);
+
+ return parser.result;
}