From 8df9466ada46e4b07990b9cb7e8b1cd61b96844a Mon Sep 17 00:00:00 2001 From: me_desk Date: Sun, 17 Jun 2012 21:15:12 +0000 Subject: todo list update git-svn-id: svn://localhost/project_picapica/trunk@128 fb96df88-216d-11de-830c-f3023f12d8ac --- pica-client/nodethread.cpp | 94 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 pica-client/nodethread.cpp (limited to 'pica-client/nodethread.cpp') diff --git a/pica-client/nodethread.cpp b/pica-client/nodethread.cpp new file mode 100644 index 0000000..1524cbd --- /dev/null +++ b/pica-client/nodethread.cpp @@ -0,0 +1,94 @@ +#include "nodethread.h" +#include "mainwindow.h" + +QMutex NodeThread::finished_mutex; + +NodeThread::NodeThread(Nodes::NodeRecord &addr, bool *completed, Accounts::AccountRecord &acc, PICA_conninfo **pica_conn, QMutex *wm) : + QThread(0) +{ + node_addr = addr; + finished_flag = completed; + user_account = acc; + connection = pica_conn; + write_mutex = wm; + exit = 0; + start(); +} + +void NodeThread::run() +{ + int ret; + exit = 0; + + ret = PICA_new_connection(node_addr.address.toUtf8().constData(), + node_addr.port, + user_account.CA_file.toUtf8().constData(), + user_account.cert_file.toUtf8().constData(), + user_account.pkey_file.toUtf8().constData(), + AskPassword::ask_password_cb, + &ci); + + switch(ret) + { + case PICA_OK: + + emit NodeStatusChanged(node_addr.address, node_addr.port, true); + + finished_mutex.lock(); + if (*finished_flag) + { + PICA_close_connection(ci); + exit = 1; + } + else + { + *finished_flag = true; + *connection = ci; + emit ConnectedToNode(node_addr.address, node_addr.port, this); + } + finished_mutex.unlock(); + + + + break; + + case PICA_ERRSOCK: + case PICA_ERRDNSRESOLVE: + + emit NodeStatusChanged(node_addr.address, node_addr.port, false); + + exit = 1; + break; + + case PICA_ERRSSL: + exit = 1; + break; + + default: + exit = 1; + } + + if (exit) + return; + + do + { + write_mutex->lock(); + if (PICA_read(ci,10000) != PICA_OK || PICA_write(ci) != PICA_OK) + exit=1; + write_mutex->unlock(); + msleep(300); + } + while (!exit); + + write_mutex->lock(); + PICA_close_connection(ci); + *connection = NULL; + write_mutex->unlock(); +} + +void NodeThread::CloseThread() +{ + exit = 1; +} + -- cgit v1.2.1