]> git.stg.codes - stg.git/commitdiff
Merge branch 'stg-2.409' into stg-2.409-radius
authorMaxim Mamontov <faust.madf@gmail.com>
Sat, 17 Sep 2016 12:59:24 +0000 (15:59 +0300)
committerMaxim Mamontov <faust.madf@gmail.com>
Sat, 17 Sep 2016 12:59:24 +0000 (15:59 +0300)
1  2 
projects/stargazer/settings_impl.cpp
projects/stargazer/settings_impl.h

index f79941495adf40289ab68211f81187d0fd38337f,0cf9501bced5db222ec6413721f9cf70f1b51a6d..c925177ffea8c37089d4adc9ee0f77fa378154dd
   *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   */
  
 -/*
 - *    Date: 27.10.2002
 - */
 -
  /*
   *    Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
   */
  
 -/*
 -$Revision: 1.45 $
 -$Date: 2010/08/19 13:42:30 $
 -$Author: faust $
 -*/
 +#include "settings_impl.h"
  
 +#include "stg/logger.h"
 +#include "stg/dotconfpp.h"
 +#include "stg/common.h"
 +
 +#include <stdexcept>
  #include <cstring>
  #include <cerrno>
 -#include <string>
  
 -#include "stg/logger.h"
 -#include "stg/dotconfpp.h"
 -#include "settings_impl.h"
 +namespace
 +{
 +
 +struct Error : public std::runtime_error
 +{
 +    Error(const std::string& message) : runtime_error(message) {}
 +};
 +
 +std::vector<std::string> toValues(const DOTCONFDocumentNode& node)
 +{
 +    std::vector<std::string> values;
 +
 +    size_t i = 0;
 +    const char* value = NULL;
 +    while ((value = node.getValue(i++)) != NULL)
 +        values.push_back(value);
 +
 +    return values;
 +}
 +
 +std::vector<PARAM_VALUE> toPVS(const DOTCONFDocumentNode& node)
 +{
 +    std::vector<PARAM_VALUE> pvs;
 +
 +    const DOTCONFDocumentNode* child = node.getChildNode();
 +    while (child != NULL)
 +        {
 +        if (child->getName() == NULL)
 +            continue;
 +
 +        if (child->getChildNode() == NULL)
 +            pvs.push_back(PARAM_VALUE(child->getName(), toValues(*child)));
 +        else
 +            pvs.push_back(PARAM_VALUE(child->getName(), toValues(*child), toPVS(*child)));
 +
 +        child = child->getNextNode();
 +        }
 +
 +    return pvs;
 +}
 +
 +unsigned toPeriod(const char* value)
 +{
 +    if (value == NULL)
 +        throw Error("No detail stat period value.");
 +
 +    std::string period(value);
 +    if (period == "1")
 +        return dsPeriod_1;
 +    else if (period == "1/2")
 +        return dsPeriod_1_2;
 +    else if (period == "1/4")
 +        return dsPeriod_1_4;
 +    else if (period == "1/6")
 +        return dsPeriod_1_6;
 +
 +    throw Error("Invalid detail stat period value: '" + period + "'. Should be one of '1', '1/2', '1/4' or '1/6'.");
 +}
 +
 +}
  
  //-----------------------------------------------------------------------------
  SETTINGS_IMPL::SETTINGS_IMPL(const std::string & cd)
        messageTimeout(0),
        feeChargeType(0),
        reconnectOnTariffChange(false),
+       disableSessionLog(false),
        logger(GetStgLogger())
  {
+     filterParamsLog.push_back("*");
  }
  //-----------------------------------------------------------------------------
  SETTINGS_IMPL::SETTINGS_IMPL(const SETTINGS_IMPL & rval)
        messageTimeout(rval.messageTimeout),
        feeChargeType(rval.feeChargeType),
        reconnectOnTariffChange(rval.reconnectOnTariffChange),
+       disableSessionLog(rval.disableSessionLog),
+       filterParamsLog(rval.filterParamsLog),
        modulesSettings(rval.modulesSettings),
        storeModuleSettings(rval.storeModuleSettings),
        logger(GetStgLogger())
@@@ -179,12 -130,53 +183,14 @@@ SETTINGS_IMPL & SETTINGS_IMPL::operator
      messageTimeout = rhs.messageTimeout;
      feeChargeType = rhs.feeChargeType;
      reconnectOnTariffChange = rhs.reconnectOnTariffChange;
