summaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/src')
-rw-r--r--server/src/server.cc59
1 files changed, 59 insertions, 0 deletions
diff --git a/server/src/server.cc b/server/src/server.cc
index 7f78f45..9d52369 100644
--- a/server/src/server.cc
+++ b/server/src/server.cc
@@ -26,6 +26,9 @@
*/
#include "server.h"
+// For XML
+#include <config.h>
+
#include "tcpsocket.h"
#include <errno.h>
@@ -37,9 +40,65 @@
#include "configuration.h"
+// For open, read and close
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+
+/**
+\section{Data transmission}
+En transmission består af en række deltransmissioner som afhænger af
+brugerens handling.
+\begin{itemize}
+\item Klienten beder om en XMLMakro by-name.
+\item Serveren genererer makroen og sender den til klienten i en XML
+ stream. Forbindelsen lukkes efter end overførsel.
+\item Brugeren udfylder input felterne og trykker på ``commit'' eller
+ ``abort'' knappen.
+\item Hvis der blev trykket ``abort'' lukkes vinduet.
+\item Hvis der blev trykket ``commit'' genereres et XML dokument på
+ klienten indeholdene alle input felternes navne og deres tilhørende
+ værdier.
+\item Dette XML dokument sendes til serveren via en nyoprettet forbindelse.
+\item Serveren producerer en plaintext klump som repræsenterer
+\item Teksten sendes til klienten som appender til den PC-Praxis
+ journalfilen.
+\item Klienten svarer til serveren at alt gik godt (eller det modsatte) og
+ makrovinduet lukkes.
+\item Serveren lagrer dataene i en database hvis det gik godt.
+\end{itemize}
+*/
static void connection(Pentominos::TCPSocket &socket)
{
printf("Got connection...\n");
+
+ std::string macro_request;
+
+ char inbuf[300]; // Must be at least 3
+ memset(inbuf, 0, sizeof(inbuf)); // Ensure zero termination.
+
+ // Get request.
+ while(socket.read(inbuf, sizeof(inbuf) - 1) == sizeof(inbuf) - 1) {
+ macro_request += inbuf;
+ memset(inbuf, 0, sizeof(inbuf)); // Ensure zero termination.
+ }
+ macro_request += inbuf;
+
+ printf("Got request for [%s]\n", macro_request.c_str());
+
+ // Now handle the request.
+ char outbuf[3];
+ int bytes;
+
+ std::string macro = std::string(XML) + "/" + macro_request + ".xml";
+
+ int fd = open(macro.c_str(), O_RDONLY);
+ while((bytes = read(fd, outbuf, sizeof(outbuf))) ) {
+ socket.write(outbuf, bytes);
+ }
+ close(fd);
}
void server()