X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/7a86e28eea13406bbe23e5a3da29aa763cdab67a..ef5fa0787eabd20beef3110c2fe55955d472ddc9:/projects/sgauthstress/main.cpp diff --git a/projects/sgauthstress/main.cpp b/projects/sgauthstress/main.cpp index 96c58203..b0819c3c 100644 --- a/projects/sgauthstress/main.cpp +++ b/projects/sgauthstress/main.cpp @@ -25,104 +25,35 @@ */ #include -#include -#include -#include #include -#include -#include #include #include +#include -#include "stg/ia.h" #include "stg/common.h" -#include "web.h" -#include "settings_impl.h" +#include "stg/store.h" +#include "stg/user_conf.h" -int mes; -char infoText[256]; -char messageText[256]; - -const int winKOI = 0; - -IA_CLIENT_PROT * clnp; -WEB * web = NULL; - -using namespace std; +#include "settings.h" +#include "store_loader.h" +#include "proto.h" +#include "user.h" time_t stgTime; +bool running; //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- void Usage() { -printf("sgauth \n"); -} -//----------------------------------------------------------------------------- -void SetDirName(const vector & dn, void *) -{ -for (int j = 0; j < DIR_NUM; j++) - { - if (winKOI) - { - string dir; - KOIToWin(dn[j], &dir); - if (web) - web->SetDirName(dir, j); - } - else - { - if (web) - web->SetDirName(dn[j], j); - } - } -} -//----------------------------------------------------------------------------- -void StatUpdate(const LOADSTAT & ls, void *) -{ -if (web) - web->UpdateStat(ls); -} -//----------------------------------------------------------------------------- -void StatusChanged(int, void *) -{ -} -//----------------------------------------------------------------------------- -void ShowMessage(const string & message, int i, int, int, void *) -{ -if (web) - web->AddMessage(message, i); -} -//----------------------------------------------------------------------------- -void ShowError(const string & message, int, void *) -{ -if (web) - web->AddMessage(message, 0); -} -//----------------------------------------------------------------------------- -void CatchUSR1(int) -{ -if (clnp->GetAuthorized()) - { - cout << "Connect" << endl; - clnp->Connect(); - } -} -//----------------------------------------------------------------------------- -void CatchUSR2(int) -{ -cout << "Disconnect" << endl; -clnp->Disconnect(); +std::cout << "Usage:\n\nsgauth " << std::endl; } //----------------------------------------------------------------------------- void CatchTERM(int) { -cout << "Terminated" << endl; -clnp->Disconnect(); -sleep(2); -exit(0); +running = false; } //----------------------------------------------------------------------------- static void SetSignalHandlers() @@ -144,136 +75,96 @@ newsa.sa_mask = sigmask; newsa.sa_flags = 0; sigaction(SIGINT, &newsa, &oldsa); -sigemptyset(&sigmask); -sigaddset(&sigmask, SIGUSR1); -newsa.sa_handler = CatchUSR1; -newsa.sa_mask = sigmask; -newsa.sa_flags = 0; -sigaction(SIGUSR1, &newsa, &oldsa); - -sigemptyset(&sigmask); -sigaddset(&sigmask, SIGUSR2); -newsa.sa_handler = CatchUSR2; -newsa.sa_mask = sigmask; -newsa.sa_flags = 0; -sigaction(SIGUSR2, &newsa, &oldsa); - return; } //----------------------------------------------------------------------------- int main(int argc, char *argv[]) { -SETTINGS_IMPL settings; +SETTINGS settings; if (argc == 2) { settings.SetConfFile(argv[1]); } -else - { - // Usage - } if (settings.ReadSettings()) { - printf("ReadSettingsError\n"); - printf("%s\n", settings.GetStrError().c_str()); - exit(-1); + std::cerr << "Failed to read settings: '" + << settings.GetStrError() << "'" << std::endl; + Usage(); + return -1; } -settings.Print(); -if (settings.GetDaemon()) - { - switch (fork()) - { - case -1: - exit(1); - break; +SetSignalHandlers(); - case 0: - setsid(); - break; +PROTO proto(settings.GetServerName(), + settings.GetServerPort(), + settings.GetLocalPort(), + 10); - default: - exit(0); - break; - } +STORE_LOADER storeLoader(settings.GetModulesPath(), settings.GetStoreModuleSettings()); +if (storeLoader.Load()) + { + std::cerr << "Failed to load storage plugin: '" << storeLoader.GetStrError() << "'" << std::endl; + return -1; } -clnp = new IA_CLIENT_PROT(settings.GetServerName(), settings.GetServerPort(), settings.GetLocalPort()); +STORE * dataStore = storeLoader.GetStore(); -if (!settings.GetNoWeb()) +std::vector userList; +if (dataStore->GetUsersList(&userList)) { - web = new WEB(); - web->SetRefreshPagePeriod(settings.GetRefreshPeriod()); - web->SetListenAddr(settings.GetListenWebIP()); - web->Start(); + std::cerr << "Failed to get user list: '" << dataStore->GetStrError() << "'" << std::endl; + return -1; } -clnp->SetLogin(settings.GetLogin()); -clnp->SetPassword(settings.GetPassword()); - -clnp->SetStatusChangedCb(StatusChanged, NULL); -clnp->SetInfoCb(ShowMessage, NULL); -clnp->SetErrorCb(ShowError, NULL); -clnp->SetDirNameCb(SetDirName, NULL); -clnp->SetStatChangedCb(StatUpdate, NULL); -clnp->SetReconnect(settings.GetReconnect()); - -clnp->Start(); - -SetSignalHandlers(); - -#ifdef LINUX -for (int i = 1; i < argc; i++) - memset(argv[i], 0, strlen(argv[i])); - -if(argc > 1) - strcpy(argv[1], "Connecting..."); -#endif - -#ifdef FREEBSD -setproctitle("Connecting..."); -#endif -clnp->Connect(); - -while (1) +std::list ips; { - usleep(200000); - - char state[20]; - - if (clnp->GetAuthorized()) - { - if (settings.GetShowPid()) - sprintf(state, "On %d", getpid()); - else - strcpy(state, "Online"); - } - else + std::vector::const_iterator it; + for (it = userList.begin(); it != userList.end(); ++it) { - if (settings.GetShowPid()) - sprintf(state, "Off %d", getpid()); - else - strcpy(state, "Offline"); + USER_CONF userConf; + if (dataStore->RestoreUserConf(&userConf, *it)) + { + std::cerr << "Failed to read user conf: '" << dataStore->GetStrError() << "'" << std::endl; + return -1; + } + proto.AddUser( + USER( + *it, + userConf.password, + userConf.ips[0].ip + ) + ); + ips.push_back(userConf.ips[0].ip); } + } - #ifdef LINUX - for (int i = 1; i < argc; i++) - memset(argv[i], 0, strlen(argv[i])); - if(argc > 1) - strcpy(argv[1], state); - #endif +if (!proto.Start()) + { + std::cerr << "Failed to start listening thread: '" << proto.GetStrError() << "'" << std::endl; + return -1; + } + +std::list::const_iterator it; +for (it = ips.begin(); it != ips.end(); ++it) + { + proto.Connect(*it); + } - #ifdef FREEBSD - setproctitle(state); - #endif +std::cout << "Successfully loaded " << proto.UserCount() << " users" << std::endl; - #ifdef FREEBSD_5 - setproctitle(state); - #endif +running = true; +while (running) + { + struct timespec ts = {0, 200000000}; + nanosleep(&ts, NULL); } +proto.Stop(); + +storeLoader.Unload(); + return 0; } //-----------------------------------------------------------------------------