+     disableSessionLog = rhs.disableSessionLog;
+     filterParamsLog = rhs.filterParamsLog;
  
      modulesSettings = rhs.modulesSettings;
      storeModuleSettings = rhs.storeModuleSettings;
      return *this;
  }
  //-----------------------------------------------------------------------------
 -int SETTINGS_IMPL::ParseModuleSettings(const DOTCONFDocumentNode * node, std::vector<PARAM_VALUE> * params)
 -{
 -const DOTCONFDocumentNode * childNode;
 -PARAM_VALUE pv;
 -const char * value;
 -
 -pv.param = node->getName();
 -
 -if (node->getValue(1))
 -    {
 -    strError = "Unexpected value \'" + std::string(node->getValue(1)) + "\'.";
 -    return -1;
 -    }
 -
 -value = node->getValue(0);
 -
 -if (!value)
 -    {
 -    strError = "Module name expected.";
 -    return -1;
 -    }
 -
 -childNode = node->getChildNode();
 -while (childNode)
 -    {
 -    pv.param = childNode->getName();
 -    int i = 0;
 -    while ((value = childNode->getValue(i++)) != NULL)
 -        {
 -        pv.value.push_back(value);
 -        }
 -    params->push_back(pv);
 -    pv.value.clear();
 -    childNode = childNode->getNextNode();
 -    }
 -
 -return 0;
 -}
 -//-----------------------------------------------------------------------------
  void SETTINGS_IMPL::ErrorCallback(void * data, const char * buf)
  {
      printfd(__FILE__, "SETTINGS_IMPL::ErrorCallback() - %s\n", buf);
@@@ -254,15 -246,11 +260,15 @@@ while (node
  
      if (strcasecmp(node->getName(), "DetailStatWritePeriod") == 0)
          {
 -        if (ParseDetailStatWritePeriod(node->getValue(0)) != 0)
 -            {
 -            strError = "Incorrect DetailStatWritePeriod value: \'" + std::string(node->getValue(0)) + "\'";
 +        try
 +        {
 +            detailStatWritePeriod = toPeriod(node->getValue(0));
 +        }
 +        catch (const Error& error)
 +        {
 +            strError = error.what();
              return -1;
 -            }
 +        }
          }
  
      if (strcasecmp(node->getName(), "StatWritePeriod") == 0)
              }
          }
  
+     if (strcasecmp(node->getName(), "DisableSessionLog") == 0)
+         {
+         if (ParseYesNo(node->getValue(0), &disableSessionLog) != 0)
+             {
+             strError = "Incorrect DisableSessionLog value: \'" + std::string(node->getValue(0)) + "\'";
+             return -1;
+             }
+         }
+     if (strcasecmp(node->getName(), "FilterParamsLog") == 0)
+         {
+         filterParamsLog.clear();
+         for (int i = 0; node->getValue(i) != NULL; ++i)
+             filterParamsLog.push_back(node->getValue(i));
+         }
      if (strcasecmp(node->getName(), "DirNames") == 0)
          {
          const DOTCONFDocumentNode * child = node->getChildNode();
              }
          storeModulesCount++;
  
 +        if (node->getValue(0) == NULL)
 +            {
 +            strError = "No module name in the StoreModule section.";
 +            return -1;
 +            }
          storeModuleSettings.moduleName = node->getValue(0);
 -        ParseModuleSettings(node, &storeModuleSettings.moduleParams);
 +        storeModuleSettings.moduleParams = toPVS(*node);
          }
  
      if (strcasecmp(node->getName(), "Modules") == 0)
                  child = child->getNextNode();
                  continue;
                  }
 -            MODULE_SETTINGS modSettings;
 -            modSettings.moduleParams.clear();
 -            modSettings.moduleName = child->getValue();
  
 -            ParseModuleSettings(child, &modSettings.moduleParams);
 +            if (child->getValue(0) == NULL)
 +                {
 +                strError = "No module name in the Module section.";
 +                return -1;
 +                }
  
 -            modulesSettings.push_back(modSettings);
 +            modulesSettings.push_back(MODULE_SETTINGS(child->getValue(0), toPVS(*child)));
  
              child = child->getNextNode();
              }
      if (strcasecmp(node->getName(), "ScriptParams") == 0)
          {
          for (int i = 0; node->getValue(i) != NULL; ++i)
-             {
              scriptParams.push_back(node->getValue(i));
-             }
          }
      node = node->getNextNode();
      }
  return 0;
  }
  //-----------------------------------------------------------------------------
 -int SETTINGS_IMPL::ParseDetailStatWritePeriod(const std::string & detailStatPeriodStr)
 -{
 -if (detailStatPeriodStr == "1")
 -    {
 -    detailStatWritePeriod = dsPeriod_1;
 -    return 0;
 -    }
 -else if (detailStatPeriodStr == "1/2")
 -    {
 -    detailStatWritePeriod = dsPeriod_1_2;
 -    return 0;
 -    }
 -else if (detailStatPeriodStr == "1/4")
 -    {
 -    detailStatWritePeriod = dsPeriod_1_4;
 -    return 0;
 -    }
 -else if (detailStatPeriodStr == "1/6")
 -    {
 -    detailStatWritePeriod = dsPeriod_1_6;
 -    return 0;
 -    }
 -
 -return -1;
 -}
 -//-----------------------------------------------------------------------------
