mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-01-29 08:34:37 +01:00
do loglevel and ports via the general-purpose config mech. No special
cases remain.
This commit is contained in:
parent
952a73fdbb
commit
cf5a10084e
5 changed files with 66 additions and 37 deletions
|
@ -1,7 +1,8 @@
|
||||||
/* -*-mode: C; fill-column: 78; c-basic-offset: 4; -*- */
|
/* -*-mode: C; fill-column: 78; c-basic-offset: 4; -*- */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright 2005 by Eric House (xwords@eehouse.org). All rights reserved.
|
* Copyright 2005-2009 by Eric House (xwords@eehouse.org). All rights
|
||||||
|
* reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -53,14 +54,6 @@ RelayConfigs::RelayConfigs( const char* cfile )
|
||||||
(void)parse( cfile, prev );
|
(void)parse( cfile, prev );
|
||||||
} /* RelayConfigs::RelayConfigs */
|
} /* RelayConfigs::RelayConfigs */
|
||||||
|
|
||||||
void
|
|
||||||
RelayConfigs::GetPorts( std::vector<int>::const_iterator* iter,
|
|
||||||
std::vector<int>::const_iterator* end)
|
|
||||||
{
|
|
||||||
*iter = m_ports.begin();
|
|
||||||
*end = m_ports.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
RelayConfigs::GetValueFor( const char* key, int* value )
|
RelayConfigs::GetValueFor( const char* key, int* value )
|
||||||
{
|
{
|
||||||
|
@ -94,6 +87,43 @@ RelayConfigs::GetValueFor( const char* key, char* buf, int len )
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
RelayConfigs::GetValueFor( const char* key, vector<int>& ints )
|
||||||
|
{
|
||||||
|
map<string,string>::const_iterator iter = m_values.find(key);
|
||||||
|
bool found = iter != m_values.end();
|
||||||
|
const char* str = iter->second.c_str();
|
||||||
|
int len = strlen(str);
|
||||||
|
char buf[len+1];
|
||||||
|
strcpy( buf, str );
|
||||||
|
char* port = buf;
|
||||||
|
|
||||||
|
for ( ; ; ) {
|
||||||
|
char* end = strstr( port, "," );
|
||||||
|
if ( !!end ) {
|
||||||
|
*end = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
logf( XW_LOGINFO, "adding %s to ports", port );
|
||||||
|
ints.push_back( atoi(port) );
|
||||||
|
|
||||||
|
if ( !end ) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
port = end + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
RelayConfigs::SetValueFor( const char* key, const char* value )
|
||||||
|
{
|
||||||
|
/* Does this leak in the case where we're replacing a value? */
|
||||||
|
m_values.insert( pair<string,string>(string(key),string(value) ) );
|
||||||
|
}
|
||||||
|
|
||||||
ino_t
|
ino_t
|
||||||
RelayConfigs::parse( const char* fname, ino_t prev )
|
RelayConfigs::parse( const char* fname, ino_t prev )
|
||||||
{
|
{
|
||||||
|
@ -131,10 +161,6 @@ RelayConfigs::parse( const char* fname, ino_t prev )
|
||||||
|
|
||||||
m_values.insert( pair<string,string>
|
m_values.insert( pair<string,string>
|
||||||
(string(line),string(value) ) );
|
(string(line),string(value) ) );
|
||||||
|
|
||||||
if ( 0 == strcmp( line, "PORT" ) ) {
|
|
||||||
m_ports.push_back( atoi( value ) );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
fclose( f );
|
fclose( f );
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,23 +41,18 @@ class RelayConfigs {
|
||||||
|
|
||||||
~RelayConfigs() {}
|
~RelayConfigs() {}
|
||||||
|
|
||||||
void GetPorts( vector<int>::const_iterator* iter, vector<int>::const_iterator* end);
|
|
||||||
int GetLogLevel(void) { return m_logLevel; }
|
|
||||||
void SetLogLevel(int ll) { m_logLevel = ll; }
|
|
||||||
|
|
||||||
bool GetValueFor( const char* key, int* intValue );
|
bool GetValueFor( const char* key, int* intValue );
|
||||||
bool GetValueFor( const char* key, time_t* timeValue );
|
bool GetValueFor( const char* key, time_t* timeValue );
|
||||||
bool GetValueFor( const char* key, vector<int>::const_iterator* iter,
|
bool GetValueFor( const char* key, vector<int>& ints );
|
||||||
vector<int>::const_iterator* end );
|
|
||||||
bool GetValueFor( const char* key, char* buf, int len );
|
bool GetValueFor( const char* key, char* buf, int len );
|
||||||
|
|
||||||
|
void SetValueFor( const char* key, const char* value );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RelayConfigs( const char* cfile );
|
RelayConfigs( const char* cfile );
|
||||||
ino_t parse( const char* fname, ino_t prev );
|
ino_t parse( const char* fname, ino_t prev );
|
||||||
|
|
||||||
time_t m_allConnInterval;
|
time_t m_allConnInterval;
|
||||||
vector<int> m_ports;
|
|
||||||
int m_logLevel;
|
|
||||||
|
|
||||||
map<string,string> m_values;
|
map<string,string> m_values;
|
||||||
|
|
||||||
|
|
|
@ -250,9 +250,9 @@ cmd_get( int socket, const char** args )
|
||||||
break;
|
break;
|
||||||
case 2: {
|
case 2: {
|
||||||
RelayConfigs* rc = RelayConfigs::GetConfigs();
|
RelayConfigs* rc = RelayConfigs::GetConfigs();
|
||||||
if ( NULL != rc ) {
|
int level;
|
||||||
print_to_sock( socket, true, "loglevel=%d\n",
|
if ( NULL != rc && rc->GetValueFor( "LOGLEVEL", &level ) ) {
|
||||||
rc->GetLogLevel() );
|
print_to_sock( socket, true, "loglevel=%d\n", level );
|
||||||
needsHelp = false;
|
needsHelp = false;
|
||||||
} else {
|
} else {
|
||||||
logf( XW_LOGERROR, "RelayConfigs::GetConfigs() => NULL" );
|
logf( XW_LOGERROR, "RelayConfigs::GetConfigs() => NULL" );
|
||||||
|
@ -306,7 +306,7 @@ cmd_set( int socket, const char** args )
|
||||||
if ( NULL != val && val[0] != '\0' ) {
|
if ( NULL != val && val[0] != '\0' ) {
|
||||||
RelayConfigs* rc = RelayConfigs::GetConfigs();
|
RelayConfigs* rc = RelayConfigs::GetConfigs();
|
||||||
if ( rc != NULL ) {
|
if ( rc != NULL ) {
|
||||||
rc->SetLogLevel( atoi(val) );
|
rc->SetValueFor( "LOGLEVEL", val );
|
||||||
needsHelp = false;
|
needsHelp = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,17 +15,13 @@ ALLCONN=300
|
||||||
NTHREADS=5
|
NTHREADS=5
|
||||||
|
|
||||||
# What port do we listen on for incomming connections?
|
# What port do we listen on for incomming connections?
|
||||||
PORT=10997
|
PORTS=10997,10998,10999
|
||||||
PORT=10998
|
|
||||||
PORT=10999
|
|
||||||
# intentional duplicate for testing
|
|
||||||
PORT=10999
|
|
||||||
|
|
||||||
# And the control port is?
|
# And the control port is?
|
||||||
CTLPORT=11000
|
CTLPORT=11000
|
||||||
|
|
||||||
# port for web interface
|
# port for web interface
|
||||||
WWWPORT=11001
|
WWW_PORT=11001
|
||||||
#--- INADDR_ANY: 0x00000000
|
#--- INADDR_ANY: 0x00000000
|
||||||
#WWW_LISTEN_ADDR=0
|
#WWW_LISTEN_ADDR=0
|
||||||
#--- INADDR_LOOPBACK: 0x7f000001/2130706433
|
#--- INADDR_LOOPBACK: 0x7f000001/2130706433
|
||||||
|
|
|
@ -80,7 +80,16 @@ void
|
||||||
logf( XW_LogLevel level, const char* format, ... )
|
logf( XW_LogLevel level, const char* format, ... )
|
||||||
{
|
{
|
||||||
RelayConfigs* rc = RelayConfigs::GetConfigs();
|
RelayConfigs* rc = RelayConfigs::GetConfigs();
|
||||||
if ( NULL == rc || level <= rc->GetLogLevel() ) {
|
int configLevel = level;
|
||||||
|
|
||||||
|
if ( NULL != rc ) {
|
||||||
|
|
||||||
|
if ( ! rc->GetValueFor( "LOGLEVEL", &configLevel ) ) {
|
||||||
|
configLevel = level - 1; /* drop it */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( level <= configLevel ) {
|
||||||
#ifdef USE_SYSLOG
|
#ifdef USE_SYSLOG
|
||||||
char buf[256];
|
char buf[256];
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
@ -628,7 +637,7 @@ main( int argc, char** argv )
|
||||||
}
|
}
|
||||||
#ifdef DO_HTTP
|
#ifdef DO_HTTP
|
||||||
if ( httpport == 0 ) {
|
if ( httpport == 0 ) {
|
||||||
(void)cfg->GetValueFor( "WWWPORT", &httpport );
|
(void)cfg->GetValueFor( "WWW_PORT", &httpport );
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if ( nWorkerThreads == 0 ) {
|
if ( nWorkerThreads == 0 ) {
|
||||||
|
@ -711,16 +720,19 @@ main( int argc, char** argv )
|
||||||
if ( port != 0 ) {
|
if ( port != 0 ) {
|
||||||
g_listeners.AddListener( port );
|
g_listeners.AddListener( port );
|
||||||
}
|
}
|
||||||
vector<int>::const_iterator iter, end;
|
vector<int> ints;
|
||||||
cfg->GetPorts( &iter, &end );
|
if ( !cfg->GetValueFor( "PORTS", ints ) ) {
|
||||||
while ( iter != end ) {
|
exit( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
vector<int>::const_iterator iter;
|
||||||
|
for ( iter = ints.begin(); iter != ints.end(); ++iter ) {
|
||||||
int port = *iter;
|
int port = *iter;
|
||||||
if ( !g_listeners.PortInUse( port ) ) {
|
if ( !g_listeners.PortInUse( port ) ) {
|
||||||
g_listeners.AddListener( port );
|
g_listeners.AddListener( port );
|
||||||
} else {
|
} else {
|
||||||
logf( XW_LOGERROR, "port %d was in use", port );
|
logf( XW_LOGERROR, "port %d was in use", port );
|
||||||
}
|
}
|
||||||
++iter;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_control = make_socket( INADDR_LOOPBACK, ctrlport );
|
g_control = make_socket( INADDR_LOOPBACK, ctrlport );
|
||||||
|
|
Loading…
Add table
Reference in a new issue