summaryrefslogtreecommitdiffstats
path: root/pica-client
diff options
context:
space:
mode:
Diffstat (limited to 'pica-client')
-rw-r--r--pica-client/skynet.cpp25
-rw-r--r--pica-client/skynet.h1
2 files changed, 25 insertions, 1 deletions
diff --git a/pica-client/skynet.cpp b/pica-client/skynet.cpp
index 7388634..a016b48 100644
--- a/pica-client/skynet.cpp
+++ b/pica-client/skynet.cpp
@@ -10,6 +10,7 @@
#include "history.h"
#include "dhparam.h"
#include "askpassword.h"
+#include "settings.h"
SkyNet::SkyNet()
: nodes(config_dbname), QObject(0)
@@ -42,6 +43,7 @@ PICA_client_init(&cbs);
this->active_nodelink = NULL;
this->acc = NULL;
+this->listener = NULL;
connect(this, SIGNAL(PeerCertificateReceived(QByteArray,QString,bool*)), this, SLOT(verify_peer_cert(QByteArray,QString,bool*)),Qt::DirectConnection);
@@ -313,6 +315,9 @@ bool SkyNet::open_account()
void SkyNet::Join(Accounts::AccountRecord &accrec)
{
+ PICA_directc2c_config directc2c_cfg = PICA_DIRECTC2C_CFG_DISABLED;
+ Settings st(config_dbname);
+
skynet_account = accrec;
QList<Nodes::NodeRecord> noderecords = nodes.GetNodes();
@@ -329,6 +334,24 @@ void SkyNet::Join(Accounts::AccountRecord &accrec)
return;
}
+ directc2c_cfg = (PICA_directc2c_config)st.loadValue("direct_c2c.state", 1).toInt();
+
+ if (!listener && directc2c_cfg == PICA_DIRECTC2C_CFG_ALLOWINCOMING)
+ {
+ int pub_port = st.loadValue("direct_c2c.public_port", 2298).toInt();
+ int loc_port = st.loadValue("direct_c2c.local_port", 2298).toInt();
+
+ int ret = PICA_new_listener(acc,
+ st.loadValue("direct_c2c.public_addr", "0.0.0.0").toString().toAscii().constData(),
+ pub_port,
+ loc_port, &listener);
+ if (ret != PICA_OK)
+ {
+ emit StatusMsg(QString(tr("Failed to open port %1 for incoming direct connections")).arg(loc_port), true);
+ directc2c_cfg = PICA_DIRECTC2C_CFG_CONNECTONLY;
+ }
+ }
+
if (!connecting_nodes.empty())
{
for (int i = 0; i < connecting_nodes.size(); i++)
@@ -343,7 +366,7 @@ void SkyNet::Join(Accounts::AccountRecord &accrec)
struct PICA_c2n *c2n = NULL;
ret = PICA_new_c2n(acc, noderecords[i].address.toUtf8().constData(), noderecords[i].port,
- PICA_DIRECTC2C_CFG_DISABLED, NULL, &c2n);
+ directc2c_cfg, listener, &c2n);
if (ret == PICA_OK)
{
diff --git a/pica-client/skynet.h b/pica-client/skynet.h
index 3e03b87..5384023 100644
--- a/pica-client/skynet.h
+++ b/pica-client/skynet.h
@@ -64,6 +64,7 @@ private:
QString status;
struct PICA_c2n *active_nodelink;
struct PICA_acc *acc;
+ struct PICA_listener *listener;
Accounts::AccountRecord skynet_account;
QMap<QByteArray, QList<QString> > msgqueues;