Newer
Older
Copyright (C) 2008 Sebastien LUTTRINGER <contact@seblu.net>
SLS 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; version 2 of the License.
SLS 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 SLS; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "sls.hh"
#include "option.hh"
#include <getopt.h>
#include <stdlib.h>
/*!
** Constructor
*/
Option::Option() {
verbose = false;
pidfile = "/var/lock/sls.pid";
}
/*!
** Print usage on @param out. The program name is @param name.
*/
void Option::usage(const char *name, ostream &out) const {
out << "usage: " << name
<< " [-h|--help] [-d|--database file] [-v|--verbose] [-p port] [-t max-thread]" << std::endl
<< "-d | --database file : Define database (def: /var/db/sls.db)." << std::endl
<< "-v | --verbose : Set verbose mode." << std::endl
<< "-V | --version : Print version and exit." << std::endl
<< "-p | --port p : sls listen on port p (def: 18136)." << std::endl
<< "-m | --max-conn p : Maximun number of connection (def: 200)." << std::endl
<< "-P | --pid-file : Path to pid file (def: /var/lock/sls.pid)." << std::endl
<< "-l | --log-file : Path to log file (def: /var/log/sls)." << std::endl
<< "-D | --debug : Run with verbose and not in daemon mode." << std::endl;
}
/*!
** Parse argline arguments and fill options accordingly
**
** @param argc argc of your program
** @param argv argv of your program
**
** @return
*/
Option &Option::load(int argc, char *argv[]) {
struct option lopt[] = {
{"help", 0, 0, 'h'},
{"database", 0, 0, 'd'},
{"verbose", 0, 0, 'v'},
{"version", 0, 0, 'V'},
{"port", 0, 0, 'p'},
{"pid-file", 0, 0, 'P'},
{"log-file", 0, 0, 'l'},
{"debug", 0, 0, 'D'},
{0, 0, 0, 0},
};
int option;
while ((option = getopt_long(argc, argv, "hvnVDd:p:P:l:m:", lopt, 0)) != -1) {
break;
case 'P':
pidfile = optarg;
break;
case 'l':
logfile = optarg;
break;
case 'V':
std::cerr << "Version: " << VERSION << std::endl;
exit(ERR_NO);
case 'D':
daemon = false;
case 'v':
verbose = true;
break;
case '?':
usage(*argv, std::cerr);
exit(ERR_USAGE);
}
}
if (argv[optind] != 0) {
usage(*argv, std::cerr);
exit(ERR_USAGE);
}
return *this;
}
Option &Option::loadenv() {
const char *senv;
// Get log file path
if ((senv = getenv("SLS_LOG_FILE")) != 0 && *senv != 0)
logfile = senv;
// Get pid file path
if ((senv = getenv("SLS_PID_FILE")) != 0 && *senv != 0)
pidfile = senv;
// Get DB file path
if ((senv = getenv("SLS_DB_FILE")) != 0 && *senv != 0)
database = senv;
// Get port
if ((senv = getenv("SLS_PORT")) != 0 && *senv != 0)
port = atoi(senv);
// Get max connection
if ((senv = getenv("SLS_MAX_CONN")) != 0 && *senv != 0)
maxconn = atoi(senv);
// Get debug state
if ((senv = getenv("SLS_DEBUG")) != 0) {
daemon = false;
verbose = true;
}
// Get verbose state
if ((senv = getenv("SLS_VERBOSE")) != 0)
verbose = true;
void Option::print(ostream &s) const {
s << "Database file: " << database << std::endl
<< "Log file: " << logfile << std::endl
<< "Pid file: " << pidfile << std::endl
<< "Max conn: " << maxconn << std::endl
<< "Debug mode: " << !daemon << std::endl;
}