#include <csignal>
#include <iostream>
+#include <vector>
+#include <list>
-#include "stg/ia.h"
#include "stg/common.h"
+#include "stg/store.h"
+#include "stg/user_conf.h"
#include "settings.h"
+#include "store_loader.h"
+#include "proto.h"
+#include "user.h"
time_t stgTime;
bool running;
//-----------------------------------------------------------------------------
void Usage()
{
-std::cout << "sgauth <path_to_config>" << std::endl;
-}
-//-----------------------------------------------------------------------------
-void StatUpdate(const LOADSTAT &, void *)
-{
-}
-//-----------------------------------------------------------------------------
-void StatusChanged(int, void *)
-{
-}
-//-----------------------------------------------------------------------------
-void ShowMessage(const string &, int, int, int, void *)
-{
-}
-//-----------------------------------------------------------------------------
-void ShowError(const string &, int, void *)
-{
+std::cout << "Usage:\n\nsgauth <path_to_config>" << std::endl;
}
//-----------------------------------------------------------------------------
void CatchTERM(int)
if (settings.ReadSettings())
{
- std::cerr << "Failed to read settings\n"
- << settings.GetStrError() << std::endl;
+ std::cerr << "Failed to read settings: '"
+ << settings.GetStrError() << "'" << std::endl;
Usage();
return -1;
}
SetSignalHandlers();
-IA_CLIENT_PROT proto(settings.GetServerName(), settings.GetServerPort(), settings.GetLocalPort());
+PROTO proto(settings.GetServerName(),
+ settings.GetServerPort(),
+ settings.GetLocalPort(),
+ 10);
+
+STORE_LOADER storeLoader(settings.GetModulesPath(), settings.GetStoreModuleSettings());
+if (storeLoader.Load())
+ {
+ std::cerr << "Failed to load storage plugin: '" << storeLoader.GetStrError() << "'" << std::endl;
+ return -1;
+ }
+
+STORE * dataStore = storeLoader.GetStore();
-proto.SetLogin(settings.GetLogin());
-proto.SetPassword(settings.GetPassword());
+std::vector<std::string> userList;
+if (dataStore->GetUsersList(&userList))
+ {
+ std::cerr << "Failed to get user list: '" << dataStore->GetStrError() << "'" << std::endl;
+ return -1;
+ }
-proto.SetStatusChangedCb(StatusChanged, NULL);
-proto.SetInfoCb(ShowMessage, NULL);
-proto.SetErrorCb(ShowError, NULL);
-proto.SetStatChangedCb(StatUpdate, NULL);
+std::list<uint32_t> ips;
+ {
+ std::vector<std::string>::const_iterator it;
+ for (it = userList.begin(); it != userList.end(); ++it)
+ {
+ 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);
+ }
+ }
-proto.Start();
+if (!proto.Start())
+ {
+ std::cerr << "Failed to start listening thread: '" << proto.GetStrError() << "'" << std::endl;
+ return -1;
+ }
-proto.Connect();
+std::list<uint32_t>::const_iterator it;
+for (it = ips.begin(); it != ips.end(); ++it)
+ {
+ proto.Connect(*it);
+ }
+
+std::cout << "Successfully loaded " << proto.UserCount() << " users" << std::endl;
running = true;
while (running)
{
- usleep(200000);
+ struct timespec ts = {0, 200000000};
+ nanosleep(&ts, NULL);
}
-proto.Disconnect();
-
proto.Stop();
+storeLoader.Unload();
+
return 0;
}
//-----------------------------------------------------------------------------