diff options
Diffstat (limited to 'server/src')
| -rw-r--r-- | server/src/server.cc | 59 | 
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()  | 
