diff options
Diffstat (limited to 'server/src/server.cc')
| -rw-r--r-- | server/src/server.cc | 220 | 
1 files changed, 2 insertions, 218 deletions
| diff --git a/server/src/server.cc b/server/src/server.cc index b264426..747e88c 100644 --- a/server/src/server.cc +++ b/server/src/server.cc @@ -62,6 +62,8 @@  #include "mutex.h"  #include "log.h" +#include "transactionhandler.h" +  typedef long long unsigned int sessionid_t;  typedef struct { @@ -84,224 +86,6 @@ static std::string error_box(std::string message)    return errorbox;  } -class NotFoundException : public Exception { -public: -  NotFoundException(Request &r) -  : Exception("Macro " + r.macro + " not found in template " + r.templ) {} -}; - - -static std::string handleCommits(Transaction *transaction, Database &db,  -                                 JournalWriter &journalwriter, MacroList ¯olist, -                                 TemplateList &templatelist) -{ -  std::string answer; - -  Commits::iterator i = transaction->commits.begin(); -  while(i != transaction->commits.end()) { -    Commit &commit = *i; -     -    MacroParser mp(macrolist.getLatestVersion(commit.macro)); -    mp.parse(); -    Macro *macro = mp.getMacro(); -     -    std::string resume = resume_parser(macro->resume, commit); -    commit.fields["journal.resume"] = resume; -    db.commitTransaction(transaction->user, transaction->cpr, *macro, commit.fields); -     -    if(resume != "") { - -      TemplateParser tp(templatelist.getLatestVersion(commit.templ)); -      tp.parse(); -      Template *templ = tp.getTemplate(); - -      journalwriter.addEntry(*transaction, commit, resume, templ); -    } -     -    i++; -  } - -  return answer; -} - - -static std::string handleRequest(Transaction *transaction, -                                 TCPSocket &pentominos_socket, -                                 Database &db, -                                 MacroList ¯olist, -                                 TemplateList &templatelist) -{ -  std::string answer; - -  Requests::iterator i = transaction->requests.begin(); -  while(i != transaction->requests.end()) { -    Request &request = *i; -     -    PRACRO_DEBUG(server, "Handling request - macro: %s, template: %s\n", -                 request.macro.c_str(), request.templ.c_str()); -     -    // Read and parse the template file. -    TemplateParser tp(templatelist.getLatestVersion(request.templ)); -    tp.parse(); -     -    Template *templ = tp.getTemplate(); -     -    answer += "  <template name=\""; -    answer += templ->attributes["name"]; -    answer += "\" title=\""; -    answer += templ->attributes["title"]; -    answer += "\">\n"; -     -    bool foundmacro = false; -     -    // Generate the macro and return it to the client -    std::vector< Macro >::iterator mi2 = templ->macros.begin(); -    while(mi2 != templ->macros.end()) { -      Macro ¯o = (*mi2); - -      if(macro.isHeader) { -        answer += "    <header caption=\"" + macro.attributes["caption"] + "\"/>\n"; -        mi2++; -        continue; -      } - -      bool completed = db.checkMacro(transaction->cpr, -                                     macro.attributes["name"], -                                     time(NULL)-Conf::db_max_ttl); - -      answer += "    <macro uid=\"42\" completed="; -      if(completed) answer += "\"true\""; -      else answer += "\"false\""; - -      std::map< std::string, std::string >::iterator ai = macro.attributes.begin(); -      while(ai != macro.attributes.end()) { -        std::string name = ai->first; -        std::string value = ai->second; -        answer += " "+name+"=\"" + value + "\""; -        ai++; -      } - -      if(macro.attributes["name"] == request.macro ||  -         (macro.attributes.find("static") != macro.attributes.end() && -          macro.attributes["static"] == "true") -         ) { -        foundmacro = true; - -        MacroParser mp(macrolist.getLatestVersion(macro.attributes["name"])); -        mp.parse(); -        Macro *m = mp.getMacro(); -        answer += " caption=\"" + m->widgets.attributes["caption"] + "\""; -        answer += ">\n"; - -        LUAQueryMapper lqm; - -        //////////////////////// -        std::vector< Query >::iterator qi = m->queries.begin(); -        while(qi != m->queries.end()) { - -          Query &query = *qi; -          std::string service = query.attributes["service"]; - -          if(service == "pentominos") { -            // Send the queries to Pentominos (if any) -            QueryHandlerPentominos qh(pentominos_socket, transaction->cpr); - -            QueryResult queryresult = qh.exec(*qi); -            lqm.addQueryResult(queryresult); -          } - -          if(service == "pracro") { -            // Send the queries to Pentominos (if any) -            QueryHandlerPracro qh(db, transaction->cpr); - -            QueryResult queryresult = qh.exec(*qi); -            lqm.addQueryResult(queryresult); -          } - -          qi++; -        } - -        // Handle scripts -        if(m->scripts.size()) { -          answer += "      <scripts>\n"; -             -          std::vector< Script >::iterator spi = m->scripts.begin(); -          while(spi != m->scripts.end()) { -            answer += "        <script language=\"" + spi->attributes["language"]  -              + "\" name=\"" + spi->attributes["name"] + "\">\n"; -            answer += xml_encode(spi->attributes["code"]); -            answer += "\n        </script>\n"; -            spi++; -          } -          answer += "      </scripts>\n"; -        } - -        answer += widgetgenerator(transaction->cpr, *m, lqm, db); -      } else { -        // only find macro title -        MacroParser mp(macrolist.getLatestVersion(macro.attributes["name"])); -        mp.parse(); -        Macro *m = mp.getMacro(); -        answer += " caption=\"" + m->widgets.attributes["caption"] + "\""; -        answer += ">\n"; - -      } - -      if(completed) { -        answer += "      <resume>"; -        answer += db.getResume(transaction->cpr, macro, time(NULL) - Conf::db_max_ttl); -        answer += "</resume>\n"; -      } - -      answer += "    </macro>\n"; -      mi2++; - -    } -       -    if(foundmacro == false && request.macro != "") -      throw NotFoundException(request); - -    answer += "  </template>\n"; - -    i++; -  } - -  return answer; -} - -static std::string handleTransaction(Transaction *transaction, -                                     TCPSocket &pentominos_socket, -                                     Database &db, -                                     JournalWriter &journalwriter, -                                     MacroList ¯olist, -                                     TemplateList &templatelist) -{ -  std::string answer; -  answer += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; -  answer += "<pracro version=\"1.0\">\n"; - -  try { -    answer += handleCommits(transaction, db, -                            journalwriter, macrolist, templatelist); -  } catch( std::exception &e ) { -    PRACRO_ERR(server, "Commit error: %s\n", e.what()); -    return error_box(xml_encode(e.what())); -  } - -  try { -    answer += handleRequest(transaction, pentominos_socket, db, macrolist, templatelist); -  } catch( std::exception &e ) { -    PRACRO_ERR(server, "Request error: %s\n", e.what()); -    return error_box(xml_encode(e.what())); -  } - -  answer += "</pracro>\n"; - -  PRACRO_DEBUG(server, "Done handling transaction\n"); -  PRACRO_DEBUG(serverxml, "%s\n", answer.c_str()); -  return answer; -} -  static std::string handleConnection(const char *buf, size_t size, struct conn_t *conn,                                      sessionid_t sid, bool commitsession)  { | 
