diff options
-rw-r--r-- | client-qt/udm-client-qt/client_session.cpp | 8 | ||||
-rw-r--r-- | server/include/client.h | 4 | ||||
-rw-r--r-- | server/include/server.h | 6 | ||||
-rw-r--r-- | server/include/server_session.h | 8 | ||||
-rw-r--r-- | server/include/utilities.h | 1 | ||||
-rw-r--r-- | server/src/client.cpp | 2 | ||||
-rw-r--r-- | server/src/main.cpp | 4 | ||||
-rw-r--r-- | server/src/server.cpp | 6 | ||||
-rw-r--r-- | server/src/server_session.cpp | 17 |
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); |