X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/d67dfa3a891c9e2bab9dff880ee568862ef3b740..db7b9b78524bcdd1f2a5d82c1696bcd2f96d9491:/projects/stargazer/plugins/other/smux/smux.cpp diff --git a/projects/stargazer/plugins/other/smux/smux.cpp b/projects/stargazer/plugins/other/smux/smux.cpp index 8faccc2d..551a28f1 100644 --- a/projects/stargazer/plugins/other/smux/smux.cpp +++ b/projects/stargazer/plugins/other/smux/smux.cpp @@ -34,8 +34,10 @@ return a.first.PrefixLess(b.first); } SMUX_SETTINGS::SMUX_SETTINGS() - : ip(0), - port(0) + : errorStr(), + ip(0), + port(0), + password() {} int SMUX_SETTINGS::ParseSettings(const MODULE_SETTINGS & s) @@ -94,6 +96,11 @@ SMUX::SMUX() services(NULL), corporations(NULL), traffcounter(NULL), + errorStr(), + smuxSettings(), + settings(), + thread(), + mutex(), running(false), stopped(true), sock(-1), @@ -163,6 +170,7 @@ sensors[OID(".1.3.6.1.4.1.38313.1.1.8")] = new PassiveUsersSensor(*users); sensors[OID(".1.3.6.1.4.1.38313.1.1.9")] = new CreditUsersSensor(*users); sensors[OID(".1.3.6.1.4.1.38313.1.1.10")] = new FreeMbUsersSensor(*users); sensors[OID(".1.3.6.1.4.1.38313.1.1.11")] = new TariffChangeUsersSensor(*users); +sensors[OID(".1.3.6.1.4.1.38313.1.1.12")] = new ActiveUsersSensor(*users); // Tariffs sensors[OID(".1.3.6.1.4.1.38313.1.2.1")] = new TotalTariffsSensor(*tariffs); // Admins @@ -217,22 +225,10 @@ if (!stopped) struct timespec ts = {0, 200000000}; nanosleep(&ts, NULL); } - - //after 5 seconds waiting thread still running. now killing it - if (!stopped) - { - printfd(__FILE__, "SMUX::Stop() - failed to stop thread, killing it\n"); - if (pthread_kill(thread, SIGINT)) - { - errorStr = "Cannot kill thread."; - printfd(__FILE__, "SMUX::Stop() - Cannot kill thread\n"); - return -1; - } - printfd(__FILE__, "SMUX::Stop() - killed Run\n"); - } } -pthread_join(thread, NULL); +if (stopped) + pthread_join(thread, NULL); ResetNotifiers(); @@ -252,6 +248,12 @@ sensors.erase(sensors.begin(), sensors.end()); close(sock); +if (!stopped) + { + running = true; + return -1; + } + printfd(__FILE__, "SMUX::Stop() - After\n"); return 0; } @@ -267,6 +269,10 @@ return 0; void * SMUX::Runner(void * d) { +sigset_t signalSet; +sigfillset(&signalSet); +pthread_sigmask(SIG_BLOCK, &signalSet, NULL); + SMUX * smux = static_cast(d); smux->Run(); @@ -276,8 +282,11 @@ return NULL; void SMUX::Run() { -SendOpenPDU(sock); -SendRReqPDU(sock); +stopped = true; +if (!SendOpenPDU(sock)) + return; +if (!SendRReqPDU(sock)) + return; running = true; stopped = false; @@ -328,15 +337,14 @@ return false; bool SMUX::DispatchPDUs(const SMUX_PDUs_t * pdus) { -SMUXHandlers::iterator it; -it = smuxHandlers.find(pdus->present); +SMUXHandlers::iterator it(smuxHandlers.find(pdus->present)); if (it != smuxHandlers.end()) { return (this->*(it->second))(pdus); } +#ifdef SMUX_DEBUG else { -#ifdef SMUX_DEBUG switch (pdus->present) { case SMUX_PDUs_PR_NOTHING: @@ -352,8 +360,8 @@ else printfd(__FILE__, "PDUs: undefined\n"); } asn_fprint(stderr, &asn_DEF_SMUX_PDUs, pdus); -#endif } +#endif return false; } @@ -459,15 +467,11 @@ tariffs->DelNotifierAdd(&addDelTariffNotifier); users->DelNotifierUserDel(&delUserNotifier); users->DelNotifierUserAdd(&addUserNotifier); -std::list::iterator it = notifiers.begin(); +std::list::iterator it(notifiers.begin()); while (it != notifiers.end()) { it->GetUserPtr()->GetProperty().tariffName.DelAfterNotifier(&(*it)); ++it; } -} - -void CHG_AFTER_NOTIFIER::Notify(const std::string &, const std::string &) -{ -smux.UpdateTables(); +notifiers.clear(); }