From 1461988ab8387f86d929cbba70bc4839447693f6 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Thu, 6 Aug 2015 04:30:27 +0300 Subject: protocol: removed login field in auth_info added password hash algorithm selection support to auth_info client-qt: basic implementation of connect widget (working) --- client-qt/udm-client-qt/client_session.cpp | 13 +++++++++- client-qt/udm-client-qt/client_session.h | 5 +++- client-qt/udm-client-qt/connect_widget.cpp | 39 ++++++++++++++++++++++++++++++ client-qt/udm-client-qt/connect_widget.h | 16 ++++++++++-- client-qt/udm-client-qt/udm_main.cpp | 8 +++--- client-qt/udm-client-qt/udm_main.h | 4 +-- protocol/udm.proto | 11 +++++++-- 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"< +#include +#include +#include +#include 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 -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 { -- cgit v1.2.3