summaryrefslogtreecommitdiff
path: root/server/src/praxisd.cc
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/praxisd.cc')
-rw-r--r--server/src/praxisd.cc129
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;