diff options
author | deva <deva> | 2010-01-18 14:27:41 +0000 |
---|---|---|
committer | deva <deva> | 2010-01-18 14:27:41 +0000 |
commit | c96a2e557f0a9322c9369a06041e894cc2f11e93 (patch) | |
tree | 090048d431aa41b26de0332f120d48c8225c4abf /server/src | |
parent | 2f38783e005e43efd66727371fb0607ca9dfee29 (diff) |
Make use of libartefact. Not yet tested...
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/Makefile.am | 4 | ||||
-rw-r--r-- | server/src/artefact.cc | 62 | ||||
-rw-r--r-- | server/src/artefact.h | 14 | ||||
-rw-r--r-- | server/src/configuration.cc | 1 | ||||
-rw-r--r-- | server/src/configuration.h | 1 | ||||
-rw-r--r-- | server/src/configurationparser.cc | 6 | ||||
-rw-r--r-- | server/src/queryhandlerpentominos.cc | 17 | ||||
-rw-r--r-- | server/src/queryhandlerpentominos.h | 7 | ||||
-rw-r--r-- | server/src/transactionhandler.cc | 5 |
9 files changed, 100 insertions, 17 deletions
diff --git a/server/src/Makefile.am b/server/src/Makefile.am index 66ee4cc..1ff8a3a 100644 --- a/server/src/Makefile.am +++ b/server/src/Makefile.am @@ -3,11 +3,11 @@ bin_PROGRAMS = pracrod macrotool pracrod_LDADD = $(LD_EFENCE) $(PQXX_LIBS) $(CONFIG_LIBS) \ $(LUA_LIBS) $(HTTPD_LIBS) $(PTHREAD_LIBS) \ - $(EXPAT_LIBS) + $(EXPAT_LIBS) $(ATF_LIBS) pracrod_CXXFLAGS = $(PQXX_CXXFLAGS) $(CONFIG_CXXFLAGS) \ $(LUA_CXXFLAGS) $(HTTPD_CFLAGS) $(EXPAT_CFLAGS) \ - $(PTHREAD_CFLAGS) + $(PTHREAD_CFLAGS) $(ATF_CFLAGS) pracrod_SOURCES = \ pracrod.cc \ 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; } diff --git a/server/src/artefact.h b/server/src/artefact.h index 15dcaa0..7eb1a6b 100644 --- a/server/src/artefact.h +++ b/server/src/artefact.h @@ -28,15 +28,23 @@ #ifndef __PRACRO_ARTEFACT_H__ #define __PRACRO_ARTEFACT_H__ -// TODO: use libartefact here... +#include "template.h" +#include "queryresult.h" -#include "tcpsocket.h" +#include <libartefact.h> class Artefact { public: Artefact(); + ~Artefact(); - TCPSocket socket; + QueryResult exec(Query &query, + std::string patientid, + std::string user); + +private: + atf_handle_t *atfh; + atf_connection_t *conn; }; #endif/*__PRACRO_ARTEFACT_H__*/ diff --git a/server/src/configuration.cc b/server/src/configuration.cc index 4d61079..ace07e7 100644 --- a/server/src/configuration.cc +++ b/server/src/configuration.cc @@ -40,6 +40,7 @@ time_t Conf::pentominos_max_ttl = 7 * 60 * 60 * 24; std::string Conf::artefact_addr = "localhost"; port_t Conf::artefact_port = 11108; +bool Conf::artefact_use_ssl = false; int Conf::artefact_poolsize = 1; diff --git a/server/src/configuration.h b/server/src/configuration.h index 4b5cf09..d077806 100644 --- a/server/src/configuration.h +++ b/server/src/configuration.h @@ -47,6 +47,7 @@ namespace Conf { extern std::string artefact_addr; extern port_t artefact_port; + extern bool artefact_use_ssl; extern int artefact_poolsize; diff --git a/server/src/configurationparser.cc b/server/src/configurationparser.cc index d16920f..3823ee9 100644 --- a/server/src/configurationparser.cc +++ b/server/src/configurationparser.cc @@ -105,6 +105,12 @@ void ConfigurationParser::reload() } try { + bool b = lookup("artefact_use_ssl"); + Conf::artefact_use_ssl = b; + } catch( ... ) { + } + + try { int i = lookup("artefact_poolsize"); Conf::artefact_poolsize = i; } catch( ... ) { diff --git a/server/src/queryhandlerpentominos.cc b/server/src/queryhandlerpentominos.cc index 4abf5da..b67f731 100644 --- a/server/src/queryhandlerpentominos.cc +++ b/server/src/queryhandlerpentominos.cc @@ -66,7 +66,7 @@ typedef struct { } UID; #define SIOCGIFCONF 0x8912 // get iface list - +/* static in_addr_t getIP(const char *interface) { in_addr_t ret = 0; @@ -116,6 +116,7 @@ static unsigned short getCounter() return counter++; } + static UID uid = {0,0,0,0}; static std::string getUID(const char *interface) { @@ -133,16 +134,22 @@ static std::string getUID(const char *interface) sprintf(buf, "%08x%08x%04x%04x", uid.ip, (unsigned int)uid.time, uid.pid, uid.count); return std::string(buf); } +*/ - -QueryHandlerPentominos::QueryHandlerPentominos(Artefact &atf, std::string cpr) +QueryHandlerPentominos::QueryHandlerPentominos(Artefact &atf, + std::string patientid, + std::string user) : QueryHandler(), artefact(atf) { - this->cpr = cpr; + this->patientid = patientid; + this->user = user; } QueryResult QueryHandlerPentominos::exec(Query &query) { + return artefact.exec(query, patientid, user); + +#if 0 time_t timestamp = time(NULL); std::string uid = getUID("eth0"); @@ -225,6 +232,8 @@ QueryResult QueryHandlerPentominos::exec(Query &query) result.print(); return result; +#endif + return QueryResult(); } #ifdef TEST_QUERYHANDLERPENTOMINOS diff --git a/server/src/queryhandlerpentominos.h b/server/src/queryhandlerpentominos.h index 4c5e932..b96c097 100644 --- a/server/src/queryhandlerpentominos.h +++ b/server/src/queryhandlerpentominos.h @@ -41,7 +41,9 @@ */ class QueryHandlerPentominos : public QueryHandler { public: - QueryHandlerPentominos(Artefact &artefact, std::string cpr); + QueryHandlerPentominos(Artefact &artefact, + std::string patientid, + std::string user); ~QueryHandlerPentominos() {} // Execute all queries. @@ -49,7 +51,8 @@ public: private: Artefact &artefact; - std::string cpr; + std::string patientid; + std::string user; }; #endif/*__PRACRO_QUERYHANDLERPENTOMINOS_H__*/ diff --git a/server/src/transactionhandler.cc b/server/src/transactionhandler.cc index 65da013..a042a6b 100644 --- a/server/src/transactionhandler.cc +++ b/server/src/transactionhandler.cc @@ -167,7 +167,7 @@ static std::string handleRequest(Transaction &transaction, Environment &env, Ses if(service == "pentominos") { // Send the queries to Pentominos (if any) - QueryHandlerPentominos qh(*atf, transaction.cpr); + QueryHandlerPentominos qh(*atf, transaction.cpr, "pracrod"); QueryResult queryresult = qh.exec(*qi); lqm.addQueryResult(queryresult); @@ -263,11 +263,8 @@ std::string handleTransaction(Transaction &transaction, Environment &env, Sessio } #ifdef TEST_TRANSACTIONHANDLER -//Additional dependency files //deps: -//Required cflags (autoconf vars may be used) //cflags: -I.. -//Required link options (autoconf vars may be used) //libs: #include "test.h" |