summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client-qt/udm-client-qt/client_session.cpp8
-rw-r--r--server/include/client.h4
-rw-r--r--server/include/server.h6
-rw-r--r--server/include/server_session.h8
-rw-r--r--server/include/utilities.h1
-rw-r--r--server/src/client.cpp2
-rw-r--r--server/src/main.cpp4
-rw-r--r--server/src/server.cpp6
-rw-r--r--server/src/server_session.cpp17
9 files changed, 43 insertions, 13 deletions
diff --git a/client-qt/udm-client-qt/client_session.cpp b/client-qt/udm-client-qt/client_session.cpp
index b5c6181..1d12172 100644
--- a/client-qt/udm-client-qt/client_session.cpp
+++ b/client-qt/udm-client-qt/client_session.cpp
@@ -216,6 +216,14 @@ void client_session::handle_connect(const boost::system::error_code &e)
else
{
emit client_connected(true, QString::fromStdString(e.message()));
+ //TODO: something better ?
+ {// for now hust send auth request message
+ client_msg msg;
+ msg.set_type(CLIENT_MSG_TYPE::CLIENT_AUTH_REQUEST);
+ msg.mutable_auth_info()->set_hash_type(PASSWD_HASH_TYPE::HASH_SHA512);
+ msg.mutable_auth_info()->set_password(password_sha512.data());
+ send_message(msg);
+ }
//listen for messages from server
recv_data_ = new char[4];
boost::asio::async_read(*socket_, boost::asio::buffer(recv_data_, 4), boost::bind(&client_session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
diff --git a/server/include/client.h b/server/include/client.h
index 4fe8467..f9daff6 100644
--- a/server/include/client.h
+++ b/server/include/client.h
@@ -6,11 +6,13 @@
class client
{
public:
- client();
+ client(std::string &client_auth_token);
virtual ~client();
protected:
private:
//TODO: client subscriptions should be stored here
+ //TODO: list of timers with direct callbacks to functions for periodic subscription (bost::asio::deadline_timer)
+ //TODO: store sessions ptr list
std::string auth_token;
};
diff --git a/server/include/server.h b/server/include/server.h
index c4ccc97..699fb01 100644
--- a/server/include/server.h
+++ b/server/include/server.h
@@ -24,6 +24,8 @@
#include <boost/asio.hpp>
#include <boost/asio/ssl.hpp>
+#include "config.h"
+#include "client.h"
//TODO ssl
@@ -33,7 +35,7 @@ class server_session;
class server
{
public:
- server(boost::asio::io_service& io_service, short port);
+ server(boost::asio::io_service& io_service, runtime_config_s &config, std::map<std::string, client*> &clients, short port);
private:
void start_accept();
@@ -42,6 +44,8 @@ private:
boost::asio::io_service& io_service_;
boost::asio::ip::tcp::acceptor acceptor_;
boost::asio::ssl::context *context_;
+ runtime_config_s &runtime_config;
+ std::map<std::string, client*> &clients;
};
diff --git a/server/include/server_session.h b/server/include/server_session.h
index b3b6f26..bad8f4f 100644
--- a/server/include/server_session.h
+++ b/server/include/server_session.h
@@ -24,6 +24,8 @@
#include <boost/asio.hpp>
#include <boost/asio/ssl.hpp>
+#include "config.h"
+#include "client.h"
class client_msg;
class server_msg;
@@ -32,7 +34,7 @@ class socket_wraper;
class server_session
{
public:
- server_session(boost::asio::io_service &s, boost::asio::ssl::context *c = nullptr);
+ server_session(boost::asio::io_service &s, runtime_config_s &config, std::map<std::string, client*> &clients_, boost::asio::ssl::context *c = nullptr);
void run();
void send_message(server_msg *msg);
socket_wraper* socket();
@@ -50,6 +52,10 @@ class server_session
boost::asio::io_service &io_service_;
boost::asio::ssl::context *context_;
std::string client_auth_token;
+ runtime_config_s &runtime_config;
+ std::map<std::string, client*> &clients;
+ client *client_;
+ //TODO: store client ptr
};
diff --git a/server/include/utilities.h b/server/include/utilities.h
index 0130cf5..aa78d29 100644
--- a/server/include/utilities.h
+++ b/server/include/utilities.h
@@ -25,6 +25,7 @@
#include <string>
#include <memory>
+//TODO: use glib's xdg api instead ?
std::string replace_home_var(const std::string &path);
class server_msg;
diff --git a/server/src/client.cpp b/server/src/client.cpp
index 21ea62a..858b230 100644
--- a/server/src/client.cpp
+++ b/server/src/client.cpp
@@ -1,6 +1,6 @@
#include "client.h"
-client::client()
+client::client(std::string &client_auth_token) : auth_token(client_auth_token)
{
//ctor
}
diff --git a/server/src/main.cpp b/server/src/main.cpp
index 30126fa..2786435 100644
--- a/server/src/main.cpp
+++ b/server/src/main.cpp
@@ -38,7 +38,7 @@ modules_handler *modules = nullptr;
namespace bpo = boost::program_options;
-std::map<std::string, client> clients; //auth token used for key
+std::map<std::string, client*> clients; //auth token used for key
runtime_config_s runtime_config;
@@ -170,7 +170,7 @@ int main(int argc, char *argv[])
boost::asio::io_service io_service_server;
try{
//TODO: server options ip address, interface name
- serv = new server(io_service_server, runtime_config.config_file.get<int>("server.port", 6613));
+ serv = new server(io_service_server, runtime_config, clients, runtime_config.config_file.get<int>("server.port", 6613));
}
catch(std::exception &e)
{
diff --git a/server/src/server.cpp b/server/src/server.cpp
index 818cc10..8c2c965 100644
--- a/server/src/server.cpp
+++ b/server/src/server.cpp
@@ -24,16 +24,14 @@
#include "server.h"
#include "server_session.h"
#include "utilities.h"
-#include "config.h"
#include "../../protocol/udm.pb.h"
#include "socket_wraper.h"
-extern runtime_config_s runtime_config;
-server::server(boost::asio::io_service& io_service, short port) : io_service_(io_service), acceptor_(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port))
+server::server(boost::asio::io_service& io_service,runtime_config_s &config, std::map<std::string, client*> &clients_, short port) : io_service_(io_service), acceptor_(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)), runtime_config(config), clients(clients_)
{
if(runtime_config.config_file.get<bool>("server.enable_encryption", false))
{
@@ -50,7 +48,7 @@ server::server(boost::asio::io_service& io_service, short port) : io_service_(io
void server::start_accept()
{
- server_session* new_session = new server_session(io_service_);
+ server_session* new_session = new server_session(io_service_, runtime_config, clients);
if(runtime_config.config_file.get<bool>("server.enable_encryption", false))
acceptor_.async_accept(new_session->socket()->get_ssl_socket().lowest_layer(), boost::bind(&server::handle_accept, this, new_session, boost::asio::placeholders::error));
else
diff --git a/server/src/server_session.cpp b/server/src/server_session.cpp
index 3b8c3b1..811b411 100644
--- a/server/src/server_session.cpp
+++ b/server/src/server_session.cpp
@@ -24,15 +24,15 @@
#include "server_session.h"
#include "../../protocol/udm.pb.h"
#include "utilities.h"
-#include "config.h"
#include "socket_wraper.h"
+#include "client.h"
-extern runtime_config_s runtime_config;
+extern std::map<std::string, client> clients;
-server_session::server_session(boost::asio::io_service &s, boost::asio::ssl::context *c) : io_service_(s), context_(c)
+server_session::server_session(boost::asio::io_service &s, runtime_config_s &config, std::map<std::string, client*> &clients_, boost::asio::ssl::context *c) : io_service_(s), context_(c), runtime_config(config), clients(clients_)
{
}
@@ -175,6 +175,17 @@ void server_session::handle_command(client_msg *msg)
{
client_auth_token = generate_auth_token();
m.mutable_auth_reply()->set_auth_token(client_auth_token);
+ auto i = clients.find(client_auth_token);
+ if(i == clients.end())
+ {
+ auto a = new client(client_auth_token);
+ clients[client_auth_token] = a;
+ client_ = a;
+ }
+ else
+ client_ = i->second;
+
+
//set auth token
}
send_message(&m);