diff options
| author | deva <deva> | 2011-02-07 11:15:52 +0000 | 
|---|---|---|
| committer | deva <deva> | 2011-02-07 11:15:52 +0000 | 
| commit | 4ea34b413bd21c0e8ec4c3b93840bfe928d3c9c4 (patch) | |
| tree | 693c2416ad98911b98b2249c324de640841bfa20 /server | |
| parent | 1f3b20415c59ce08479d9291b92bbe5ffa8b2f6c (diff) | |
Cleaned up the Connection interface a bit.
Diffstat (limited to 'server')
| -rw-r--r-- | server/src/admin_connection.cc | 34 | ||||
| -rw-r--r-- | server/src/admin_connection.h | 3 | ||||
| -rw-r--r-- | server/src/admin_rc.cc | 18 | ||||
| -rw-r--r-- | server/src/client_connection.cc | 33 | ||||
| -rw-r--r-- | server/src/client_connection.h | 5 | ||||
| -rw-r--r-- | server/src/server.cc | 25 | 
6 files changed, 64 insertions, 54 deletions
| diff --git a/server/src/admin_connection.cc b/server/src/admin_connection.cc index 21fe331..ae427a3 100644 --- a/server/src/admin_connection.cc +++ b/server/src/admin_connection.cc @@ -46,11 +46,6 @@ static std::string admin_sessionunlock(Environment &env, std::string id)    return "Session " + id + " does not exist or has been committed.";  } -static std::string admin_favicon() -{ -  return admin_rc("favicon"); -} -  AdminConnection::AdminConnection(Environment &e, headers_t a, std::string u)    : env(e), args(a), uri(u) {} @@ -61,13 +56,22 @@ bool AdminConnection::handle(const char *data, size_t size)    if(data == NULL && size == 0) {      DEBUG(admin, "URI: %s\n", uri.c_str()); +    if(uri == "/") { +      reply = admin_rc("header") +  +        "Command list:\n" +        "/sessionunlock?id=[ID] unlock session with [ID] as its session id.\n" +        + admin_rc("footer"); +      return true; +    } +      if(uri == "/sessionunlock" && args.find("id") != args.end()) { -      reply = admin_sessionunlock(env, args["id"]); +      reply = admin_rc("header") + admin_sessionunlock(env, args["id"]) +        + admin_rc("footer");        return true;      }      if(uri == "/favicon.ico") { -      reply = admin_favicon(); +      reply = admin_rc("favicon");        return true;      } @@ -78,18 +82,16 @@ bool AdminConnection::handle(const char *data, size_t size)    return true;  } -std::string AdminConnection::getResponse() -{ -  return reply; -} - -headers_t AdminConnection::getHeaders() +void AdminConnection::getReply(Httpd::Reply &r)  {    headers_t hdrs; -  hdrs["Content-Type"] = "text/plain; charset=UTF-8"; -  return hdrs; -} +  if(uri == "/favicon.ico") hdrs["Content-Type"] = "image/ico"; +  else hdrs["Content-Type"] = "text/html; charset=UTF-8"; +  r.data = reply; +  r.headers = hdrs; +  r.status = 200; // http 'OK' +}  #ifdef TEST_ADMIN_CONNECTION  //deps: diff --git a/server/src/admin_connection.h b/server/src/admin_connection.h index c3f70b7..1533d79 100644 --- a/server/src/admin_connection.h +++ b/server/src/admin_connection.h @@ -40,8 +40,7 @@ public:    bool handle(const char *data, size_t size); -  std::string getResponse(); -  headers_t getHeaders(); +  void getReply(Httpd::Reply &reply);  private:    Environment &env; diff --git a/server/src/admin_rc.cc b/server/src/admin_rc.cc index 495647b..ebf733e 100644 --- a/server/src/admin_rc.cc +++ b/server/src/admin_rc.cc @@ -389,9 +389,27 @@ static const char favicon[] = {    0x07, 0xff, 0xff  }; +static const char header[] = +  "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"" +  " \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n"  +  "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"  +  "<head>\n" +  "  <title>Pracro admin</title>\n" +  "    <link rel=\"shortcut icon\" href=\"/favicon.ico\"/>\n" +  "  </head>\n" +  "  <body>\n" +  "    <pre>"; + +static const char footer[] = +  "</pre>\n" +  "  </body>\n" +  "</html>\n"; +  std::string admin_rc(std::string key)  {    std::string val;    if(key == "favicon") val.append(favicon, faviconsize); +  if(key == "header") val = header; +  if(key == "footer") val = footer;    return val;  } diff --git a/server/src/client_connection.cc b/server/src/client_connection.cc index af70916..9689ac4 100644 --- a/server/src/client_connection.cc +++ b/server/src/client_connection.cc @@ -54,11 +54,22 @@ ClientConnection::Parameters::Parameters()    nocommit = false;  } -ClientConnection::ClientConnection(Environment &e, Parameters p) -  : parms(p), env(e), parser(&transaction) +ClientConnection::ClientConnection(Environment &e, headers_t &headers) +  : env(e), parser(&transaction)  {    DEBUG(connection, "[%p] CREATE\n", this); +  if(headers.contains("SessionID")) +    parms.sessionid = headers["SessionID"]; +  if(headers.contains("SessionPatientID")) +    parms.patientid = headers["SessionPatientID"]; +  if(headers.contains("SessionTemplate")) +    parms.templ = headers["SessionTemplate"]; +       +  parms.commit = headers.contains("SessionCommit"); +  parms.nocommit = headers.contains("SessionNoCommit"); +  parms.discard = headers.contains("SessionDiscard"); +  #ifdef TEST_CONNECTION    did_commit = false;  #endif @@ -183,21 +194,21 @@ bool ClientConnection::handle(const char *data, size_t size)    return false;  } -std::string ClientConnection::getResponse() -{ -  if(parser_complete == false) -    return error_box(xml_encode("XML Parser need more data.")); -  return response; -} - -headers_t ClientConnection::getHeaders() +void ClientConnection::getReply(Httpd::Reply &reply)  {    headers_t hdrs;    hdrs["Content-Type"] = "text/plain; charset=UTF-8";    hdrs["SessionID"] = parms.sessionid; -  return  hdrs; +  reply.headers = hdrs; + +  if(parser_complete == false) +    reply.data = error_box(xml_encode("XML Parser need more data.")); +  else +   reply.data = response; + +  reply.status = 200; // http 'OK'  }  #ifdef TEST_CLIENT_CONNECTION diff --git a/server/src/client_connection.h b/server/src/client_connection.h index 69e6fe7..6427217 100644 --- a/server/src/client_connection.h +++ b/server/src/client_connection.h @@ -51,13 +51,12 @@ public:      bool nocommit;    }; -  ClientConnection(Environment &e, Parameters cp); +  ClientConnection(Environment &e, headers_t &headers);    ~ClientConnection();    bool handle(const char *data, size_t size); -  std::string getResponse(); -  headers_t getHeaders(); +  void getReply(Httpd::Reply &reply);  private:    void commit(Session *session); diff --git a/server/src/server.cc b/server/src/server.cc index 745b77b..d9daf3a 100644 --- a/server/src/server.cc +++ b/server/src/server.cc @@ -63,19 +63,7 @@ public:         headers["User-Agent"].find("Pracro") == std::string::npos) { // Admin        connection = new AdminConnection(env, getargs, url);      } else { // Pracro client -      ClientConnection::Parameters parms; -      if(headers.contains("SessionID")) -        parms.sessionid = headers["SessionID"]; -      if(headers.contains("SessionPatientID")) -        parms.patientid = headers["SessionPatientID"]; -      if(headers.contains("SessionTemplate")) -        parms.templ = headers["SessionTemplate"]; -       -      parms.commit = headers.contains("SessionCommit"); -      parms.nocommit = headers.contains("SessionNoCommit"); -      parms.discard = headers.contains("SessionDiscard"); - -      connection = new ClientConnection(env, parms); +      connection = new ClientConnection(env, headers);      }      return connection; @@ -95,17 +83,10 @@ public:      if(ptr) {        Connection *connection = (Connection *)ptr; -      // Flush and do commit/discard +      // Flush and do commit/discards        connection->handle(NULL, 0); -      reply.data = connection->getResponse(); -      reply.headers = connection->getHeaders(); -      reply.status = 200; // http 'OK' -    } else { - -      reply.data = "Admin"; -      reply.status = 200; // http 'OK' - +      connection->getReply(reply);      }      return true; | 
