]> git.stg.codes - stg.git/commitdiff
Merge branch 'stg-2.409' into stg-2.409-radius
authorMaxim Mamontov <faust.madf@gmail.com>
Sun, 20 Dec 2015 17:26:36 +0000 (19:26 +0200)
committerMaxim Mamontov <faust.madf@gmail.com>
Sun, 20 Dec 2015 17:26:36 +0000 (19:26 +0200)
include/stg/user_ips.h
projects/stargazer/plugins/configuration/sgconfig/parser_tariffs.cpp
projects/stargazer/plugins/store/firebird/firebird_store_tariffs.cpp
projects/stargazer/plugins/store/postgresql/postgresql_store_tariffs.cpp
stglibs/dotconfpp.lib/dotconfpp.cpp

index e55f99fa7fc114460681fcebe87c8639ef2ee259..52e5df77d7dba6e9e702ab634caef19cd3f49325 100644 (file)
@@ -166,7 +166,7 @@ return false;
 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;
index cc32b6fcca41a022ec4a44c56089a216faa3de68..0607db6fb12fbde08147a0af3418250ae3743bb3 100644 (file)
@@ -56,6 +56,16 @@ std::string AOS2String(const A & array, size_t size, const F C::* field, F multi
     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)
 {
@@ -64,15 +74,13 @@ bool String2AOS(const std::string & source, A & array, size_t size, RESETABLE<F>
     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;
 }
 
index f7aef9663a7269a6e358a42309acf9e0dd830450..a7b719edb3eb5847e9191da4bb8aba6def298712 100644 (file)
 #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
 {
@@ -305,8 +312,8 @@ try
     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;
         }
index dabc06db5586a9c5232eebef51fd66936f123986..045411b1499f822400cfc860831a1ebd6661d1d9 100644 (file)
 #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
 {
@@ -568,8 +575,8 @@ for (int i = 0; i < std::min(tuples, DIR_NUM); ++i)
         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;
         }
index caf5a590246a656a9b8a1648c02bf2cb5b64e46e..8f766f0101bfc63c40ef17867767360d1cebd6ae 100644 (file)
@@ -336,7 +336,7 @@ int DOTCONFDocument::setContent(const char * _fileName)
     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;
     }
 
@@ -514,9 +514,9 @@ void DOTCONFDocument::error(int lineNum, const char * fileName, const char * fmt
     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);