diff options
Diffstat (limited to 'server/src/praxisd.cc')
-rw-r--r-- | server/src/praxisd.cc | 129 |
1 files changed, 111 insertions, 18 deletions
diff --git a/server/src/praxisd.cc b/server/src/praxisd.cc index 3ccdf0d..c198051 100644 --- a/server/src/praxisd.cc +++ b/server/src/praxisd.cc @@ -29,6 +29,13 @@ #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; @@ -59,12 +66,13 @@ static size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp) } 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, 1L); + 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); @@ -82,6 +90,7 @@ Praxisd::~Praxisd() // Get Journal By CPR std::string Praxisd::journal_get_by_cpr(std::string cpr) + throw(const char*) { std::string journal; @@ -93,16 +102,20 @@ std::string Praxisd::journal_get_by_cpr(std::string cpr) CURLcode errornum = curl_easy_perform(ch); if(errornum != CURLE_OK) { - printf("Ouch %d\n", errornum); + throw curl_easy_strerror(errornum); } - time_t time; - errornum = curl_easy_getinfo(ch, CURLINFO_FILETIME, &time); + 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; @@ -114,17 +127,27 @@ time_t Praxisd::journal_last_changed(std::string cpr) CURLcode errornum = curl_easy_perform(ch); if(errornum != CURLE_OK) { - printf("Ouch %d\n", errornum); + 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 += "<praxisd version=\"1.0\">\n"; @@ -150,12 +173,19 @@ void Praxisd::journal_add(std::string cpr, std::string entry) CURLcode errornum = curl_easy_perform(ch); if(errornum != CURLE_OK) { - printf("Ouch: %d %s\n", errornum, reply.c_str()); + 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); @@ -187,7 +217,13 @@ void Praxisd::add_sogeord(std::string cpr, std::string sogeord, CURLcode errornum = curl_easy_perform(ch); if(errornum != CURLE_OK) { - printf("Ouch: %d %s\n", errornum, reply.c_str()); + throw curl_easy_strerror(errornum); + } + + long code = 0; + errornum = curl_easy_getinfo(ch, CURLINFO_RESPONSE_CODE, &code); + if(code != 200) { + throw str2err(reply); } } @@ -259,6 +295,7 @@ private: }; Praxisd::patient_t Praxisd::patient_get_by_cpr(std::string cpr) + throw(const char*) { patient_t p; @@ -272,10 +309,14 @@ Praxisd::patient_t Praxisd::patient_get_by_cpr(std::string cpr) CURLcode errornum = curl_easy_perform(ch); if(errornum != CURLE_OK) { - printf("Ouch %d\n", errornum); + throw curl_easy_strerror(errornum); } - // printf("Get Patient: %d %s\n", xml.length(), xml.c_str()); fflush(stdout); + 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()); @@ -284,6 +325,7 @@ Praxisd::patient_t Praxisd::patient_get_by_cpr(std::string cpr) } std::string Praxisd::get_sogenr(std::string sogenr) + throw(const char*) { std::string xml; @@ -296,7 +338,13 @@ std::string Praxisd::get_sogenr(std::string sogenr) CURLcode errornum = curl_easy_perform(ch); if(errornum != CURLE_OK) { - printf("Ouch %d\n", errornum); + 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; @@ -331,6 +379,7 @@ private: }; std::vector<Praxisd::adresse_t> Praxisd::diverse_get_adresse(std::string sogenr) + throw(const char*) { std::vector<Praxisd::adresse_t> lst; std::string xml = get_sogenr("A"+sogenr); @@ -365,6 +414,7 @@ private: std::vector<Praxisd::behandling_t> Praxisd::diverse_get_behandling(std::string sogenr) + throw(const char*) { std::vector<Praxisd::behandling_t> lst; std::string xml = get_sogenr("B"+sogenr); @@ -398,6 +448,7 @@ private: }; std::vector<Praxisd::cave_t> Praxisd::diverse_get_cave(std::string sogenr) + throw(const char*) { std::vector<Praxisd::cave_t> lst; std::string xml = get_sogenr("C"+sogenr); @@ -431,6 +482,7 @@ private: std::vector<Praxisd::diagnose_t> Praxisd::diverse_get_diagnose(std::string sogenr) + throw(const char*) { std::vector<Praxisd::diagnose_t> lst; std::string xml = get_sogenr("D"+sogenr); @@ -464,6 +516,7 @@ private: }; std::vector<Praxisd::frase_t> Praxisd::diverse_get_frase(std::string sogenr) + throw(const char*) { std::vector<Praxisd::frase_t> lst; std::string xml = get_sogenr("F"+sogenr); @@ -495,6 +548,7 @@ private: }; std::vector<Praxisd::grafik_t> Praxisd::diverse_get_grafik(std::string sogenr) + throw(const char*) { std::vector<Praxisd::grafik_t> lst; std::string xml = get_sogenr("G"+sogenr); @@ -530,6 +584,7 @@ private: std::vector<Praxisd::indholdstof_t> Praxisd::diverse_get_indholdstof(std::string sogenr) + throw(const char*) { std::vector<Praxisd::indholdstof_t> lst; std::string xml = get_sogenr("I"+sogenr); @@ -563,6 +618,7 @@ private: std::vector<Praxisd::klage_t> Praxisd::diverse_get_klage(std::string sogenr) + throw(const char*) { std::vector<Praxisd::klage_t> lst; std::string xml = get_sogenr("K"+sogenr); @@ -595,6 +651,7 @@ private: std::vector<Praxisd::oversigt_t> Praxisd::diverse_get_oversigt(std::string sogenr) + throw(const char*) { std::vector<Praxisd::oversigt_t> lst; std::string xml = get_sogenr("O"+sogenr); @@ -632,6 +689,7 @@ private: std::vector<Praxisd::postnummer_t> Praxisd::diverse_get_postnummer(std::string sogenr) + throw(const char*) { std::vector<Praxisd::postnummer_t> lst; std::string xml = get_sogenr("P"+sogenr); @@ -666,6 +724,7 @@ private: std::vector<Praxisd::type_t> Praxisd::diverse_get_type(std::string sogenr) + throw(const char*) { std::vector<Praxisd::type_t> lst; std::string xml = get_sogenr("T"+sogenr); @@ -699,6 +758,7 @@ private: std::vector<Praxisd::undersoegelse_t> Praxisd::diverse_get_undersoegelse(std::string sogenr) + throw(const char*) { std::vector<Praxisd::undersoegelse_t> lst; std::string xml = get_sogenr("U"+sogenr); @@ -736,6 +796,7 @@ private: std::vector<Praxisd::ydelse_t> Praxisd::diverse_get_ydelse(std::string sogenr) + throw(const char*) { std::vector<Praxisd::ydelse_t> lst; std::string xml = get_sogenr("Y"+sogenr); @@ -755,7 +816,7 @@ public: if(name == "aftale") { Praxisd::aftale_t a; if(attr.find("date") != attr.end()) a.date = attr["date"]; - if(attr.find("calendar") != attr.end()) a.date = attr["calendar"]; + if(attr.find("calendar") != attr.end()) a.calendar = attr["calendar"]; div.push_back(a); } DODIVTAG(cpr); @@ -775,8 +836,9 @@ static std::string i2s(int i) { return buf; } std::vector<Praxisd::aftale_t> -Praxisd::aftale_get_all_by_date_and_calendar(int cal, int year, int month, - int day) +Praxisd::aftale_get_all_by_date_and_calendar(int cal, + int year, int month, int day) + throw(const char*) { std::vector<Praxisd::aftale_t> aft; @@ -792,7 +854,13 @@ Praxisd::aftale_get_all_by_date_and_calendar(int cal, int year, int month, CURLcode errornum = curl_easy_perform(ch); if(errornum != CURLE_OK) { - printf("Ouch %d\n", errornum); + 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); @@ -802,6 +870,7 @@ Praxisd::aftale_get_all_by_date_and_calendar(int cal, int year, int month, } std::vector<Praxisd::aftale_t> Praxisd::aftale_get_all_by_cpr(std::string cpr) + throw(const char*) { std::vector<Praxisd::aftale_t> aft; @@ -815,7 +884,13 @@ std::vector<Praxisd::aftale_t> Praxisd::aftale_get_all_by_cpr(std::string cpr) CURLcode errornum = curl_easy_perform(ch); if(errornum != CURLE_OK) { - printf("Ouch %d\n", errornum); + 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); @@ -825,6 +900,7 @@ std::vector<Praxisd::aftale_t> Praxisd::aftale_get_all_by_cpr(std::string cpr) } bool Praxisd::authenticate(std::string user, std::string pass) + throw(const char*) { std::string uri = host + "/praxisd/1.0/authenticate?user=" + user + "&pass=" + pass; @@ -835,11 +911,14 @@ bool Praxisd::authenticate(std::string user, std::string pass) CURLcode errornum = curl_easy_perform(ch); if(errornum != CURLE_OK) { - return false; + 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; @@ -876,6 +955,7 @@ private: }; std::vector<Praxisd::dokmenu_t> Praxisd::dokmenu_get_all_by_cpr(std::string cpr) + throw(const char*) { std::vector<Praxisd::dokmenu_t> dokmenu; std::string xml; @@ -888,7 +968,13 @@ std::vector<Praxisd::dokmenu_t> Praxisd::dokmenu_get_all_by_cpr(std::string cpr) CURLcode errornum = curl_easy_perform(ch); if(errornum != CURLE_OK) { - printf("Ouch %d\n", errornum); + 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); @@ -900,6 +986,7 @@ std::vector<Praxisd::dokmenu_t> Praxisd::dokmenu_get_all_by_cpr(std::string cpr) // 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; @@ -912,7 +999,13 @@ std::string Praxisd::dokmenu_get_by_cpr_and_name(std::string cpr, CURLcode errornum = curl_easy_perform(ch); if(errornum != CURLE_OK) { - printf("Ouch %d\n", errornum); + 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; |