projects/convertor/convertor
projects/rscriptd/rscriptd
projects/sgconf/sgconf
+projects/sgconf_xml/sgconf_xml
doc/xmlrpc-doc/book
doc/help/book
#ifndef ADMIN_CONF_H
#define ADMIN_CONF_H
-#include "os_int.h"
-#include "resetable.h"
+#include "stg/resetable.h"
#include <string>
+#include "os_int.h"
+
#define ADM_LOGIN_LEN (32)
#define ADM_PASSWD_LEN (32)
//-----------------------------------------------------------------------------
struct ADMIN_CONF_RES
{
ADMIN_CONF_RES() {}
- ADMIN_CONF_RES(const ADMIN_CONF & conf)
- : priv(conf.priv),
- login(conf.login),
- password(conf.password)
- {}
ADMIN_CONF_RES(const ADMIN_CONF_RES & rhs)
: priv(rhs.priv),
login(rhs.login),
virtual int Start() = 0;
virtual int Stop() = 0;
- virtual int Reload() = 0;
+ virtual int Reload(const MODULE_SETTINGS &) = 0;
virtual bool IsRunning() = 0;
virtual const std::string & GetStrError() const = 0;
virtual std::string GetVersion() const = 0;
is_set = true;
}
}
+ void maybeSet(value_type& dest) const
+ {
+ if (is_set)
+ dest = value;
+ }
private:
value_type value;
DIRPRICE_DATA GetData() const
{
DIRPRICE_DATA dd;
- dd.hDay = hDay.data();
- dd.hNight = hNight.data();
- dd.mDay = mDay.data();
- dd.mNight = mNight.data();
- dd.noDiscount = noDiscount.data();
- dd.priceDayA = priceDayA.data();
- dd.priceDayB = priceDayB.data();
-
- dd.priceNightA = priceNightA.data();
- dd.priceNightB = priceNightB.data();
- dd.singlePrice = singlePrice.data();
- dd.threshold = threshold.data();
+ hDay.maybeSet(dd.hDay);
+ hNight.maybeSet(dd.hNight);
+ mDay.maybeSet(dd.mDay);
+ mNight.maybeSet(dd.mNight);
+ noDiscount.maybeSet(dd.noDiscount);
+ priceDayA.maybeSet(dd.priceDayA);
+ priceDayB.maybeSet(dd.priceDayB);
+ priceNightA.maybeSet(dd.priceNightA);
+ priceNightB.maybeSet(dd.priceNightB);
+ singlePrice.maybeSet(dd.singlePrice);
+ threshold.maybeSet(dd.threshold);
return dd;
}
TARIFF_CONF GetData() const
{
TARIFF_CONF tc;
- tc.fee = fee.data();
- tc.free = free.data();
- tc.name = name.data();
- tc.passiveCost = passiveCost.data();
- tc.traffType = traffType.data();
- tc.period = period.data();
+ fee.maybeSet(tc.fee);
+ free.maybeSet(tc.free);
+ name.maybeSet(tc.name);
+ passiveCost.maybeSet(tc.passiveCost);
+ traffType.maybeSet(tc.traffType);
+ period.maybeSet(tc.period);
return tc;
}
struct USER_CONF_RES
{
USER_CONF_RES()
- {
- }
-
+ : userdata(USERDATA_NUM)
+ {}
USER_CONF_RES & operator=(const USER_CONF & uc)
{
userdata.resize(USERDATA_NUM);
inline
bool USER_IPS::OnlyOneIP() const
{
-if (ips.size() == 1 && ips.front().mask == 32)
+if (ips.size() == 1 && ips.front().mask == 32 && ips.front().ip != 0)
return true;
return false;
* Author : Maxim Mamontiv <faust@stargazer.dp.ua>
*/
- /*
- $Revision: 1.6 $
- $Date: 2010/11/08 10:13:18 $
- */
-
#ifndef __VERSION_H__
#define __VERSION_H__
// Stargazer version
-#define SERVER_VERSION "2.409-alpha"
+#define SERVER_VERSION "2.5"
#endif
#!/bin/sh
-# $Revision: 1.57 $
-# $Author: faust $
-# $Date: 2010/05/09 12:39:01 $
-######################################################
-
# Installation path prefix
#PREFIX=""
OS=unknown
sys=`uname -s`
-release=`uname -r | cut -b1`
+release=`uname -r`
+major=`printf "%s" "$release" | cut -d. -f1`
BUILD_DIR=`pwd`
CONFFILE="../../Makefile.conf"
if [ "$sys" = "Linux" ]
then
OS=linux
- release=""
MAKE="make"
fi
if [ "$sys" = "FreeBSD" ]
then
- case $release in
+ case $major in
4) OS=bsd;;
5) OS=bsd5;;
6) OS=bsd5;;
if [ "$OS" = "unknown" ]
then
printf "#############################################################################\n"
- printf "# Sorry, but stargazer currently supported by Linux, FreeBSD 4.x, 5.x, 6.x #\n"
+ printf "# Sorry, but we currently support Linux, FreeBSD and Darwin. #\n"
printf "#############################################################################\n"
exit 1
fi
printf "#############################################################################\n"
-printf " Building STG 2.4 for $sys $release\n"
+printf " Building STG 2.4 libs for $sys $release\n"
printf "#############################################################################\n"
STG_LIBS="logger.lib
then
DEFS="$DEFS -DLINUX"
else
+ LIBICONV="-liconv"
if [ "$OS" = "bsd" ]
then
DEFS="$DEFS -DFREE_BSD"
if [ "$OS" == "darwin" ]
then
DEFS="$DEFS -DDARWIN"
+ LIBICONV=""
fi
fi
fi
printf "Checking for -lexpat... "
printf "#include <expat.h>\nint main() { return 0; }\n" > build_check.c
-$CXX $CXXFLAGS $LDFLAGS build_check.c -lexpat -o fake > /dev/null 2> /dev/null
+$CC $CFLAGS $LDFLAGS build_check.c -lexpat -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_EXPAT=no
fi
rm -f fake
-printf "Checking for -lfbclient... "
-printf "int main() { return 0; }\n" > build_check.c
-$CXX $CXXFLAGS $LDFLAGS build_check.c -lfbclient -o fake > /dev/null 2> /dev/null
+printf "Checking for iconv 2nd argument... "
+printf "#include <iconv.h>\nint main(){ const char** src = 0; iconv(0, src, 0, 0, 0); }\n" > build_check.c
+$CC $CFLAGS $LDFLAGS -Werror build_check.c $LIBICONV -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
- CHECK_FBCLIENT=no
+ printf "non-const\n"
+else
+ DEFS="$DEFS -DCONST_ICONV"
+ printf "const\n"
+fi
+rm -f fake
+
+printf "Checking for fb_config... "
+FB_VERSION=`fb_config --version 2> /dev/null`
+if [ "$?" != "0" ]
+then
printf "no\n"
+ printf "Checking for -lfbclient... "
+ printf "int main() { return 0; }\n" > build_check.c
+ $CC $CFLAGS $LDFLAGS build_check.c -lfbclient $LIB_THREAD -o fake > /dev/null 2> /dev/null
+ if [ $? != 0 ]
+ then
+ CHECK_FBCLIENT=no
+ printf "no\n"
+ else
+ FB_CFLAGS=""
+ FB_LDFLAGS="-lfbclient"
+ CHECK_FBCLIENT=yes
+ printf "yes\n"
+ fi
+ rm -f fake
else
- CHECK_FBCLIENT=yes
printf "yes\n"
+ printf "Checking for fb_config --cflags... "
+ FB_CFLAGS=`fb_config --cflags`
+ if [ "$?" != "0" ]
+ then
+ CHECK_FBCLIENT=no
+ printf "no\n"
+ else
+ printf "[$FB_CFLAGS]\n"
+ printf "Checking for fb_config --libs "
+ FB_LDFLAGS=`fb_config --libs`
+ if [ "$?" != "0" ]
+ then
+ CHECK_FBCLIENT=no
+ printf "no\n"
+ else
+ CHECK_FBCLIENT=yes
+ printf "[$FB_LDFLAGS]\n"
+ fi
+ fi
fi
-rm -f fake
rm -f build_check.c
printf "ARCH=$ARCH\n" >> $CONFFILE
printf "CHECK_EXPAT=$CHECK_EXPAT\n" >> $CONFFILE
printf "CHECK_FBCLIENT=$CHECK_FBCLIENT\n" >> $CONFFILE
+if [ "$CHECK_FBCLIENT" = "yes" ]
+then
+ printf "FB_CFLAGS=$FB_CFLAGS\n" >> $CONFFILE
+ printf "FB_LDFLAGS=$FB_LDFLAGS\n" >> $CONFFILE
+fi
printf "DEFS=$DEFS\n" >> $CONFFILE
printf "STG_LIBS=" >> $CONFFILE
for lib in $STG_LIBS
printf "$lib " >> $CONFFILE
done
printf "\n" >> $CONFFILE
+printf "CC=$CC\n" >> $CONFFILE
+printf "CXX=$CXX\n" >> $CONFFILE
printf "CXXFLAGS=$CXXFLAGS\n" >> $CONFFILE
printf "CFLAGS=$CFLAGS\n" >> $CONFFILE
printf "LDFLAGS=$LDFLAGS\n" >> $CONFFILE
+printf "LIBICONV=$LIBICONV\n" >> $CONFFILE
printf "PREFIX=$PREFIX\n" >> $CONFFILE
printf "BIN_MODE=$BIN_MODE\n" >> $CONFFILE
printf "DATA_MODE=$DATA_MODE\n" >> $CONFFILE
./stg_client.cpp
STGLIBS = crypto \
- common
-
+ common
+
STGLIBS_INCS = $(addprefix -I ../../stglibs/,$(addsuffix .lib/include,$(STGLIBS)))
STGLIBS_LIBS = $(addprefix -L ../../stglibs/,$(addsuffix .lib,$(STGLIBS)))
-LIBS += $(addprefix -lstg,$(STGLIBS)) $(LIB_THREAD)
+LIBS += $(addprefix -lstg,$(STGLIBS)) $(LIB_THREAD) $(LIBICONV)
ifeq ($(OS),linux)
LIBS += -ldl
else
LIBS += -lintl \
- -lc \
- -liconv
+ -lc
endif
SEARCH_DIRS = -I ../../include
install-bin:
ifeq ($(DEBUG), yes)
ifeq ($(OS), linux)
- install -D -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/lib/freeradius/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/lib/freeradius
+ install -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/lib/freeradius/$(PROG)
else
- install -D -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/lib/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/lib
+ install -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/lib/$(PROG)
endif
else
- install -D -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/lib/freeradius/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/lib/freeradius
+ install -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/lib/freeradius/$(PROG)
ifeq ($(OS), linux)
- install -D -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/lib/freeradius/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/lib/freeradius
+ install -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/lib/freeradius/$(PROG)
else
- install -D -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/lib/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/lib
+ install -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/lib/$(PROG)
endif
endif
$(MAKE) -C $(DIR_LIBSRC) install
DEFS="$DEFS -DLINUX"
LIB_THREAD=-lpthread
else
+ LIBICONV="-liconv"
if [ "$OS" = "bsd" ]
then
DEFS="$DEFS -DFREE_BSD"
fi
rm -f fake
+printf "Checking for iconv 2nd argument... "
+printf "#include <iconv.h>\nint main(){ const char** src = 0; iconv(0, src, 0, 0, 0); }\n" > build_check.c
+$CC $CFLAGS $LDFLAGS -Werror build_check.c $LIBICONV -o fake > /dev/null 2> /dev/null
+if [ $? != 0 ]
+then
+ printf "non-const\n"
+else
+ DEFS="$DEFS -DCONST_ICONV"
+ printf "const\n"
+fi
+rm -f fake
+
printf "OS=$OS\n" > $CONFFILE
printf "STG_TIME=yes\n" >> $CONFFILE
printf "DEBUG=$DEBUG\n" >> $CONFFILE
printf "CFLAGS=$CFLAGS\n" >> $CONFFILE
printf "LDFLAGS=$LDFLAGS\n" >> $CONFFILE
printf "LIB_THREAD=$LIB_THREAD\n" >> $CONFFILE
+printf "LIBICONV=$LIBICONV\n" >> $CONFFILE
printf "PREFIX=$PREFIX\n" >> $CONFFILE
printf "BIN_MODE=$BIN_MODE\n" >> $CONFFILE
printf "DATA_MODE=$DATA_MODE\n" >> $CONFFILE
STGLIBS_INCS = $(addprefix -I ../../stglibs/,$(addsuffix .lib/include,$(STGLIBS)))
STGLIBS_LIBS = $(addprefix -L ../../stglibs/,$(addsuffix .lib,$(STGLIBS)))
-LIBS += $(addprefix -lstg,$(STGLIBS)) $(LIB_THREAD)
-
-ifneq ($(OS),linux)
-LIBS += -liconv
-endif
+LIBS += $(addprefix -lstg,$(STGLIBS)) $(LIB_THREAD) $(LIBICONV)
SEARCH_DIRS = -I ../../include
install-bin:
ifeq ($(DEBUG), yes)
- install -D -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/sbin/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/sbin
+ install -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/sbin/$(PROG)
else
- install -D -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/sbin/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/sbin
+ install -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/sbin/$(PROG)
endif
$(MAKE) -C $(DIR_LIBSRC) install
mkdir -m $(DIR_MODE) -p $(PREFIX)/etc/rscriptd
install -m $(DATA_MODE) -o $(OWNER) ./rscriptd.conf $(PREFIX)/etc/rscriptd/rscriptd.conf
ifeq ($(OS), linux)
- install -D -m $(BIN_MODE) -o $(OWNER) ../stargazer/inst/linux/etc/stargazer/OnConnect $(PREFIX)/etc/rscriptd/
- install -D -m $(BIN_MODE) -o $(OWNER) ../stargazer/inst/linux/etc/stargazer/OnDisconnect $(PREFIX)/etc/rscriptd/
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/etc/rscriptd
+ install -m $(BIN_MODE) -o $(OWNER) ../stargazer/inst/linux/etc/stargazer/OnConnect $(PREFIX)/etc/rscriptd/
+ install -m $(BIN_MODE) -o $(OWNER) ../stargazer/inst/linux/etc/stargazer/OnDisconnect $(PREFIX)/etc/rscriptd/
else
- install -D -m $(BIN_MODE) -o $(OWNER) ../stargazer/inst/freebsd/etc/stargazer/OnConnect $(PREFIX)/etc/rscriptd/
- install -D -m $(BIN_MODE) -o $(OWNER) ../stargazer/inst/freebsd/etc/stargazer/OnDisconnect $(PREFIX)/etc/rscriptd/
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/etc/rscriptd
+ install -m $(BIN_MODE) -o $(OWNER) ../stargazer/inst/freebsd/etc/stargazer/OnConnect $(PREFIX)/etc/rscriptd/
+ install -m $(BIN_MODE) -o $(OWNER) ../stargazer/inst/freebsd/etc/stargazer/OnDisconnect $(PREFIX)/etc/rscriptd/
endif
uninstall: uninstall-bin uninstall-data
OS=unknown
sys=`uname -s`
-release=`uname -r | cut -b1`
+release=`uname -r`
+major=`printf "%s" "$release" | cut -d. -f1`
BUILD_DIR=`pwd`
CONFFILE="../../Makefile.conf"
PREFIX="/"
if [ "$sys" = "Linux" ]
then
OS=linux
- release=""
MAKE="make"
fi
if [ "$sys" = "FreeBSD" ]
then
- case $release in
+ case $major in
4) OS=bsd;;
5) OS=bsd5;;
6) OS=bsd5;;
if [ "$OS" = "unknown" ]
then
printf "#############################################################################\n"
- printf "# Sorry, but rscriptd currently supported by Linux, FreeBSD 4.x, 5.x, 6.x #\n"
+ printf "# Sorry, but rscriptd is currently supported by Linux, FreeBSD and Darwin. #\n"
printf "#############################################################################\n"
exit 1
fi
DEFS="$DEFS -DLINUX"
LIB_THREAD=-lpthread
else
+ LIBICONV="-liconv"
if [ "$OS" = "bsd" ]
then
DEFS="$DEFS -DFREE_BSD"
then
DEFS="$DEFS -DDARWIN"
LIB_THREAD=-lpthread
+ LIBICONV=""
else
LIB_THREAD=-lc_r
fi
fi
fi
rm -f fake
+
+printf "Checking for iconv 2nd argument... "
+printf "#include <iconv.h>\nint main(){ const char** src = 0; iconv(0, src, 0, 0, 0); }\n" > build_check.c
+$CC $CFLAGS $LDFLAGS -Werror build_check.c $LIBICONV -o fake > /dev/null 2> /dev/null
+if [ $? != 0 ]
+then
+ printf "non-const\n"
+else
+ DEFS="$DEFS -DCONST_ICONV"
+ printf "const\n"
+fi
+rm -f fake
+
rm -f build_check.c
printf "OS=$OS\n" > $CONFFILE
done
printf "\n" >> $CONFFILE
printf "LIB_THREAD=$LIB_THREAD\n" >> $CONFFILE
+printf "CC=$CC\n" >> $CONFFILE
+printf "CXX=$CXX\n" >> $CONFFILE
printf "CXXFLAGS=$CXXFLAGS\n" >> $CONFFILE
printf "CFLAGS=$CFLAGS\n" >> $CONFFILE
printf "LDFLAGS=$LDFLAGS\n" >> $CONFFILE
+printf "LIBICONV=$LIBICONV\n" >> $CONFFILE
printf "PREFIX=$PREFIX\n" >> $CONFFILE
printf "BIN_MODE=$BIN_MODE\n" >> $CONFFILE
printf "DATA_MODE=$DATA_MODE\n" >> $CONFFILE
STGLIBS_INCS = $(addprefix -I ../../stglibs/,$(addsuffix .lib/include,$(STGLIBS)))
STGLIBS_LIBS = $(addprefix -L ../../stglibs/,$(addsuffix .lib,$(STGLIBS)))
-LIBS += $(addprefix -lstg,$(STGLIBS)) $(LIB_THREAD)
+LIBS += $(addprefix -lstg,$(STGLIBS)) $(LIB_THREAD) $(LIBICONV)
-ifneq ($(OS),linux)
+ifeq ($(OS),linux)
+else
LIBS += -lintl \
- -lc \
- -liconv
+ -lc
endif
SEARCH_DIRS = -I ../../include
install-bin:
ifeq ($(DEBUG), yes)
- install -D -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/sbin/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/sbin
+ install -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/sbin/$(PROG)
else
- install -D -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/sbin/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/sbin
+ install -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/sbin/$(PROG)
endif
$(MAKE) -C $(DIR_LIBSRC) install
OS=unknown
sys=`uname -s`
-release=`uname -r | cut -b1`
+release=`uname -r`
+major=`printf "%s" "$release" | cut -d. -f1`
BUILD_DIR=`pwd`
CONFFILE="../../Makefile.conf"
PREFIX="/"
if [ "$sys" = "Linux" ]
then
OS=linux
- release=""
MAKE="make"
fi
if [ "$sys" = "FreeBSD" ]
then
- case $release in
+ case $major in
4) OS=bsd;;
5) OS=bsd5;;
6) OS=bsd5;;
if [ "$OS" = "unknown" ]
then
printf "#############################################################################\n"
- printf "# Sorry, but sgauth currently supported by Linux, FreeBSD 4.x, 5.x, 6.x #\n"
+ printf "# Sorry, but sgauth is currently supported by Linux, FreeBSD and Darwin. #\n"
printf "#############################################################################\n"
exit 1
fi
DEFS="$DEFS -DLINUX"
LIB_THREAD=-lpthread
else
+ LIBICONV="-liconv"
if [ "$OS" = "bsd" ]
then
DEFS="$DEFS -DFREE_BSD"
then
DEFS="$DEFS -DDARWIN"
LIB_THREAD=-lpthread
+ LIBICONV=""
else
LIB_THREAD=-lc_r
fi
fi
fi
rm -f fake
+
+printf "Checking for iconv 2nd argument... "
+printf "#include <iconv.h>\nint main(){ const char** src = 0; iconv(0, src, 0, 0, 0); }\n" > build_check.c
+$CC $CFLAGS $LDFLAGS -Werror build_check.c $LIBICONV -o fake > /dev/null 2> /dev/null
+if [ $? != 0 ]
+then
+ printf "non-const\n"
+else
+ DEFS="$DEFS -DCONST_ICONV"
+ printf "const\n"
+fi
+rm -f fake
+
rm -f build_check.c
printf "OS=$OS\n" > $CONFFILE
done
printf "\n" >> $CONFFILE
printf "LIB_THREAD=$LIB_THREAD\n" >> $CONFFILE
+printf "CC=$CC\n" >> $CONFFILE
+printf "CXX=$CXX\n" >> $CONFFILE
printf "CXXFLAGS=$CXXFLAGS\n" >> $CONFFILE
printf "CFLAGS=$CFLAGS\n" >> $CONFFILE
printf "LDFLAGS=$LDFLAGS\n" >> $CONFFILE
+printf "LIBICONV=$LIBICONV\n" >> $CONFFILE
printf "PREFIX=$PREFIX\n" >> $CONFFILE
printf "BIN_MODE=$BIN_MODE\n" >> $CONFFILE
printf "DATA_MODE=$DATA_MODE\n" >> $CONFFILE
proto.cpp
STGLIBS = dotconfpp \
- crypto \
- common
+ crypto \
+ common
STGLIBS_INCS = $(addprefix -I ../../stglibs/,$(addsuffix .lib/include,$(STGLIBS)))
STGLIBS_LIBS = $(addprefix -L ../../stglibs/,$(addsuffix .lib,$(STGLIBS)))
-LIBS += $(addprefix -lstg,$(STGLIBS)) $(LIB_THREAD)
+LIBS += $(addprefix -lstg,$(STGLIBS)) $(LIB_THREAD) $(LIBICONV)
ifeq ($(OS),linux)
LIBS += -ldl
else
LIBS += -lintl \
- -lc \
- -liconv
+ -lc
endif
SEARCH_DIRS = -I ../../include
OS=unknown
sys=`uname -s`
-release=`uname -r | cut -b1`
+release=`uname -r`
+major=`printf "%s" "$release" | cut -d. -f1`
BUILD_DIR=`pwd`
CONFFILE="../../Makefile.conf"
PREFIX="/"
DIR_MODE=0755
OWNER=root
-if [ -z $1 ]
+if [ "$1" = "debug" ]
then
- MAKEOPTS="-j1"
- DEBUG="no"
+ DEFS="$DEFS -DDEBUG"
+ MAKEOPTS="$MAKEOPTS -j1"
+ CFLAGS="$CFLAGS -ggdb3 -W -Wall -Wextra"
+ CXXFLAGS="$CXXFLAGS -ggdb3 -W -Wall -Wextra"
+ DEBUG="yes"
else
- if [ "$1" = "debug" ]
- then
- DEFS="-DDEBUG"
- MAKEOPTS="-j1"
- CFLAGS="$CFLAGS -ggdb3 -W -Wall"
- CXXFLAGS="$CXXFLAGS -ggdb3 -W -Wall"
- DEBUG="yes"
- else
- MAKEOPTS="-j1"
- DEBUG="no"
- fi
+ DEFS="$DEFS -DNDEBUG"
+ DEBUG="no"
fi
CFLAGS="$CFLAGS -I/usr/local/include"
if [ "$sys" = "Linux" ]
then
OS=linux
- release=""
MAKE="make"
fi
if [ "$sys" = "FreeBSD" ]
then
- case $release in
+ case $major in
4) OS=bsd;;
5) OS=bsd5;;
6) OS=bsd5;;
7) OS=bsd7;;
- 8) OS=bsd7;;
- 9) OS=bsd7;;
- *) OS=unknown;;
+ *) OS=bsd7;;
esac
MAKE="gmake"
fi
+if [ "$sys" = "Darwin" ]
+then
+ OS=darwin
+ ETC_DIR="./inst/freebsd/etc/stargazer"
+ MAKE="gmake"
+ CFLAGS="$CFLAGS -I/opt/local/include"
+ CXXFLAGS="$CFLAGS -I/opt/local/include"
+ LDFLAGS="$LDFLAGS -L/opt/local/lib"
+fi
+
if [ "$OS" = "unknown" ]
then
printf "################################################################################\n"
- printf "# Sorry, but sgauthstress currently supported by Linux, FreeBSD 4.x-8.x #\n"
+ printf "# Sorry, but sgauthstress is currently supported by Linux, FreeBSD and Darwin. #\n"
printf "################################################################################\n"
exit 1
fi
STG_LIBS="logger.lib
crypto.lib
- common.lib
+ common.lib
conffiles.lib
dotconfpp.lib"
DEFS="$DEFS -DLINUX"
LIB_THREAD=-lpthread
else
+ LIBICONV="-liconv"
if [ "$OS" = "bsd" ]
then
DEFS="$DEFS -DFREE_BSD"
fi
fi
rm -f fake
-rm -f build_check.c
-printf "Checking for -lfbclient... "
-$CC $CFLAGS $LDFLAGS build_check.c -lfbclient $LIB_THREAD -o fake > /dev/null 2> /dev/null
+printf "Checking for iconv 2nd argument... "
+printf "#include <iconv.h>\nint main(){ const char** src = 0; iconv(0, src, 0, 0, 0); }\n" > build_check.c
+$CC $CFLAGS $LDFLAGS -Werror build_check.c $LIBICONV -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
- CHECK_FBCLIENT=no
+ printf "non-const\n"
+else
+ DEFS="$DEFS -DCONST_ICONV"
+ printf "const\n"
+fi
+rm -f fake
+
+rm -f build_check.c
+
+printf "Checking for fb_config... "
+FB_VERSION=`fb_config --version 2> /dev/null`
+if [ "$?" != "0" ]
+then
printf "no\n"
+ printf "Checking for -lfbclient... "
+ printf "int main() { return 0; }\n" > build_check.c
+ $CC $CFLAGS $LDFLAGS build_check.c -lfbclient $LIB_THREAD -o fake > /dev/null 2> /dev/null
+ if [ $? != 0 ]
+ then
+ CHECK_FBCLIENT=no
+ printf "no\n"
+ else
+ FB_CFLAGS=""
+ FB_LDFLAGS="-lfbclient"
+ CHECK_FBCLIENT=yes
+ printf "yes\n"
+ fi
+ rm -f fake
else
- CHECK_FBCLIENT=yes
printf "yes\n"
+ printf "Checking for fb_config --cflags... "
+ FB_CFLAGS=`fb_config --cflags`
+ if [ "$?" != "0" ]
+ then
+ CHECK_FBCLIENT=no
+ printf "no\n"
+ else
+ printf "[$FB_CFLAGS]\n"
+ printf "Checking for fb_config --libs "
+ FB_LDFLAGS=`fb_config --libs`
+ if [ "$?" != "0" ]
+ then
+ CHECK_FBCLIENT=no
+ printf "no\n"
+ else
+ CHECK_FBCLIENT=yes
+ printf "[$FB_LDFLAGS]\n"
+ fi
+ fi
fi
-rm -f fake
printf "Checking for mysql_config... "
MYSQL_VERSION=`mysql_config --version 2> /dev/null`
fi
printf "Checking for pg_config... "
+printf "#include <libpq-fe.h>\nint main() { return 0; }\n" > build_check.c
PG_VERSION=`pg_config --version 2> /dev/null`
if [ $? != 0 ]
then
else
printf "yes\n";
printf "Checking for pg_config --includedir... "
- PG_CFLAGS=`pg_config --includedir 2> /dev/null`
+ PG_CFLAGS="-I"`pg_config --includedir 2> /dev/null`
if [ $? != 0 ]
then
CHECK_PQ=no
else
printf "[$PG_CFLAGS]\n"
printf "Checking for pg_config --libdir... "
- PG_LDFLAGS=`pg_config --libdir 2> /dev/null`
+ PG_LDFLAGS="-L"`pg_config --libdir 2> /dev/null`
if [ $? != 0 ]
then
CHECK_PQ=no
printf "DIR_MOD=\$(DIR_BUILD)/../stargazer/modules\n" >> $CONFFILE
printf "DIR_PLUGINS=\$(DIR_BUILD)/../stargazer/plugins\n" >> $CONFFILE
printf "ARCH=$ARCH\n" >> $CONFFILE
+printf "CHECK_FBCLIENT=$CHECK_FBCLIENT\n" >> $CONFFILE
+if [ "$CHECK_FBCLIENT" = "yes" ]
+then
+ printf "FB_CFLAGS=$FB_CFLAGS\n" >> $CONFFILE
+ printf "FB_LDFLAGS=$FB_LDFLAGS\n" >> $CONFFILE
+fi
+printf "CHECK_MYSQLCLIENT=$CHECK_MYSQLCLIENT\n" >> $CONFFILE
+if [ "$CHECK_MYSQLCLIENT" = "yes" ]
+then
+ printf "MYSQL_CFLAGS=$MYSQL_CFLAGS\n" >> $CONFFILE
+ printf "MYSQL_LDFLAGS=$MYSQL_LDFLAGS\n" >> $CONFFILE
+fi
+printf "CHECK_PQ=$CHECK_PQ\n" >> $CONFFILE
+if [ "$CHECK_PQ" = "yes" ]
+then
+ printf "PG_CFLAGS=$PG_CFLAGS\n" >> $CONFFILE
+ printf "PG_LDFLAGS=$PG_LDFLAGS\n" >> $CONFFILE
+fi
printf "DEFS=$DEFS\n" >> $CONFFILE
printf "STG_LIBS=" >> $CONFFILE
for lib in $STG_LIBS
done
printf "\n" >> $CONFFILE
printf "LIB_THREAD=$LIB_THREAD\n" >> $CONFFILE
+printf "CC=$CC\n" >> $CONFFILE
+printf "CXX=$CXX\n" >> $CONFFILE
printf "CXXFLAGS=$CXXFLAGS\n" >> $CONFFILE
printf "CFLAGS=$CFLAGS\n" >> $CONFFILE
printf "LDFLAGS=$LDFLAGS\n" >> $CONFFILE
+printf "LIBICONV=$LIBICONV\n" >> $CONFFILE
printf "PREFIX=$PREFIX\n" >> $CONFFILE
printf "BIN_MODE=$BIN_MODE\n" >> $CONFFILE
printf "DATA_MODE=$DATA_MODE\n" >> $CONFFILE
install-bin:
ifeq ($(DEBUG), yes)
- install -D -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/bin/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/sbin
+ install -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/sbin/$(PROG)
else
- install -D -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/bin/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/sbin
+ install -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/sbin/$(PROG)
endif
$(MAKE) -C $(DIR_LIBSRC) install
+Compiling:
+> ./build
+
+
OS=unknown
sys=`uname -s`
-release=`uname -r | cut -b1`
+release=`uname -r`
+major=`printf "%s" "$release" | cut -d. -f1`
BUILD_DIR=`pwd`
CONFFILE="../../Makefile.conf"
PREFIX="/"
if [ "$sys" = "Linux" ]
then
OS=linux
- release=""
MAKE="make"
fi
if [ "$sys" = "FreeBSD" ]
then
- case $release in
+ case $major in
4) OS=bsd;;
5) OS=bsd5;;
6) OS=bsd5;;
if [ "$OS" = "unknown" ]
then
printf "#############################################################################\n"
- printf "# Sorry, but sgconf currently supported by Linux, FreeBSD 4.x, 5.x, 6.x #\n"
+ printf "# Sorry, but sgconf is currently supported by Linux, FreeBSD and Darwin. #\n"
printf "#############################################################################\n"
exit 1
fi
DEFS="$DEFS -DLINUX"
LIB_THREAD=-lpthread
else
+ LIBICONV="-liconv"
if [ "$OS" = "bsd" ]
then
DEFS="$DEFS -DFREE_BSD"
then
DEFS="$DEFS -DDARWIN"
LIB_THREAD=-lpthread
+ LIBICONV=""
else
LIB_THREAD=-lc_r
fi
printf "yes\n"
fi
rm -f fake
+
+printf "Checking for iconv 2nd argument... "
+printf "#include <iconv.h>\nint main(){ const char** src = 0; iconv(0, src, 0, 0, 0); }\n" > build_check.c
+$CC $CFLAGS $LDFLAGS -Werror build_check.c $LIBICONV -o fake > /dev/null 2> /dev/null
+if [ $? != 0 ]
+then
+ printf "non-const\n"
+else
+ DEFS="$DEFS -DCONST_ICONV"
+ printf "const\n"
+fi
+rm -f fake
+
rm -f build_check.c
if [ "$CHECK_EXPAT" != "yes" ]
done
printf "\n" >> $CONFFILE
printf "LIB_THREAD=$LIB_THREAD\n" >> $CONFFILE
+printf "CC=$CC\n" >> $CONFFILE
+printf "CXX=$CXX\n" >> $CONFFILE
printf "CXXFLAGS=$CXXFLAGS\n" >> $CONFFILE
printf "CFLAGS=$CFLAGS\n" >> $CONFFILE
printf "LDFLAGS=$LDFLAGS\n" >> $CONFFILE
+printf "LIBICONV=$LIBICONV\n" >> $CONFFILE
printf "PREFIX=$PREFIX\n" >> $CONFFILE
printf "BIN_MODE=$BIN_MODE\n" >> $CONFFILE
printf "DATA_MODE=$DATA_MODE\n" >> $CONFFILE
STGLIBS_INCS = $(addprefix -I ../../stglibs/,$(addsuffix .lib/include,$(STGLIBS)))
STGLIBS_LIBS = $(addprefix -L ../../stglibs/,$(addsuffix .lib,$(STGLIBS)))
-LIBS += $(addprefix -lstg,$(STGLIBS)) -lexpat $(LIB_THREAD)
+LIBS += $(addprefix -lstg,$(STGLIBS)) -lexpat $(LIB_THREAD) $(LIBICONV)
ifeq ($(OS),linux)
else
-LIBS += -lc \
- -liconv
+LIBS += -lc
endif
SEARCH_DIRS = -I ../../include
install-bin:
ifeq ($(DEBUG), yes)
- install -D -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/bin/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/sbin
+ install -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/sbin/$(PROG)
else
- install -D -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/bin/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/sbin
+ install -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/sbin/$(PROG)
endif
$(MAKE) -C $(DIR_LIBSRC) install
OS=unknown
sys=`uname -s`
-release=`uname -r | cut -b1`
+release=`uname -r`
+major=`printf "%s" "$release" | cut -d. -f1`
BUILD_DIR=`pwd`
CONFFILE="../../Makefile.conf"
PREFIX="/"
if [ "$sys" = "Linux" ]
then
OS=linux
- release=""
MAKE="make"
fi
if [ "$sys" = "FreeBSD" ]
then
- case $release in
+ case $major in
4) OS=bsd;;
5) OS=bsd5;;
6) OS=bsd5;;
MAKE="gmake"
fi
+if [ "$sys" = "Darwin" ]
+then
+ OS=darwin
+ MAKE="gmake"
+fi
+
if [ "$OS" = "unknown" ]
then
printf "#############################################################################\n"
- printf "# Sorry, but sgconf currently supported by Linux, FreeBSD 4.x, 5.x, 6.x #\n"
+ printf "# Sorry, but sgconf_xml is currently supported by Linux, FreeBSD and Darwin.#\n"
printf "#############################################################################\n"
exit 1
fi
printf "#############################################################################\n"
-printf " Building sgconf for $sys $release\n"
+printf " Building sgconf_xml for $sys $release\n"
printf "#############################################################################\n"
STG_LIBS="conffiles.lib
DEFS="$DEFS -DLINUX"
LIB_THREAD=-lpthread
else
+ LIBICONV="-liconv"
if [ "$OS" = "bsd" ]
then
DEFS="$DEFS -DFREE_BSD"
printf "Checking for -lexpat... "
printf "int main() { return 0; }\n" > build_check.c
-$CC $CXXFLAGS $LDFLAGS build_check.c -lexpat -o fake > /dev/null 2> /dev/null
+$CC $CFLAGS $LDFLAGS build_check.c -lexpat -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_EXPAT=no
printf "yes\n"
fi
rm -f fake
+
+printf "Checking for iconv 2nd argument... "
+printf "#include <iconv.h>\nint main(){ const char** src = 0; iconv(0, src, 0, 0, 0); }\n" > build_check.c
+$CC $CFLAGS $LDFLAGS -Werror build_check.c $LIBICONV -o fake > /dev/null 2> /dev/null
+if [ $? != 0 ]
+then
+ printf "non-const\n"
+else
+ DEFS="$DEFS -DCONST_ICONV"
+ printf "const\n"
+fi
+rm -f fake
+
rm -f build_check.c
if [ "$CHECK_EXPAT" != "yes" ]
done
printf "\n" >> $CONFFILE
printf "LIB_THREAD=$LIB_THREAD\n" >> $CONFFILE
+printf "CC=$CC\n" >> $CONFFILE
+printf "CXX=$CXX\n" >> $CONFFILE
printf "CXXFLAGS=$CXXFLAGS\n" >> $CONFFILE
printf "CFLAGS=$CFLAGS\n" >> $CONFFILE
printf "LDFLAGS=$LDFLAGS\n" >> $CONFFILE
+printf "LIBICONV=$LIBICONV\n" >> $CONFFILE
printf "PREFIX=$PREFIX\n" >> $CONFFILE
printf "BIN_MODE=$BIN_MODE\n" >> $CONFFILE
printf "DATA_MODE=$DATA_MODE\n" >> $CONFFILE
printf "DIR_MODE=$DIR_MODE\n" >> $CONFFILE
printf "OWNER=$OWNER\n" >> $CONFFILE
-$MAKE $MAKEOPTS
-
+if [ "$1" != "debug" ]
+then
+ $MAKE $MAKEOPTS
+else
+ printf "\n\n\nDebug build. Type $MAKE explicitly\n"
+fi
char str[10024];
r[0] = 0;
-if (!req->strReq.res_empty())
+if (!req->strReq.empty())
{
sprintf(str, "%s", req->strReq.const_data().c_str());
strcat(r, str);
NETTRANSACT nt;
nt.SetServer(r->server.const_data().c_str());
-nt.SetServerPort(r->port);
+nt.SetServerPort(r->port.const_data());
nt.SetLogin(r->admLogin.const_data().c_str());
nt.SetPassword(r->admPasswd.const_data().c_str());
nt.SetRxCallback(NULL, ParseReply);
//-----------------------------------------------------------------------------
int CheckParameters(REQUEST * req)
{
-int a = !req->admLogin.res_empty()
- && !req->admPasswd.res_empty()
- && !req->server.res_empty()
- && !req->port.res_empty();
+int a = !req->admLogin.empty()
+ && !req->admPasswd.empty()
+ && !req->server.empty()
+ && !req->port.empty();
-int b = !req->fileReq.res_empty()
- || !req->strReq.res_empty();
+int b = !req->fileReq.empty()
+ || !req->strReq.empty();
return a && b;
}
./settings_impl.cpp
STGLIBS = dotconfpp \
- conffiles \
- logger \
- crypto \
+ conffiles \
+ logger \
+ crypto \
common
STGLIBS_INCS = $(addprefix -I ../../stglibs/,$(addsuffix .lib/include,$(STGLIBS)))
STGLIBS_LIBS = $(addprefix -L ../../stglibs/,$(addsuffix .lib,$(STGLIBS)))
-LIBS += $(addprefix -lstg,$(STGLIBS)) $(LIB_THREAD)
+LIBS += $(addprefix -lstg,$(STGLIBS)) $(LIB_THREAD) $(LIBICONV)
ifeq ($(OS),linux)
LIBS += -ldl
else
-LIBS += -lc -liconv
+LIBS += -lc
endif
SEARCH_DIRS = -I ../../include
libs:
$(MAKE) -C $(DIR_LIBSRC)
-plugins: libs
+plugins: libs
$(MAKE) -C $(DIR_PLUGINS)
$(PROG): $(OBJS)
install-bin:
ifeq ($(DEBUG), yes)
- install -D -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/bin/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/bin
+ install -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/bin/$(PROG)
else
- install -D -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/bin/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/bin
+ install -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/bin/$(PROG)
endif
$(MAKE) -C $(DIR_PLUGINS) install
OS=unknown
sys=`uname -s`
-release=`uname -r | cut -b1`
+release=`uname -r`
+major=`printf "%s" "$release" | cut -d. -f1`
BUILD_DIR=`pwd`
CONFFILE="../../Makefile.conf"
PREFIX="/"
if [ "$sys" = "Linux" ]
then
OS=linux
- release=""
MAKE="make"
fi
if [ "$sys" = "FreeBSD" ]
then
- case $release in
+ case $major in
4) OS=bsd;;
5) OS=bsd5;;
6) OS=bsd5;;
if [ "$OS" = "unknown" ]
then
printf "#############################################################################\n"
- printf "# Sorry, but sgconv currently supported by Linux, FreeBSD 4.x, 5.x, 6.x #\n"
+ printf "# Sorry, but sgconv is currently supported by Linux, FreeBSD and Darwin. #\n"
printf "#############################################################################\n"
exit 1
fi
printf "#############################################################################\n"
STG_LIBS="logger.lib
- locker.lib
crypto.lib
common.lib
conffiles.lib
DEFS="$DEFS -DLINUX"
LIB_THREAD=-lpthread
else
+ LIBICONV="-liconv"
if [ "$OS" = "bsd" ]
then
DEFS="$DEFS -DFREE_BSD"
then
DEFS="$DEFS -DDARWIN"
LIB_THREAD=-lpthread
+ LIBICONV=""
else
LIB_THREAD=-lc_r
fi
fi
rm -f fake
-printf "Checking for -lfbclient... "
-$CC $CFLAGS $LDFLAGS build_check.c -lfbclient $LIB_THREAD -o fake > /dev/null 2> /dev/null
+printf "Checking for iconv 2nd argument... "
+printf "#include <iconv.h>\nint main(){ const char** src = 0; iconv(0, src, 0, 0, 0); }\n" > build_check.c
+$CC $CFLAGS $LDFLAGS -Werror build_check.c $LIBICONV -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
- CHECK_FBCLIENT=no
+ printf "non-const\n"
+else
+ DEFS="$DEFS -DCONST_ICONV"
+ printf "const\n"
+fi
+rm -f fake
+
+printf "Checking for fb_config... "
+FB_VERSION=`fb_config --version 2> /dev/null`
+if [ "$?" != "0" ]
+then
printf "no\n"
+ printf "Checking for -lfbclient... "
+ printf "int main() { return 0; }\n" > build_check.c
+ $CC $CFLAGS $LDFLAGS build_check.c -lfbclient $LIB_THREAD -o fake > /dev/null 2> /dev/null
+ if [ $? != 0 ]
+ then
+ CHECK_FBCLIENT=no
+ printf "no\n"
+ else
+ FB_CFLAGS=""
+ FB_LDFLAGS="-lfbclient"
+ CHECK_FBCLIENT=yes
+ printf "yes\n"
+ fi
+ rm -f fake
else
- CHECK_FBCLIENT=yes
printf "yes\n"
+ printf "Checking for fb_config --cflags... "
+ FB_CFLAGS=`fb_config --cflags`
+ if [ "$?" != "0" ]
+ then
+ CHECK_FBCLIENT=no
+ printf "no\n"
+ else
+ printf "[$FB_CFLAGS]\n"
+ printf "Checking for fb_config --libs "
+ FB_LDFLAGS=`fb_config --libs`
+ if [ "$?" != "0" ]
+ then
+ CHECK_FBCLIENT=no
+ printf "no\n"
+ else
+ CHECK_FBCLIENT=yes
+ printf "[$FB_LDFLAGS]\n"
+ fi
+ fi
fi
-rm -f fake
printf "Checking for mysql_config... "
printf "#include <mysql.h>\nint main() { return 0; }\n" > build_check.c
else
printf "yes\n";
printf "Checking for pg_config --includedir... "
- PG_CFLAGS=`pg_config --includedir 2> /dev/null`
+ PG_CFLAGS="-I"`pg_config --includedir 2> /dev/null`
if [ $? != 0 ]
then
CHECK_PQ=no
else
printf "[$PG_CFLAGS]\n"
printf "Checking for pg_config --libdir... "
- PG_LDFLAGS=`pg_config --libdir 2> /dev/null`
+ PG_LDFLAGS="-L"`pg_config --libdir 2> /dev/null`
if [ $? != 0 ]
then
CHECK_PQ=no
printf "DIR_PLUGINS=\$(DIR_BUILD)/../stargazer/plugins\n" >> $CONFFILE
printf "ARCH=$ARCH\n" >> $CONFFILE
printf "CHECK_FBCLIENT=$CHECK_FBCLIENT\n" >> $CONFFILE
+if [ "$CHECK_FBCLIENT" = "yes" ]
+then
+ printf "FB_CFLAGS=$FB_CFLAGS\n" >> $CONFFILE
+ printf "FB_LDFLAGS=$FB_LDFLAGS\n" >> $CONFFILE
+fi
+printf "CHECK_MYSQLCLIENT=$CHECK_MYSQLCLIENT\n" >> $CONFFILE
+if [ "$CHECK_MYSQLCLIENT" = "yes" ]
+then
+ printf "MYSQL_CFLAGS=$MYSQL_CFLAGS\n" >> $CONFFILE
+ printf "MYSQL_LDFLAGS=$MYSQL_LDFLAGS\n" >> $CONFFILE
+fi
+printf "CHECK_PQ=$CHECK_PQ\n" >> $CONFFILE
+if [ "$CHECK_PQ" = "yes" ]
+then
+ printf "PG_CFLAGS=$PG_CFLAGS\n" >> $CONFFILE
+ printf "PG_LDFLAGS=$PG_LDFLAGS\n" >> $CONFFILE
+fi
printf "DEFS=$DEFS\n" >> $CONFFILE
printf "STG_LIBS=" >> $CONFFILE
for lib in $STG_LIBS
printf "$plugin " >> $CONFFILE
done
printf "\n" >> $CONFFILE
+printf "CC=$CC\n" >> $CONFFILE
+printf "CXX=$CXX\n" >> $CONFFILE
printf "CXXFLAGS=$CXXFLAGS\n" >> $CONFFILE
printf "CFLAGS=$CFLAGS\n" >> $CONFFILE
printf "LDFLAGS=$LDFLAGS\n" >> $CONFFILE
printf "LIB_THREAD=$LIB_THREAD\n" >> $CONFFILE
+printf "LIBICONV=$LIBICONV\n" >> $CONFFILE
printf "PREFIX=$PREFIX\n" >> $CONFFILE
printf "BIN_MODE=$BIN_MODE\n" >> $CONFFILE
printf "DATA_MODE=$DATA_MODE\n" >> $CONFFILE
STGLIBS_INCS = $(addprefix -I ../../stglibs/,$(addsuffix .lib/include,$(STGLIBS)))
STGLIBS_LIBS = $(addprefix -L ../../stglibs/,$(addsuffix .lib,$(STGLIBS)))
-LIBS += $(addprefix -lstg,$(STGLIBS)) $(LIB_THREAD)
+LIBS += $(addprefix -lstg,$(STGLIBS)) $(LIB_THREAD) $(LIBICONV)
ifeq ($(OS),linux)
LIBS += -ldl
else
-LIBS += -lc -liconv
+LIBS += -lc
endif
SEARCH_DIRS = -I ../../include
install-bin: $(PROG)
ifeq ($(DEBUG), yes)
- install -D -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/sbin/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/sbin
+ install -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/sbin/$(PROG)
else
- install -D -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/sbin/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/sbin
+ install -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/sbin/$(PROG)
endif
$(MAKE) -C $(DIR_INCLUDE) install
$(MAKE) -C $(DIR_LIBSRC) install
OS=unknown
sys=`uname -s`
-release=`uname -r | cut -b1`
+release=`uname -r`
+major=`printf "%s" "$release" | cut -d. -f1`
BUILD_DIR=`pwd`
CONFFILE="../../Makefile.conf"
VAR_DIR="./inst/var/stargazer"
if [ "$sys" = "Linux" ]
then
OS=linux
- release=""
ETC_DIR="./inst/linux/etc/stargazer"
MAKE="make"
fi
if [ "$sys" = "FreeBSD" ]
then
- case $release in
+ case $major in
4) OS=bsd;;
5) OS=bsd5;;
6) OS=bsd5;;
if [ "$OS" = "unknown" ]
then
printf "#############################################################################\n"
- printf "# Sorry, but stargazer currently supported by Linux, FreeBSD 4.x, 5.x, 6.x #\n"
+ printf "# Sorry, but stargazer is currently supported by Linux, FreeBSD and Darwin. #\n"
printf "#############################################################################\n"
exit 1
fi
capture/ether_linux"
LIB_THREAD=-lpthread
else
+ LIBICONV="-liconv"
if [ "$OS" = "bsd" ]
then
DEFS="$DEFS -DFREE_BSD"
then
DEFS="$DEFS -DDARWIN"
LIB_THREAD=-lpthread
+ LIBICONV=""
else
LIB_THREAD=-lc_r
fi
printf "Checking for -lexpat... "
printf "#include <expat.h>\nint main() { return 0; }\n" > build_check.c
-$CXX $CXXFLAGS $LDFLAGS build_check.c -lexpat -o fake > /dev/null 2> /dev/null
+$CC $CFLAGS $LDFLAGS build_check.c -lexpat -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_EXPAT=no
fi
rm -f fake
-printf "Checking for -lfbclient... "
-printf "int main() { return 0; }\n" > build_check.c
-$CXX $CXXFLAGS $LDFLAGS build_check.c -lfbclient $LIB_THREAD -o fake > /dev/null 2> /dev/null
+printf "Checking for iconv 2nd argument... "
+printf "#include <iconv.h>\nint main(){ const char** src = 0; iconv(0, src, 0, 0, 0); }\n" > build_check.c
+$CC $CFLAGS $LDFLAGS -Werror build_check.c $LIBICONV -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
- CHECK_FBCLIENT=no
+ printf "non-const\n"
+else
+ DEFS="$DEFS -DCONST_ICONV"
+ printf "const\n"
+fi
+rm -f fake
+
+printf "Checking for fb_config... "
+FB_VERSION=`fb_config --version 2> /dev/null`
+if [ "$?" != "0" ]
+then
printf "no\n"
+ printf "Checking for -lfbclient... "
+ printf "int main() { return 0; }\n" > build_check.c
+ $CC $CFLAGS $LDFLAGS build_check.c -lfbclient $LIB_THREAD -o fake > /dev/null 2> /dev/null
+ if [ $? != 0 ]
+ then
+ CHECK_FBCLIENT=no
+ printf "no\n"
+ else
+ FB_CFLAGS=""
+ FB_LDFLAGS="-lfbclient"
+ CHECK_FBCLIENT=yes
+ printf "yes\n"
+ fi
+ rm -f fake
else
- CHECK_FBCLIENT=yes
printf "yes\n"
+ printf "Checking for fb_config --cflags... "
+ FB_CFLAGS=`fb_config --cflags`
+ if [ "$?" != "0" ]
+ then
+ CHECK_FBCLIENT=no
+ printf "no\n"
+ else
+ printf "[$FB_CFLAGS]\n"
+ printf "Checking for fb_config --libs "
+ FB_LDFLAGS=`fb_config --libs`
+ if [ "$?" != "0" ]
+ then
+ CHECK_FBCLIENT=no
+ printf "no\n"
+ else
+ CHECK_FBCLIENT=yes
+ printf "[$FB_LDFLAGS]\n"
+ fi
+ fi
fi
-rm -f fake
+
printf "Checking for mysql_config... "
printf "#include <mysql.h>\nint main() { return 0; }\n" > build_check.c
then
printf "no\n";
printf "Checking for -lmysqlclient... "
- $CXX $CXXFLAGS $LDFLAGS build_check.c -lmysqlclient_r $LIB_THREAD -o fake > /dev/null 2> /dev/null
+ $CC $CFLAGS $LDFLAGS build_check.c -lmysqlclient_r $LIB_THREAD -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_MYSQLCLIENT=no
printf "no\n"
else
CHECK_MYSQLCLIENT=yes
+ MYSQL_CFLAGS=""
+ MYSQL_LDFLAGS="-lmysqlclient_r"
printf "yes\n"
fi
rm -f fake
then
printf "no\n";
printf "Checking for -lpq... "
- $CXX $CXXFLAGS $LDFLAGS build_check.c -lpq $LIB_THREAD -o fake > /dev/null 2> /dev/null
+ $CC $CFLAGS $LDFLAGS build_check.c -lpq $LIB_THREAD -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_PQ=no
else
printf "yes\n";
printf "Checking for pg_config --includedir... "
- PG_CFLAGS=`pg_config --includedir 2> /dev/null`
+ PG_CFLAGS="-I"`pg_config --includedir 2> /dev/null`
if [ $? != 0 ]
then
CHECK_PQ=no
else
printf "[$PG_CFLAGS]\n"
printf "Checking for pg_config --libdir... "
- PG_LDFLAGS=`pg_config --libdir 2> /dev/null`
+ PG_LDFLAGS="-L"`pg_config --libdir 2> /dev/null`
if [ $? != 0 ]
then
CHECK_PQ=no
then
printf "no\n";
printf "Checking for -lxmlrpc... "
- $CXX $CXXFLAGS $LDFLAGS build_check.c -lxmlrpc $LIB_THREAD -o fake > /dev/null 2> /dev/null
+ $CC $CFLAGS $LDFLAGS build_check.c -lxmlrpc $LIB_THREAD -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_XMLRPC=no
printf "Checking for -lpcap... "
printf "#include <pcap.h>\nint main() { return 0; }\n" > build_check.c
-$CXX $CXXFLAGS $LDFLAGS build_check.c -lpcap -o fake > /dev/null 2> /dev/null
+$CC $CFLAGS $LDFLAGS build_check.c -lpcap -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_PCAP=no
rm -f fake
printf "Checking for -lnfnetlink... "
-printf "#include <linux/netfilter.h>\nint main() { return 0; }\n" > build_check.c
-$CXX $CXXFLAGS $LDFLAGS build_check.c -lnfnetlink -o fake > /dev/null 2> /dev/null
+printf "#include <stdint.h>\n#include <netinet/in.h>\n#include <linux/netfilter.h>\nint main() { return 0; }\n" > build_check.c
+$CC $CFLAGS $LDFLAGS build_check.c -lnfnetlink -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_NFNETLINK=no
printf "no\n"
else
CHECK_NFNETLINK=yes
+ NETLINK_LDFLAGS="-lnfnetlink"
printf "yes\n"
fi
rm -f fake
printf "Checking for -lnetfilter_queue... "
-printf "#include <libnetfilter_queue/libnetfilter_queue.h>\nint main() { return 0; }\n" > build_check.c
-$CXX $CXXFLAGS $LDFLAGS build_check.c -lnetfilter_queue -o fake > /dev/null 2> /dev/null
+printf "#include <stdint.h>\n#include <libnetfilter_queue/libnetfilter_queue.h>\nint main() { return 0; }\n" > build_check.c
+$CC $CFLAGS $LDFLAGS build_check.c -lnetfilter_queue -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_NFQ=no
printf "no\n"
else
CHECK_NFQ=yes
+ NFQ_LDFLAGS="-lnetfilter_queue"
printf "yes\n"
fi
rm -f fake
printf "#include <linux/types.h>\n" > build_check.c
printf "#include <linux/netfilter_ipv4/ip_queue.h>\n" >> build_check.c
printf "int main() { return 0; }\n" >> build_check.c
- $CXX $CXXFLAGS $LDFLAGS build_check.c -o fake > /dev/null 2> /dev/null
+ $CC $CFLAGS $LDFLAGS build_check.c -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_IP_QUEUE_H=no
then
PLUGINS="$PLUGINS
capture/nfqueue"
- NFQ_LIBS="-lnfnetlink -lnetfilter_queue"
fi
printf "OS=$OS\n" > $CONFFILE
printf "ARCH=$ARCH\n" >> $CONFFILE
printf "CHECK_EXPAT=$CHECK_EXPAT\n" >> $CONFFILE
printf "CHECK_FBCLIENT=$CHECK_FBCLIENT\n" >> $CONFFILE
+if [ "$CHECK_FBCLIENT" = "yes" ]
+then
+ printf "FB_CFLAGS=$FB_CFLAGS\n" >> $CONFFILE
+ printf "FB_LDFLAGS=$FB_LDFLAGS\n" >> $CONFFILE
+fi
printf "CHECK_MYSQLCLIENT=$CHECK_MYSQLCLIENT\n" >> $CONFFILE
+if [ "$CHECK_MYSQLCLIENT" = "yes" ]
+then
+ printf "MYSQL_CFLAGS=$MYSQL_CFLAGS\n" >> $CONFFILE
+ printf "MYSQL_LDFLAGS=$MYSQL_LDFLAGS\n" >> $CONFFILE
+fi
printf "CHECK_PQ=$CHECK_PQ\n" >> $CONFFILE
+if [ "$CHECK_PQ" = "yes" ]
+then
+ printf "PG_CFLAGS=$PG_CFLAGS\n" >> $CONFFILE
+ printf "PG_LDFLAGS=$PG_LDFLAGS\n" >> $CONFFILE
+fi
printf "CHECK_XMLRPC=$CHECK_XMLRPC\n" >> $CONFFILE
+if [ "$CHECK_XMLRPC" = "yes" ]
+then
+ printf "XMLRPC_CFLAGS=$XMLRPC_CFLAGS\n" >> $CONFFILE
+ printf "XMLRPC_LDFLAGS=$XMLRPC_LDFLAGS\n" >> $CONFFILE
+fi
printf "CHECK_PCAP=$CHECK_PCAP\n" >> $CONFFILE
printf "CHECK_NFNETLINK=$CHECK_NFNETLINK\n" >> $CONFFILE
+if [ "$CHECK_NFNETLINK" = "yes" ]
+then
+ printf "NETLINK_LDFLAGS=$NETLINK_LDFLAGS\n" >> $CONFFILE
+fi
printf "CHECK_NFQ=$CHECK_NFQ\n" >> $CONFFILE
+if [ "$CHECK_NFQ" = "yes" ]
+then
+ printf "NFQ_LDFLAGS=$NFQ_LDFLAGS\n" >> $CONFFILE
+fi
printf "DEFS=$DEFS\n" >> $CONFFILE
-printf "NFQ_LIBS=$NFQ_LIBS\n" >> $CONFFILE
printf "STG_LIBS=" >> $CONFFILE
for lib in $STG_LIBS
do
printf "$plugin " >> $CONFFILE
done
printf "\n" >> $CONFFILE
+printf "CC=$CC\n" >> $CONFFILE
+printf "CXX=$CXX\n" >> $CONFFILE
printf "CXXFLAGS=$CXXFLAGS\n" >> $CONFFILE
printf "CFLAGS=$CFLAGS\n" >> $CONFFILE
printf "LDFLAGS=$LDFLAGS\n" >> $CONFFILE
printf "LIB_THREAD=$LIB_THREAD\n" >> $CONFFILE
+printf "LIBICONV=$LIBICONV\n" >> $CONFFILE
printf "PREFIX=$PREFIX\n" >> $CONFFILE
printf "BIN_MODE=$BIN_MODE\n" >> $CONFFILE
printf "DATA_MODE=$DATA_MODE\n" >> $CONFFILE
PIDFile pidFile(settings.GetPIDFileName());
+struct sigaction sa;
+memset(&sa, 0, sizeof(sa));
+sa.sa_handler = SIG_DFL;
+sigaction(SIGHUP, &sa, NULL); // Apparently FreeBSD ignores SIGHUP by default when launched from rc.d at bot time.
+
sigset_t signalSet;
sigfillset(&signalSet);
pthread_sigmask(SIG_BLOCK, &signalSet, NULL);
switch (sig)
{
case SIGHUP:
+ {
+ SETTINGS_IMPL newSettings(settings);
+ if (newSettings.ReadSettings())
+ WriteServLog("ReadSettings error. %s", newSettings.GetStrError().c_str());
+ else
+ settings = newSettings;
+ WriteServLog.SetLogFileName(settings.GetLogFileName());
traffCnt.Reload();
- manager.reload();
+ manager.reload(settings);
+ }
break;
case SIGTERM:
running = false;
WriteServLog("+++++++++++++++++++++++++++++++++++++++++++++");
+manager.stop();
+
if (loop.Stop())
WriteServLog("Event loop not stopped.");
const std::vector<MODULE_SETTINGS> & modSettings(settings.GetModulesSettings());
for (size_t i = 0; i < modSettings.size(); i++)
{
- std::string modulePath = basePath + "/mod_" + modSettings[i].moduleName + ".so";
+ std::string moduleName = modSettings[i].moduleName;
+ std::string modulePath = basePath + "/mod_" + moduleName + ".so";
printfd(__FILE__, "Module: %s\n", modulePath.c_str());
try
{
m_modules.push_back(
- new PLUGIN_RUNNER(modulePath, modSettings[i], admins, tariffs,
+ new PLUGIN_RUNNER(modulePath, moduleName, modSettings[i], admins, tariffs,
users, services, corporations, traffcounter,
store, settings)
);
}
PluginManager::~PluginManager()
+{
+ stop();
+ for (size_t i = 0; i < m_modules.size(); ++i)
+ delete m_modules[i];
+}
+
+void PluginManager::reload(const SETTINGS_IMPL& settings)
+{
+ const std::vector<MODULE_SETTINGS> & modSettings(settings.GetModulesSettings());
+ for (size_t i = 0; i < m_modules.size(); ++i)
+ {
+ for (size_t j = 0; j < modSettings.size(); j++)
+ {
+ if (modSettings[j].moduleName == m_modules[i]->GetName())
+ {
+ PLUGIN & plugin = m_modules[i]->GetPlugin();
+ if (m_modules[i]->Reload(modSettings[j]))
+ {
+ m_log("Error reloading module '%s': '%s'", plugin.GetVersion().c_str(),
+ plugin.GetStrError().c_str());
+ printfd(__FILE__, "Error reloading module '%s': '%s'\n", plugin.GetVersion().c_str(),
+ plugin.GetStrError().c_str());
+ }
+ break;
+ }
+ }
+ }
+}
+
+void PluginManager::stop()
{
std::sort(m_modules.begin(), m_modules.end(), StopModCmp);
for (size_t i = 0; i < m_modules.size(); ++i)
{
+ if (!m_modules[i]->IsRunning())
+ continue;
PLUGIN & plugin = m_modules[i]->GetPlugin();
if (m_modules[i]->Stop())
{
m_log("Failed to stop module '%s': '%s'", plugin.GetVersion().c_str(),
plugin.GetStrError().c_str());
printfd(__FILE__, "Failed to stop module '%s': '%s'\n", plugin.GetVersion().c_str(),
- plugin.GetStrError().c_str());
+ plugin.GetStrError().c_str());
}
else
{
printfd(__FILE__, "Module '%s' stopped successfully.\n", plugin.GetVersion().c_str());
}
}
- for (size_t i = 0; i < m_modules.size(); ++i)
- delete m_modules[i];
-}
-
-void PluginManager::reload()
-{
- for (size_t i = 0; i < m_modules.size(); ++i)
- {
- PLUGIN & plugin = m_modules[i]->GetPlugin();
- if (m_modules[i]->Reload())
- {
- m_log("Error reloading module '%s': '%s'", plugin.GetVersion().c_str(),
- plugin.GetStrError().c_str());
- printfd(__FILE__, "Error reloading module '%s': '%s'\n", plugin.GetVersion().c_str(),
- plugin.GetStrError().c_str());
- }
- }
}
USERS_IMPL& users, TRAFFCOUNTER_IMPL& traffcounter);
~PluginManager();
- void reload();
+ void reload(const SETTINGS_IMPL& settings);
+ void stop();
private:
std::vector<PLUGIN_RUNNER*> m_modules;
//-----------------------------------------------------------------------------
PLUGIN_RUNNER::PLUGIN_RUNNER(const std::string & fileName,
+ const std::string & name,
const MODULE_SETTINGS & ms,
ADMINS & admins,
TARIFFS & tariffs,
STORE & store,
const SETTINGS & settings)
: pluginFileName(fileName),
+ pluginName(name),
libHandle(NULL),
m_plugin(Load(ms, admins, tariffs, users, services, corporations,
traffcounter, store, settings))
return res;
}
//-----------------------------------------------------------------------------
-int PLUGIN_RUNNER::Reload()
+int PLUGIN_RUNNER::Reload(const MODULE_SETTINGS & ms)
{
-int res = m_plugin.Reload();
+int res = m_plugin.Reload(ms);
errorStr = m_plugin.GetStrError();
return res;
}
};
PLUGIN_RUNNER(const std::string & pluginFileName,
+ const std::string & pluginName,
const MODULE_SETTINGS & ms,
ADMINS & admins,
TARIFFS & tariffs,
int Start();
int Stop();
- int Reload();
+ int Reload(const MODULE_SETTINGS & ms);
int Restart();
bool IsRunning() { return m_plugin.IsRunning(); }
const std::string & GetStrError() const { return errorStr; }
PLUGIN & GetPlugin() { return m_plugin; }
const std::string & GetFileName() const { return pluginFileName; }
+ const std::string & GetName() const { return pluginName; }
uint16_t GetStartPosition() const { return m_plugin.GetStartPosition(); }
uint16_t GetStopPosition() const { return m_plugin.GetStopPosition(); }
const SETTINGS & settings);
std::string pluginFileName;
+ std::string pluginName;
void * libHandle;
PLUGIN & m_plugin;
STGLIBS_LIBS = $(addprefix -lstg,$(STGLIBS))
-CXXFLAGS += -fPIC $(STGLIBS_INCS)
-CFLAGS += -fPIC $(STGLIBS_INCS)
+CXXFLAGS += -fPIC $(DEFS) $(SEARCH_DIRS) $(STGLIBS_INCS)
+CFLAGS += -fPIC $(DEFS) $(SEARCH_DIRS) $(STGLIBS_INCS)
ifneq ($(OS),darwin)
LDFLAGS += -shared -Wl,-rpath,$(PREFIX)/usr/lib/stg
all: $(PROG)
$(PROG): $(OBJS)
- $(CXX) $^ $(STGLIBS_PATHS) $(STGLIBS_LIBS) $(LIBS) $(LDFLAGS) -o $(PROG)
+ $(CXX) $^ $(LDFLAGS) $(STGLIBS_PATHS) $(STGLIBS_LIBS) $(LIBS) -o $(PROG)
$(LN) -fs "`pwd`/$(PROG)" $(DIR_MOD)/$(PROG)
clean:
install: $(PROG)
mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/lib/stg
ifeq ($(DEBUG), yes)
- install -D -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/lib/stg/$(PROG)
+ install -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/lib/stg/$(PROG)
else
- install -D -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/lib/stg/$(PROG)
+ install -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/lib/stg/$(PROG)
endif
uninstall:
}
//-----------------------------------------------------------------------------
AUTH_AO::AUTH_AO()
- : errorStr(),
- users(NULL),
- usersList(),
+ : users(NULL),
isRunning(false),
- settings(),
- BeforeChgAONotifierList(),
- AfterChgAONotifierList(),
- BeforeChgIPNotifierList(),
- AfterChgIPNotifierList(),
onAddUserNotifier(*this),
onDelUserNotifier(*this),
logger(GetPluginLogger(GetStgLogger(), "auth_ao"))
int Start();
int Stop();
- int Reload() { return 0; }
+ int Reload(const MODULE_SETTINGS & /*ms*/) { return 0; }
bool IsRunning() { return isRunning; }
void SetSettings(const MODULE_SETTINGS &) {}
int ParseSettings() { return 0; }
///////////////////////////
pv.param = "Port";
pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'Port\' not found.";
printfd(__FILE__, "Parameter 'Port' not found\n");
///////////////////////////
pv.param = "UserDelay";
pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'UserDelay\' not found.";
printfd(__FILE__, "Parameter 'UserDelay' not found\n");
///////////////////////////
pv.param = "UserTimeout";
pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'UserTimeout\' not found.";
printfd(__FILE__, "Parameter 'UserTimeout' not found\n");
///////////////////////////
pv.param = "LogProtocolErrors";
pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
logProtocolErrors = false;
else if (ParseYesNo(pvi->value[0], &logProtocolErrors))
{
int n = 0;
pv.param = "FreeMb";
pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'FreeMb\' not found.";
printfd(__FILE__, "Parameter 'FreeMb' not found\n");
#ifdef IA_PHASE_DEBUG
IA_PHASE::IA_PHASE()
: phase(1),
- phaseTime(),
flog(NULL)
{
gettimeofday(&phaseTime, NULL);
}
#else
IA_PHASE::IA_PHASE()
- : phase(1),
- phaseTime()
+ : phase(1)
{
gettimeofday(&phaseTime, NULL);
}
return ret;
}
//-----------------------------------------------------------------------------
+int AUTH_IA::Reload(const MODULE_SETTINGS & ms)
+{
+AUTH_IA_SETTINGS newIaSettings;
+if (newIaSettings.ParseSettings(ms))
+ {
+ printfd(__FILE__, "AUTH_IA::Reload() - Failed to reload InetAccess.\n");
+ logger("AUTH_IA: Cannot reload InetAccess. Errors found.");
+ return -1;
+ }
+
+printfd(__FILE__, "AUTH_IA::Reload() - Reloaded InetAccess successfully.\n");
+logger("AUTH_IA: Reloaded InetAccess successfully.");
+iaSettings = newIaSettings;
+return 0;
+}
+//-----------------------------------------------------------------------------
int AUTH_IA::PrepareNet()
{
struct sockaddr_in listenAddr;
int Start();
int Stop();
- int Reload() { return 0; }
+ int Reload(const MODULE_SETTINGS & ms);
bool IsRunning() { return isRunningRunTimeouter || isRunningRun; }
const std::string & GetStrError() const { return errorStr; }
int Start();
int Stop();
- int Reload() { return 0; }
+ int Reload(const MODULE_SETTINGS & /*ms*/) { return 0; }
bool IsRunning();
void SetSettings(const MODULE_SETTINGS & s);
int ParseSettings();
int Start();
int Stop();
- int Reload() { return 0; }
+ int Reload(const MODULE_SETTINGS & /*ms*/) { return 0; }
int ParseSettings() { return 0; }
bool IsRunning();
const std::string & GetStrError() const;
NF_CAP::NF_CAP()
: traffCnt(NULL),
- settings(),
- tidTCP(),
- tidUDP(),
runningTCP(false),
runningUDP(false),
stoppedTCP(true),
portU(0),
sockTCP(-1),
sockUDP(-1),
- errorStr(),
logger(GetPluginLogger(GetStgLogger(), "cap_nf"))
{
}
std::vector<PARAM_VALUE>::iterator it;
for (it = settings.moduleParams.begin(); it != settings.moduleParams.end(); ++it)
{
- if (it->param == "TCPPort")
+ if (it->param == "TCPPort" && !it->value.empty())
{
if (str2x(it->value[0], portT))
{
}
continue;
}
- if (it->param == "UDPPort")
+ if (it->param == "UDPPort" && !it->value.empty())
{
if (str2x(it->value[0], portU))
{
int Start();
int Stop();
- int Reload() { return 0; }
+ int Reload(const MODULE_SETTINGS & /*ms*/) { return 0; }
bool IsRunning() { return runningTCP || runningUDP; }
const std::string & GetStrError() const { return errorStr; }
std::string GetVersion() const { return VERSION; }
}
//-----------------------------------------------------------------------------
DIVERT_CAP::DIVERT_CAP()
- : settings(),
- port(0),
+ : port(0),
disableForwarding(false),
- errorStr(),
- thread(),
nonstop(false),
isRunning(false),
traffCnt(NULL),
pv.param = "Port";
pvi = std::find(settings.moduleParams.begin(), settings.moduleParams.end(), pv);
-if (pvi == settings.moduleParams.end())
+if (pvi == settings.moduleParams.end() || pvi->value.empty())
{
p = 15701;
}
bool d = false;
pv.param = "DisableForwarding";
pvi = std::find(settings.moduleParams.begin(), settings.moduleParams.end(), pv);
-if (pvi == settings.moduleParams.end())
+if (pvi == settings.moduleParams.end() || pvi->value.empty())
{
disableForwarding = false;
}
int Start();
int Stop();
- int Reload() { return 0; }
+ int Reload(const MODULE_SETTINGS & /*ms*/) { return 0; }
bool IsRunning() { return isRunning; }
void SetSettings(const MODULE_SETTINGS & s) { settings = s; }
}
//-----------------------------------------------------------------------------
BPF_CAP::BPF_CAP()
- : capSettings(),
- errorStr(),
- bpfData(),
- polld(),
- thread(),
- nonstop(false),
+ : nonstop(false),
isRunning(false),
capSock(-1),
- settings(),
traffCnt(NULL),
logger(GetPluginLogger(GetStgLogger(), "cap_bpf"))
{
int Start();
int Stop();
- int Reload() { return 0; }
+ int Reload(const MODULE_SETTINGS & /*ms*/) { return 0; }
bool IsRunning() { return isRunning; }
void SetSettings(const MODULE_SETTINGS & s) { settings = s; }
}
//-----------------------------------------------------------------------------
ETHER_CAP::ETHER_CAP()
- : errorStr(),
- thread(),
- nonstop(false),
+ : nonstop(false),
isRunning(false),
capSock(-1),
traffCnt(NULL),
int Start();
int Stop();
- int Reload() { return 0; }
+ int Reload(const MODULE_SETTINGS & /*ms*/) { return 0; }
bool IsRunning() { return isRunning; }
int ParseSettings() { return 0; }
//-----------------------------------------------------------------------------
IPQ_CAP::IPQ_CAP()
: ipq_h(NULL),
- errorStr(),
- thread(),
nonstop(false),
isRunning(false),
capSock(-1),
traffCnt(NULL),
- buf(),
logger(GetPluginLogger(GetStgLogger(), "cap_ipq"))
{
memset(buf, 0, BUFSIZE);
int Start();
int Stop();
- int Reload() { return 0; }
+ int Reload(const MODULE_SETTINGS & /*ms*/) { return 0; }
bool IsRunning() { return isRunning; }
int ParseSettings() { return 0; }
SRCS = ./nfqueue.cpp
-LIBS += $(NFQ_LIBS) $(LIB_THREAD)
+LIBS += $(NFQ_LDFLAGS) $(NETLINK_LDFLAGS) $(LIB_THREAD)
STGLIBS = common \
logger
}
//-----------------------------------------------------------------------------
NFQ_CAP::NFQ_CAP()
- : errorStr(),
- thread(),
- nonstop(false),
+ : nonstop(false),
isRunning(false),
queueNumber(0),
nfqHandle(NULL),
int NFQ_CAP::ParseSettings()
{
for (size_t i = 0; i < settings.moduleParams.size(); i++)
- if (settings.moduleParams[i].param == "queueNumber")
- if (str2x(settings.moduleParams[i].param, queueNumber) < 0)
+ if (settings.moduleParams[i].param == "queueNumber" && !settings.moduleParams[i].value.empty())
+ if (str2x(settings.moduleParams[i].value[0], queueNumber) < 0)
{
errorStr = "Queue number should be a number. Got: '" + settings.moduleParams[i].param + "'";
logger(errorStr);
int Start();
int Stop();
- int Reload() { return 0; }
+ int Reload(const MODULE_SETTINGS & /*ms*/) { return 0; }
bool IsRunning() { return isRunning; }
void SetSettings(const MODULE_SETTINGS & s) { settings = s; }
}
//-----------------------------------------------------------------------------
PCAP_CAP::PCAP_CAP()
- : errorStr(),
- thread(),
- nonstop(false),
+ : nonstop(false),
isRunning(false),
traffCnt(NULL),
logger(GetPluginLogger(GetStgLogger(), "pcap_cap"))
int Start();
int Stop();
- int Reload() { return 0; }
+ int Reload(const MODULE_SETTINGS & /*ms*/) { return 0; }
bool IsRunning() { return isRunning; }
void SetSettings(const MODULE_SETTINGS & s) { settings = s; }
./admins_methods.cpp \
./messages_methods.cpp
-XMLRPC_C_LIBS = $(shell xmlrpc-c-config c++2 abyss-server --libs)
-
-LIBS += $(XMLRPC_C_LIBS) \
- $(LIB_THREAD)
-
-ifneq ($(OS),linux)
-LIBS += -liconv
-endif
+LIBS += $(XMLRPC_LDFLAGS) \
+ $(LIB_THREAD) \
+ $(LIBICONV)
STGLIBS = common \
logger \
extern "C" PLUGIN * GetPlugin();
RPC_CONFIG_SETTINGS::RPC_CONFIG_SETTINGS()
- : errorStr(),
- port(0),
+ : port(0),
cookieTimeout(0)
{
}
pv.param = "Port";
std::vector<PARAM_VALUE>::const_iterator pvi;
pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'Port\' not found.";
printfd(__FILE__, "Parameter 'Port' not found\n");
pv.param = "CookieTimeout";
pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
cookieTimeout = 1800; // 30 * 60
}
}
RPC_CONFIG::RPC_CONFIG()
- : errorStr(),
- rpcConfigSettings(),
- users(NULL),
+ : users(NULL),
admins(NULL),
tariffs(NULL),
store(NULL),
- settings(),
fd(-1),
- rpcRegistry(),
rpcServer(NULL),
running(false),
stopped(true),
- tid(),
- cookies(),
dayFee(0),
- dirNames(),
logger(GetPluginLogger(GetStgLogger(), "conf_rpc"))
{
}
int Start();
int Stop();
- int Reload() { return 0; }
+ int Reload(const MODULE_SETTINGS & /*ms*/) { return 0; }
bool IsRunning() { return running && !stopped; }
const std::string & GetStrError() const { return errorStr; }
sigaddset(&sigmask, SIGUSR1);
sigaddset(&sigmask, SIGHUP);
pthread_sigmask(SIG_BLOCK, &sigmask, &oldmask);
-
m_listenSocket = socket(PF_INET, SOCK_STREAM, 0);
if (m_listenSocket < 0)
void SetAdmins(ADMINS * admins) { m_admins = admins; }
void SetTariffs(TARIFFS * tariffs) { m_tariffs = tariffs; }
void SetUsers(USERS * users) { m_users = users; }
+ void SetStore(STORE * store) { m_store = store; }
void SetServices(SERVICES * services) { m_services = services; }
void SetCorporations(CORPORATIONS * corporations) { m_corporations = corporations; }
- void SetStore(STORE * store) { m_store = store; }
int Prepare();
int Stop();
m_bufferSize(sizeof(m_header)),
m_stream(NULL),
m_logger(logger),
+#ifdef DUMPCRYPTO
+ m_dataState(false, *this),
+ m_dumper(endpoint())
+#else
m_dataState(false, *this)
+#endif
{
if (m_xmlParser == NULL)
throw Error("Failed to create XML parser.");
if (res < 0)
{
m_state = ERROR;
- Log(__FILE__, "Failed to read data from " + inet_ntostring(IP()) + ":" + x2str(Port()) + ". Reason: '" + strerror(errno) + "'");
+ Log(__FILE__, "Failed to read data from " + endpoint() + ". Reason: '" + strerror(errno) + "'");
return false;
}
if (res == 0 && m_state != DATA) // EOF is ok for data.
{
m_state = ERROR;
- Log(__FILE__, "Failed to read data from " + inet_ntostring(IP()) + ":" + x2str(Port()) + ". Unexpected EOF.");
+ Log(__FILE__, "Failed to read data from " + endpoint() + ". Unexpected EOF.");
return false;
}
+#ifdef DUMPCRYPTO
+ m_dumper.write(m_buffer, res);
+#endif
m_bufferSize -= res;
+ m_buffer = static_cast<char*>(m_buffer) + res;
return HandleBuffer(res);
}
if (res < 0)
{
m_state = ERROR;
- Log(__FILE__, "Failed to write data to " + inet_ntostring(IP()) + ":" + x2str(Port()) + ". Reason: '" + strerror(errno) + "'.");
+ Log(__FILE__, "Failed to write data to " + endpoint() + ". Reason: '" + strerror(errno) + "'.");
return false;
}
return true;
{
if (strncmp(m_header, STG_HEADER, sizeof(m_header)) != 0)
{
- Log(__FILE__, "Received invalid header from " + inet_ntostring(IP()) + ":" + x2str(Port()) + ".");
+ Log(__FILE__, "Received invalid header from " + endpoint() + ".");
WriteAnswer(ERR_HEADER, sizeof(ERR_HEADER) - 1); // Without \0
m_state = ERROR;
return false;
if (m_admins.Find(m_login, &m_admin)) // ADMINS::Find returns true on error.
{
std::string login(m_login, strnlen(m_login, sizeof(m_login)));
- Log(__FILE__, "Received invalid login '" + ToPrintable(login) + "' from " + inet_ntostring(IP()) + ":" + x2str(Port()) + ".");
+ Log(__FILE__, "Received invalid login '" + ToPrintable(login) + "' from " + endpoint() + ".");
WriteAnswer(ERR_LOGIN, sizeof(ERR_LOGIN) - 1); // Without \0
m_state = ERROR;
return false;
if (strncmp(m_login, login, sizeof(login)) != 0)
{
- Log(__FILE__, "Attempt to connect with wrong password from " + m_admin->GetLogin() + "@" + inet_ntostring(IP()) + ":" + x2str(Port()) + ".");
+ Log(__FILE__, "Attempt to connect with wrong password from " + m_admin->GetLogin() + "@" + endpoint() + ".");
WriteAnswer(ERR_LOGINS, sizeof(ERR_LOGINS) - 1); // Without \0
m_state = ERROR;
return false;
bool Conn::HandleData(size_t size)
{
- m_stream->Put(m_buffer, size, size == 0 || memchr(m_buffer, 0, size) != NULL);
+ m_stream->Put(m_data, size, size == 0 || memchr(m_data, 0, size) != NULL);
+ m_buffer = m_data;
return m_stream->IsOk();
}
if (XML_Parse(state.conn.m_xmlParser, xml, length, state.final) == XML_STATUS_ERROR)
{
- state.conn.Log(__FILE__, "Received invalid XML from " + state.conn.m_admin->GetLogin() + "@" + inet_ntostring(state.conn.IP()) + ":" + x2str(state.conn.Port()) + ".");
+ state.conn.Log(__FILE__, "Received invalid XML from " + state.conn.m_admin->GetLogin() + "@" + state.conn.endpoint() + ".");
printfd(__FILE__, "XML parse error at line %d, %d: %s. Is final: %d\n",
static_cast<int>(XML_GetCurrentLineNumber(state.conn.m_xmlParser)),
static_cast<int>(XML_GetCurrentColumnNumber(state.conn.m_xmlParser)),
{
if (!state.conn.WriteResponse())
{
- state.conn.Log(__FILE__, "Failed to write response to " + state.conn.m_admin->GetLogin() + "@" + inet_ntostring(state.conn.IP()) + ":" + x2str(state.conn.Port()) + ".");
+ state.conn.Log(__FILE__, "Failed to write response to " + state.conn.m_admin->GetLogin() + "@" + state.conn.endpoint() + ".");
state.conn.m_state = ERROR;
return false;
}
if (conn.m_parser == NULL)
{
- conn.Log(__FILE__, "Received unknown command '" + std::string(el) + "' from " + conn.m_admin->GetLogin() + "@" + inet_ntostring(conn.IP()) + ":" + x2str(conn.Port()) + ".");
+ conn.Log(__FILE__, "Received unknown command '" + std::string(el) + "' from " + conn.m_admin->GetLogin() + "@" + conn.endpoint() + ".");
conn.m_state = ERROR;
return;
}
#include "parser.h"
+#include "dumphelpers.h"
+
#include "stg/os_int.h"
#include "stg/const.h"
uint32_t IP() const { return *(uint32_t *)(&m_addr.sin_addr); }
uint16_t Port() const { return ntohs(m_addr.sin_port); }
+ std::string endpoint() const { return inet_ntostring(IP()) + ":" + x2str(Port()); }
+
bool Read();
bool IsOk() const { return m_state != ERROR; }
Conn & conn;
} m_dataState;
+#ifdef DUMPCRYPTO
+ Dumper m_dumper;
+#endif
+
static bool DataCallback(const void * block, size_t size, void * data);
static void ParseXMLStart(void * data, const char * el, const char ** attr);
static void ParseXMLEnd(void * data, const char * el);
--- /dev/null
+#ifndef __STG_DUMP_HELPERS_H__
+#define __STG_DUMP_HELPERS_H__
+
+#include "stg/common.h"
+
+#include <string>
+#include <fstream>
+#include <sstream>
+#include <iomanip>
+
+#include <cstddef>
+#include <ctime>
+
+namespace STG
+{
+
+class Dumper
+{
+ public:
+ explicit Dumper(const std::string& tag)
+ : m_stream(getName(tag).c_str())
+ {
+ }
+ ~Dumper() {}
+
+ void write(const void* data, size_t size)
+ {
+ writePrefix();
+ m_stream << " ";
+ writeHEX(data, size);
+ }
+
+ private:
+ std::ofstream m_stream;
+
+ tm getTime() const
+ {
+ time_t now = time(NULL);
+ tm localTime;
+ localtime_r(&now, &localTime);
+ return localTime;
+ }
+
+ std::string getName(const std::string& tag) const
+ {
+ tm localTime = getTime();
+
+ std::ostringstream res;
+ res << tag
+ << "-" << (localTime.tm_year + 1900) << twoDigit(localTime.tm_mon + 1) << twoDigit(localTime.tm_mday)
+ << "-" << twoDigit(localTime.tm_hour) << twoDigit(localTime.tm_min) << twoDigit(localTime.tm_sec)
+ << ".data";
+
+ return res.str();
+ }
+
+ void writePrefix()
+ {
+ tm localTime = getTime();
+ m_stream << "[" << (localTime.tm_year + 1900) << "-" << twoDigit(localTime.tm_mon + 1) << "-" << twoDigit(localTime.tm_mday)
+ << " " << twoDigit(localTime.tm_hour) << ":" << twoDigit(localTime.tm_min) << ":" << twoDigit(localTime.tm_sec)
+ << "]";
+ }
+
+ void writeHEX(const void* data, size_t size)
+ {
+ m_stream << "(" << std::setw(4) << std::setfill(' ') << size << ") ";
+ const unsigned char* pos = static_cast<const unsigned char*>(data);
+ for (size_t i = 0; i < size; ++i)
+ m_stream << std::hex << std::setw(2) << std::setfill('0') << static_cast<unsigned int>(*pos++);
+ m_stream << std::dec << "\n";
+ }
+
+ std::string twoDigit(int value) const
+ {
+ std::string res = x2str(value);
+ if (res.length() < 2)
+ res = "0" + res;
+ return res;
+ }
+};
+
+} // namespace Caster
+
+#endif
if (strcasecmp(el, m_tag.c_str()) != 0)
return -1;
CreateAnswer();
- m_done = true;
}
--m_depth;
BASE_PARSER(const ADMIN & admin, const std::string & t)
: m_currAdmin(admin),
m_depth(0),
- m_tag(t),
- m_done(false)
+ m_tag(t)
{}
virtual ~BASE_PARSER() {}
virtual int Start(void * data, const char * el, const char ** attr);
std::string GetOpenTag() const { return "<" + m_tag + ">"; }
std::string GetCloseTag() const { return "</" + m_tag + ">"; }
- bool IsDone() const { return m_done; }
-
protected:
BASE_PARSER(const BASE_PARSER & rvalue);
BASE_PARSER & operator=(const BASE_PARSER & rvalue);
size_t m_depth;
std::string m_answer;
std::string m_tag;
- bool m_done;
private:
virtual void CreateAnswer() = 0;
m_result = res_ok;
}
CreateAnswer();
- m_done = true;
return 0;
}
utsn.machine + " " +
utsn.nodename;
- m_answer = GetOpenTag() + "<version value=\"" + SERVER_VERSION + "\"/>" +
+ m_answer = std::string("<ServerInfo><version value=\"") + SERVER_VERSION + "\"/>" +
"<tariff_num value=\"" + x2str(m_tariffs.Count()) + "\"/>" +
"<tariff value=\"2\"/>" +
"<user_num value=\"" + x2str(m_users.Count()) + "\"/>" +
for (size_t i = 0; i< DIR_NUM; i++)
m_answer += "<dir_name_" + x2str(i) + " value=\"" + Encode12str(m_settings.GetDirName(i)) + "\"/>";
- m_answer += GetCloseTag();
+ m_answer += "</ServerInfo>";
}
return res;
}
+template <typename T>
+bool str2res(const std::string& source, RESETABLE<T>& dest, T divisor)
+{
+ T value = 0;
+ if (str2x(source, value))
+ return false;
+ dest = value / divisor;
+ return true;
+}
+
template <typename A, typename C, typename F>
bool String2AOS(const std::string & source, A & array, size_t size, RESETABLE<F> C::* field, F divisor)
{
std::string::size_type pos = 0;
while (index < size && (pos = source.find('/', from)) != std::string::npos)
{
- if (str2x(source.substr(from, pos - from), (array[index].*field).data()))
+ if (!str2res(source.substr(from, pos - from), array[index].*field, divisor))
return false;
- (array[index].*field).data() /= divisor;
from = pos + 1;
++index;
}
- if (str2x(source.substr(from), (array[index].*field).data()))
+ if (str2res(source.substr(from), array[index].*field, divisor))
return false;
- (array[index].*field).data() /= divisor;
return true;
}
std::string answer;
if (loginInStart)
- answer += "<User result=\"ok\">";
+ answer += "<User login=\"" + user.GetLogin() + "\" result=\"ok\">";
else
- answer += "<User result=\"ok\" login=\"" + user.GetLogin() + "\">";
+ answer += "<User result=\"ok\">";
answer += "<Login value=\"" + user.GetLogin() + "\"/>";
answer += "<IP value=\"" + user.GetProperty().ips.Get().GetIpStr() + "\"/>";
answer += "<Traff";
- const DIR_TRAFF & upload(user.GetProperty().down.Get());
- const DIR_TRAFF & download(user.GetProperty().up.Get());
+ const DIR_TRAFF & upload(user.GetProperty().up.Get());
+ const DIR_TRAFF & download(user.GetProperty().down.Get());
if (user.GetProperty().up.ModificationTime() > lastTime)
for (size_t j = 0; j < DIR_NUM; j++)
answer += " MU" + x2str(j) + "=\"" + x2str(upload[j]) + "\"";
if (!u->GetProperty().realName.Set(m_ucr.realName.const_data(), &m_currAdmin, m_login, &m_store))
return -1;
-
if (!m_usr.cash.empty())
+ {
if (m_cashMustBeAdded)
{
if (!u->GetProperty().cash.Set(m_usr.cash.const_data() + u->GetProperty().cash,
&m_store,
m_cashMsg))
return -1;
- else
- if (!u->GetProperty().cash.Set(m_usr.cash.const_data(), &m_currAdmin, m_login, &m_store, m_cashMsg))
- return -1;
}
-
+ else
+ {
+ if (!u->GetProperty().cash.Set(m_usr.cash.const_data(), &m_currAdmin, m_login, &m_store, m_cashMsg))
+ return -1;
+ }
+ }
if (!m_ucr.tariffName.empty())
{
if (!res)
m_users.Del(u->GetLogin(), &m_currAdmin);
- m_done = true;
-
return 0;
}
return -1;
int CHECK_USER::End(void *, const char *el)
{
if (strcasecmp(el, m_tag.c_str()) == 0)
- {
- m_done = true;
return 0;
- }
return -1;
}
///////////////////////////
pv.param = "Port";
pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv);
- if (pvi == s.moduleParams.end())
+ if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'Port\' is not found.";
printfd(__FILE__, "%s\n", errorStr.c_str());
pv.param = "BindAddress";
pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv);
- if (pvi != s.moduleParams.end())
+ if (pvi != s.moduleParams.end() && !pvi->value.empty())
m_bindAddress = pvi->value[0];
return true;
int Start();
int Stop();
- int Reload() { return 0; }
+ int Reload(const MODULE_SETTINGS & /*ms*/) { return 0; }
bool IsRunning() { return isRunning; }
const std::string & GetStrError() const { return errorStr; }
pv.param = "PingDelay";
pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'PingDelay\' not found.";
printfd(__FILE__, "Parameter 'PingDelay' not found\n");
}
//-----------------------------------------------------------------------------
PING::PING()
- : errorStr(),
- pingSettings(),
- settings(),
- users(NULL),
- usersList(),
- thread(),
- mutex(),
+ : users(NULL),
nonstop(false),
isRunning(false),
- pinger(),
- ChgCurrIPNotifierList(),
- ChgIPNotifierList(),
onAddUserNotifier(*this),
onDelUserNotifier(*this),
logger(GetPluginLogger(GetStgLogger(), "ping"))
int Start();
int Stop();
- int Reload() { return 0; }
+ int Reload(const MODULE_SETTINGS & /*ms*/) { return 0; }
bool IsRunning();
const std::string & GetStrError() const { return errorStr; }
int Start();
int Stop();
- int Reload() { return 0; }
+ int Reload(const MODULE_SETTINGS & /*ms*/) { return 0; }
bool IsRunning() { return isRunning; }
const std::string & GetStrError() const { return errorStr; }
//-----------------------------------------------------------------------------
RS::SETTINGS::SETTINGS()
: sendPeriod(0),
- port(0),
- errorStr(),
- netRouters(),
- userParams(),
- password(),
- subnetFile()
+ port(0)
{
}
//-----------------------------------------------------------------------------
///////////////////////////
pv.param = "Port";
pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'Port\' not found.";
printfd(__FILE__, "Parameter 'Port' not found\n");
///////////////////////////
pv.param = "SendPeriod";
pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'SendPeriod\' not found.";
printfd(__FILE__, "Parameter 'SendPeriod' not found\n");
///////////////////////////
pv.param = "UserParams";
pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'UserParams\' not found.";
printfd(__FILE__, "Parameter 'UserParams' not found\n");
///////////////////////////
pv.param = "Password";
pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'Password\' not found.";
printfd(__FILE__, "Parameter 'Password' not found\n");
///////////////////////////
pv.param = "SubnetFile";
pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'SubnetFile\' not found.";
printfd(__FILE__, "Parameter 'SubnetFile' not found\n");
return 0;
}
//-----------------------------------------------------------------------------
-int REMOTE_SCRIPT::Reload()
+int REMOTE_SCRIPT::Reload(const MODULE_SETTINGS & /*ms*/)
{
NRMapParser nrMapParser;
int Start();
int Stop();
- int Reload();
+ int Reload(const MODULE_SETTINGS & ms);
bool IsRunning() { return isRunning; }
const std::string & GetStrError() const { return errorStr; }
{
PLUGIN_CREATOR<SMUX> smc;
-bool SPrefixLess(const Sensors::value_type & a,
- const Sensors::value_type & b);
-
bool SPrefixLess(const Sensors::value_type & a,
const Sensors::value_type & b)
{
pv.param = "Port";
pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'Port\' not found.";
printfd(__FILE__, "Parameter 'Port' not found\n");
pv.param = "Password";
pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'Password\' not found.";
printfd(__FILE__, "Parameter 'Password' not found\n");
pv.param = "Server";
pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'Server\' not found.";
printfd(__FILE__, "Parameter 'Server' not found\n");
return 0;
}
-int SMUX::Reload()
+int SMUX::Reload(const MODULE_SETTINGS & /*ms*/)
{
if (Stop())
return -1;
int Start();
int Stop();
- int Reload();
+ int Reload(const MODULE_SETTINGS & ms);
bool IsRunning() { return running && !stopped; }
const std::string & GetStrError() const { return errorStr; }
pv.param = owner;
std::vector<PARAM_VALUE>::const_iterator pvi;
pvi = find(moduleParams.begin(), moduleParams.end(), pv);
-if (pvi == moduleParams.end())
+if (pvi == moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'" + owner + "\' not found.";
printfd(__FILE__, "%s\n", errorStr.c_str());
pv.param = group;
std::vector<PARAM_VALUE>::const_iterator pvi;
pvi = find(moduleParams.begin(), moduleParams.end(), pv);
-if (pvi == moduleParams.end())
+if (pvi == moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'" + group + "\' not found.";
printfd(__FILE__, "%s\n", errorStr.c_str());
pv.param = modeStr;
std::vector<PARAM_VALUE>::const_iterator pvi;
pvi = find(moduleParams.begin(), moduleParams.end(), pv);
-if (pvi == moduleParams.end())
+if (pvi == moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'" + modeStr + "\' not found.";
printfd(__FILE__, "%s\n", errorStr.c_str());
PARAM_VALUE pv;
pv.param = "RemoveBak";
pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
removeBak = true;
}
pv.param = "ReadBak";
pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
readBak = false;
}
pv.param = "WorkDir";
pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
+if (pvi == s.moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'WorkDir\' not found.";
printfd(__FILE__, "Parameter 'WorkDir' not found\n");
logger \
crypto
-FB_CFLAGS = $(shell fb_config --cflags)
-FB_LDFLAGS = $(shell fb_config --libs)
-
CXXFLAGS += $(FB_CFLAGS)
LDFLAGS += $(FB_LDFLAGS)
#include <string>
#include <vector>
-#include <algorithm>
-
-#include <cctype>
namespace
{
//-----------------------------------------------------------------------------
FIREBIRD_STORE::FIREBIRD_STORE()
: version("firebird_store v.1.4"),
- strError(),
db_server("localhost"),
db_database("/var/stg/stargazer.fdb"),
db_user("stg"),
db_password("123456"),
- settings(),
- db(),
- mutex(),
til(IBPP::ilConcurrency),
tlr(IBPP::lrWait),
schemaVersion(0),
for(i = settings.moduleParams.begin(); i != settings.moduleParams.end(); ++i)
{
- s = i->param;
-
- std::transform(s.begin(), s.end(), s.begin(), ::tolower);
+ if (i->value.empty())
+ continue;
+ s = ToLower(i->param);
if (s == "server")
- db_server = *(i->value.begin());
+ db_server = i->value.front();
if (s == "database")
- db_database = *(i->value.begin());
+ db_database = i->value.front();
if (s == "user")
- db_user = *(i->value.begin());
+ db_user = i->value.front();
if (s == "password")
- db_password = *(i->value.begin());
+ db_password = i->value.front();
// Advanced settings block
if (s == "isolationLevel")
{
- if (*(i->value.begin()) == "Concurrency")
+ if (i->value.front() == "Concurrency")
til = IBPP::ilConcurrency;
- else if (*(i->value.begin()) == "DirtyRead")
+ else if (i->value.front() == "DirtyRead")
til = IBPP::ilReadDirty;
- else if (*(i->value.begin()) == "ReadCommitted")
+ else if (i->value.front() == "ReadCommitted")
til = IBPP::ilReadCommitted;
- else if (*(i->value.begin()) == "Consistency")
+ else if (i->value.front() == "Consistency")
til = IBPP::ilConsistency;
}
if (s == "lockResolution")
{
- if (*(i->value.begin()) == "Wait")
+ if (i->value.front() == "Wait")
tlr = IBPP::lrWait;
- else if (*(i->value.begin()) == "NoWait")
+ else if (i->value.front() == "NoWait")
tlr = IBPP::lrNoWait;
}
}
#include "firebird_store.h"
#include "stg/ibpp.h"
+namespace
+{
+
+const int pt_mega = 1024 * 1024;
+
+}
+
//-----------------------------------------------------------------------------
int FIREBIRD_STORE::GetTariffsList(std::vector<std::string> * tariffsList) const
{
st->Get(3, td->tariffConf.fee);
st->Get(4, td->tariffConf.free);
st->Get(5, td->tariffConf.passiveCost);
-// st->Get(6, td->tariffConf.traffType);
td->tariffConf.traffType = TARIFF::IntToTraffType(Get<int>(st, 6));
if (schemaVersion > 0)
- {
- std::string period;
- st->Get(7, period);
- td->tariffConf.period = TARIFF::StringToPeriod(period);
- }
+ td->tariffConf.period = TARIFF::StringToPeriod(Get<std::string>(st, 7));
st->Close();
st->Prepare("select * from tb_tariffs_params where fk_tariff = ?");
st->Set(1, id);
st->Get(7, td->dirPrice[dir].priceNightB);
td->dirPrice[dir].priceNightB /= 1024*1024;
st->Get(8, td->dirPrice[dir].threshold);
- if (std::fabs(td->dirPrice[dir].priceDayA - td->dirPrice[dir].priceNightA) < 1.0e-3 &&
- std::fabs(td->dirPrice[dir].priceDayB - td->dirPrice[dir].priceNightB) < 1.0e-3)
+ if (std::fabs(td->dirPrice[dir].priceDayA - td->dirPrice[dir].priceNightA) < 1.0e-3 / pt_mega &&
+ std::fabs(td->dirPrice[dir].priceDayB - td->dirPrice[dir].priceNightB) < 1.0e-3 / pt_mega)
{
td->dirPrice[dir].singlePrice = true;
}
}
//-----------------------------------------------------------------------------
int FIREBIRD_STORE::SaveStat(const USER_STAT & stat,
- const std::string & login,
- int year,
- int month) const
+ const std::string & login,
+ int year,
+ int month) const
{
IBPP::Transaction tr = IBPP::TransactionFactory(db, IBPP::amWrite, til, tlr);
IBPP::Statement st = IBPP::StatementFactory(db, tr);
tr->Rollback();
return -1;
}
- st->Get(1, uid);
+ int32_t uid = Get<int32_t>(st, 1);
st->Close();
st->Prepare("select first 1 pk_stat from tb_stats where fk_user = ? order by stats_date desc");
st->Set(1, uid);
st->Prepare("insert into tb_users_services (fk_user, fk_service) \
values (?, (select pk_service from tb_services \
where name = ?))");
- for(std::vector<std::string>::const_iterator it = conf.service.begin(); it != conf.service.end(); ++it)
+ for(std::vector<std::string>::const_iterator it = conf.services.begin(); it != conf.services.end(); ++it)
{
st->Set(1, uid);
st->Set(2, *it);
{
std::string name;
st->Get(1, name);
- conf->service.push_back(name);
+ conf->services.push_back(name);
}
// User data
crypto \
logger
-MYSQL_CFLAGS = $(shell mysql_config --cflags)
-MYSQL_LDFLAGS = $(shell mysql_config --libs_r)
-
CXXFLAGS += $(MYSQL_CFLAGS)
LIBS += $(MYSQL_LDFLAGS)
}
//-----------------------------------------------------------------------------
MYSQL_STORE_SETTINGS::MYSQL_STORE_SETTINGS()
- : settings(NULL),
- errorStr(),
- dbUser(),
- dbPass(),
- dbName(),
- dbHost()
+ : settings(NULL)
{
}
//-----------------------------------------------------------------------------
-int MYSQL_STORE_SETTINGS::ParseParam(const std::vector<PARAM_VALUE> & moduleParams,
- const std::string & name, std::string & result)
+int MYSQL_STORE_SETTINGS::ParseParam(const std::vector<PARAM_VALUE> & moduleParams,
+ const std::string & name, std::string & result)
{
PARAM_VALUE pv;
pv.param = name;
std::vector<PARAM_VALUE>::const_iterator pvi;
pvi = find(moduleParams.begin(), moduleParams.end(), pv);
-if (pvi == moduleParams.end())
+if (pvi == moduleParams.end() || pvi->value.empty())
{
errorStr = "Parameter \'" + name + "\' not found.";
return -1;
}
-
+
result = pvi->value[0];
return 0;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
MYSQL_STORE::MYSQL_STORE()
- : errorStr(),
- version("mysql_store v.0.67"),
- storeSettings(),
- settings(),
+ : version("mysql_store v.0.67"),
schemaVersion(0),
logger(GetPluginLogger(GetStgLogger(), "store_mysql"))
{
crypto \
logger
-PG_CFLAGS = $(shell pg_config --includedir)
-PG_LDFLAGS = $(shell pg_config --libdir)
-
-CXXFLAGS += -I $(PG_CFLAGS)
-LDFLAGS += -L $(PG_LDFLAGS)
+CXXFLAGS += $(PG_CFLAGS)
+LDFLAGS += $(PG_LDFLAGS)
LIBS += -lpq
#include "postgresql_store.h"
+#include "postgresql_store_utils.h"
+#include "postgresql_store.h"
+
#include "stg/module_settings.h"
#include "stg/plugin_creator.h"
-#include <libpq-fe.h>
-
#include <string>
#include <vector>
+#include <libpq-fe.h>
+
namespace
{
PLUGIN_CREATOR<POSTGRESQL_STORE> pgsc;
//-----------------------------------------------------------------------------
POSTGRESQL_STORE::POSTGRESQL_STORE()
: versionString("postgresql_store v.1.3"),
- strError(),
server("localhost"),
database("stargazer"),
user("stg"),
password("123456"),
clientEncoding("KOI8"),
- settings(),
- mutex(),
version(0),
retries(3),
connection(NULL),
for(i = settings.moduleParams.begin(); i != settings.moduleParams.end(); ++i)
{
- std::string param(ToLower(i->param));
- if (param == "server")
- server = *(i->value.begin());
- else if (param == "database")
- database = *(i->value.begin());
- else if (param == "user")
- user = *(i->value.begin());
- else if (param == "password")
- password = *(i->value.begin());
- else if (param == "retries")
- if (str2x(*(i->value.begin()), retries))
+ if (i->value.empty())
+ continue;
+ std::string s = ToLower(i->param);
+ if (s == "server")
+ {
+ server = i->value.front();
+ }
+ if (s == "database")
+ {
+ database = i->value.front();
+ }
+ if (s == "user")
+ {
+ user = i->value.front();
+ }
+ if (s == "password")
+ {
+ password = i->value.front();
+ }
+ if (s == "retries")
+ {
+ if (str2x(i->value.front(), retries))
{
strError = "Invalid 'retries' value";
printfd(__FILE__, "POSTGRESQL_STORE::ParseSettings(): '%s'\n", strError.c_str());
return -1;
}
+ }
}
clientEncoding = "KOI8";
#include "postgresql_store.h"
#include "stg/locker.h"
+namespace
+{
+
+const int pt_mega = 1024 * 1024;
+
+}
+
//-----------------------------------------------------------------------------
int POSTGRESQL_STORE::GetTariffsList(std::vector<std::string> * tariffsList) const
{
tuple >> td->dirPrice[dir].mNight;
}
- if (std::fabs(td->dirPrice[dir].priceDayA - td->dirPrice[dir].priceNightA) > 1.0e-3 &&
- std::fabs(td->dirPrice[dir].priceDayB - td->dirPrice[dir].priceNightB) > 1.0e-3)
+ if (std::fabs(td->dirPrice[dir].priceDayA - td->dirPrice[dir].priceNightA) < 1.0e-3 / pt_mega &&
+ std::fabs(td->dirPrice[dir].priceDayB - td->dirPrice[dir].priceNightB) < 1.0e-3 / pt_mega)
{
td->dirPrice[dir].singlePrice = true;
}
--- /dev/null
+#ifndef POSTGRESQL_UTILS_STORE_H
+#define POSTGRESQL_UTILS_STORE_H
+
+#include <functional>
+
+struct ToLower : public std::unary_function<char, char>
+{
+char operator() (char c) const { return static_cast<char>(std::tolower(c)); }
+};
+
+#endif
}
//-----------------------------------------------------------------------------
SETTINGS_IMPL::SETTINGS_IMPL(const SETTINGS_IMPL & rval)
- : SETTINGS(),
- strError(),
- modulesPath(rval.modulesPath),
+ : modulesPath(rval.modulesPath),
dirName(rval.dirName),
confDir(rval.confDir),
scriptsDir(rval.scriptsDir),
{
}
//-----------------------------------------------------------------------------
+SETTINGS_IMPL & SETTINGS_IMPL::operator=(const SETTINGS_IMPL & rhs)
+{
+ modulesPath = rhs.modulesPath;
+ dirName = rhs.dirName;
+ confDir = rhs.confDir;
+ scriptsDir = rhs.scriptsDir;
+ rules = rhs.rules;
+ logFile = rhs.logFile;
+ pidFile = rhs.pidFile;
+ monitorDir = rhs.monitorDir;
+ scriptParams = rhs.scriptParams;
+ monitoring = rhs.monitoring;
+ detailStatWritePeriod = rhs.detailStatWritePeriod;
+ statWritePeriod = rhs.statWritePeriod;
+ stgExecMsgKey = rhs.stgExecMsgKey;
+ executersNum = rhs.executersNum;
+ fullFee = rhs.fullFee;
+ dayFee = rhs.dayFee;
+ dayResetTraff = rhs.dayResetTraff;
+ spreadFee = rhs.spreadFee;
+ freeMbAllowInet = rhs.freeMbAllowInet;
+ dayFeeIsLastDay = rhs.dayFeeIsLastDay;
+ stopOnError = rhs.stopOnError;
+ writeFreeMbTraffCost = rhs.writeFreeMbTraffCost;
+ showFeeInCash = rhs.showFeeInCash;
+ messageTimeout = rhs.messageTimeout;
+ feeChargeType = rhs.feeChargeType;
+ reconnectOnTariffChange = rhs.reconnectOnTariffChange;
+
+ modulesSettings = rhs.modulesSettings;
+ storeModuleSettings = rhs.storeModuleSettings;
+ return *this;
+}
+//-----------------------------------------------------------------------------
int SETTINGS_IMPL::ParseModuleSettings(const DOTCONFDocumentNode * node, std::vector<PARAM_VALUE> * params)
{
const DOTCONFDocumentNode * childNode;
#include "stg/settings.h"
#include "stg/common.h"
-#include "stg/logger.h"
#include "stg/module_settings.h"
//-----------------------------------------------------------------------------
SETTINGS_IMPL(const std::string &);
SETTINGS_IMPL(const SETTINGS_IMPL &);
virtual ~SETTINGS_IMPL() {}
+ SETTINGS_IMPL & operator=(const SETTINGS_IMPL &);
+
int Reload() { return ReadSettings(); }
int ReadSettings();
lastDisconnectReason = reason;
lastIPForDisconnect = currIP;
currIP = 0; // DelUser in traffcounter
+ if (connected)
+ Disconnect(false, "not authorized");
return;
}
}
if (FindByNameNonLock(login, &iter))
{
WriteServLog("Attempt to unauthorize non-existant user '%s'", login.c_str());
+ printfd(__FILE__, "Attempt to unauthorize non-existant user '%s'", login.c_str());
return false;
}
stgUsleep(100000);
} //while (us->nonstop)
-user_iter ui = us->users.begin();
-while (ui != us->users.end())
- {
- us->DelUserFromIndexes(ui);
- ++ui;
- }
-
-std::list<USER_TO_DEL>::iterator iter;
-iter = us->usersToDelete.begin();
+std::list<USER_TO_DEL>::iterator iter(us->usersToDelete.begin());
while (iter != us->usersToDelete.end())
{
iter->delTime -= 2 * userDeleteDelayTime;
install: $(PROG)
ifeq ($(DEBUG), yes)
- install -D -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/lib/stg/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/lib/stg
+ install -m $(BIN_MODE) -o $(OWNER) $(PROG) $(PREFIX)/usr/lib/stg/$(PROG)
else
- install -D -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/lib/stg/$(PROG)
+ mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/lib/stg
+ install -m $(BIN_MODE) -o $(OWNER) -s $(PROG) $(PREFIX)/usr/lib/stg/$(PROG)
endif
mkdir -m $(DIR_MODE) -p $(PREFIX)/usr/include/stg
install -m $(DATA_MODE) -o $(OWNER) $(addprefix include/stg/,$(INCS)) $(PREFIX)/usr/include/stg/
INCS = common.h
-ifneq ($(OS),linux)
-LIBS += -liconv
-endif
+LIBS += $(LIBICONV)
include ../Makefile.in
#include <iconv.h>
#include <algorithm>
+
#include <cstdlib>
#include <cstdarg>
#include <cstdio>
}
}
//---------------------------------------------------------------------------
-std::string Encode12str(const std::string & src)
-{
-std::string res;
-Encode12str(res, src);
-return res;
-}
-//---------------------------------------------------------------------------
-std::string Decode21str(const std::string & src)
-{
-std::string res;
-Decode21str(res, src);
-return res;
-}
-//---------------------------------------------------------------------------
void Encode12(char * dst, const char * src, size_t srcLen)
{
for (size_t i = 0; i <= srcLen; i++)
inBuf[source.length()] = 0;
-#if defined(FREE_BSD) || defined(FREE_BSD5) || defined(WIN32)
+#if defined(CONST_ICONV)
const char * srcPos = inBuf;
#else
char * srcPos = inBuf;
void Encode12str(std::string & dst, const std::string & src);
void Decode21str(std::string & dst, const std::string & src);
-std::string Encode12str(const std::string & src);
-std::string Decode21str(const std::string & src);
+inline std::string Encode12str(const std::string & src) { std::string dst; Encode12str(dst, src); return dst; }
+inline std::string Decode21str(const std::string & src) { std::string dst; Decode21str(dst, src); return dst; }
int ParseIPString(const char * str, uint32_t * ips, int maxIP);
void KOIToWin(const char * s1, char * s2, int l);
char realpathBuf[PATH_MAX];
if(realpath(_fileName, realpathBuf) == NULL){
- error(0, _fileName, "realpath('%s') failed: %s", _fileName, strerror(errno));
+ error(0, _fileName, "%s", strerror(errno));
return -1;
}
char * buf = (char*)mempool->alloc(len);
if(lineNum)
- (void) snprintf(buf, len, "DOTCONF++: file '%s', line %d: %s\n", fileName, lineNum, msg);
+ (void) snprintf(buf, len, "File '%s', line %d: %s\n", fileName, lineNum, msg);
else
- (void) snprintf(buf, len, "DOTCONF++: file '%s': %s\n", fileName, msg);
+ (void) snprintf(buf, len, "File '%s': %s\n", fileName, msg);
if (errorCallback) {
errorCallback(errorCallbackData, buf);
mutable pthread_mutex_t mutex;
};
//-----------------------------------------------------------------------------
-class PLUGIN_LOGGER : private STG_LOGGER
+class PLUGIN_LOGGER
{
-friend PLUGIN_LOGGER GetPluginLogger(const STG_LOGGER & logger, const std::string & pluginName);
+friend PLUGIN_LOGGER GetPluginLogger(const STG_LOGGER& logger, const std::string& pluginName);
public:
- PLUGIN_LOGGER(const PLUGIN_LOGGER & rhs);
- void operator()(const char * fmt, ...) const;
- void operator()(const std::string & line) const;
+ PLUGIN_LOGGER(const PLUGIN_LOGGER& rhs) : m_parent(rhs.m_parent), m_pluginName(rhs.m_pluginName) {}
+ void operator()(const char* fmt, ...) const;
+ void operator()(const std::string& line) const;
private:
PLUGIN_LOGGER(const STG_LOGGER & logger, const std::string & pn);
- std::string pluginName;
+ const STG_LOGGER& m_parent;
+ std::string m_pluginName;
};
PLUGIN_LOGGER GetPluginLogger(const STG_LOGGER & logger, const std::string & pluginName);
}
}
//-----------------------------------------------------------------------------
-PLUGIN_LOGGER::PLUGIN_LOGGER(const STG_LOGGER & logger, const std::string & pn)
- : STG_LOGGER(),
- pluginName(pn)
+PLUGIN_LOGGER::PLUGIN_LOGGER(const STG_LOGGER& logger, const std::string& pn)
+ : m_parent(logger),
+ m_pluginName(pn)
{
- SetLogFileName(logger.fileName);
-}
-//-----------------------------------------------------------------------------
-PLUGIN_LOGGER::PLUGIN_LOGGER(const PLUGIN_LOGGER & rhs)
- : STG_LOGGER(),
- pluginName(rhs.pluginName)
-{
- SetLogFileName(fileName);
}
//-----------------------------------------------------------------------------
void PLUGIN_LOGGER::operator()(const char * fmt, ...) const
vsnprintf(buff, sizeof(buff), fmt, vl);
va_end(vl);
-STG_LOGGER::operator()("[%s] %s", pluginName.c_str(), buff);
+m_parent("[%s] %s", m_pluginName.c_str(), buff);
}
//-----------------------------------------------------------------------------
void PLUGIN_LOGGER::operator()(const std::string & line) const
{
-STG_LOGGER::operator()("[%s] %s", pluginName.c_str(), line.c_str());
+m_parent("[%s] %s", m_pluginName.c_str(), line.c_str());
}
//-----------------------------------------------------------------------------
PLUGIN_LOGGER GetPluginLogger(const STG_LOGGER & logger, const std::string & pluginName)
LIBS = $(LIB_THREAD)
-LIB_INCS = -I ../locker.lib/include \
- -I ../common.lib/include
+LIB_INCS = -I ../common.lib/include
include ../Makefile.in
ensure_equals("DecryptString(EncryptString(longTest)) == longTest", source, std::string(longTest));
}
+ template<>
+ template<>
+ void testobject::test<8>()
+ {
+ set_test_name("Check old string encryption");
+
+ BLOWFISH_CTX ctx;
+ InitContext("123456", 7, &ctx);
+ const unsigned char source[] = {0xe9, 0xfe, 0xcb, 0xc5, 0xad, 0x3e, 0x87, 0x39,
+ 0x3d, 0xd5, 0xf4, 0xed, 0xb0, 0x15, 0xe6, 0xcb,
+ 0x3d, 0xd5, 0xf4, 0xed, 0xb0, 0x15, 0xe6, 0xcb,
+ 0x3d, 0xd5, 0xf4, 0xed, 0xb0, 0x15, 0xe6, 0xcb};
+ char res[32];
+ DecryptString(res, source, 32, &ctx);
+
+ ensure_equals("DecryptString(...) == 'admin'", std::string(res), "admin");
+ }
+
+ template<>
+ template<>
+ void testobject::test<9>()
+ {
+ set_test_name("Check new string encryption");
+
+ BLOWFISH_CTX ctx;
+ InitContext("123456", 7, &ctx);
+ const unsigned char source[] = {0xe9, 0xfe, 0xcb, 0xc5, 0xad, 0x3e, 0x87, 0x39,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ char res[32];
+ DecryptString(res, source, 32, &ctx);
+
+ ensure_equals("DecryptString(...) == 'admin'", std::string(res), "admin");
+ }
+
}