summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss@sss.chaoslab.ru>2015-08-06 04:30:27 +0300
committerGluzskiy Alexandr <sss@sss.chaoslab.ru>2015-08-06 04:30:27 +0300
commit1461988ab8387f86d929cbba70bc4839447693f6 (patch)
tree1142409a754415abc965f2bf8563596beb4b108b
parenta1a9b18e23e222e324bdcc2eccb9e8b6d9c6d00f (diff)
protocol:
removed login field in auth_info added password hash algorithm selection support to auth_info client-qt: basic implementation of connect widget (working)
-rw-r--r--client-qt/udm-client-qt/client_session.cpp13
-rw-r--r--client-qt/udm-client-qt/client_session.h5
-rw-r--r--client-qt/udm-client-qt/connect_widget.cpp39
-rw-r--r--client-qt/udm-client-qt/connect_widget.h16
-rw-r--r--client-qt/udm-client-qt/udm_main.cpp8
-rw-r--r--client-qt/udm-client-qt/udm_main.h4
-rw-r--r--protocol/udm.proto11
7 files changed, 85 insertions, 11 deletions
diff --git a/client-qt/udm-client-qt/client_session.cpp b/client-qt/udm-client-qt/client_session.cpp
index 60f462c..c034aa1 100644
--- a/client-qt/udm-client-qt/client_session.cpp
+++ b/client-qt/udm-client-qt/client_session.cpp
@@ -59,9 +59,10 @@ tcp::socket& client_session::socket()
return socket_;
}
-void client_session::client_connect(QString host, int port)
+void client_session::client_connect(QString host, QString password, int port)
{
//TODO: settings for connection timeout
+ this->pasword = password;
boost::asio::ip::tcp::resolver r(io_service_);
boost::asio::ip::tcp::endpoint ep;
ep.port(port);
@@ -77,6 +78,7 @@ void client_session::handle_connect(const boost::system::error_code &e)
//TODO: settings for reconnect count and timeout
emit client_connected(false, QString::fromStdString(e.message()));
BOOST_LOG_TRIVIAL(error)<<__FILE__<<":"<<__LINE__<<"\t"<<typeid(this).name()<<"::"<<__func__<<"\terror: "<<e.message();
+ delete this; //suicide
}
else
{
@@ -159,6 +161,15 @@ void client_session::run_io_service()
io_service_.run();
}
+client_session::~client_session()
+{
+ //TODO: check this, reimplement
+ io_service_.stop();
+ boost::asio::io_service *s = &io_service_;
+ delete s;
+ emit terminate_thread();
+}
+
/*boost::asio::io_service &client_session::io_service()
{
return io_service_;
diff --git a/client-qt/udm-client-qt/client_session.h b/client-qt/udm-client-qt/client_session.h
index 192d15b..df75640 100644
--- a/client-qt/udm-client-qt/client_session.h
+++ b/client-qt/udm-client-qt/client_session.h
@@ -40,6 +40,7 @@ class client_session : public QObject
Q_OBJECT
public:
explicit client_session(QObject *parent = 0, boost::asio::io_service *io_service = nullptr);
+ ~client_session();
// boost::asio::io_service &io_service();
tcp::socket& socket();
@@ -47,9 +48,10 @@ public:
signals:
void client_connected(bool success, QString error_text); //we are in threads, no links here
void server_message_received(server_msg msg); //we are in threads, no links here
+ void terminate_thread();
public slots:
- void client_connect(QString host, int port);
+ void client_connect(QString host, QString password, int port);
void run_io_service();
void send_message(client_msg &msg);
@@ -60,6 +62,7 @@ private:
char *recv_data_;
boost::asio::io_service &io_service_;
tcp::socket socket_;
+ QString pasword;
};
#endif // CLIENT_SESSION_H
diff --git a/client-qt/udm-client-qt/connect_widget.cpp b/client-qt/udm-client-qt/connect_widget.cpp
index ad171cf..a33c49b 100644
--- a/client-qt/udm-client-qt/connect_widget.cpp
+++ b/client-qt/udm-client-qt/connect_widget.cpp
@@ -21,9 +21,48 @@
#include "connect_widget.h"
+#include <QLineEdit>
+#include <QGridLayout>
+#include <QLabel>
+#include <QPushButton>
+#include <QSpacerItem>
connect_widget::connect_widget(QWidget *parent) : QWidget(parent)
{
+ edit_host = new QLineEdit(this), edit_port = new QLineEdit(this), edit_passwd = new QLineEdit(this);
+ lbl_host = new QLabel(tr("host") + ":", this);
+ lbl_port = new QLabel(tr("port") + ":", this);
+ lbl_passwd = new QLabel(tr("password") + ":", this);
+ btn_connect = new QPushButton(tr("Connect"), this);
+ btn_close = new QPushButton(tr("Close"), this);
+ edit_host->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
+ edit_port->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
+ edit_passwd->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
+ elements_grid = new QGridLayout(this);
+ elements_grid->addWidget(lbl_host, 0, 0);
+ elements_grid->addWidget(edit_host, 0, 1);
+ elements_grid->addWidget(lbl_port, 0, 2);
+ elements_grid->addWidget(edit_port, 0, 3);
+ elements_grid->addWidget(lbl_passwd, 1, 0);
+ elements_grid->addWidget(edit_passwd, 1, 1, 1, 2);
+ spacer_h = new QSpacerItem(1, 1, QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+ elements_grid->addItem(spacer_h, 2, 0, 1, 4);
+ elements_grid->addWidget(btn_connect, 3, 0, 1, 2);
+ elements_grid->addWidget(btn_close, 3, 2, 1, 2);
+ connect(btn_connect, SIGNAL(clicked(bool)), this, SLOT(connect_clicked()));
+}
+
+connect_widget::~connect_widget()
+{
+ edit_host->deleteLater();
+ edit_port->deleteLater();
+ elements_grid->deleteLater();
}
+void connect_widget::connect_clicked()
+{
+ //TODO: check entered values
+ QString host = edit_host->text(), pass = edit_passwd->text();
+ emit client_connect(host, pass, edit_port->text().toInt());
+}
diff --git a/client-qt/udm-client-qt/connect_widget.h b/client-qt/udm-client-qt/connect_widget.h
index d8c93ad..9b2470b 100644
--- a/client-qt/udm-client-qt/connect_widget.h
+++ b/client-qt/udm-client-qt/connect_widget.h
@@ -24,19 +24,31 @@
#include <QWidget>
-class client_session;
-class QThread;
+class QLineEdit;
+class QGridLayout;
+class QLabel;
+class QPushButton;
+class QSpacerItem;
class connect_widget : public QWidget
{
Q_OBJECT
public:
explicit connect_widget(QWidget *parent = 0);
+ ~connect_widget();
signals:
+ void client_connect(QString &host, QString &password, int port);
public slots:
+ void connect_clicked();
private:
+ QLineEdit *edit_host, *edit_port, *edit_passwd;
+ QGridLayout *elements_grid;
+ QLabel *lbl_host, *lbl_port, *lbl_passwd;
+ QPushButton *btn_connect, *btn_close;
+ QSpacerItem *spacer_h;
+
};
#endif // CONNECT_WIDGET_H
diff --git a/client-qt/udm-client-qt/udm_main.cpp b/client-qt/udm-client-qt/udm_main.cpp
index 103f8b7..02c0f9a 100644
--- a/client-qt/udm-client-qt/udm_main.cpp
+++ b/client-qt/udm-client-qt/udm_main.cpp
@@ -42,20 +42,22 @@ udm_main::~udm_main()
void udm_main::show_connect_widget()
{
connect_widget *w = new connect_widget;
+ connect(w, SIGNAL(client_connect(QString&,QString&,int)), this, SLOT(client_connect(QString&,QString&,int)));
//TODO: make connection to other slots related to connection
//TODO: destroy widget on close
w->show();
}
-void udm_main::client_connect(QString &host, int port)
+void udm_main::client_connect(QString &host, QString &password, int port)
{
thread_client_session = new QThread(this);
io_service_ = new boost::asio::io_service;
session = new client_session(0, io_service_); //parent must be 0 here
- connect(this, SIGNAL(connect_signal(QString,int)), session, SLOT(client_connect(QString,int)));
+ connect(this, SIGNAL(connect_signal(QString,QString,int)), session, SLOT(client_connect(QString,QString,int)));
connect(this, SIGNAL(run_client_io_loop()), session, SLOT(run_io_service()));
+ connect(session, SIGNAL(terminate_thread()), thread_client_session, SLOT(terminate()));
session->moveToThread(thread_client_session);
thread_client_session->start();
- emit connect_signal(host, port);
+ emit connect_signal(host, password, port);
emit run_client_io_loop();
}
diff --git a/client-qt/udm-client-qt/udm_main.h b/client-qt/udm-client-qt/udm_main.h
index 7dae3f1..af8c7a7 100644
--- a/client-qt/udm-client-qt/udm_main.h
+++ b/client-qt/udm-client-qt/udm_main.h
@@ -45,9 +45,9 @@ public:
~udm_main();
public slots:
void show_connect_widget();
- void client_connect(QString &host, int port);
+ void client_connect(QString &host, QString &password, int port);
signals:
- void connect_signal(QString host, int port);
+ void connect_signal(QString host, QString password, int port);
void run_client_io_loop();
private:
QThread *thread_client_session;
diff --git a/protocol/udm.proto b/protocol/udm.proto
index f762a46..adbae08 100644
--- a/protocol/udm.proto
+++ b/protocol/udm.proto
@@ -117,9 +117,16 @@ message module_info
//auth proto part begin
+enum PASSWD_HASH_TYPE {
+ HASH_NONE = 0;
+ HASH_MD5 = 1;
+ HASH_SHA2 = 2;
+ HASH_SHA512 = 3;
+}
+
message client_auth_info {
- required string login = 1;
- required string password = 2;
+ required string password = 1;
+ optional PASSWD_HASH_TYPE type = 2 [default = HASH_NONE];
}
message server_auth_info {