X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/bf69e959b3e75cb3eb3748e93df9dcfe5b82aa17..8c98969b4f3f73167a31d195ed792c35f82e9566:/projects/stargazer/user.cpp diff --git a/projects/stargazer/user.cpp b/projects/stargazer/user.cpp index 267967d0..d8368c4d 100644 --- a/projects/stargazer/user.cpp +++ b/projects/stargazer/user.cpp @@ -123,8 +123,6 @@ currIP.AddAfterNotifier(&ipNotifier); lastScanMessages = 0; -writeFreeMbTraffCost = settings->GetWriteFreeMbTraffCost(); - pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); @@ -206,8 +204,6 @@ currIP.AddAfterNotifier(&ipNotifier); lastScanMessages = 0; -writeFreeMbTraffCost = settings->GetWriteFreeMbTraffCost(); - property.SetProperties(u.property); pthread_mutexattr_t attr; @@ -339,10 +335,11 @@ int USER::WriteMonthStat() { STG_LOCKER lock(&mutex, __FILE__, __LINE__); time_t tt = stgTime - 3600; -struct tm * t1 = localtime(&tt); +struct tm t1; +localtime_r(&tt, &t1); USER_STAT stat(property.GetStat()); -if (store->SaveMonthStat(stat, t1->tm_mon, t1->tm_year, login)) +if (store->SaveMonthStat(stat, t1.tm_mon, t1.tm_year, login)) { WriteServLog("Cannot write month stat for user %s.", login.c_str()); WriteServLog("%s", store->GetStrError().c_str()); @@ -770,7 +767,8 @@ sessionUpload[dir] += len; //Add detailed stat -if (!writeFreeMbTraffCost && freeMb.ConstData() >= 0) +if (!settings->GetWriteFreeMbTraffCost() && + freeMb.ConstData() >= 0) cost = 0; #ifdef TRAFF_STAT_WITH_PORTS @@ -860,7 +858,8 @@ sessionDownload[dir] += len; //Add detailed stat -if (!writeFreeMbTraffCost && freeMb.ConstData() >= 0) +if (!settings->GetWriteFreeMbTraffCost() && + freeMb.ConstData() >= 0) cost = 0; #ifdef TRAFF_STAT_WITH_PORTS @@ -1007,13 +1006,13 @@ STG_LOCKER lock(&mutex, __FILE__, __LINE__); static int daysInMonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; -struct tm * tms; +struct tm tms; time_t t = stgTime; -tms = localtime(&t); +localtime_r(&t, &tms); -time_t secMonth = daysInMonth[(tms->tm_mon + 11) % 12] * 24 * 3600; // Previous month +time_t secMonth = daysInMonth[(tms.tm_mon + 11) % 12] * 24 * 3600; // Previous month -if (tms->tm_year % 4 == 0 && tms->tm_mon == 1) +if (tms.tm_year % 4 == 0 && tms.tm_mon == 1) { // Leap year secMonth += 24 * 3600; @@ -1031,12 +1030,11 @@ void USER::SetPassiveTimeAsNewUser() { STG_LOCKER lock(&mutex, __FILE__, __LINE__); -time_t t; -struct tm * tm; -t = stgTime; -tm = localtime(&t); +time_t t = stgTime; +struct tm tm; +localtime_r(&t, &tm); int daysCurrMon = DaysInCurrentMonth(); -double pt = (tm->tm_mday - 1) / (double)daysCurrMon; +double pt = (tm.tm_mday - 1) / (double)daysCurrMon; passiveTime = (time_t)(pt * 24 * 3600 * daysCurrMon); } @@ -1188,7 +1186,7 @@ else return 0; } //----------------------------------------------------------------------------- -int USER::SendMessage(const STG_MSG & msg) +int USER::SendMessage(STG_MSG & msg) const { // No lock `cause we are already locked from caller int ret = -1; @@ -1198,65 +1196,27 @@ while (it != authorizedBy.end()) if (!(*it++)->SendMessage(msg, currIP)) ret = 0; } +if (!ret) + { +#ifndef DEBUG + //TODO: gcc v. 4.x generate ICE on x86_64 + msg.header.lastSendTime = time(NULL); +#else + msg.header.lastSendTime = stgTime; +#endif + msg.header.repeat--; + } return ret; } //----------------------------------------------------------------------------- -int USER::ScanMessage() +void USER::ScanMessage() { // No lock `cause we are already locked from caller // We need not check for the authorizedBy `cause it has already checked by caller -/*vector hdrsList; - -if (store->GetMessageHdrs(&hdrsList, login)) - { - printfd(__FILE__, "Error GetMessageHdrs %s\n", store->GetStrError().c_str()); - return -1; - } - -for (unsigned i = 0; i < hdrsList.size(); i++) - { - - if (hdrsList[i].lastSendTime + hdrsList[i].repeatPeriod * 60 < (unsigned)stgTime) - { - STG_MSG msg; - if (store->GetMessage(hdrsList[i].id, &msg, login) == 0) - { - if (SendMessage(msg) == 0) - { - msg.header.repeat--; - if (msg.header.repeat < 0) - { - printfd(__FILE__, "DelMessage\n"); - store->DelMessage(hdrsList[i].id, login); - } - else - { - #ifndef DEBUG - //TODO: gcc v. 4.x generate ICE on x86_64 - msg.header.lastSendTime = time(NULL); - #else - msg.header.lastSendTime = stgTime; - #endif - if (store->EditMessage(msg, login)) - { - printfd(__FILE__, "EditMessage Error %s\n", store->GetStrError().c_str()); - } - } - } - } - else - { - WriteServLog("Cannot get message for user %s.", login.c_str()); - WriteServLog("%s", store->GetStrError().c_str()); - } - } - }*/ - std::list::iterator it(messages.begin()); while (it != messages.end()) { - printfd(__FILE__, "Message timeout: %d, delta: %f\n", settings->GetMessageTimeout(), difftime(stgTime, it->header.creationTime)); if (settings->GetMessageTimeout() > 0 && difftime(stgTime, it->header.creationTime) > settings->GetMessageTimeout()) { @@ -1269,7 +1229,7 @@ while (it != messages.end()) messages.erase(it++); continue; } - if (static_cast(it->header.lastSendTime + it->header.repeatPeriod * 60) < stgTime) + if (it->GetNextSendTime() <= stgTime) { if (SendMessage(*it)) { @@ -1277,7 +1237,6 @@ while (it != messages.end()) ++it; continue; } - it->header.repeat--; if (it->header.repeat < 0) { if (store->DelMessage(it->header.id, login)) @@ -1289,12 +1248,6 @@ while (it != messages.end()) } else { - #ifndef DEBUG - //TODO: gcc v. 4.x generate ICE on x86_64 - it->header.lastSendTime = time(NULL); - #else - it->header.lastSendTime = stgTime; - #endif if (store->EditMessage(*it, login)) { WriteServLog("Error modifying message: '%s'", store->GetStrError().c_str()); @@ -1303,13 +1256,7 @@ while (it != messages.end()) ++it; } } - else - { - ++it; - } } - -return 0; } //----------------------------------------------------------------------------- //-----------------------------------------------------------------------------