From 87f49c736f85f6a32984282844e4edc8d3ce9b2a Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Wed, 5 Mar 2014 11:43:06 +0100 Subject: Replace praxisd code with praxisdif module. --- server/src/praxisd.cc | 1070 ------------------------------------------------- 1 file changed, 1070 deletions(-) delete mode 100644 server/src/praxisd.cc (limited to 'server/src/praxisd.cc') diff --git a/server/src/praxisd.cc b/server/src/praxisd.cc deleted file mode 100644 index c8dfa6f..0000000 --- a/server/src/praxisd.cc +++ /dev/null @@ -1,1070 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set et sw=2 ts=2: */ -/*************************************************************************** - * praxisd.cc - * - * Tue Apr 19 09:00:29 CEST 2011 - * Copyright 2011 Bent Bisballe Nyeng - * deva@aasimon.org - ****************************************************************************/ - -/* - * This file is part of Pracro. - * - * Pracro 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 Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * Pracro is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Pracro; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -#include "praxisd.h" - -#include "saxparser.h" - -static const char* str2err(std::string msg) -{ - static char errbuf[1024]; - sprintf(errbuf, "%s", msg.c_str()); - return errbuf; -} - -static std::string strtime(bool with_sec = true) -{ - std::string ret; - - time_t epoch = time(NULL); - struct tm t; - localtime_r(&epoch, &t); - char buf[32]; - snprintf(buf, sizeof(buf), "%04d-%02d-%02d", - t.tm_year + 1900, t.tm_mon + 1, t.tm_mday); - ret = buf; - - if(with_sec) { - snprintf(buf, sizeof(buf), "%02d:%02d:%02d", - t.tm_hour, t.tm_min, t.tm_sec); - ret += " "; - ret += buf; - } - - return ret; -} - -static size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp) -{ - std::string *str = (std::string*)userp; - str->append((char*)buffer, size * nmemb); - return size * nmemb; -} - -Praxisd::Praxisd(std::string h, int port) - throw(const char*) -{ - ch = curl_easy_init(); - host = h; - - curl_easy_setopt(ch, CURLOPT_PORT, port); - curl_easy_setopt(ch, CURLOPT_FAILONERROR, 0L/*1L*/); - curl_easy_setopt(ch, CURLOPT_TIMEOUT, 150L); - curl_easy_setopt(ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); - curl_easy_setopt(ch, CURLOPT_CONNECTTIMEOUT, 15L); - curl_easy_setopt(ch, CURLOPT_NOSIGNAL, 1L); - curl_easy_setopt(ch, CURLOPT_USERAGENT, "libpraxisd"); - curl_easy_setopt(ch, CURLOPT_WRITEFUNCTION, write_data); - curl_easy_setopt(ch, CURLOPT_FILETIME, 1L); - curl_easy_setopt(ch, CURLOPT_HEADER, 0L); -} - -Praxisd::~Praxisd() -{ - curl_easy_cleanup(ch); -} - -// Get Journal By CPR -std::string Praxisd::journal_get_by_cpr(std::string cpr) - throw(const char*) -{ - std::string journal; - - std::string uri = host + "/praxisd/1.0/journal/get_by_cpr?cpr=" + cpr; - curl_easy_setopt(ch, CURLOPT_URL, uri.c_str()); - - curl_easy_setopt(ch, CURLOPT_POST, 0L); - curl_easy_setopt(ch, CURLOPT_WRITEDATA, &journal); - - CURLcode errornum = curl_easy_perform(ch); - if(errornum != CURLE_OK) { - throw curl_easy_strerror(errornum); - } - - long code = 0; - errornum = curl_easy_getinfo(ch, CURLINFO_RESPONSE_CODE, &code); - if(code != 200) { - throw str2err(journal); - } - - return journal; -} - -time_t Praxisd::journal_last_changed(std::string cpr) - throw(const char*) -{ - std::string journal; - - std::string uri = host + "/praxisd/1.0/journal/get_by_cpr?cpr=" + cpr; - curl_easy_setopt(ch, CURLOPT_URL, uri.c_str()); - - curl_easy_setopt(ch, CURLOPT_POST, 0L); - curl_easy_setopt(ch, CURLOPT_WRITEDATA, &journal); - - CURLcode errornum = curl_easy_perform(ch); - if(errornum != CURLE_OK) { - throw curl_easy_strerror(errornum); - } - - time_t time; - errornum = curl_easy_getinfo(ch, CURLINFO_FILETIME, &time); - if(errornum != CURLE_OK) { - throw curl_easy_strerror(errornum); - } - - long code = 0; - errornum = curl_easy_getinfo(ch, CURLINFO_RESPONSE_CODE, &code); - if(code != 200) { - throw str2err(journal); - } - - return time; -} - - -void Praxisd::journal_add(std::string cpr, std::string entry) - throw(const char*) -{ - std::string xml; - xml += "\n"; - xml += " "+entry+"\n"; - xml += "\n"; - - curl_easy_setopt(ch, CURLOPT_POSTFIELDSIZE, (long)xml.length()); - curl_easy_setopt(ch, CURLOPT_POSTFIELDS, xml.c_str()); - curl_easy_setopt(ch, CURLOPT_POST, 1L); - - struct curl_slist *slist = NULL; - // Unset 'Expect' header, set by CURLOPT_POSTFIELDS - slist = curl_slist_append(slist, "Expect:"); - slist = curl_slist_append(slist, "Content-Type: text/xml"); - // slist = curl_slist_append(slist, "Connection: keep-alive"); - curl_easy_setopt(ch, CURLOPT_HTTPHEADER, slist); - - std::string uri = host + "/praxisd/1.0/journal/add"; - curl_easy_setopt(ch, CURLOPT_URL, uri.c_str()); - - std::string reply; - curl_easy_setopt(ch, CURLOPT_WRITEDATA, &reply); - - CURLcode errornum = curl_easy_perform(ch); - if(errornum != CURLE_OK) { - throw curl_easy_strerror(errornum); - } - - long code = 0; - errornum = curl_easy_getinfo(ch, CURLINFO_RESPONSE_CODE, &code); - if(code != 200) { - throw str2err(reply); - } -} - -void Praxisd::add_sogeord(std::string cpr, std::string sogeord, - std::string sogetxt) - throw(const char*) -{ - - std::string datestr = strtime(false); - - std::string xml; - xml += "\n"; - xml += " \n"; - xml += " "+ - sogetxt+"\n"; - xml += " \n"; - xml += "\n"; - - curl_easy_setopt(ch, CURLOPT_POSTFIELDSIZE, (long)xml.length()); - curl_easy_setopt(ch, CURLOPT_POSTFIELDS, xml.c_str()); - curl_easy_setopt(ch, CURLOPT_POST, 1L); - - struct curl_slist *slist = NULL; - // Unset 'Expect' header, set by CURLOPT_POSTFIELDS - slist = curl_slist_append(slist, "Expect:"); - slist = curl_slist_append(slist, "Content-Type: text/xml"); - slist = curl_slist_append(slist, "Connection: keep-alive"); - curl_easy_setopt(ch, CURLOPT_HTTPHEADER, slist); - - std::string uri = host + "/praxisd/1.0/patient/add_sogeord"; - curl_easy_setopt(ch, CURLOPT_URL, uri.c_str()); - - std::string reply; - curl_easy_setopt(ch, CURLOPT_WRITEDATA, &reply); - - CURLcode errornum = curl_easy_perform(ch); - if(errornum != CURLE_OK) { - throw curl_easy_strerror(errornum); - } - - long code = 0; - errornum = curl_easy_getinfo(ch, CURLINFO_RESPONSE_CODE, &code); - if(code != 200) { - throw str2err(reply); - } -} - -#define DOTAG(x) if(name == #x) str = &p.x; - -class PatientParser : public SAXParser { -public: - PatientParser(Praxisd::patient_t &_p) : p(_p) { str = NULL; } - - void characterData(std::string &data) - { - if(str) *str += data; - } - - void startTag(std::string name, attributes_t &attr) - { - DOTAG(fornavne); - DOTAG(efternavn); - DOTAG(stilling); - DOTAG(gade); - DOTAG(by); - DOTAG(telefonnumre); - DOTAG(sikringsgr); - DOTAG(amtsnr); - DOTAG(sygekontor); - DOTAG(henvnr); - DOTAG(frilinie1); - DOTAG(frilinie2); - DOTAG(frilinie3); - DOTAG(frilinie4); - DOTAG(frilinie5); - DOTAG(ydernr); - DOTAG(created); - DOTAG(donottouch); - DOTAG(visus); - DOTAG(labkort); - DOTAG(medkort); - DOTAG(jlock); - DOTAG(unknown1); - DOTAG(henvdato); - DOTAG(aarhund); - DOTAG(fakturadato); - DOTAG(fakturabelob); - DOTAG(betaldato); - DOTAG(betalbelob); - DOTAG(jdato); - DOTAG(unknown250); - DOTAG(unknown251); - DOTAG(jtime); - - if(name == "sogeords") {} // do nothing - if(name == "sogeord") { - Praxisd::sogeord_t s; - if(attr.find("sogenr") != attr.end()) s.sogenr = attr["sogenr"]; - if(attr.find("sogedato") != attr.end()) s.sogedato = attr["sogedato"]; - p.sogeord.push_back(s); - str = &p.sogeord[p.sogeord.size() - 1].sogetxt; - } - } - - void endTag(std::string) - { - str = NULL; - } - -private: - std::string *str; - Praxisd::patient_t &p; -}; - -Praxisd::patient_t Praxisd::patient_get_by_cpr(std::string cpr) - throw(const char*) -{ - patient_t p; - - std::string xml; - - std::string uri = host + "/praxisd/1.0/patient/get_by_cpr?cpr=" + cpr; - curl_easy_setopt(ch, CURLOPT_URL, uri.c_str()); - - curl_easy_setopt(ch, CURLOPT_POST, 0L); - curl_easy_setopt(ch, CURLOPT_WRITEDATA, &xml); - - CURLcode errornum = curl_easy_perform(ch); - if(errornum != CURLE_OK) { - throw curl_easy_strerror(errornum); - } - - long code = 0; - errornum = curl_easy_getinfo(ch, CURLINFO_RESPONSE_CODE, &code); - if(code != 200) { - throw str2err(xml); - } - - PatientParser parser(p); - parser.parse(xml.data(), xml.length()); - - return p; -} - -std::string Praxisd::get_sogenr(std::string sogenr) - throw(const char*) -{ - std::string xml; - - std::string uri = host + "/praxisd/1.0/diverse/get_all_by_sogenr?sogenr=" + - sogenr; - curl_easy_setopt(ch, CURLOPT_URL, uri.c_str()); - - curl_easy_setopt(ch, CURLOPT_POST, 0L); - curl_easy_setopt(ch, CURLOPT_WRITEDATA, &xml); - - CURLcode errornum = curl_easy_perform(ch); - if(errornum != CURLE_OK) { - throw curl_easy_strerror(errornum); - } - - long code = 0; - errornum = curl_easy_getinfo(ch, CURLINFO_RESPONSE_CODE, &code); - if(code != 200) { - throw str2err(xml); - } - - return xml; -} - -#define DODIVTAG(x) if(name == #x) str = &div[div.size() - 1].x; - -class AdresseParser : public SAXParser { -public: - AdresseParser(std::vector &al) : div(al) { str = NULL; } - void characterData(std::string &data) { if(str) *str += data; } - void endTag(std::string) { str = NULL; } - void startTag(std::string name, attributes_t &attr) - { - if(name == "div_adresse") { - Praxisd::adresse_t a; - if(attr.find("sogenr") != attr.end()) a.sogenr = attr["sogenr"]; - div.push_back(a); - } - DODIVTAG(edi_adresse); - DODIVTAG(navn); - DODIVTAG(att); - DODIVTAG(gade); - DODIVTAG(by); - DODIVTAG(tlf); - DODIVTAG(fax); - } - -private: - std::string *str; - std::vector ÷ -}; - -std::vector Praxisd::diverse_get_adresse(std::string sogenr) - throw(const char*) -{ - std::vector lst; - std::string xml = get_sogenr("A"+sogenr); - AdresseParser parser(lst); - parser.parse(xml.data(), xml.length()); - return lst; -} - -class BehandlingParser : public SAXParser { -public: - BehandlingParser(std::vector &d) : div(d) - { str = NULL; } - void characterData(std::string &data) { if(str) *str += data; } - void endTag(std::string) { str = NULL; } - void startTag(std::string name, attributes_t &attr) - { - if(name == "div_behandling") { - Praxisd::behandling_t a; - if(attr.find("sogenr") != attr.end()) a.sogenr = attr["sogenr"]; - div.push_back(a); - } - DODIVTAG(kode); - DODIVTAG(behandling); - DODIVTAG(bemaerkning); - DODIVTAG(udregning); - } - -private: - std::string *str; - std::vector ÷ -}; - -std::vector -Praxisd::diverse_get_behandling(std::string sogenr) - throw(const char*) -{ - std::vector lst; - std::string xml = get_sogenr("B"+sogenr); - BehandlingParser parser(lst); - parser.parse(xml.data(), xml.length()); - return lst; -} - -class CaveParser : public SAXParser { -public: - CaveParser(std::vector &d) : div(d) - { str = NULL; } - void characterData(std::string &data) { if(str) *str += data; } - void endTag(std::string) { str = NULL; } - void startTag(std::string name, attributes_t &attr) - { - if(name == "div_cave") { - Praxisd::cave_t d; - if(attr.find("sogenr") != attr.end()) d.sogenr = attr["sogenr"]; - div.push_back(d); - } - DODIVTAG(cave); - DODIVTAG(bemaerkning1); - DODIVTAG(bemaerkning2); - DODIVTAG(bemaerkning3); - } - -private: - std::string *str; - std::vector ÷ -}; - -std::vector Praxisd::diverse_get_cave(std::string sogenr) - throw(const char*) -{ - std::vector lst; - std::string xml = get_sogenr("C"+sogenr); - CaveParser parser(lst); - parser.parse(xml.data(), xml.length()); - return lst; -} - -class DiagnoseParser : public SAXParser { -public: - DiagnoseParser(std::vector &d) : div(d) - { str = NULL; } - void characterData(std::string &data) { if(str) *str += data; } - void endTag(std::string) { str = NULL; } - void startTag(std::string name, attributes_t &attr) - { - if(name == "div_diagnose") { - Praxisd::diagnose_t d; - if(attr.find("sogenr") != attr.end()) d.sogenr = attr["sogenr"]; - div.push_back(d); - } - DODIVTAG(kode); - DODIVTAG(diagnose); - DODIVTAG(bemaerkning); - } - -private: - std::string *str; - std::vector ÷ -}; - -std::vector -Praxisd::diverse_get_diagnose(std::string sogenr) - throw(const char*) -{ - std::vector lst; - std::string xml = get_sogenr("D"+sogenr); - DiagnoseParser parser(lst); - parser.parse(xml.data(), xml.length()); - return lst; -} - -class FraseParser : public SAXParser { -public: - FraseParser(std::vector &d) : div(d) - { str = NULL; } - void characterData(std::string &data) { if(str) *str += data; } - void endTag(std::string) { str = NULL; } - void startTag(std::string name, attributes_t &attr) - { - if(name == "div_frase") { - Praxisd::frase_t d; - if(attr.find("sogenr") != attr.end()) d.sogenr = attr["sogenr"]; - div.push_back(d); - } - DODIVTAG(frase1); - DODIVTAG(frase2); - DODIVTAG(frase3); - DODIVTAG(frase4); - } - -private: - std::string *str; - std::vector ÷ -}; - -std::vector Praxisd::diverse_get_frase(std::string sogenr) - throw(const char*) -{ - std::vector lst; - std::string xml = get_sogenr("F"+sogenr); - FraseParser parser(lst); - parser.parse(xml.data(), xml.length()); - return lst; -} - -class GrafikParser : public SAXParser { -public: - GrafikParser(std::vector &d) : div(d) - { str = NULL; } - void characterData(std::string &data) { if(str) *str += data; } - void endTag(std::string) { str = NULL; } - void startTag(std::string name, attributes_t &attr) - { - if(name == "div_grafik") { - Praxisd::grafik_t d; - if(attr.find("sogenr") != attr.end()) d.sogenr = attr["sogenr"]; - div.push_back(d); - } - DODIVTAG(navn); - DODIVTAG(bemaerkning); - } - -private: - std::string *str; - std::vector ÷ -}; - -std::vector Praxisd::diverse_get_grafik(std::string sogenr) - throw(const char*) -{ - std::vector lst; - std::string xml = get_sogenr("G"+sogenr); - GrafikParser parser(lst); - parser.parse(xml.data(), xml.length()); - return lst; -} - -class IndholdstofParser : public SAXParser { -public: - IndholdstofParser(std::vector &d) : div(d) - { str = NULL; } - void characterData(std::string &data) { if(str) *str += data; } - void endTag(std::string) { str = NULL; } - void startTag(std::string name, attributes_t &attr) - { - if(name == "div_indholdstof") { - Praxisd::indholdstof_t d; - if(attr.find("sogenr") != attr.end()) d.sogenr = attr["sogenr"]; - div.push_back(d); - } - DODIVTAG(indholdstof); - DODIVTAG(form1); - DODIVTAG(form2); - DODIVTAG(form3); - DODIVTAG(form4); - } - -private: - std::string *str; - std::vector ÷ -}; - -std::vector -Praxisd::diverse_get_indholdstof(std::string sogenr) - throw(const char*) -{ - std::vector lst; - std::string xml = get_sogenr("I"+sogenr); - IndholdstofParser parser(lst); - parser.parse(xml.data(), xml.length()); - return lst; -} - -class KlageParser : public SAXParser { -public: - KlageParser(std::vector &d) : div(d) - { str = NULL; } - void characterData(std::string &data) { if(str) *str += data; } - void endTag(std::string) { str = NULL; } - void startTag(std::string name, attributes_t &attr) - { - if(name == "div_klage") { - Praxisd::klage_t d; - if(attr.find("sogenr") != attr.end()) d.sogenr = attr["sogenr"]; - div.push_back(d); - } - DODIVTAG(kode); - DODIVTAG(klage); - DODIVTAG(bemaerkning); - } - -private: - std::string *str; - std::vector ÷ -}; - -std::vector -Praxisd::diverse_get_klage(std::string sogenr) - throw(const char*) -{ - std::vector lst; - std::string xml = get_sogenr("K"+sogenr); - KlageParser parser(lst); - parser.parse(xml.data(), xml.length()); - return lst; -} - -class OversigtParser : public SAXParser { -public: - OversigtParser(std::vector &d) : div(d) - { str = NULL; } - void characterData(std::string &data) { if(str) *str += data; } - void endTag(std::string) { str = NULL; } - void startTag(std::string name, attributes_t &attr) - { - if(name == "div_oversigt") { - Praxisd::oversigt_t d; - if(attr.find("sogenr") != attr.end()) d.sogenr = attr["sogenr"]; - div.push_back(d); - } - DODIVTAG(navn); - DODIVTAG(bemaerkning); - } - -private: - std::string *str; - std::vector ÷ -}; - -std::vector -Praxisd::diverse_get_oversigt(std::string sogenr) - throw(const char*) -{ - std::vector lst; - std::string xml = get_sogenr("O"+sogenr); - OversigtParser parser(lst); - parser.parse(xml.data(), xml.length()); - return lst; -} - -class PostnummerParser : public SAXParser { -public: - PostnummerParser(std::vector &d) : div(d) - { str = NULL; } - void characterData(std::string &data) { if(str) *str += data; } - void endTag(std::string) { str = NULL; } - void startTag(std::string name, attributes_t &attr) - { - if(name == "div_postnummer") { - Praxisd::postnummer_t d; - if(attr.find("sogenr") != attr.end()) d.sogenr = attr["sogenr"]; - div.push_back(d); - } - DODIVTAG(postnummer); - DODIVTAG(by_gade); - DODIVTAG(kbh); - DODIVTAG(amtsnr); - DODIVTAG(kommunenr); - DODIVTAG(regionnavn); - DODIVTAG(kommunenavn); - } - -private: - std::string *str; - std::vector ÷ -}; - -std::vector -Praxisd::diverse_get_postnummer(std::string sogenr) - throw(const char*) -{ - std::vector lst; - std::string xml = get_sogenr("P"+sogenr); - PostnummerParser parser(lst); - parser.parse(xml.data(), xml.length()); - return lst; -} - -class TypeParser : public SAXParser { -public: - TypeParser(std::vector &d) : div(d) - { str = NULL; } - void characterData(std::string &data) { if(str) *str += data; } - void endTag(std::string) { str = NULL; } - void startTag(std::string name, attributes_t &attr) - { - if(name == "div_type") { - Praxisd::type_t d; - if(attr.find("sogenr") != attr.end()) d.sogenr = attr["sogenr"]; - div.push_back(d); - } - DODIVTAG(type); - DODIVTAG(bemaerkning1); - DODIVTAG(bemaerkning2); - DODIVTAG(bemaerkning3); - } - -private: - std::string *str; - std::vector ÷ -}; - -std::vector -Praxisd::diverse_get_type(std::string sogenr) - throw(const char*) -{ - std::vector lst; - std::string xml = get_sogenr("T"+sogenr); - TypeParser parser(lst); - parser.parse(xml.data(), xml.length()); - return lst; -} - -class UndersoegelseParser : public SAXParser { -public: - UndersoegelseParser(std::vector &d) : div(d) - { str = NULL; } - void characterData(std::string &data) { if(str) *str += data; } - void endTag(std::string) { str = NULL; } - void startTag(std::string name, attributes_t &attr) - { - if(name == "div_undersoegelse") { - Praxisd::undersoegelse_t d; - if(attr.find("sogenr") != attr.end()) d.sogenr = attr["sogenr"]; - div.push_back(d); - } - DODIVTAG(kode); - DODIVTAG(undersoegelse); - DODIVTAG(udregning); - } - -private: - std::string *str; - std::vector ÷ -}; - -std::vector -Praxisd::diverse_get_undersoegelse(std::string sogenr) - throw(const char*) -{ - std::vector lst; - std::string xml = get_sogenr("U"+sogenr); - UndersoegelseParser parser(lst); - parser.parse(xml.data(), xml.length()); - return lst; -} - -class YdelseParser : public SAXParser { -public: - YdelseParser(std::vector &d) : div(d) - { str = NULL; } - void characterData(std::string &data) { if(str) *str += data; } - void endTag(std::string) { str = NULL; } - void startTag(std::string name, attributes_t &attr) - { - if(name == "div_ydelse") { - Praxisd::ydelse_t d; - if(attr.find("sogenr") != attr.end()) d.sogenr = attr["sogenr"]; - div.push_back(d); - } - DODIVTAG(nr); - DODIVTAG(gr1); - DODIVTAG(gr2); - DODIVTAG(privat); - DODIVTAG(journal1); - DODIVTAG(journal2); - DODIVTAG(moms); - } - -private: - std::string *str; - std::vector ÷ -}; - -std::vector -Praxisd::diverse_get_ydelse(std::string sogenr) - throw(const char*) -{ - std::vector lst; - std::string xml = get_sogenr("Y"+sogenr); - YdelseParser parser(lst); - parser.parse(xml.data(), xml.length()); - return lst; -} - - -class AftaleParser : public SAXParser { -public: - AftaleParser(std::vector &a) : div(a) { str = NULL; } - void characterData(std::string &data) { if(str) *str += data; } - void endTag(std::string) { str = NULL; } - void startTag(std::string name, attributes_t &attr) - { - if(name == "aftale") { - Praxisd::aftale_t a; - if(attr.find("date") != attr.end()) a.date = attr["date"]; - if(attr.find("calendar") != attr.end()) a.calendar = attr["calendar"]; - div.push_back(a); - } - DODIVTAG(cpr); - DODIVTAG(cref); - DODIVTAG(cmrk); - DODIVTAG(ctxt); - DODIVTAG(cres); - } - -private: - std::string *str; - std::vector ÷ -}; -static std::string i2s(int i) { - char buf[32]; - snprintf(buf, sizeof(buf), "%d", i); - return buf; -} -std::vector -Praxisd::aftale_get_all_by_date_and_calendar(int cal, - int year, int month, int day) - throw(const char*) -{ - std::vector aft; - - std::string xml; - - std::string uri = host + "/praxisd/1.0/aftale/get_all_by_date_and_calendar?" - "calendar=" + i2s(cal) + "&year=" + i2s(year) + "&month=" + i2s(month) + - "&day=" + i2s(day); - curl_easy_setopt(ch, CURLOPT_URL, uri.c_str()); - - curl_easy_setopt(ch, CURLOPT_POST, 0L); - curl_easy_setopt(ch, CURLOPT_WRITEDATA, &xml); - - CURLcode errornum = curl_easy_perform(ch); - if(errornum != CURLE_OK) { - throw curl_easy_strerror(errornum); - } - - long code = 0; - errornum = curl_easy_getinfo(ch, CURLINFO_RESPONSE_CODE, &code); - if(code != 200) { - throw str2err(xml); - } - - AftaleParser parser(aft); - parser.parse(xml.data(), xml.length()); - - return aft; -} - -std::vector Praxisd::aftale_get_all_by_cpr(std::string cpr) - throw(const char*) -{ - std::vector aft; - - std::string xml; - - std::string uri = host + "/praxisd/1.0/aftale/get_all_by_cpr?cpr=" + cpr; - curl_easy_setopt(ch, CURLOPT_URL, uri.c_str()); - - curl_easy_setopt(ch, CURLOPT_POST, 0L); - curl_easy_setopt(ch, CURLOPT_WRITEDATA, &xml); - - CURLcode errornum = curl_easy_perform(ch); - if(errornum != CURLE_OK) { - throw curl_easy_strerror(errornum); - } - - long code = 0; - errornum = curl_easy_getinfo(ch, CURLINFO_RESPONSE_CODE, &code); - if(code != 200) { - throw str2err(xml); - } - - AftaleParser parser(aft); - parser.parse(xml.data(), xml.length()); - - return aft; -} - -bool Praxisd::authenticate(std::string user, std::string pass) - throw(const char*) -{ - std::string uri = host + "/praxisd/1.0/authenticate?user=" + user + "&pass=" + - pass; - curl_easy_setopt(ch, CURLOPT_URL, uri.c_str()); - - curl_easy_setopt(ch, CURLOPT_POST, 0L); - curl_easy_setopt(ch, CURLOPT_WRITEDATA, NULL); - - CURLcode errornum = curl_easy_perform(ch); - if(errornum != CURLE_OK) { - throw curl_easy_strerror(errornum); - } - - long code = 0; - errornum = curl_easy_getinfo(ch, CURLINFO_RESPONSE_CODE, &code); - if(errornum != CURLE_OK) { - throw curl_easy_strerror(errornum); - } - if(code == 401) return false; - if(code == 200) return true; - - return false; // Don't interpret an error as successful login. -} - -class DokMenuParser : public SAXParser { -public: - DokMenuParser(std::vector &a) : div(a) { str = NULL; } - void characterData(std::string &data) { if(str) *str += data; } - void endTag(std::string) { str = NULL; } - void startTag(std::string name, attributes_t &attr) - { - if(name == "dokmenu") { - Praxisd::dokmenu_t a; - if(attr.find("date") != attr.end()) a.date = attr["date"]; - if(attr.find("calendar") != attr.end()) a.date = attr["calendar"]; - div.push_back(a); - } - - DODIVTAG(group); - DODIVTAG(subject); - - DODIVTAG(filename); - if(name == "filename") { - div[div.size() - 1].filesize = atoi(attr["filesize"].c_str()); - div[div.size() - 1].date = attr["date"]; - } - } - -private: - std::string *str; - std::vector ÷ -}; - -std::vector Praxisd::dokmenu_get_all_by_cpr(std::string cpr) - throw(const char*) -{ - std::vector dokmenu; - std::string xml; - - std::string uri = host + "/praxisd/1.0/dokmenu/get_all_by_cpr?cpr=" + cpr; - curl_easy_setopt(ch, CURLOPT_URL, uri.c_str()); - - curl_easy_setopt(ch, CURLOPT_POST, 0L); - curl_easy_setopt(ch, CURLOPT_WRITEDATA, &xml); - - CURLcode errornum = curl_easy_perform(ch); - if(errornum != CURLE_OK) { - throw curl_easy_strerror(errornum); - } - - long code = 0; - errornum = curl_easy_getinfo(ch, CURLINFO_RESPONSE_CODE, &code); - if(code != 200) { - throw str2err(xml); - } - - DokMenuParser parser(dokmenu); - parser.parse(xml.data(), xml.length()); - - return dokmenu; -} - -// Get Dokmenu by Name and CPR -std::string Praxisd::dokmenu_get_by_cpr_and_name(std::string cpr, - std::string name) - throw(const char*) -{ - std::string data; - - std::string uri = host + "/praxisd/1.0/dokmenu/get_by_cpr_and_name?cpr=" + - cpr + "&name=" + name; - curl_easy_setopt(ch, CURLOPT_URL, uri.c_str()); - - curl_easy_setopt(ch, CURLOPT_POST, 0L); - curl_easy_setopt(ch, CURLOPT_WRITEDATA, &data); - - CURLcode errornum = curl_easy_perform(ch); - if(errornum != CURLE_OK) { - throw curl_easy_strerror(errornum); - } - - long code = 0; - errornum = curl_easy_getinfo(ch, CURLINFO_RESPONSE_CODE, &code); - if(code != 200) { - throw str2err(data); - } - - return data; -} - -#ifdef TEST_PRAXISD -//deps: saxparser.cc debug.cc log.cc mutex.cc -//cflags: -I.. $(CURL_CFLAGS) $(EXPAT_CFLAGS) $(PTHREAD_CFLAGS) -//libs: $(CURL_LIBS) $(EXPAT_LIBS) $(PTHREAD_LIBS) -#include "test.h" - -#define NL "\r\n" -#define CPR "1505050505" - -TEST_BEGIN; - -Praxisd p("http://localhost", 10000); - -std::string j = p.journal_get_by_cpr(CPR); -TEST_NOTEQUAL(j, "", "Did we get a journal?"); - -std::string more = "less is more... much much more."; -p.journal_add(CPR, more); - -time_t changed = p.journal_last_changed(CPR); -TEST_EQUAL_INT(changed, time(NULL), "Changed just now?"); - -Praxisd::patient_t patient = p.patient_get_by_cpr(CPR); -TEST_EQUAL_STR(patient.fornavne, "Kristian", "Who are you?"); - -/* -std::string exp = j + more + NL; -std::string j2 = p.journal_get_by_cpr(CPR); -TEST_EQUAL_INT(exp.length(), j2.length(), "Compare lengths"); -TEST_EQUAL_STR(exp, j2, "Did we correctly append to the journal?"); -*/ - - -//p.add_sogeord(CPR, "CA0003", "Nolder"); - -{ - std::vector cave = p.diverse_get_cave("A0001"); - TEST_EQUAL_INT(cave.size(), 1, "Precicely one result."); - TEST_EQUAL_STR(cave[0].cave, "AZOPT", "The correct one?"); -} - -{ - std::vector cave = p.diverse_get_cave(""); - TEST_EQUAL_INT(cave.size(), 25, "Get them all."); -} - -{ - std::vector dm = p.dokmenu_get_all_by_cpr(CPR); - TEST_NOTEQUAL_INT(dm.size(), 0, "Empty result?"); - - std::string file = p.dokmenu_get_by_cpr_and_name(CPR, dm[0].filename); - TEST_EQUAL_INT(file.size(), dm[0].filesize, "Size matters?"); -} - -TEST_END; - -#endif/*TEST_PRAXISD*/ -- cgit v1.2.3