index 418777d51d5b8fe24e3e18b9c075a51e69347312,cc35393b2d18fab8d21cc705f3d1687fa031f43c..2bac34e4359a2973059226c7928c36020cae2ef0
@@@ -1,3 -1,9 +1,3 @@@
 - /*
 - $Revision: 1.27 $
 - $Date: 2010/08/19 13:42:30 $
 - $Author: faust $
 - */
 -
  /*
   *    This program is free software; you can redistribute it and/or modify
   *    it under the terms of the GNU General Public License as published by
   *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   */
  
 -/*
 - *    Date: 27.10.2002
 - */
 -
  /*
   *    Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
   */
  
 - /*
 - $Revision: 1.27 $
 - $Date: 2010/08/19 13:42:30 $
 - */
 -
 -
  #ifndef SETTINGS_IMPL_H
  #define SETTINGS_IMPL_H
  
  #include "stg/settings.h"
  #include "stg/common.h"
  #include "stg/module_settings.h"
 +#include "stg/ref.h"
  
  //-----------------------------------------------------------------------------
  enum DETAIL_STAT_PERIOD {
 -dsPeriod_1,
 -dsPeriod_1_2,
 -dsPeriod_1_4,
 -dsPeriod_1_6
 +    dsPeriod_1,
 +    dsPeriod_1_2,
 +    dsPeriod_1_4,
 +    dsPeriod_1_6
  };
  //-----------------------------------------------------------------------------
  class STG_LOGGER;
@@@ -43,7 -58,7 +43,7 @@@ class DOTCONFDocumentNode
  class SETTINGS_IMPL : public SETTINGS {
  public:
      SETTINGS_IMPL(const std::string &);
 -    SETTINGS_IMPL(const SETTINGS_IMPL &);
 +    SETTINGS_IMPL(const SETTINGS_IMPL & rhs);
      virtual ~SETTINGS_IMPL() {}
      SETTINGS_IMPL & operator=(const SETTINGS_IMPL &);
  
@@@ -60,7 -75,7 +60,7 @@@
      const std::string & GetRulesFileName() const { return rules; }
      const std::string & GetLogFileName() const { return logFile; }
      const std::string & GetPIDFileName() const { return pidFile; }
 -    unsigned            GetDetailStatWritePeriod() const 
 +    unsigned            GetDetailStatWritePeriod() const
          { return detailStatWritePeriod; }
      unsigned            GetStatWritePeriod() const { return statWritePeriod * 60; }
      unsigned            GetDayFee() const { return dayFee; }
@@@ -77,6 -92,8 +77,8 @@@
      unsigned            GetMessageTimeout() const { return messageTimeout * 3600 * 24; }
      unsigned            GetFeeChargeType() const { return feeChargeType; }
      bool                GetReconnectOnTariffChange() const { return reconnectOnTariffChange; }
+     bool                GetDisableSessionLog() const { return disableSessionLog; }
+     const std::vector<std::string> & GetFilterParamsLog() const { return filterParamsLog; }
  
      const std::string & GetModulesPath() const { return modulesPath; }
      const MODULE_SETTINGS & GetStoreModuleSettings() const
  
  private:
  
 -    int ParseDetailStatWritePeriod(const std::string & str);
 -    int ParseModuleSettings(const DOTCONFDocumentNode * dirNameNode, std::vector<PARAM_VALUE> * params);
 -
      static void ErrorCallback(void * data, const char * buf);
  
      std::string strError;
      std::string modulesPath;
      std::vector<std::string> dirName;
      std::string confDir;
 -    std::string       scriptsDir;
 +    std::string scriptsDir;
      std::string rules;
      std::string logFile;
      std::string pidFile;
      unsigned    messageTimeout;
      unsigned    feeChargeType;
      bool        reconnectOnTariffChange;
+     bool        disableSessionLog;
+     std::vector<std::string> filterParamsLog;
  
      std::vector<MODULE_SETTINGS> modulesSettings;
      MODULE_SETTINGS storeModuleSettings;
 -    STG_LOGGER & logger;
 +    STG::RefWrapper<STG_LOGGER> logger;
  };
  //-----------------------------------------------------------------------------