diff options
| -rw-r--r-- | server/src/Makefile.am | 2 | ||||
| -rw-r--r-- | server/src/configuration.cc | 45 | ||||
| -rw-r--r-- | server/src/configuration.h | 61 | ||||
| -rw-r--r-- | server/src/configurationparser.cc | 49 | ||||
| -rw-r--r-- | server/src/configurationparser.h | 69 | ||||
| -rw-r--r-- | server/src/pracrod.cc | 23 | ||||
| -rw-r--r-- | server/src/server.cc | 18 | 
7 files changed, 152 insertions, 115 deletions
| diff --git a/server/src/Makefile.am b/server/src/Makefile.am index 93d830a..704d4d2 100644 --- a/server/src/Makefile.am +++ b/server/src/Makefile.am @@ -10,6 +10,7 @@ pracrod_SOURCES = \  	daemon.cc \  	database.cc \  	configuration.cc \ +	configurationparser.cc \  	exception.cc \  	queryhandler.cc \  	queryparser.cc \ @@ -28,6 +29,7 @@ pracrod_SOURCES = \  EXTRA_DIST = \  	configuration.h \ +	configurationparser.h \  	daemon.h \  	database.h \  	debug.h \ diff --git a/server/src/configuration.cc b/server/src/configuration.cc index 3f8e9d6..8883e30 100644 --- a/server/src/configuration.cc +++ b/server/src/configuration.cc @@ -26,42 +26,15 @@   */  #include "configuration.h" -#include "debug.h" +port_t Conf::server_port = 12345; +std::string Conf::server_user = "pracro"; +std::string Conf::server_group = "pracro"; -Configuration::Configuration(std::string filename) -{ -  this->filename = filename; +std::string Conf::journal_commit_addr = "localhost"; +port_t Conf::journal_commit_port = 18112; -  reload(); -} +unsigned int Conf::db_max_ttl = 60 * 60 * 24; +unsigned int Conf::pentominos_max_ttl = 60 * 60 * 24; -void Configuration::reload() -  throw(ConfigurationException) -{ -  try { -    readFile(this->filename.c_str()); -  } catch(libconfig::FileIOException) { -    throw ConfigurationException("Could not read config file: File does not exist."); -  } catch(libconfig::ParseException &e) { -    char lineno[32]; -    sprintf(lineno, "%d", e.getLine()); -    throw ConfigurationException(std::string("Error when parsing the config file in line ") -                                 + lineno + ": " + e.getError()); -  } -} - - -static Configuration *_config = NULL; - -Configuration *config() -  throw(ConfigurationException) -{ -  if(_config == NULL) -    throw ConfigurationException("Configuration has not yet been set."); -  return _config; -} - -void initConfig(Configuration *config) -{ -  _config = config; -} +std::string pentominos_addr = "localhost"; +port_t pentominos_potr = 11108; diff --git a/server/src/configuration.h b/server/src/configuration.h index 1b851f3..2272a83 100644 --- a/server/src/configuration.h +++ b/server/src/configuration.h @@ -27,60 +27,23 @@  #ifndef __ARTEFACT_CONFIGURATION_H__  #define __ARTEFACT_CONFIGURATION_H__ -#include <libconfig.h++>  #include <string> +#include <sys/types.h> +typedef uint16_t port_t; -#include "exception.h" +namespace Conf { +  extern port_t server_port; +  extern std::string server_user; +  extern std::string server_group; -/** - * This exception is thrown by Configuration when reload fails. - */ -class ConfigurationException: public Exception { -public: -  ConfigurationException(std::string reason) :  -    Exception(reason) {} -}; +  extern std::string journal_commit_addr; +  extern port_t journal_commit_port; -/** - * This is the pentominos configuration class.\n - * It simply wraps the libconfig c++ interface. It can be found at  - * http://www.hyperrealm.com/libconfig/libconfig.html\n - * To find out how the interface works, see - * http://www.hyperrealm.com/libconfig/libconfig_manual.html#The-C_002b_002b-API - */ -class Configuration : public libconfig::Config { -public: -  /** -   * Constructor.\n -   * @param filename The filename to be loaded. -   */ -  Configuration(std::string filename); +  extern unsigned int db_max_ttl; +  extern unsigned int pentominos_max_ttl; -  /** -   * reload, simply reloads the configuration file attached to the configuration -   * object. -   */ -  void reload() throw(ConfigurationException); - -private: -  std::string filename; +  extern std::string pentominos_addr; +  extern port_t pentominos_port;  }; -/** - * Initialize the global configuration.\n - * This function sets the Configuration global pointer, that can be reaced through - * the config variable. - * @param config The value of the Configuration pointer. - */ -void initConfig(Configuration *config); - -/** - * This function returns the global configuration object pointer.\n - * Use initConfig to set it.\n - * @return The pointer to the global configuration. - */ -Configuration *config() -  throw(ConfigurationException); - -  #endif/*__ARTEFACT_CONFIGURATION_H__*/ diff --git a/server/src/configurationparser.cc b/server/src/configurationparser.cc new file mode 100644 index 0000000..6335fd9 --- /dev/null +++ b/server/src/configurationparser.cc @@ -0,0 +1,49 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + *            configurationparser.cc + * + *  Wed Jul 30 11:48:31 CEST 2008 + *  Copyright 2008 Bent Bisballe Nyeng + *  deva@aasimon.org + ****************************************************************************/ + +/* + *  This file is part of Pracro. + * + *  Pracro is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  Pracro is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with Pracro; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#include "configurationparser.h" + +ConfigurationParser::ConfigurationParser(std::string filename) +{ +  this->filename = filename; + +  reload(); +} + +void ConfigurationParser::reload() +  throw(ConfigurationParserException) +{ +  try { +    readFile(this->filename.c_str()); +  } catch(libconfig::FileIOException) { +    throw ConfigurationParserException("Could not read config file: File does not exist."); +  } catch(libconfig::ParseException &e) { +    char lineno[32]; +    sprintf(lineno, "%d", e.getLine()); +    throw ConfigurationParserException(std::string("Error when parsing the config file in line ") +                                 + lineno + ": " + e.getError()); +  } +} diff --git a/server/src/configurationparser.h b/server/src/configurationparser.h new file mode 100644 index 0000000..924c041 --- /dev/null +++ b/server/src/configurationparser.h @@ -0,0 +1,69 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + *            configurationparser.h + * + *  Wed Jul 30 11:48:31 CEST 2008 + *  Copyright 2008 Bent Bisballe Nyeng + *  deva@aasimon.org + ****************************************************************************/ + +/* + *  This file is part of Pracro. + * + *  Pracro is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  Pracro is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with Pracro; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#ifndef __PRACRO_CONFIGURATIONPARSER_H__ +#define __PRACRO_CONFIGURATIONPARSER_H__ + +#include <libconfig.h++> +#include <string> + +#include "exception.h" + +/** + * This exception is thrown by Configuration when reload fails. + */ +class ConfigurationParserException: public Exception { +public: +  ConfigurationParserException(std::string reason) :  +    Exception(reason) {} +}; + +/** + * This is the pentominos configuration class.\n + * It simply wraps the libconfig c++ interface. It can be found at  + * http://www.hyperrealm.com/libconfig/libconfig.html\n + * To find out how the interface works, see + * http://www.hyperrealm.com/libconfig/libconfig_manual.html#The-C_002b_002b-API + */ +class ConfigurationParser : public libconfig::Config { +public: +  /** +   * Constructor.\n +   * @param filename The filename to be loaded. +   */ +  ConfigurationParser(std::string filename); + +  /** +   * reload, simply reloads the configuration file attached to the configuration +   * object. +   */ +  void reload() throw(ConfigurationParserException); + +private: +  std::string filename; +}; + +#endif/*__PRACRO_CONFIGURATIONPARSER_H__*/ diff --git a/server/src/pracrod.cc b/server/src/pracrod.cc index dff00d9..c668159 100644 --- a/server/src/pracrod.cc +++ b/server/src/pracrod.cc @@ -82,8 +82,9 @@ static const char usage_str[] =  "  -h, --help          Print this message and exit.\n"  ; -void reload(int fisk) +void reload(int)  { +  /*    int port;    printf("Reload!\n");    port = config()->lookup("port"); @@ -93,6 +94,7 @@ void reload(int fisk)      TCPSocket socket;      socket.connect("localhost", port);    } +  */  }  class PracroDaemon : public Daemon { @@ -167,33 +169,24 @@ int main(int argc, char *argv[])      }    } +  // Load config +  /*    char defval[512];    sprintf(defval, ETC"/pracrod.conf"); -    char *cfname = NULL;    if(!configfile) cfname = defval;//ETC"/pracrod.conf";    else cfname = configfile;    Configuration conf(cfname);    initConfig(&conf); +  */    if(!user) { -    std::string userstr; -    try { -      user = (char*)(const char*)config()->lookup("user"); -    } catch( ... ) { -      printf("User not found in config.\n"); -    } +    user = strdup(Conf::server_user.c_str());    }    if(!group) { -    std::string groupstr; -    try { -      group = (char*)(const char*)config()->lookup("group"); -    } catch( ... ) { -      printf("Group not found in config.\n"); -    } - +    group = strdup(Conf::server_group.c_str());    }    PracroDaemon daemon; diff --git a/server/src/server.cc b/server/src/server.cc index 20fd856..1bd0ccf 100644 --- a/server/src/server.cc +++ b/server/src/server.cc @@ -133,7 +133,7 @@ static void connection(TCPSocket &socket)  #ifndef WITHOUT_PENTOMINOS              // Send the queries to Pentominos (if any)        TCPSocket s; -      s.connect("localhost", 11108); +      s.connect(Conf::pentominos_addr, Conf::pentominos_port);        QueryHandler qh(&s, transaction.cpr);        std::vector< Macro >::iterator mi = templ->course.macroes.begin(); @@ -212,14 +212,7 @@ static void connection(TCPSocket &socket)  void server()  { -  int port; -  try { -    port = config()->lookup("port"); -  } catch( ... ) { -    fprintf(stderr, "Could not read port."); -    return; -  } - +  port_t port = Conf::server_port;    TCPSocket *socket = NULL;    try { @@ -237,12 +230,7 @@ void server()      { // Reload if new port is assigned.        int old_port = port; -      try { -        port = config()->lookup("port"); -      } catch( ... ) { -        fprintf(stderr, "Could not read port."); -        return; -      } +      port = Conf::server_port;        if(port != old_port) {          // Start listening on the new port | 
