diff options
| author | me_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac> | 2012-06-17 21:15:12 +0000 |
|---|---|---|
| committer | me_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac> | 2012-06-17 21:15:12 +0000 |
| commit | 8df9466ada46e4b07990b9cb7e8b1cd61b96844a (patch) | |
| tree | 2cb652e5839bed672133ffa90e7ad477f55cfb6b /pica-client/nodethread.cpp | |
| download | pica-pica-8df9466ada46e4b07990b9cb7e8b1cd61b96844a.tar.gz pica-pica-8df9466ada46e4b07990b9cb7e8b1cd61b96844a.zip | |
todo list update
git-svn-id: svn://localhost/project_picapica/trunk@128 fb96df88-216d-11de-830c-f3023f12d8ac
Diffstat (limited to 'pica-client/nodethread.cpp')
| -rw-r--r-- | pica-client/nodethread.cpp | 94 |
1 files changed, 94 insertions, 0 deletions
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; +} + |
