diff options
| author | Anton <anton@picapica> | 2018-07-03 17:07:10 +0400 |
|---|---|---|
| committer | Anton <anton@picapica> | 2018-07-03 17:07:10 +0400 |
| commit | cb2b4d833d4852a3e54cdb2394422ad7aeb24166 (patch) | |
| tree | f500e0c11e983b19fb98001b37ea884b845a312b | |
| parent | d154f1f79ddce2bdccc0c600251c5e2e7df3d14f (diff) | |
| download | pica-pica-cb2b4d833d4852a3e54cdb2394422ad7aeb24166.tar.gz pica-pica-cb2b4d833d4852a3e54cdb2394422ad7aeb24166.zip | |
add multilogin policy to protocol and client settings
| -rw-r--r-- | PICA_client.c | 8 | ||||
| -rw-r--r-- | PICA_client.h | 5 | ||||
| -rw-r--r-- | PICA_proto.h | 6 | ||||
| -rwxr-xr-x | doc/proto.txt | 5 | ||||
| -rw-r--r-- | pica-client/dialogs/settingsdialog.cpp | 13 | ||||
| -rw-r--r-- | pica-client/skynet.cpp | 6 |
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) { |
