summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton <anton@picapica>2018-07-03 17:07:10 +0400
committerAnton <anton@picapica>2018-07-03 17:07:10 +0400
commitcb2b4d833d4852a3e54cdb2394422ad7aeb24166 (patch)
treef500e0c11e983b19fb98001b37ea884b845a312b
parentd154f1f79ddce2bdccc0c600251c5e2e7df3d14f (diff)
downloadpica-pica-cb2b4d833d4852a3e54cdb2394422ad7aeb24166.tar.gz
pica-pica-cb2b4d833d4852a3e54cdb2394422ad7aeb24166.zip
add multilogin policy to protocol and client settings
-rw-r--r--PICA_client.c8
-rw-r--r--PICA_client.h5
-rw-r--r--PICA_proto.h6
-rwxr-xr-xdoc/proto.txt5
-rw-r--r--pica-client/dialogs/settingsdialog.cpp13
-rw-r--r--pica-client/skynet.cpp6
6 files changed, 27 insertions, 16 deletions
diff --git a/PICA_client.c b/PICA_client.c
index 59fcc03..7e8b575 100644
--- a/PICA_client.c
+++ b/PICA_client.c
@@ -1510,6 +1510,7 @@ static int c2n_stage2_sendreq(struct PICA_c2n *c2n)
{
mp->tail[0] = PICA_PROTO_VER_HIGH;
mp->tail[1] = PICA_PROTO_VER_LOW;
+ mp->tail[2] = c2n->multilogin_policy;
}
else
return PICA_ERRNOMEM;
@@ -1614,8 +1615,8 @@ static int directc2c_stage2_starttls(struct PICA_directc2c *d, struct PICA_c2c *
//....
int PICA_new_c2n(const struct PICA_acc *acc, const char *nodeaddr, unsigned int port,
- enum PICA_directc2c_config direct_c2c_mode, struct PICA_listener *l,
- struct PICA_c2n **ci)
+ enum PICA_directc2c_config direct_c2c_mode, int multilogin,
+ struct PICA_listener *l, struct PICA_c2n **ci)
{
PICA_TRACEFUNC
int ret, ret_err;
@@ -1634,6 +1635,7 @@ int PICA_new_c2n(const struct PICA_acc *acc, const char *nodeaddr, unsigned int
cid->acc = acc;
cid->directc2c_config = direct_c2c_mode;
+ cid->multilogin_policy = multilogin;
if (direct_c2c_mode == PICA_DIRECTC2C_CFG_ALLOWINCOMING)
{
@@ -1755,7 +1757,7 @@ cid->state = PICA_C2N_STATE_WAITINGTLS;
if (ret!=1)
{
//printf("SSL_accept ret=%i\n SSL_get_error=%i\n",ret,SSL_get_error(cid->ssl_comm,ret));//debug
- //ERR_CHECK
+//ERR_CHECK
ret_err=PICA_ERRSSL;
goto error_ret_4;
}*/ /*
diff --git a/PICA_client.h b/PICA_client.h
index 4a3e12a..97b401c 100644
--- a/PICA_client.h
+++ b/PICA_client.h
@@ -155,6 +155,7 @@ struct PICA_c2n
enum PICA_c2n_state state;
enum PICA_directc2c_config directc2c_config;
+ int multilogin_policy;
struct PICA_listener *directc2c_listener;
unsigned char *read_buf;
@@ -334,8 +335,8 @@ int PICA_get_id_from_cert_string(const char *cert_pem, unsigned char *id);
int PICA_client_init(struct PICA_client_callbacks *clcbs);
int PICA_new_c2n(const struct PICA_acc *acc, const char *nodeaddr, unsigned int port,
- enum PICA_directc2c_config direct_c2c_mode, struct PICA_listener *l,
- struct PICA_c2n **ci);
+ enum PICA_directc2c_config direct_c2c_mode, int multilogin,
+ struct PICA_listener *l, struct PICA_c2n **ci);
int PICA_new_c2c(struct PICA_c2n *ci, const unsigned char *peer_id, struct PICA_listener *l, struct PICA_c2c **chn);
diff --git a/PICA_proto.h b/PICA_proto.h
index 46ca178..9456280 100644
--- a/PICA_proto.h
+++ b/PICA_proto.h
@@ -75,7 +75,7 @@
//size
-#define PICA_PROTO_INITREQ_SIZE 4
+#define PICA_PROTO_INITREQ_SIZE 5
#define PICA_PROTO_INITRESPOK_SIZE 4
#define PICA_PROTO_VERDIFFER_SIZE 4
@@ -126,6 +126,10 @@
#define PICA_PROTO_C2CMSG_MAXFILENAMESIZE 255
+#define PICA_MULTILOGIN_PROHIBIT 0
+#define PICA_MULTILOGIN_REPLACE 1
+#define PICA_MULTILOGIN_ALLOW 2
+
struct PICA_proto_msg
{
unsigned char head[2];
diff --git a/doc/proto.txt b/doc/proto.txt
index 49cb4a0..3932b7f 100755
--- a/doc/proto.txt
+++ b/doc/proto.txt
@@ -8,8 +8,9 @@ UH - user hash - SHA224 хэш от сертификата пользоватеÐ
Протокол авторизации и пересылки данных (между сервером и клиентом)
+++[запрос на подключение] -клиент
-0xCA 0xCA Ver_major Ver_minor - версия протокола клиента
--4 байта
+0xCA 0xCA (Ver_major Ver_minor - версия протокола клиента, 2 байта)
+(MULTILOGIN_POLICY - 1 байт)
+-5 байт
===============новый вариант
+++[ответ сервера] - сервер
diff --git a/pica-client/dialogs/settingsdialog.cpp b/pica-client/dialogs/settingsdialog.cpp
index 287569d..6850f5e 100644
--- a/pica-client/dialogs/settingsdialog.cpp
+++ b/pica-client/dialogs/settingsdialog.cpp
@@ -2,6 +2,7 @@
#include "../settings.h"
#include "../globals.h"
#include "../../PICA_netconf.h"
+#include "../../PICA_proto.h"
#include <QGroupBox>
#include <QVBoxLayout>
@@ -216,15 +217,15 @@ void SettingsDialog::loadSettings()
switch(mlpstate)
{
- case 0:
+ case PICA_MULTILOGIN_PROHIBIT:
rbMLPProhibit->setChecked(true);
break;
- case 1:
+ case PICA_MULTILOGIN_REPLACE:
rbMLPReplace->setChecked(true);
break;
- case 2:
+ case PICA_MULTILOGIN_ALLOW:
rbMLPAllowMultiple->setChecked(true);
break;
@@ -262,11 +263,11 @@ void SettingsDialog::storeSettings()
int mlpstate;
if (rbMLPProhibit->isChecked())
- mlpstate = 0;
+ mlpstate = PICA_MULTILOGIN_PROHIBIT;
else if (rbMLPReplace->isChecked())
- mlpstate = 1;
+ mlpstate = PICA_MULTILOGIN_REPLACE;
else if (rbMLPAllowMultiple->isChecked())
- mlpstate = 2;
+ mlpstate = PICA_MULTILOGIN_ALLOW;
st.storeValue("multiple_logins.state", QString::number(mlpstate));
}
diff --git a/pica-client/skynet.cpp b/pica-client/skynet.cpp
index d2abb64..9092cc0 100644
--- a/pica-client/skynet.cpp
+++ b/pica-client/skynet.cpp
@@ -322,6 +322,7 @@ bool SkyNet::open_account()
void SkyNet::Join(Accounts::AccountRecord &accrec)
{
PICA_directc2c_config directc2c_cfg = PICA_DIRECTC2C_CFG_DISABLED;
+ int multilogin = PICA_MULTILOGIN_PROHIBIT;
Settings st(config_dbname);
skynet_account = accrec;
@@ -341,6 +342,7 @@ void SkyNet::Join(Accounts::AccountRecord &accrec)
}
directc2c_cfg = (PICA_directc2c_config)st.loadValue("direct_c2c.state", 1).toInt();
+ multilogin = st.loadValue("multiple_logins.state", PICA_MULTILOGIN_PROHIBIT).toInt();
if (!listener && directc2c_cfg == PICA_DIRECTC2C_CFG_ALLOWINCOMING)
{
@@ -373,7 +375,7 @@ void SkyNet::Join(Accounts::AccountRecord &accrec)
}
int ret = PICA_new_listener(acc,
- public_addr.toAscii().constData(),
+ public_addr.toAscii().constData(),
pub_port,
loc_port, &listener);
if (ret != PICA_OK)
@@ -397,7 +399,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,
- directc2c_cfg, listener, &c2n);
+ directc2c_cfg, multilogin, listener, &c2n);
if (ret == PICA_OK)
{