summaryrefslogtreecommitdiff
path: root/server/src/sessionserialiser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/sessionserialiser.cc')
-rw-r--r--server/src/sessionserialiser.cc53
1 files changed, 48 insertions, 5 deletions
diff --git a/server/src/sessionserialiser.cc b/server/src/sessionserialiser.cc
index d5150ac..6288ddd 100644
--- a/server/src/sessionserialiser.cc
+++ b/server/src/sessionserialiser.cc
@@ -216,6 +216,11 @@ void SessionSerialiser::save(Session *session)
// write xml to file
FILE *fp = fopen(filename.c_str(), "w");
+ if(!fp) {
+ ERR(sessionserialiser, "Could not write session to file %s\n",
+ filename.c_str());
+ return;
+ }
fwrite(xml.data(), xml.size(), 1, fp);
fclose(fp);
}
@@ -256,19 +261,17 @@ Session *SessionSerialiser::findFromTupple(const std::string &patientid,
DEBUG(sessionserialiser, "Is xml file\n");
- std::string pid;
- std::string tpl;
+ SessionHeaderParser::Header header;
SessionHeaderParser p(filename);
try {
p.parse();
- pid = p.getPatientID();
- tpl = p.getTemplate();
+ header = p.getHeader();
} catch( ... ) {
continue;
}
- if(patientid == pid && templ == tpl) {
+ if(header.patientid == patientid && header.templ == templ) {
// Load session file
FILE *fp = fopen(filename.c_str(), "r");
std::string xml;
@@ -298,6 +301,46 @@ Session *SessionSerialiser::findFromTupple(const std::string &patientid,
return NULL;
}
+std::map<std::string, SessionHeaderParser::Header>
+SessionSerialiser::sessionFiles()
+{
+ std::map<std::string, SessionHeaderParser::Header> list;
+
+ DIR *dir = opendir(path.c_str());
+ if(!dir) {
+ ERR(sessionserialiser, "Could not open directory: %s - %s\n",
+ path.c_str(), strerror(errno));
+ return list;
+ }
+
+ struct dirent *dirent;
+ while( (dirent = readdir(dir)) != NULL ) {
+
+ std::string filename = path+"/"+dirent->d_name;
+
+ if(isxmlfile(filename)) {
+
+ SessionHeaderParser::Header header;
+
+ SessionHeaderParser p(filename);
+ try {
+ p.parse();
+ header = p.getHeader();
+ } catch( ... ) {
+ continue;
+ }
+
+ list[filename] = header;
+ }
+ }
+
+ closedir(dir);
+
+ return list;
+
+}
+
+
#ifdef TEST_SESSIONSERIALISER
//deps: session.cc journal.cc debug.cc configuration.cc mutex.cc journal_commit.cc sessionparser.cc saxparser.cc xml_encode_decode.cc database.cc pracrodaopgsql.cc pracrodaotest.cc pracrodao.cc journal_uploadserver.cc log.cc environment.cc semaphore.cc artefact.cc macrolist.cc templatelist.cc entitylist.cc inotify.cc versionstr.cc exception.cc macroheaderparser.cc templateheaderparser.cc
//cflags: -I.. $(PTHREAD_CFLAGS) $(EXPAT_CFLAGS) $(PQXX_CFLAGS) -DWITHOUT_ARTEFACT