summaryrefslogtreecommitdiffstats
path: root/PICA_node.c
diff options
context:
space:
mode:
Diffstat (limited to 'PICA_node.c')
-rw-r--r--[-rwxr-xr-x]PICA_node.c2020
1 files changed, 1021 insertions, 999 deletions
diff --git a/PICA_node.c b/PICA_node.c
index d4bc5d9..951e8d9 100755..100644
--- a/PICA_node.c
+++ b/PICA_node.c
@@ -37,7 +37,7 @@ typedef u_short uint16_t;
time_t skynet_refresh_tmst;
-clock_t TMO_CCLINK_WAITACTIVE=15;//CONF //таймаут ожидания перехода соединения в активное состояние
+clock_t TMO_CCLINK_WAITACTIVE = 15; //CONF //таймаут ожидания перехода соединения в активное состояние
char *my_addr;//TEMP CONF FIXME собственный ip-адрес узла, на котором он ожидает соединения
@@ -45,7 +45,7 @@ SOCKET listen_comm_sck;//*
SSL_CTX* ctx;
struct newconn newconns[MAX_NEWCONNS];
-unsigned int newconns_pos=0;
+unsigned int newconns_pos = 0;
struct client *client_tree_root;//корень дерева клиентов
@@ -63,42 +63,42 @@ unsigned int nodelink_list_count;
-char msg_VERDIFFER[4]={PICA_PROTO_VERDIFFER,PICA_PROTO_VERDIFFER,PICA_PROTO_VER_HIGH,PICA_PROTO_VER_LOW};
-const unsigned int msg_VERDIFFER_len=4;
+char msg_VERDIFFER[4] = {PICA_PROTO_VERDIFFER, PICA_PROTO_VERDIFFER, PICA_PROTO_VER_HIGH, PICA_PROTO_VER_LOW};
+const unsigned int msg_VERDIFFER_len = 4;
-unsigned int procmsg_INITREQ(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_CONNID(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_NODECONNREQ(unsigned char* buf,unsigned int size,void* ptr);
+unsigned int procmsg_INITREQ(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_CONNID(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_NODECONNREQ(unsigned char* buf, unsigned int size, void* ptr);
-unsigned int procmsg_CONNREQOUTG(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_CONNALLOW(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_CONNDENY(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_NODERESP(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_NEWNODE(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_NODELISTREQ(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_NODELIST(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_N2NFOUND(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_SEARCH(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_N2NCONNREQOUTG(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_N2NALLOW(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_N2NNOTFOUND(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_N2NMSG(unsigned char* buf,unsigned int size,void* ptr);
+unsigned int procmsg_CONNREQOUTG(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_CONNALLOW(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_CONNDENY(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_NODERESP(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_NEWNODE(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_NODELISTREQ(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_NODELIST(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_N2NFOUND(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_SEARCH(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_N2NCONNREQOUTG(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_N2NALLOW(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_N2NNOTFOUND(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_N2NMSG(unsigned char* buf, unsigned int size, void* ptr);
-unsigned int procmsg_PINGREQ_client(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_PINGREP_client(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_PINGREQ_node(unsigned char* buf,unsigned int size,void* ptr);
-unsigned int procmsg_PINGREP_node(unsigned char* buf,unsigned int size,void* ptr);
+unsigned int procmsg_PINGREQ_client(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_PINGREP_client(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_PINGREQ_node(unsigned char* buf, unsigned int size, void* ptr);
+unsigned int procmsg_PINGREP_node(unsigned char* buf, unsigned int size, void* ptr);
-struct cclink* cclink_list_add(struct client *clr,struct client *cle);
+struct cclink* cclink_list_add(struct client *clr, struct client *cle);
struct cclink* cclink_list_search(const unsigned char *caller_id, const unsigned char *callee_id);
struct cclink* cclink_list_findwaitsearch(const unsigned char *callee_id);
-void cclink_list_addlocal(struct client *clr,struct client *cle);
+void cclink_list_addlocal(struct client *clr, struct client *cle);
void cclink_list_delete(struct cclink *l);
void cclink_list_addn2nclr(struct client *clr, const unsigned char *callee_id);
void cclink_setwaitconn(struct cclink *ccl);
void cclink_list_addn2ncle(const unsigned char *caller_id, struct nodelink *caller_node, struct client *cle);
-void cclink_activate(struct cclink *ccl,SOCKET s);
+void cclink_activate(struct cclink *ccl, SOCKET s);
void cclink_attach_remotecle_node(struct cclink *ccl, struct nodelink *callee_node);
void cclink_list_delete_by_client(struct client *cl);
@@ -106,10 +106,10 @@ void cclink_list_delete_by_nodelink(struct nodelink *node);
struct client* client_tree_search(const unsigned char *id);//
struct client *client_list_addnew(struct newconn *nc);
-struct PICA_proto_msg* client_wbuf_push(struct client *c,unsigned int msgid,unsigned int size);
+struct PICA_proto_msg* client_wbuf_push(struct client *c, unsigned int msgid, unsigned int size);
int client_rbuf_grow(struct client *c);
-struct PICA_proto_msg* nodelink_wbuf_push(struct nodelink *nl,unsigned int msgid,unsigned int size);
+struct PICA_proto_msg* nodelink_wbuf_push(struct nodelink *nl, unsigned int msgid, unsigned int size);
int nodelink_rbuf_grow(struct nodelink *nl);
int nodelink_attach_nodeaddr(struct nodelink *nl, unsigned int addr_type, void* nodeaddr, unsigned int nodeaddr_size);
struct nodelink *nodelink_list_addnew(struct newconn *nc);
@@ -118,98 +118,102 @@ struct nodelink *nodelink_search_by_ipv4addr(in_addr_t addr, in_port_t port); /*
void newconn_close(struct newconn* nc);
void newconn_free(struct newconn* nc);
-struct newconn* newconn_add(struct newconn *ncs,int *pos);
+struct newconn* newconn_add(struct newconn *ncs, int *pos);
void PICA_node_joinskynet(const char* addrlistfilename, const char *my_addr);
//описание формата сообщений, которые могут приходить _ОТ_ клиентов по управляющему защищенному соединению
#define MSGINFO_MSGSNUM(arr) (sizeof(arr)/sizeof(struct PICA_msginfo))
-struct PICA_msginfo _msginfo_comm[]={
-{PICA_PROTO_CONNREQOUTG, PICA_MSG_FIXED_SIZE, PICA_PROTO_CONNREQOUTG_SIZE, procmsg_CONNREQOUTG},
-{PICA_PROTO_CONNALLOW, PICA_MSG_FIXED_SIZE, PICA_PROTO_CONNALLOW_SIZE, procmsg_CONNALLOW},
-{PICA_PROTO_CONNDENY, PICA_MSG_FIXED_SIZE, PICA_PROTO_CONNDENY_SIZE, procmsg_CONNDENY},
-{PICA_PROTO_CLNODELISTREQ, PICA_MSG_FIXED_SIZE, PICA_PROTO_CLNODELISTREQ_SIZE, procmsg_NODELISTREQ},
-{PICA_PROTO_PINGREQ, PICA_MSG_FIXED_SIZE,PICA_PROTO_PINGREQ_SIZE, procmsg_PINGREQ_client},
-{PICA_PROTO_PINGREP, PICA_MSG_FIXED_SIZE,PICA_PROTO_PINGREP_SIZE, procmsg_PINGREP_client}
+struct PICA_msginfo _msginfo_comm[] =
+{
+ {PICA_PROTO_CONNREQOUTG, PICA_MSG_FIXED_SIZE, PICA_PROTO_CONNREQOUTG_SIZE, procmsg_CONNREQOUTG},
+ {PICA_PROTO_CONNALLOW, PICA_MSG_FIXED_SIZE, PICA_PROTO_CONNALLOW_SIZE, procmsg_CONNALLOW},
+ {PICA_PROTO_CONNDENY, PICA_MSG_FIXED_SIZE, PICA_PROTO_CONNDENY_SIZE, procmsg_CONNDENY},
+ {PICA_PROTO_CLNODELISTREQ, PICA_MSG_FIXED_SIZE, PICA_PROTO_CLNODELISTREQ_SIZE, procmsg_NODELISTREQ},
+ {PICA_PROTO_PINGREQ, PICA_MSG_FIXED_SIZE, PICA_PROTO_PINGREQ_SIZE, procmsg_PINGREQ_client},
+ {PICA_PROTO_PINGREP, PICA_MSG_FIXED_SIZE, PICA_PROTO_PINGREP_SIZE, procmsg_PINGREP_client}
};
-struct PICA_msginfo _msginfo_node[]={
-{PICA_PROTO_INITRESPOK,PICA_MSG_FIXED_SIZE,PICA_PROTO_INITRESPOK_SIZE,procmsg_NODERESP},
-{PICA_PROTO_VERDIFFER ,PICA_MSG_FIXED_SIZE,PICA_PROTO_VERDIFFER_SIZE,procmsg_NODERESP},
-{PICA_PROTO_NEWNODE_IPV4 ,PICA_MSG_FIXED_SIZE,PICA_PROTO_NEWNODE_IPV4_SIZE,procmsg_NEWNODE},
-{PICA_PROTO_NODELISTREQ,PICA_MSG_FIXED_SIZE,PICA_PROTO_NODELISTREQ_SIZE,procmsg_NODELISTREQ},
-{PICA_PROTO_NODELIST,PICA_MSG_VAR_SIZE,PICA_MSG_VARSIZE_INT16,procmsg_NODELIST},
-
-{PICA_PROTO_SEARCH,PICA_MSG_FIXED_SIZE,PICA_PROTO_SEARCH_SIZE,procmsg_SEARCH},
-{PICA_PROTO_N2NFOUND,PICA_MSG_FIXED_SIZE,PICA_PROTO_N2NFOUND_SIZE,procmsg_N2NFOUND},
-{PICA_PROTO_N2NFOUNDCACHE,PICA_MSG_VAR_SIZE,PICA_MSG_VARSIZE_INT16,procmsg_N2NFOUND},
-{PICA_PROTO_N2NCONNREQOUTG,PICA_MSG_FIXED_SIZE,PICA_PROTO_N2NCONNREQOUTG_SIZE,procmsg_N2NCONNREQOUTG},
-{PICA_PROTO_N2NALLOW,PICA_MSG_FIXED_SIZE,PICA_PROTO_N2NALLOW_SIZE,procmsg_N2NALLOW},
-{PICA_PROTO_N2NNOTFOUND,PICA_MSG_FIXED_SIZE,PICA_PROTO_N2NNOTFOUND_SIZE,procmsg_N2NNOTFOUND},
-{PICA_PROTO_N2NMSG,PICA_MSG_VAR_SIZE,PICA_MSG_VARSIZE_INT16,procmsg_N2NMSG},
-{PICA_PROTO_PINGREQ, PICA_MSG_FIXED_SIZE,PICA_PROTO_PINGREQ_SIZE, procmsg_PINGREQ_node},
-{PICA_PROTO_PINGREP, PICA_MSG_FIXED_SIZE,PICA_PROTO_PINGREP_SIZE, procmsg_PINGREP_node}
+struct PICA_msginfo _msginfo_node[] =
+{
+ {PICA_PROTO_INITRESPOK, PICA_MSG_FIXED_SIZE, PICA_PROTO_INITRESPOK_SIZE, procmsg_NODERESP},
+ {PICA_PROTO_VERDIFFER , PICA_MSG_FIXED_SIZE, PICA_PROTO_VERDIFFER_SIZE, procmsg_NODERESP},
+ {PICA_PROTO_NEWNODE_IPV4 , PICA_MSG_FIXED_SIZE, PICA_PROTO_NEWNODE_IPV4_SIZE, procmsg_NEWNODE},
+ {PICA_PROTO_NODELISTREQ, PICA_MSG_FIXED_SIZE, PICA_PROTO_NODELISTREQ_SIZE, procmsg_NODELISTREQ},
+ {PICA_PROTO_NODELIST, PICA_MSG_VAR_SIZE, PICA_MSG_VARSIZE_INT16, procmsg_NODELIST},
+
+ {PICA_PROTO_SEARCH, PICA_MSG_FIXED_SIZE, PICA_PROTO_SEARCH_SIZE, procmsg_SEARCH},
+ {PICA_PROTO_N2NFOUND, PICA_MSG_FIXED_SIZE, PICA_PROTO_N2NFOUND_SIZE, procmsg_N2NFOUND},
+ {PICA_PROTO_N2NFOUNDCACHE, PICA_MSG_VAR_SIZE, PICA_MSG_VARSIZE_INT16, procmsg_N2NFOUND},
+ {PICA_PROTO_N2NCONNREQOUTG, PICA_MSG_FIXED_SIZE, PICA_PROTO_N2NCONNREQOUTG_SIZE, procmsg_N2NCONNREQOUTG},
+ {PICA_PROTO_N2NALLOW, PICA_MSG_FIXED_SIZE, PICA_PROTO_N2NALLOW_SIZE, procmsg_N2NALLOW},
+ {PICA_PROTO_N2NNOTFOUND, PICA_MSG_FIXED_SIZE, PICA_PROTO_N2NNOTFOUND_SIZE, procmsg_N2NNOTFOUND},
+ {PICA_PROTO_N2NMSG, PICA_MSG_VAR_SIZE, PICA_MSG_VARSIZE_INT16, procmsg_N2NMSG},
+ {PICA_PROTO_PINGREQ, PICA_MSG_FIXED_SIZE, PICA_PROTO_PINGREQ_SIZE, procmsg_PINGREQ_node},
+ {PICA_PROTO_PINGREP, PICA_MSG_FIXED_SIZE, PICA_PROTO_PINGREP_SIZE, procmsg_PINGREP_node}
};
-struct PICA_msginfo _msginfo_newconn[]={
-{PICA_PROTO_INITREQ,PICA_MSG_FIXED_SIZE,PICA_PROTO_INITREQ_SIZE,procmsg_INITREQ},
-{PICA_PROTO_CONNID,PICA_MSG_FIXED_SIZE,PICA_PROTO_CONNID_SIZE,procmsg_CONNID},
-{PICA_PROTO_NODECONNREQ,PICA_MSG_FIXED_SIZE,PICA_PROTO_NODECONNREQ_SIZE,procmsg_NODECONNREQ}
+struct PICA_msginfo _msginfo_newconn[] =
+{
+ {PICA_PROTO_INITREQ, PICA_MSG_FIXED_SIZE, PICA_PROTO_INITREQ_SIZE, procmsg_INITREQ},
+ {PICA_PROTO_CONNID, PICA_MSG_FIXED_SIZE, PICA_PROTO_CONNID_SIZE, procmsg_CONNID},
+ {PICA_PROTO_NODECONNREQ, PICA_MSG_FIXED_SIZE, PICA_PROTO_NODECONNREQ_SIZE, procmsg_NODECONNREQ}
};
static int verify_callback(int preverify_ok, X509_STORE_CTX *ctx)
-{ //return 1 for self-signed certificates
-char buf[256];
-X509 *err_cert;
-int err, depth;
+{
+ //return 1 for self-signed certificates
+ char buf[256];
+ X509 *err_cert;
+ int err, depth;
-err_cert = X509_STORE_CTX_get_current_cert(ctx);
-err = X509_STORE_CTX_get_error(ctx);
-depth = X509_STORE_CTX_get_error_depth(ctx);
+ err_cert = X509_STORE_CTX_get_current_cert(ctx);
+ err = X509_STORE_CTX_get_error(ctx);
+ depth = X509_STORE_CTX_get_error_depth(ctx);
-X509_NAME_oneline(X509_get_subject_name(err_cert), buf, 256);
+ X509_NAME_oneline(X509_get_subject_name(err_cert), buf, 256);
-if (err == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT && depth == 0)
+ if (err == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT && depth == 0)
preverify_ok = 1;
-if (!preverify_ok)
-{
-PICA_info("certificate verification error:num=%d:%s:depth=%d:%s\n", err, X509_verify_cert_error_string(err), depth, buf);
-}
+ if (!preverify_ok)
+ {
+ PICA_info("certificate verification error:num=%d:%s:depth=%d:%s\n", err, X509_verify_cert_error_string(err), depth, buf);
+ }
return preverify_ok;
}
-unsigned int procmsg_INITREQ(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_INITREQ(unsigned char* buf, unsigned int size, void* ptr)
{
-struct newconn *nc=(struct newconn*)ptr;
-struct PICA_proto_msg *mp;
+ struct newconn *nc = (struct newconn*)ptr;
+ struct PICA_proto_msg *mp;
-PICA_debug1("received INITREQ");
+ PICA_debug1("received INITREQ");
-if (buf[2]==PICA_PROTO_VER_HIGH && buf[3]==PICA_PROTO_VER_LOW)
+ if (buf[2] == PICA_PROTO_VER_HIGH && buf[3] == PICA_PROTO_VER_LOW)
{
struct client *c;
- c=client_list_addnew(nc);
+ c = client_list_addnew(nc);
if (!c)
return 0;
newconn_free(nc);
- if ((mp = client_wbuf_push(c,PICA_PROTO_INITRESPOK,PICA_PROTO_INITRESPOK_SIZE)))
+ if ((mp = client_wbuf_push(c, PICA_PROTO_INITRESPOK, PICA_PROTO_INITRESPOK_SIZE)))
{
- mp->tail[0]='O';
- mp->tail[1]='K';
+ mp->tail[0] = 'O';
+ mp->tail[1] = 'K';
}
- c->state=PICA_CLSTATE_SENDINGRESP;
+ c->state = PICA_CLSTATE_SENDINGRESP;
}///////---------<<<<<<<<<<< new client
-else
+ else
{
//// PICA_PROTO_VERDIFFER
- send(nc->sck,msg_VERDIFFER,msg_VERDIFFER_len,0);
+ send(nc->sck, msg_VERDIFFER, msg_VERDIFFER_len, 0);
if (buf[2] > PICA_PROTO_VER_HIGH || (buf[2] == PICA_PROTO_VER_HIGH && buf[3] > PICA_PROTO_VER_LOW))
{
@@ -223,61 +227,61 @@ else
return 0;
}
-return 1;
+ return 1;
}
-unsigned int procmsg_CONNID(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_CONNID(unsigned char* buf, unsigned int size, void* ptr)
{
-struct PICA_proto_msg *mp;
-struct newconn *nc=(struct newconn*)ptr;
-unsigned char *caller_id, *callee_id;
-struct cclink *link;
+ struct PICA_proto_msg *mp;
+ struct newconn *nc = (struct newconn*)ptr;
+ unsigned char *caller_id, *callee_id;
+ struct cclink *link;
-PICA_debug1("received CONNID");
+ PICA_debug1("received CONNID");
-caller_id = buf + 2;
-callee_id = buf + 2 + PICA_ID_SIZE;
+ caller_id = buf + 2;
+ callee_id = buf + 2 + PICA_ID_SIZE;
-{
-char caller_id_buf[2 * PICA_ID_SIZE], callee_id_buf[2 * PICA_ID_SIZE];
-PICA_debug1("CONNID: caller_id=%s callee_id=%s",PICA_id_to_base64(caller_id, caller_id_buf),PICA_id_to_base64(callee_id, callee_id_buf));
-}
+ {
+ char caller_id_buf[2 * PICA_ID_SIZE], callee_id_buf[2 * PICA_ID_SIZE];
+ PICA_debug1("CONNID: caller_id=%s callee_id=%s", PICA_id_to_base64(caller_id, caller_id_buf), PICA_id_to_base64(callee_id, callee_id_buf));
+ }
-link=cclink_list_search(caller_id, callee_id);
+ link = cclink_list_search(caller_id, callee_id);
-if (!link)
+ if (!link)
{
PICA_debug3("corresponding cclink not found");
return 0;
}
-if (link->state!=PICA_CCLINK_LOCAL_WAITCONNCLE && link->state!=PICA_CCLINK_LOCAL_WAITCONNCLR
- && link->state!=PICA_CCLINK_N2NCLR_WAITCONNCLR && link->state!=PICA_CCLINK_N2NCLE_WAITCONNCLE)
+ if (link->state != PICA_CCLINK_LOCAL_WAITCONNCLE && link->state != PICA_CCLINK_LOCAL_WAITCONNCLR
+ && link->state != PICA_CCLINK_N2NCLR_WAITCONNCLR && link->state != PICA_CCLINK_N2NCLE_WAITCONNCLE)
{
PICA_debug2("found cclink is not in expected state");
return 0;
}
-{
-struct client *c;
+ {
+ struct client *c;
//проверка IP адреса.
//IP адрес должен совпадать с адресом клиента в управляющем соединении
-if (link->state==PICA_CCLINK_LOCAL_WAITCONNCLE || link->state==PICA_CCLINK_N2NCLE_WAITCONNCLE)
+ if (link->state == PICA_CCLINK_LOCAL_WAITCONNCLE || link->state == PICA_CCLINK_N2NCLE_WAITCONNCLE)
c = link->p2;
-else if (link->state==PICA_CCLINK_LOCAL_WAITCONNCLR || link->state==PICA_CCLINK_N2NCLR_WAITCONNCLR)
+ else if (link->state == PICA_CCLINK_LOCAL_WAITCONNCLR || link->state == PICA_CCLINK_N2NCLR_WAITCONNCLR)
c = link->p1;
-if (nc->addr.sin_addr.s_addr!=c->addr.sin_addr.s_addr)
+ if (nc->addr.sin_addr.s_addr != c->addr.sin_addr.s_addr)
{
PICA_warn("CONNID: IP check failed. IP address of sender does not match IP in c2n connection");
return 0;
}
-}
+ }
-if (link->state==PICA_CCLINK_LOCAL_WAITCONNCLE)
+ if (link->state == PICA_CCLINK_LOCAL_WAITCONNCLE)
{
- if((mp = client_wbuf_push(link->p1,PICA_PROTO_FOUND,PICA_PROTO_FOUND_SIZE)))
+ if((mp = client_wbuf_push(link->p1, PICA_PROTO_FOUND, PICA_PROTO_FOUND_SIZE)))
{
memcpy(mp->tail, callee_id, PICA_ID_SIZE);
}
@@ -288,9 +292,9 @@ if (link->state==PICA_CCLINK_LOCAL_WAITCONNCLE)
}
}
-if (link->state==PICA_CCLINK_N2NCLE_WAITCONNCLE)
+ if (link->state == PICA_CCLINK_N2NCLE_WAITCONNCLE)
{
- if((mp = nodelink_wbuf_push(link->caller_node,PICA_PROTO_N2NALLOW,PICA_PROTO_N2NALLOW_SIZE)))
+ if((mp = nodelink_wbuf_push(link->caller_node, PICA_PROTO_N2NALLOW, PICA_PROTO_N2NALLOW_SIZE)))
{
memcpy(mp->tail, caller_id, PICA_ID_SIZE);
memcpy(mp->tail + PICA_ID_SIZE, callee_id, PICA_ID_SIZE);
@@ -301,40 +305,40 @@ if (link->state==PICA_CCLINK_N2NCLE_WAITCONNCLE)
return 0;
}
}
-PICA_debug3("CONNID processed successfully");
-cclink_activate(link,nc->sck);
-newconn_free(nc);
-return 1;
+ PICA_debug3("CONNID processed successfully");
+ cclink_activate(link, nc->sck);
+ newconn_free(nc);
+ return 1;
}
-unsigned int procmsg_NODECONNREQ(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_NODECONNREQ(unsigned char* buf, unsigned int size, void* ptr)
{
-struct newconn *nc=(struct newconn*)ptr;
-struct PICA_proto_msg *mp;
+ struct newconn *nc = (struct newconn*)ptr;
+ struct PICA_proto_msg *mp;
-PICA_debug1("received NODECONNREQ");
+ PICA_debug1("received NODECONNREQ");
-if (buf[2]==PICA_PROTO_VER_HIGH &&
- buf[3]==PICA_PROTO_VER_LOW)
+ if (buf[2] == PICA_PROTO_VER_HIGH &&
+ buf[3] == PICA_PROTO_VER_LOW)
{
////-прием входящего подключения
//--------------------------
struct nodelink *nl;
- nl=nodelink_list_addnew(nc);
+ nl = nodelink_list_addnew(nc);
newconn_free(nc);
if (!nl)
return 0;
- if ((mp = nodelink_wbuf_push(nl,PICA_PROTO_INITRESPOK,PICA_PROTO_INITRESPOK_SIZE)))
+ if ((mp = nodelink_wbuf_push(nl, PICA_PROTO_INITRESPOK, PICA_PROTO_INITRESPOK_SIZE)))
{
- mp->tail[0]='O';
- mp->tail[1]='K';
+ mp->tail[0] = 'O';
+ mp->tail[1] = 'K';
}
}
-else
+ else
{
//// PICA_PROTO_VERDIFFER
- send(nc->sck,msg_VERDIFFER,msg_VERDIFFER_len,0);
+ send(nc->sck, msg_VERDIFFER, msg_VERDIFFER_len, 0);
if (buf[2] > PICA_PROTO_VER_HIGH || (buf[2] == PICA_PROTO_VER_HIGH && buf[3] > PICA_PROTO_VER_LOW))
{
@@ -349,61 +353,61 @@ else
return 0;
}
-return 1;
+ return ;
}
void mapfunc_sendsearchreq(struct nodelink *p, const unsigned char *id)
{
-struct PICA_proto_msg *mp;
+ struct PICA_proto_msg *mp;
-mp=nodelink_wbuf_push(p,PICA_PROTO_SEARCH,PICA_PROTO_SEARCH_SIZE);
+ mp = nodelink_wbuf_push(p, PICA_PROTO_SEARCH, PICA_PROTO_SEARCH_SIZE);
-if (mp)
+ if (mp)
memcpy(mp->tail, id, PICA_ID_SIZE);
}
int nodelink_send_searchreq(const unsigned char *id)
{
-if (!nodelink_list_count)
+ if (!nodelink_list_count)
return 0;
-LISTMAP(nodelink,nodelink,mapfunc_sendsearchreq,id);
+ LISTMAP(nodelink, nodelink, mapfunc_sendsearchreq, id);
-return 1;
+ return 1;
}
-unsigned int procmsg_CONNREQOUTG(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_CONNREQOUTG(unsigned char* buf, unsigned int size, void* ptr)
{
-struct client *i,*o;//i - указатель на вызывающего клиента, o - вызываемого(если найден)
-unsigned char *callee_id;
-struct PICA_proto_msg *mp;
+ struct client *i, *o; //i - указатель на вызывающего клиента, o - вызываемого(если найден)
+ unsigned char *callee_id;
+ struct PICA_proto_msg *mp;
-i=(struct client *)ptr;
+ i = (struct client *)ptr;
-PICA_debug1("received CONNREQOUTG from %s", PICA_id_to_base64(i->id, NULL));
+ PICA_debug1("received CONNREQOUTG from %s", PICA_id_to_base64(i->id, NULL));
-callee_id = buf+2;
+ callee_id = buf + 2;
-if ((o = client_tree_search(callee_id)))
+ if ((o = client_tree_search(callee_id)))
{
if (cclink_list_search(i->id, callee_id))
{
- PICA_info("duplicate request for existing channel is ignored");
+ PICA_info("duplicate request for existing c2c connection is ignored");
return 1;
}
if (memcmp(i->id, callee_id, PICA_ID_SIZE) == 0)
{
- PICA_info("request to create channel to self is ignored");
+ PICA_info("request to create c2c connection to self is ignored");
return 1;
}
//отправить o _CONNREQINC
- if ((mp = client_wbuf_push(o,PICA_PROTO_CONNREQINC,PICA_PROTO_CONNREQINC_SIZE)))
+ if ((mp = client_wbuf_push(o, PICA_PROTO_CONNREQINC, PICA_PROTO_CONNREQINC_SIZE)))
{
memcpy(mp->tail, i->id, PICA_ID_SIZE);
- cclink_list_addlocal(i,o);
+ cclink_list_addlocal(i, o);
o->tmst = time(0);
o->disconnect_ticking = 1;//if client does not reply in given time period, client is disconnected
@@ -413,225 +417,226 @@ if ((o = client_tree_search(callee_id)))
return 1;//сообщение отправить не удалось, но все равно возвращаем 1
}
-if (cclink_list_findwaitsearch(callee_id)/*search request for this id is already in progress*/
+ if (cclink_list_findwaitsearch(callee_id)/*search request for this id is already in progress*/
|| nodelink_send_searchreq(callee_id) /*make new search*/)
{
- cclink_list_addn2nclr(i,callee_id);
+ cclink_list_addn2nclr(i, callee_id);
return 1;
}
//отправить i _NOTFOUND
-if ((mp = client_wbuf_push(i,PICA_PROTO_NOTFOUND,PICA_PROTO_NOTFOUND_SIZE)))
+ if ((mp = client_wbuf_push(i, PICA_PROTO_NOTFOUND, PICA_PROTO_NOTFOUND_SIZE)))
{
memcpy(mp->tail, callee_id, PICA_ID_SIZE);
}
-return 1;
+ return 1;
}
-unsigned int procmsg_CONNALLOW(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_CONNALLOW(unsigned char* buf, unsigned int size, void* ptr)
{
-struct client *callee;
-struct cclink *link;
-unsigned char *caller_id;
+ struct client *callee;
+ struct cclink *link;
+ unsigned char *caller_id;
-PICA_debug1("received CONALLOW");
+ PICA_debug1("received CONALLOW");
-callee=(struct client *)ptr;
-caller_id = buf+2;
+ callee = (struct client *)ptr;
+ caller_id = buf + 2;
-callee->disconnect_ticking = 0;
-callee->tmst = time(0);
+ callee->disconnect_ticking = 0;
+ callee->tmst = time(0);
-link=cclink_list_search(caller_id, callee->id);
+ link = cclink_list_search(caller_id, callee->id);
-if (!link)
+ if (!link)
return 0;
-if (link->state!=PICA_CCLINK_LOCAL_WAITREP &&
- link->state!=PICA_CCLINK_N2NCLE_WAITREP)
+ if (link->state != PICA_CCLINK_LOCAL_WAITREP &&
+ link->state != PICA_CCLINK_N2NCLE_WAITREP)
return 0;
-cclink_setwaitconn(link);
+ cclink_setwaitconn(link);
-return 1;
+ return 1;
}
-unsigned int procmsg_CONNDENY(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_CONNDENY(unsigned char* buf, unsigned int size, void* ptr)
{
-struct client *caller,*callee;
-struct cclink *link;
-unsigned char *caller_id;
-struct PICA_proto_msg *mp;
+ struct client *caller, *callee;
+ struct cclink *link;
+ unsigned char *caller_id;
+ struct PICA_proto_msg *mp;
-PICA_debug1("received CONNDENY");
+ PICA_debug1("received CONNDENY");
-callee=(struct client *)ptr;
-caller_id = buf+2;
+ callee = (struct client *)ptr;
+ caller_id = buf + 2;
-callee->disconnect_ticking = 0;
-callee->tmst = time(0);
+ callee->disconnect_ticking = 0;
+ callee->tmst = time(0);
-link=cclink_list_search(caller_id,callee->id);
+ link = cclink_list_search(caller_id, callee->id);
-if (!link)
+ if (!link)
return 0;
-caller = link -> p1;//check for NULL if not LOCAL
+ caller = link -> p1;//check for NULL if not LOCAL
-if (link->state!=PICA_CCLINK_LOCAL_WAITREP &&
- link->state!=PICA_CCLINK_N2NCLE_WAITREP)
+ if (link->state != PICA_CCLINK_LOCAL_WAITREP &&
+ link->state != PICA_CCLINK_N2NCLE_WAITREP)
{
cclink_list_delete(link);
return 0;
}
-if (link->state==PICA_CCLINK_LOCAL_WAITREP)
+ if (link->state == PICA_CCLINK_LOCAL_WAITREP)
{
//отправить caller _NOTFOUND
- if ((mp = client_wbuf_push(caller,PICA_PROTO_NOTFOUND,PICA_PROTO_NOTFOUND_SIZE)))
+ if ((mp = client_wbuf_push(caller, PICA_PROTO_NOTFOUND, PICA_PROTO_NOTFOUND_SIZE)))
{
memcpy(mp->tail, callee->id, PICA_ID_SIZE);
}
}
-else if (link->state==PICA_CCLINK_N2NCLE_WAITREP)
+ else if (link->state == PICA_CCLINK_N2NCLE_WAITREP)
{
//отправить caller N2NNOTFOUND
- if ((mp = nodelink_wbuf_push(link->caller_node,PICA_PROTO_N2NNOTFOUND,PICA_PROTO_N2NNOTFOUND_SIZE)))
+ if ((mp = nodelink_wbuf_push(link->caller_node, PICA_PROTO_N2NNOTFOUND, PICA_PROTO_N2NNOTFOUND_SIZE)))
{
memcpy(mp->tail, caller_id, PICA_ID_SIZE);
memcpy(mp->tail + PICA_ID_SIZE, callee->id, PICA_ID_SIZE);
}
}
-cclink_list_delete(link);
+ cclink_list_delete(link);
-return 1;
+ return 1;
}
-unsigned int procmsg_PINGREQ_client(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_PINGREQ_client(unsigned char* buf, unsigned int size, void* ptr)
{
-struct client *c = (struct client*)ptr;
-struct PICA_proto_msg *mp;
+ struct client *c = (struct client*)ptr;
+ struct PICA_proto_msg *mp;
-PICA_debug3("PINGREQ");
+ PICA_debug3("PINGREQ");
-if ((mp = client_wbuf_push(c, PICA_PROTO_PINGREP, PICA_PROTO_PINGREP_SIZE)))
+ if ((mp = client_wbuf_push(c, PICA_PROTO_PINGREP, PICA_PROTO_PINGREP_SIZE)))
{
- RAND_bytes(mp->tail, 2);
+ RAND_pseudo_bytes(mp->tail, 2);
}
-else
+ else
return 0;
-return 1;
+ return 1;
}
-unsigned int procmsg_PINGREP_client(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_PINGREP_client(unsigned char* buf, unsigned int size, void* ptr)
{
-struct client *c = (struct client*)ptr;
+ struct client *c = (struct client*)ptr;
-PICA_debug3("PINGREP c2n");
+ PICA_debug3("PINGREP c2n");
-c->disconnect_ticking = 0;
-c->tmst = time(0);
+ c->disconnect_ticking = 0;
+ c->tmst = time(0);
-return 1;
+ return 1;
}
-unsigned int procmsg_PINGREQ_node(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_PINGREQ_node(unsigned char* buf, unsigned int size, void* ptr)
{
-struct nodelink *n=(struct nodelink *)ptr;
-struct PICA_proto_msg *mp;
+ struct nodelink *n = (struct nodelink *)ptr;
+ struct PICA_proto_msg *mp;
-PICA_debug3("PINGREQ");
+ PICA_debug3("PINGREQ");
-if ((mp = nodelink_wbuf_push(n, PICA_PROTO_PINGREP, PICA_PROTO_PINGREP_SIZE)))
+ if ((mp = nodelink_wbuf_push(n, PICA_PROTO_PINGREP, PICA_PROTO_PINGREP_SIZE)))
{
- RAND_bytes(mp->tail, 2);
+ RAND_pseudo_bytes(mp->tail, 2);
}
-else
+ else
return 0;
-return 1;
+ return 1;
}
-unsigned int procmsg_PINGREP_node(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_PINGREP_node(unsigned char* buf, unsigned int size, void* ptr)
{
-struct nodelink *n=(struct nodelink *)ptr;
+ struct nodelink *n = (struct nodelink *)ptr;
-PICA_debug3("PINGREP n2n");
+ PICA_debug3("PINGREP n2n");
-n->disconnect_ticking = 0;
-n->tmst = time(0);
+ n->disconnect_ticking = 0;
+ n->tmst = time(0);
-return 1;
+ return 1;
}
-unsigned int procmsg_NODERESP(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_NODERESP(unsigned char* buf, unsigned int size, void* ptr)
{
-struct nodelink *n=(struct nodelink *)ptr;
-struct PICA_proto_msg *mp;
+ struct nodelink *n = (struct nodelink *)ptr;
+ struct PICA_proto_msg *mp;
-PICA_debug1("received NODERESP");
+ PICA_debug1("received NODERESP");
-switch(buf[0])
+ switch(buf[0])
{
case PICA_PROTO_INITRESPOK:
- if (buf[2]!='O' || buf[3]!='K')
+ if (buf[2] != 'O' || buf[3] != 'K')
return 0;
-mp = nodelink_wbuf_push(n, PICA_PROTO_NEWNODE_IPV4, PICA_PROTO_NEWNODE_IPV4_SIZE);//IPv6
-if (mp)
+ mp = nodelink_wbuf_push(n, PICA_PROTO_NEWNODE_IPV4, PICA_PROTO_NEWNODE_IPV4_SIZE);//IPv6
+ if (mp)
{
- *((in_addr_t*)(mp->tail))=inet_addr(nodecfg.announced_addr);
- *((in_port_t*)(mp->tail+4))=(nodecfg.listen_port ? htons(atoi(nodecfg.listen_port)) : htons(PICA_COMM_PORT));//CONF;
+ *((in_addr_t*)(mp->tail)) = inet_addr(nodecfg.announced_addr);
+ *((in_port_t*)(mp->tail + 4)) = (nodecfg.listen_port ? htons(atoi(nodecfg.listen_port)) : htons(PICA_COMM_PORT)); //CONF;
}
-else
+ else
return 0;
-mp = nodelink_wbuf_push(n, PICA_PROTO_NODELISTREQ, PICA_PROTO_NODELISTREQ_SIZE);
-if (mp)
+ mp = nodelink_wbuf_push(n, PICA_PROTO_NODELISTREQ, PICA_PROTO_NODELISTREQ_SIZE);
+ if (mp)
{
- RAND_bytes(mp->tail, 2);
+ RAND_pseudo_bytes(mp->tail, 2);
}
-else
+ else
return 0;
break;
case PICA_PROTO_VERDIFFER:
- if (buf[2]> PICA_PROTO_VER_HIGH || (buf[3]> PICA_PROTO_VER_LOW && buf[2]== PICA_PROTO_VER_HIGH))
+ if (buf[2] > PICA_PROTO_VER_HIGH || (buf[3] > PICA_PROTO_VER_LOW && buf[2] == PICA_PROTO_VER_HIGH))
{
PICA_warn("make update of node software - peer node has newer protocol version");
}
else
- {//peer node has older software version
+ {
+ //peer node has older software version
PICA_info("peer node has older protocol version");
}
return 0;
break;
}
-return 1;
+ return 1;
}
-unsigned int procmsg_NEWNODE(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_NEWNODE(unsigned char* buf, unsigned int size, void* ptr)
{
-struct nodelink *n=(struct nodelink *)ptr;
-struct PICA_nodeaddr na;
+ struct nodelink *n = (struct nodelink *)ptr;
+ struct PICA_nodeaddr na;
-PICA_debug1("received NEWNODE");
+ PICA_debug1("received NEWNODE");
-switch (buf[0])
+ switch (buf[0])
{
case PICA_PROTO_NEWNODE_IPV4:
- PICA_debug1("NEWNODE_IPV4: ip %.16s port %hu\n",inet_ntoa(*(struct in_addr*)(buf+2)),ntohs(*(in_port_t*)(buf+6)));
+ PICA_debug1("NEWNODE_IPV4: ip %.16s port %hu\n", inet_ntoa(*(struct in_addr*)(buf + 2)), ntohs(*(in_port_t*)(buf + 6)));
{
struct PICA_nodeaddr_ipv4 na_ipv4;
- na_ipv4.magick=PICA_PROTO_NEWNODE_IPV4;
- na_ipv4.addr=*(in_addr_t*)(buf+2);
- na_ipv4.port=*(in_port_t*)(buf+6);
+ na_ipv4.magick = PICA_PROTO_NEWNODE_IPV4;
+ na_ipv4.addr = *(in_addr_t*)(buf + 2);
+ na_ipv4.port = *(in_port_t*)(buf + 6);
if (nodelink_search_by_ipv4addr(na_ipv4.addr, na_ipv4.port)) //connection with this node is already established
{
@@ -647,38 +652,38 @@ switch (buf[0])
return 0;
}
- sprintf(na.addr,"%.16s",inet_ntoa(*(struct in_addr*)&na_ipv4.addr));
+ sprintf(na.addr, "%.16s", inet_ntoa(*(struct in_addr*)&na_ipv4.addr));
na.port = ntohs(na_ipv4.port);
//int nodelink_attach_nodeaddr(struct nodelink *nl, unsigned int addr_type, void* nodeaddr, unsigned int nodeaddr_size)
- nodelink_attach_nodeaddr(n,na_ipv4.magick,&na_ipv4,sizeof(struct PICA_nodeaddr_ipv4));
+ nodelink_attach_nodeaddr(n, na_ipv4.magick, &na_ipv4, sizeof(struct PICA_nodeaddr_ipv4));
}
break;
case PICA_PROTO_NEWNODE_IPV6:
- #warning "TO DO"
+#warning "TO DO"
break;
case PICA_PROTO_NEWNODE_DNS:
- #warning "TODO"
+#warning "TODO"
break;
}
-PICA_nodeaddr_save(nodecfg.nodes_db_file, &na);//CONF filename
+ PICA_nodeaddr_save(nodecfg.nodes_db_file, &na);//CONF filename
-return 1;
+ return 1;
}
-unsigned int procmsg_NODELISTREQ(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_NODELISTREQ(unsigned char* buf, unsigned int size, void* ptr)
{
-struct PICA_proto_msg *mp;
-struct nodelink *nlp;
-unsigned int nl_size=0;
-struct nodelink *n=0;
-struct client *c=0;
-unsigned char *nl_buf = 0;
+ struct PICA_proto_msg *mp;
+ struct nodelink *nlp;
+ unsigned int nl_size = 0;
+ struct nodelink *n = 0;
+ struct client *c = 0;
+ unsigned char *nl_buf = 0;
-PICA_debug1("received NODELISTREQ");
+ PICA_debug1("received NODELISTREQ");
-switch(buf[0])
+ switch(buf[0])
{
case PICA_PROTO_CLNODELISTREQ:
c = (struct client *)ptr;
@@ -688,34 +693,35 @@ switch(buf[0])
break;
}
-nl_buf = (unsigned char*)malloc(65536);
+ nl_buf = (unsigned char*)malloc(65536);
-if (!nl_buf)
+ if (!nl_buf)
return 0;//ERR
-{//TEMP FIXME CONF
+ {
+ //TEMP FIXME CONF
//собственный адрес узла
-nl_buf[nl_size]=PICA_PROTO_NEWNODE_IPV4;
-*((in_addr_t*)(nl_buf+nl_size+1))=inet_addr(my_addr);
-*((in_port_t*)(nl_buf+nl_size+5))=(nodecfg.listen_port ? htons(atoi(nodecfg.listen_port)) : htons(PICA_COMM_PORT));//CONF
-nl_size+=PICA_PROTO_NODELIST_ITEM_IPV4_SIZE;
-}
+ nl_buf[nl_size] = PICA_PROTO_NEWNODE_IPV4;
+ *((in_addr_t*)(nl_buf + nl_size + 1)) = inet_addr(my_addr);
+ *((in_port_t*)(nl_buf + nl_size + 5)) = (nodecfg.listen_port ? htons(atoi(nodecfg.listen_port)) : htons(PICA_COMM_PORT)); //CONF
+ nl_size += PICA_PROTO_NODELIST_ITEM_IPV4_SIZE;
+ }
-nlp=nodelink_list_head;
-while(nlp && nl_size < 65532)//MAP
+ nlp = nodelink_list_head;
+ while(nlp && nl_size < 65532)//MAP
{
switch(nlp->addr_type)
{
case PICA_PROTO_NEWNODE_IPV4:
if ( PICA_PROTO_NODELISTREQ == buf[0] &&
- ((struct PICA_nodeaddr_ipv4*)nlp->node_addr)->addr==((struct PICA_nodeaddr_ipv4*)n->node_addr)->addr &&
- ((struct PICA_nodeaddr_ipv4*)nlp->node_addr)->port==((struct PICA_nodeaddr_ipv4*)n->node_addr)->port )
+ ((struct PICA_nodeaddr_ipv4*)nlp->node_addr)->addr == ((struct PICA_nodeaddr_ipv4*)n->node_addr)->addr &&
+ ((struct PICA_nodeaddr_ipv4*)nlp->node_addr)->port == ((struct PICA_nodeaddr_ipv4*)n->node_addr)->port )
break;//exclude requester's address
- nl_buf[nl_size]=PICA_PROTO_NEWNODE_IPV4;
- *((in_addr_t*)(nl_buf+nl_size+1)) = ((struct PICA_nodeaddr_ipv4*)nlp->node_addr)->addr;
- *((in_port_t*)(nl_buf+nl_size+5)) = ((struct PICA_nodeaddr_ipv4*)nlp->node_addr)->port;
+ nl_buf[nl_size] = PICA_PROTO_NEWNODE_IPV4;
+ *((in_addr_t*)(nl_buf + nl_size + 1)) = ((struct PICA_nodeaddr_ipv4*)nlp->node_addr)->addr;
+ *((in_port_t*)(nl_buf + nl_size + 5)) = ((struct PICA_nodeaddr_ipv4*)nlp->node_addr)->port;
nl_size += PICA_PROTO_NODELIST_ITEM_IPV4_SIZE;//CONF
break;
}
@@ -723,50 +729,50 @@ while(nlp && nl_size < 65532)//MAP
nlp = nlp->next;
}
-switch(buf[0])
+ switch(buf[0])
{
case PICA_PROTO_CLNODELISTREQ:
- mp = client_wbuf_push( c, PICA_PROTO_CLNODELIST, nl_size+4);
+ mp = client_wbuf_push( c, PICA_PROTO_CLNODELIST, nl_size + 4);
break;
case PICA_PROTO_NODELISTREQ:
- mp = nodelink_wbuf_push( n, PICA_PROTO_NODELIST, nl_size+4);
+ mp = nodelink_wbuf_push( n, PICA_PROTO_NODELIST, nl_size + 4);
break;
}
-if (mp)
+ if (mp)
{
- *((uint16_t*)mp->tail)=nl_size;
- memcpy(mp->tail+2,nl_buf,nl_size);
+ *((uint16_t*)mp->tail) = nl_size;
+ memcpy(mp->tail + 2, nl_buf, nl_size);
}
-free(nl_buf);
-return 1;
+ free(nl_buf);
+ return 1;
}
-unsigned int procmsg_NODELIST(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_NODELIST(unsigned char* buf, unsigned int size, void* ptr)
{
-struct PICA_nodeaddr_ipv4 na_ipv4;
+ struct PICA_nodeaddr_ipv4 na_ipv4;
-struct nodelink *n=(struct nodelink *)ptr;
-unsigned int listsize=size-2-PICA_MSG_VARSIZE_INT16;
-unsigned int listleft=listsize;
+ struct nodelink *n = (struct nodelink *)ptr;
+ unsigned int listsize = size - 2 - PICA_MSG_VARSIZE_INT16;
+ unsigned int listleft = listsize;
-PICA_debug1("received NODELIST");
+ PICA_debug1("received NODELIST");
-while(listleft)
+ while(listleft)
{
#warning "strict error checking!!! -- listleft overflow, unknown list items, check listleft >= possible item size"
- if (listleft==listsize) //first entry, sender node's address
+ if (listleft == listsize) //first entry, sender node's address
{
- switch(buf[size-listleft])
+ switch(buf[size - listleft])
{
case PICA_PROTO_NEWNODE_IPV4:
- na_ipv4.magick=PICA_PROTO_NEWNODE_IPV4;
- na_ipv4.addr=*(in_addr_t*)(buf+size-listleft+1);
- na_ipv4.port=*(in_port_t*)(buf+size-listleft+5);
- nodelink_attach_nodeaddr(n,na_ipv4.magick,&na_ipv4,sizeof(struct PICA_nodeaddr_ipv4));
+ na_ipv4.magick = PICA_PROTO_NEWNODE_IPV4;
+ na_ipv4.addr = *(in_addr_t*)(buf + size - listleft + 1);
+ na_ipv4.port = *(in_port_t*)(buf + size - listleft + 5);
+ nodelink_attach_nodeaddr(n, na_ipv4.magick, &na_ipv4, sizeof(struct PICA_nodeaddr_ipv4));
- listleft-=PICA_PROTO_NODELIST_ITEM_IPV4_SIZE;
+ listleft -= PICA_PROTO_NODELIST_ITEM_IPV4_SIZE;
break;
}
continue;
@@ -779,17 +785,17 @@ while(listleft)
struct nodelink *nlp;
int skip_save = 0;
- memset(na.addr,0,256);
- memset(&nc,0,sizeof(struct newconn));
+ memset(na.addr, 0, 256);
+ memset(&nc, 0, sizeof(struct newconn));
- switch(buf[size-listleft])
+ switch(buf[size - listleft])
{
case PICA_PROTO_NEWNODE_IPV4:
- na_ipv4.magick=PICA_PROTO_NEWNODE_IPV4;
- na_ipv4.addr=*(in_addr_t*)(buf+size-listleft+1);
- na_ipv4.port=*(in_port_t*)(buf+size-listleft+5);
+ na_ipv4.magick = PICA_PROTO_NEWNODE_IPV4;
+ na_ipv4.addr = *(in_addr_t*)(buf + size - listleft + 1);
+ na_ipv4.port = *(in_port_t*)(buf + size - listleft + 5);
- sprintf(na.addr,"%.16s",inet_ntoa(*(struct in_addr*)&na_ipv4.addr));
+ sprintf(na.addr, "%.16s", inet_ntoa(*(struct in_addr*)&na_ipv4.addr));
na.port = ntohs(na_ipv4.port);
//nodewait_start_connection(&na);
@@ -811,7 +817,7 @@ while(listleft)
inet_ntoa(*(struct in_addr*)&na_ipv4.addr), ntohs(na_ipv4.port)
);
}
- listleft-=PICA_PROTO_NODELIST_ITEM_IPV4_SIZE;
+ listleft -= PICA_PROTO_NODELIST_ITEM_IPV4_SIZE;
break;
}
if (!skip_save)
@@ -819,154 +825,154 @@ while(listleft)
}
}
-return 1;
+ return 1;
}
-unsigned int procmsg_N2NFOUND(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_N2NFOUND(unsigned char* buf, unsigned int size, void* ptr)
{
-struct cclink *cc;
-struct nodelink *n=(struct nodelink *)ptr;
-unsigned char *callee_id = buf+2;
-struct PICA_proto_msg *mp;
+ struct cclink *cc;
+ struct nodelink *n = (struct nodelink *)ptr;
+ unsigned char *callee_id = buf + 2;
+ struct PICA_proto_msg *mp;
-PICA_debug1("received N2NFOUND");
+ PICA_debug1("received N2NFOUND");
-while((cc = cclink_list_findwaitsearch(callee_id)))
+ while((cc = cclink_list_findwaitsearch(callee_id)))
{
- cclink_attach_remotecle_node(cc,n);
- if((mp = nodelink_wbuf_push(n,PICA_PROTO_N2NCONNREQOUTG,PICA_PROTO_N2NCONNREQOUTG_SIZE)))
+ cclink_attach_remotecle_node(cc, n);
+ if((mp = nodelink_wbuf_push(n, PICA_PROTO_N2NCONNREQOUTG, PICA_PROTO_N2NCONNREQOUTG_SIZE)))
{
memcpy(mp->tail, cc->caller_id, PICA_ID_SIZE);
memcpy(mp->tail + PICA_ID_SIZE, callee_id, PICA_ID_SIZE);
}
}
-return 1;
+ return 1;
}
-unsigned int procmsg_SEARCH(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_SEARCH(unsigned char* buf, unsigned int size, void* ptr)
{
-struct nodelink *n=(struct nodelink *)ptr;
-unsigned char *callee_id = buf+2;
-struct PICA_proto_msg *mp;
-struct client *callee;
+ struct nodelink *n = (struct nodelink *)ptr;
+ unsigned char *callee_id = buf + 2;
+ struct PICA_proto_msg *mp;
+ struct client *callee;
-PICA_debug1("received SEARCH");
+ PICA_debug1("received SEARCH");
-if ((callee = client_tree_search(callee_id)))
+ if ((callee = client_tree_search(callee_id)))
{
- if ((mp = nodelink_wbuf_push(n,PICA_PROTO_N2NFOUND,PICA_PROTO_N2NFOUND_SIZE)))
+ if ((mp = nodelink_wbuf_push(n, PICA_PROTO_N2NFOUND, PICA_PROTO_N2NFOUND_SIZE)))
{
memcpy(mp->tail, callee_id, PICA_ID_SIZE);
}
}
-return 1;
+ return 1;
}
-unsigned int procmsg_N2NCONNREQOUTG(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_N2NCONNREQOUTG(unsigned char* buf, unsigned int size, void* ptr)
{
-struct nodelink *n=(struct nodelink *)ptr;
-unsigned char *caller_id, *callee_id;
-struct PICA_proto_msg *mp;
-struct client *callee;
+ struct nodelink *n = (struct nodelink *)ptr;
+ unsigned char *caller_id, *callee_id;
+ struct PICA_proto_msg *mp;
+ struct client *callee;
-PICA_debug1("received N2NCONNREQOUTG");
+ PICA_debug1("received N2NCONNREQOUTG");
-caller_id = buf + 2;
-callee_id = buf + 2 + PICA_ID_SIZE;
+ caller_id = buf + 2;
+ callee_id = buf + 2 + PICA_ID_SIZE;
-if ((callee = client_tree_search(callee_id)))
+ if ((callee = client_tree_search(callee_id)))
{
- if ((mp = client_wbuf_push(callee,PICA_PROTO_CONNREQINC,PICA_PROTO_CONNREQINC_SIZE)))
+ if ((mp = client_wbuf_push(callee, PICA_PROTO_CONNREQINC, PICA_PROTO_CONNREQINC_SIZE)))
{
memcpy(mp->tail, caller_id, PICA_ID_SIZE);
cclink_list_addn2ncle(caller_id, n, callee);
}
}
-else
+ else
{
- if ((mp = nodelink_wbuf_push(n,PICA_PROTO_N2NNOTFOUND,PICA_PROTO_N2NNOTFOUND_SIZE)))
+ if ((mp = nodelink_wbuf_push(n, PICA_PROTO_N2NNOTFOUND, PICA_PROTO_N2NNOTFOUND_SIZE)))
{
memcpy(mp->tail, caller_id, PICA_ID_SIZE);
memcpy(mp->tail + PICA_ID_SIZE, callee_id, PICA_ID_SIZE);
}
}
-return 1;
+ return 1;
}
-unsigned int procmsg_N2NALLOW(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_N2NALLOW(unsigned char* buf, unsigned int size, void* ptr)
{
-struct nodelink *n=(struct nodelink *)ptr;
-unsigned char *caller_id, *callee_id;
-struct PICA_proto_msg *mp;
-struct cclink *cc;
+ struct nodelink *n = (struct nodelink *)ptr;
+ unsigned char *caller_id, *callee_id;
+ struct PICA_proto_msg *mp;
+ struct cclink *cc;
-PICA_debug1("received N2NALLOW");
+ PICA_debug1("received N2NALLOW");
-caller_id = buf + 2;
-callee_id = buf + 2 + PICA_ID_SIZE;
+ caller_id = buf + 2;
+ callee_id = buf + 2 + PICA_ID_SIZE;
-cc = cclink_list_search(caller_id,callee_id);
+ cc = cclink_list_search(caller_id, callee_id);
-if (cc)
+ if (cc)
{
- if ((mp = client_wbuf_push(cc->p1,PICA_PROTO_FOUND,PICA_PROTO_FOUND_SIZE)))
+ if ((mp = client_wbuf_push(cc->p1, PICA_PROTO_FOUND, PICA_PROTO_FOUND_SIZE)))
{
memcpy(mp->tail, callee_id, PICA_ID_SIZE);
cclink_setwaitconn(cc);
}
}
-return 1;
+ return 1;
}
-unsigned int procmsg_N2NNOTFOUND(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_N2NNOTFOUND(unsigned char* buf, unsigned int size, void* ptr)
{
-struct nodelink *n=(struct nodelink *)ptr;
-unsigned char *caller_id, *callee_id;
-struct PICA_proto_msg *mp;
-struct cclink *cc;
+ struct nodelink *n = (struct nodelink *)ptr;
+ unsigned char *caller_id, *callee_id;
+ struct PICA_proto_msg *mp;
+ struct cclink *cc;
-PICA_debug1("received N2NNOTFOUND");
+ PICA_debug1("received N2NNOTFOUND");
-caller_id = buf + 2;
-callee_id = buf + 2 + PICA_ID_SIZE;
+ caller_id = buf + 2;
+ callee_id = buf + 2 + PICA_ID_SIZE;
-cc=cclink_list_search(caller_id,callee_id);
+ cc = cclink_list_search(caller_id, callee_id);
-if (cc)
+ if (cc)
{
- if ((mp = client_wbuf_push(cc->p1,PICA_PROTO_NOTFOUND,PICA_PROTO_NOTFOUND_SIZE)))
+ if ((mp = client_wbuf_push(cc->p1, PICA_PROTO_NOTFOUND, PICA_PROTO_NOTFOUND_SIZE)))
{
memcpy(mp->tail, callee_id, PICA_ID_SIZE);
}
cclink_list_delete(cc);
}
-return 1;
+ return 1;
}
-unsigned int procmsg_N2NMSG(unsigned char* buf,unsigned int size,void* ptr)
+unsigned int procmsg_N2NMSG(unsigned char* buf, unsigned int size, void* ptr)
{
-struct nodelink *n=(struct nodelink *)ptr;
-struct PICA_proto_msg *mp;
-unsigned char *sender_id, *receiver_id;
-struct cclink *cc;
-unsigned int len,datalen;
+ struct nodelink *n = (struct nodelink *)ptr;
+ struct PICA_proto_msg *mp;
+ unsigned char *sender_id, *receiver_id;
+ struct cclink *cc;
+ unsigned int len, datalen;
-PICA_debug1("received N2NMSG");
+ PICA_debug1("received N2NMSG");
-len=*(unsigned short*)(buf+2);
-sender_id = buf + 4;
-receiver_id = buf + 4 + PICA_ID_SIZE;
+ len = *(unsigned short*)(buf + 2);
+ sender_id = buf + 4;
+ receiver_id = buf + 4 + PICA_ID_SIZE;
-if (len < 2 * PICA_ID_SIZE)
+ if (len < 2 * PICA_ID_SIZE)
return 0;
-datalen = len - 2 * PICA_ID_SIZE;
+ datalen = len - 2 * PICA_ID_SIZE;
-cc=cclink_list_search(sender_id,receiver_id);
+ cc = cclink_list_search(sender_id, receiver_id);
-if (cc && cc->state==PICA_CCLINK_N2NCLE_ACTIVE)
+ if (cc && cc->state == PICA_CCLINK_N2NCLE_ACTIVE)
{
if (datalen + cc->bufpos_p1p2 > cc->buflen_p1p2)
{
@@ -979,9 +985,9 @@ if (cc && cc->state==PICA_CCLINK_N2NCLE_ACTIVE)
return 1;
}
///////////////
-cc=cclink_list_search(receiver_id,sender_id);
+ cc = cclink_list_search(receiver_id, sender_id);
-if (cc && cc->state==PICA_CCLINK_N2NCLR_ACTIVE)
+ if (cc && cc->state == PICA_CCLINK_N2NCLR_ACTIVE)
{
if (datalen + cc->bufpos_p2p1 > cc->buflen_p2p1)
{
@@ -989,65 +995,65 @@ if (cc && cc->state==PICA_CCLINK_N2NCLR_ACTIVE)
return 1;
}
- memcpy(cc->buf_p2p1 + cc->bufpos_p2p1, buf + 4 + 2 * PICA_ID_SIZE,datalen);
+ memcpy(cc->buf_p2p1 + cc->bufpos_p2p1, buf + 4 + 2 * PICA_ID_SIZE, datalen);
cc->bufpos_p2p1 += datalen;
return 1;
}
-if ((mp = nodelink_wbuf_push(n,PICA_PROTO_N2NNOTFOUND,PICA_PROTO_N2NNOTFOUND_SIZE)))
+ if ((mp = nodelink_wbuf_push(n, PICA_PROTO_N2NNOTFOUND, PICA_PROTO_N2NNOTFOUND_SIZE)))
{
memcpy(mp->tail, sender_id, PICA_ID_SIZE);
memcpy(mp->tail + PICA_ID_SIZE, receiver_id, PICA_ID_SIZE);
}
-return 1;
+ return 1;
}
struct cclink* cclink_list_findwaitsearch(const unsigned char *callee_id)
{
-struct cclink *c;
-c = cclink_list_head;
-while(c)
+ struct cclink *c;
+ c = cclink_list_head;
+ while(c)
{
if (memcmp(c->callee_id, callee_id, PICA_ID_SIZE) == 0
- && c->state==PICA_CCLINK_N2NCLR_WAITSEARCH)
+ && c->state == PICA_CCLINK_N2NCLR_WAITSEARCH)
return c;
- c=c->next;
+ c = c->next;
}
-return 0;
+ return 0;
}
struct cclink* cclink_list_search(const unsigned char *caller_id, const unsigned char *callee_id)
{
-struct cclink *c;
-c= cclink_list_head;
+ struct cclink *c;
+ c = cclink_list_head;
-while(c)
+ while(c)
{
if (memcmp(c->caller_id, caller_id, PICA_ID_SIZE) == 0
&& memcmp(c->callee_id, callee_id, PICA_ID_SIZE) == 0)
return c;
- c=c->next;
+ c = c->next;
}
-return 0;
+ return 0;
}
void cclink_list_delete(struct cclink *l)
{
-PICA_debug1("cclink_list_delete(%p)", (void*)l);
+ PICA_debug1("cclink_list_delete(%p)", (void*)l);
//удаление из глобального списка
-if (l->prev)
- l->prev->next=l->next;
-else
- cclink_list_head=l->next;
+ if (l->prev)
+ l->prev->next = l->next;
+ else
+ cclink_list_head = l->next;
-if (l->next)
- l->next->prev=l->prev;
-else
- cclink_list_end=l->prev;
+ if (l->next)
+ l->next->prev = l->prev;
+ else
+ cclink_list_end = l->prev;
-if (l->p1)
+ if (l->p1)
{
if (l->sck_p1)
{
@@ -1056,10 +1062,10 @@ if (l->p1)
PICA_debug2("closed socket %i", l->sck_p1);
}
}//caller_id is stored in p1 structure
-else
+ else
free(l->caller_id);//caller_id was allocated by malloc
-if (l->p2)
+ if (l->p2)
{
if (l->sck_p2)
{
@@ -1068,25 +1074,25 @@ if (l->p2)
PICA_debug2("closed socket %i", l->sck_p2);
}
}
-else
+ else
free(l->callee_id);
-if (l->buf_p1p2)
+ if (l->buf_p1p2)
free(l->buf_p1p2);
-if (l->buf_p2p1)
+ if (l->buf_p2p1)
free(l->buf_p2p1);
-free(l);
-cclink_list_count--;
+ free(l);
+ cclink_list_count--;
}
void cclink_list_delete_by_client(struct client *cl)
{
-struct cclink *kill_ptr = 0, *l = cclink_list_head;
-PICA_debug1("cclink_list_delete_by_client(%p)", (void*)cl);
+ struct cclink *kill_ptr = 0, *l = cclink_list_head;
+ PICA_debug1("cclink_list_delete_by_client(%p)", (void*)cl);
-while(l)
+ while(l)
{
if (l->p1 == cl || l->p2 == cl)
kill_ptr = l;
@@ -1104,11 +1110,11 @@ while(l)
void cclink_list_delete_by_nodelink(struct nodelink *node)
{
-struct cclink *kill_ptr = 0, *l = cclink_list_head;
+ struct cclink *kill_ptr = 0, *l = cclink_list_head;
-PICA_debug1("cclink_list_delete_by_nodelink(%p)", (void*)node);
+ PICA_debug1("cclink_list_delete_by_nodelink(%p)", (void*)node);
-while(l)
+ while(l)
{
if (l->caller_node == node || l->callee_node == node)
kill_ptr = l;
@@ -1127,51 +1133,51 @@ while(l)
//clr - caller
//cle - callee
// null value of clr or cle means that corresponding client is on remote node, is not local client
-struct cclink* cclink_list_add(struct client *clr,struct client *cle)
+struct cclink* cclink_list_add(struct client *clr, struct client *cle)
{
-struct cclink *l;
+ struct cclink *l;
-l=(struct cclink*)calloc(sizeof(struct cclink),1);
+ l = (struct cclink*)calloc(sizeof(struct cclink), 1);
-if (!l)
+ if (!l)
return 0;
//l->state=PICA_LINKSTATE_WAITREP;
-l->p1=clr;
-l->p2=cle;
+ l->p1 = clr;
+ l->p2 = cle;
//добавление в глобальный список
-if (cclink_list_head)
+ if (cclink_list_head)
{
- cclink_list_end->next=l;
- l->prev=cclink_list_end;
- cclink_list_end=l;
+ cclink_list_end->next = l;
+ l->prev = cclink_list_end;
+ cclink_list_end = l;
}
-else
+ else
{
- cclink_list_head=l;
- cclink_list_end=l;
+ cclink_list_head = l;
+ cclink_list_end = l;
}
//timestamp
-l->tmst=time(0);
+ l->tmst = time(0);
-cclink_list_count++;
+ cclink_list_count++;
-return l;
+ return l;
}
-void cclink_list_addlocal(struct client *clr,struct client *cle)
+void cclink_list_addlocal(struct client *clr, struct client *cle)
{
-struct cclink *l;
+ struct cclink *l;
-l=cclink_list_add(clr,cle);
+ l = cclink_list_add(clr, cle);
-if (l)
+ if (l)
{
- l->state=PICA_CCLINK_LOCAL_WAITREP;
+ l->state = PICA_CCLINK_LOCAL_WAITREP;
l->caller_id = l->p1->id;
l->callee_id = l->p2->id;
}
@@ -1180,13 +1186,13 @@ if (l)
void cclink_list_addn2nclr(struct client *clr, const unsigned char *callee_id)
{
-struct cclink *l;
+ struct cclink *l;
-l=cclink_list_add(clr,0);
+ l = cclink_list_add(clr, 0);
-if (l)
+ if (l)
{
- l->state=PICA_CCLINK_N2NCLR_WAITSEARCH;
+ l->state = PICA_CCLINK_N2NCLR_WAITSEARCH;
l->caller_id = l->p1->id;
l->callee_id = (unsigned char*)malloc(PICA_ID_SIZE);
@@ -1199,22 +1205,22 @@ if (l)
void cclink_attach_remotecle_node(struct cclink *ccl, struct nodelink *callee_node)
{
-if (ccl && ccl->state==PICA_CCLINK_N2NCLR_WAITSEARCH)
+ if (ccl && ccl->state == PICA_CCLINK_N2NCLR_WAITSEARCH)
{
- ccl->state=PICA_CCLINK_N2NCLR_WAITREP;
- ccl->callee_node=callee_node;
+ ccl->state = PICA_CCLINK_N2NCLR_WAITREP;
+ ccl->callee_node = callee_node;
}
}
void cclink_list_addn2ncle(const unsigned char *caller_id, struct nodelink *caller_node, struct client *cle)
{
-struct cclink *l;
+ struct cclink *l;
-l=cclink_list_add(0,cle);
+ l = cclink_list_add(0, cle);
-if (l)
+ if (l)
{
- l->state=PICA_CCLINK_N2NCLE_WAITREP;
+ l->state = PICA_CCLINK_N2NCLE_WAITREP;
l->caller_id = (unsigned char*)malloc(PICA_ID_SIZE);
if (l->caller_id == NULL)
@@ -1229,17 +1235,17 @@ if (l)
void cclink_setwaitconn(struct cclink *ccl)
{
-switch (ccl->state)
+ switch (ccl->state)
{
case PICA_CCLINK_LOCAL_WAITREP:
- ccl->state=PICA_CCLINK_LOCAL_WAITCONNCLE;
+ ccl->state = PICA_CCLINK_LOCAL_WAITCONNCLE;
//
break;
case PICA_CCLINK_N2NCLR_WAITREP:
- ccl->state=PICA_CCLINK_N2NCLR_WAITCONNCLR;
+ ccl->state = PICA_CCLINK_N2NCLR_WAITCONNCLR;
break;
case PICA_CCLINK_N2NCLE_WAITREP:
- ccl->state=PICA_CCLINK_N2NCLE_WAITCONNCLE;
+ ccl->state = PICA_CCLINK_N2NCLE_WAITCONNCLE;
break;
default:
;
@@ -1248,9 +1254,9 @@ switch (ccl->state)
int cclink_allocbufs(struct cclink *ccl)
{
-ccl->buf_p1p2 = malloc(DEFAULT_BUF_SIZE);
-ccl->buf_p2p1 = malloc(DEFAULT_BUF_SIZE);
-if (!ccl->buf_p1p2 || !ccl->buf_p2p1)
+ ccl->buf_p1p2 = malloc(DEFAULT_BUF_SIZE);
+ ccl->buf_p2p1 = malloc(DEFAULT_BUF_SIZE);
+ if (!ccl->buf_p1p2 || !ccl->buf_p2p1)
{
if (ccl->buf_p1p2)
free(ccl->buf_p1p2);
@@ -1258,14 +1264,14 @@ if (!ccl->buf_p1p2 || !ccl->buf_p2p1)
free(ccl->buf_p2p1);
return 0;
}
-ccl->buflen_p1p2 = DEFAULT_BUF_SIZE;
-ccl->buflen_p2p1 = DEFAULT_BUF_SIZE;
-return 1;
+ ccl->buflen_p1p2 = DEFAULT_BUF_SIZE;
+ ccl->buflen_p2p1 = DEFAULT_BUF_SIZE;
+ return 1;
}
-void cclink_activate(struct cclink *ccl,SOCKET s)
+void cclink_activate(struct cclink *ccl, SOCKET s)
{
-switch(ccl->state)
+ switch(ccl->state)
{
case PICA_CCLINK_LOCAL_WAITCONNCLE:
ccl->sck_p2 = s;
@@ -1304,81 +1310,81 @@ switch(ccl->state)
int PICA_node_init()
{
-struct sockaddr_in sd;
-int ret;
-int flag;
+ struct sockaddr_in sd;
+ int ret;
+ int flag;
-SSL_load_error_strings();
-SSL_library_init();
+ SSL_load_error_strings();
+ SSL_library_init();
#ifdef WIN32
-WSADATA wsd;
-WSAStartup(MAKEWORD(2,2),&wsd);
+ WSADATA wsd;
+ WSAStartup(MAKEWORD(2, 2), &wsd);
#endif
//CONF -AF_INET6 ????
-listen_comm_sck=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ listen_comm_sck = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-if (listen_comm_sck == -1)
+ if (listen_comm_sck == -1)
PICA_fatal("unable to get socket - %s", strerror(errno));
-flag = 1; //enable SO_REUSEADDR
-if (0 != setsockopt(listen_comm_sck, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(flag)))
-{
+ flag = 1; //enable SO_REUSEADDR
+ if (0 != setsockopt(listen_comm_sck, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(flag)))
+ {
PICA_error("failed to set SO_REUSEADDR on socket: %s", strerror(errno));
-}
+ }
-memset(&sd,0,sizeof(sd));
+ memset(&sd, 0, sizeof(sd));
-sd.sin_family=AF_INET;
-sd.sin_addr.s_addr=INADDR_ANY;//CONF
-sd.sin_port = (nodecfg.listen_port ? htons(atoi(nodecfg.listen_port)) : htons(PICA_COMM_PORT));//CONF
+ sd.sin_family = AF_INET;
+ sd.sin_addr.s_addr = INADDR_ANY; //CONF
+ sd.sin_port = (nodecfg.listen_port ? htons(atoi(nodecfg.listen_port)) : htons(PICA_COMM_PORT));//CONF
-ret = bind(listen_comm_sck,(struct sockaddr*)&sd,sizeof(sd));
+ ret = bind(listen_comm_sck, (struct sockaddr*)&sd, sizeof(sd));
-if (ret == -1)
+ if (ret == -1)
PICA_fatal("unable to bind socket - %s", strerror(errno));
-ret = listen(listen_comm_sck,20);
-if (ret == -1)
+ ret = listen(listen_comm_sck, 20);
+ if (ret == -1)
PICA_fatal("unable to listen socket - %s", strerror(errno));
-{
-int ret_comm;
-unsigned long arg=1;
+ {
+ int ret_comm;
+ unsigned long arg = 1;
#ifdef WIN32
-ret_comm=ioctlsocket(listen_comm_sck,FIONBIO,&arg);
+ ret_comm = ioctlsocket(listen_comm_sck, FIONBIO, &arg);
// ret_data=ioctlsocket(listen_data_sck,FIONBIO,&arg);
// ret_data=ioctlsocket(listen_node_sck,FIONBIO,&arg);
#else
-ret_comm=ioctl(listen_comm_sck,FIONBIO,(int*)&arg);
+ ret_comm = ioctl(listen_comm_sck, FIONBIO, (int*)&arg);
// ret_data=ioctl(listen_data_sck,FIONBIO,(int*)&arg);
// ret_data=ioctl(listen_node_sck,FIONBIO,(int*)&arg);
#endif
-if (ret_comm == -1)
+ if (ret_comm == -1)
PICA_fatal("unable to set non-blocking mode on socket - %s", strerror(errno));
-}
+ }
//#ifdef NO_RAND_DEV
//PICA_rand_seed();
//#endif
-ctx = SSL_CTX_new(TLSv1_2_method());
+ ctx = SSL_CTX_new(TLSv1_2_method());
-if (!ctx)
+ if (!ctx)
PICA_fatal("unable to create SSL_CTX object");
-ret = SSL_CTX_load_verify_locations(ctx, nodecfg.CA_cert_file, 0);
+ ret = SSL_CTX_load_verify_locations(ctx, nodecfg.CA_cert_file, 0);
-if (!ret)
+ if (!ret)
PICA_fatal("call to SSL_CTX_load_verify_locations failed(). Check if %s exists and is accesible", nodecfg.CA_cert_file);
-SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, verify_callback);
+ SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, verify_callback);
-return 1;
+ return 1;
}
/*
//функция возвращает номер клиента id в бинарном виде, извлекая его из строки,
@@ -1414,41 +1420,41 @@ return 1;
void newconn_close(struct newconn* nc)
{
-CLOSE(nc->sck);
-PICA_debug3("newconn_close(): nc = %p closed socket %i", nc, nc->sck);
+ CLOSE(nc->sck);
+ PICA_debug3("newconn_close(): nc = %p closed socket %i", nc, nc->sck);
-nc->sck=0;
-nc->pos=0;
+ nc->sck = 0;
+ nc->pos = 0;
}
//функция ищет свободный элемент в массиве структур newconn и возвращает на него указатель
//В случае, если свободный элемент не найден, возвращается элемент с наиболее поздней отметкой времени,
//при этом соединение закрывается
-struct newconn* newconn_add(struct newconn *ncs,int *pos)
+struct newconn* newconn_add(struct newconn *ncs, int *pos)
{
-time_t min;
-int min_pos=0;
-if (*pos<MAX_NEWCONNS && !ncs[*pos].sck)
+ time_t min;
+ int min_pos = 0;
+ if (*pos < MAX_NEWCONNS && !ncs[*pos].sck)
{
goto ret;
}
-else
+ else
{
- *pos=0;
- min=ncs->tmst;
- while(ncs[*pos].sck && *pos<MAX_NEWCONNS)
+ *pos = 0;
+ min = ncs->tmst;
+ while(ncs[*pos].sck && *pos < MAX_NEWCONNS)
{
- if (ncs[*pos].tmst<min)
+ if (ncs[*pos].tmst < min)
{
- min=ncs[*pos].tmst;
- min_pos=*pos;
+ min = ncs[*pos].tmst;
+ min_pos = *pos;
}
(*pos)++;
}
- if ( (*pos)==MAX_NEWCONNS)
+ if ( (*pos) == MAX_NEWCONNS)
{
- *pos=min_pos;
+ *pos = min_pos;
SHUTDOWN(ncs[min_pos].sck);
CLOSE(ncs[min_pos].sck);
PICA_debug2("closed socket %i", ncs[min_pos].sck);
@@ -1456,436 +1462,442 @@ else
}
ret:
-ncs[*pos].pos=0;
-ncs[*pos].tmst=time(0);
-return &ncs[(*pos)++];
+ ncs[*pos].pos = 0;
+ ncs[*pos].tmst = time(0);
+ return &ncs[(*pos)++];
}
void newconn_free(struct newconn* nc)
{
-nc->sck=0;
+ nc->sck = 0;
//nc->pos=0; - pos value is being used in processmsgdatastream
}
int client_tree_add(struct client *ci)
{
-struct client *i;
-if (client_tree_root)
+ struct client *i;
+ if (client_tree_root)
{
- i=client_tree_root;
+ i = client_tree_root;
do
{
- if (memcmp(i->id, ci->id, PICA_ID_SIZE) == 0)
+ int cmp;
+
+ cmp = memcmp(ci->id, i->id, PICA_ID_SIZE);
+
+ if (cmp == 0)
return 0;
- if (memcmp(ci->id, i->id, PICA_ID_SIZE) < 0) // ci->id < i->id
+ if (cmp < 0) // ci->id < i->id
{
if (i->left)
- i=i->left;
+ i = i->left;
else
{
- i->left=ci;
- ci->up=i;
+ i->left = ci;
+ ci->up = i;
return 1;
}
}
else
{
if (i->right)
- i=i->right;
+ i = i->right;
else
{
- i->right=ci;
- ci->up=i;
+ i->right = ci;
+ ci->up = i;
return 1;
}
}
}
while(1);
}
-else
- client_tree_root=ci;
+ else
+ client_tree_root = ci;
-return 1;
+ return 1;
}
struct client* client_tree_search(const unsigned char *id)
{
-struct client* i_ptr;
-i_ptr=client_tree_root;
+ struct client* i_ptr;
+ i_ptr = client_tree_root;
//PICA_debug1("client_tree_search: searching for %u...",id);
-while(i_ptr)
+ while(i_ptr)
{
- if (memcmp(i_ptr->id, id, PICA_ID_SIZE) == 0)
+ int cmp = memcmp(id, i_ptr->id, PICA_ID_SIZE);
+
+ if (cmp == 0)
return i_ptr;
- if (memcmp(id, i_ptr->id, PICA_ID_SIZE) < 0) //id < i_ptr->id
- i_ptr=i_ptr->left;
+ if (cmp < 0) //id < i_ptr->id
+ i_ptr = i_ptr->left;
else
- i_ptr=i_ptr->right;
+ i_ptr = i_ptr->right;
}
-PICA_debug1("client_tree_search- id not found");
-return 0;
+ PICA_debug1("client_tree_search- id not found");
+ return 0;
}
void client_tree_print(struct client *c)
{
-if (!c)
+ if (!c)
{
puts("NULL");
return;
}
-printf("%p: %u LEFT: %p, RIGHT: %p\n", (void*)c, c->id, (void*)c->left, (void*)c->right);
+ printf("%p: %u LEFT: %p, RIGHT: %p\n", (void*)c, c->id, (void*)c->left, (void*)c->right);
-if (c->left)
+ if (c->left)
client_tree_print(c->left);
-if (c->right)
+ if (c->right)
client_tree_print(c->right);
}
//удаление структуры из дерева
void client_tree_remove(struct client* ci)
{
-struct client** p_link;//указывает на left или right в родительском узле
+ struct client** p_link;//указывает на left или right в родительском узле
-if (!ci->up)
+ if (!ci->up)
{
p_link = &client_tree_root;
}
-else
+ else
{
- if (ci==ci->up->left)
- p_link=&(ci->up->left);
+ if (ci == ci->up->left)
+ p_link = &(ci->up->left);
else
- p_link=&(ci->up->right);
+ p_link = &(ci->up->right);
}
-if (!ci->left && !ci->right)
+ if (!ci->left && !ci->right)
{
- *p_link=0;
+ *p_link = 0;
return;
}
-if (ci->left && !ci->right)
+ if (ci->left && !ci->right)
{
- ci->left->up=ci->up;
- *p_link=ci->left;
+ ci->left->up = ci->up;
+ *p_link = ci->left;
return;
}
-if (!ci->left && ci->right)
+ if (!ci->left && ci->right)
{
- ci->right->up=ci->up;
- *p_link=ci->right;
+ ci->right->up = ci->up;
+ *p_link = ci->right;
return;
}
{
struct client *lm;
- lm=ci->right;
- while(lm->left) lm=lm->left;//поиск самого левого узла правого поддерева
+ lm = ci->right;
+ while(lm->left) lm = lm->left; //поиск самого левого узла правого поддерева
- if (lm!=ci->right)
+ if (lm != ci->right)
{
- lm->up->left=lm->right;
- lm->right=ci->right;
+ lm->up->left = lm->right;
+ lm->right = ci->right;
}
- lm->left=ci->left;
- lm->up=ci->up;
- *p_link=lm;
+ lm->left = ci->left;
+ lm->up = ci->up;
+ *p_link = lm;
}
}
struct client *client_list_addnew(struct newconn *nc)
{
-struct client* ci;
+ struct client* ci;
-ci=(struct client *)calloc(1,sizeof(struct client));
+ ci = (struct client *)calloc(1, sizeof(struct client));
-if (!ci) return 0;
+ if (!ci) return 0;
-ci->ssl_comm =SSL_new (ctx);
+ ci->ssl_comm = SSL_new (ctx);
-if (!ci->ssl_comm)
+ if (!ci->ssl_comm)
{
free(ci);
return 0;
}
-if (client_list_end)
+ if (client_list_end)
{
- client_list_end->next=ci;
- ci->prev=client_list_end;
- client_list_end=ci;
+ client_list_end->next = ci;
+ ci->prev = client_list_end;
+ client_list_end = ci;
}
-else
+ else
{
- client_list_head=ci;
- client_list_end=ci;
+ client_list_head = ci;
+ client_list_end = ci;
}
-ci->sck_comm=nc->sck;
-ci->addr=nc->addr;
+ ci->sck_comm = nc->sck;
+ ci->addr = nc->addr;
-SSL_set_fd(ci->ssl_comm,ci->sck_comm);
+ SSL_set_fd(ci->ssl_comm, ci->sck_comm);
-ci->r_buf = calloc(1,DEFAULT_BUF_SIZE);
-if (!ci->r_buf)
+ ci->r_buf = calloc(1, DEFAULT_BUF_SIZE);
+ if (!ci->r_buf)
{
free(ci);
return 0;
}
-ci->buflen_r = DEFAULT_BUF_SIZE;
+ ci->buflen_r = DEFAULT_BUF_SIZE;
-ci->tmst = time(0);
+ ci->tmst = time(0);
-return ci;
+ return ci;
}
void client_list_delete(struct client* ci)
{
-PICA_debug1("client_list_delete(%p)", (void*)ci);
-SSL_free(ci->ssl_comm);
+ PICA_debug1("client_list_delete(%p)", (void*)ci);
+ SSL_free(ci->ssl_comm);
//удаление из списка
-if (ci->prev)
- ci->prev->next=ci->next;
-else
- client_list_head=ci->next;
+ if (ci->prev)
+ ci->prev->next = ci->next;
+ else
+ client_list_head = ci->next;
-if (ci->next)
- ci->next->prev=ci->prev;
-else
- client_list_end=ci->prev;
+ if (ci->next)
+ ci->next->prev = ci->prev;
+ else
+ client_list_end = ci->prev;
//удаление из дерева
-if (client_tree_search(ci->id) == ci)
+ if (client_tree_search(ci->id) == ci)
{
client_tree_remove(ci);
client_tree_print(client_tree_root);
}
-cclink_list_delete_by_client(ci);
+ cclink_list_delete_by_client(ci);
-if (ci->r_buf)
+ if (ci->r_buf)
free(ci->r_buf);
-if (ci->w_buf)
+ if (ci->w_buf)
free(ci->w_buf);
-CLOSE(ci->sck_comm);
-PICA_debug2("closed socket %i", ci->sck_comm);
+ CLOSE(ci->sck_comm);
+ PICA_debug2("closed socket %i", ci->sck_comm);
-free(ci);
+ free(ci);
}
struct PICA_proto_msg* client_wbuf_push
- (struct client *c,unsigned int msgid,unsigned int size)
+(struct client *c, unsigned int msgid, unsigned int size)
{
-if (!c->w_buf)
+ if (!c->w_buf)
{
- c->w_buf = calloc(1,DEFAULT_BUF_SIZE + (size/DEFAULT_BUF_SIZE)*DEFAULT_BUF_SIZE );
+ c->w_buf = calloc(1, DEFAULT_BUF_SIZE + (size / DEFAULT_BUF_SIZE) * DEFAULT_BUF_SIZE );
if (!c->w_buf)
{
PICA_error("calloc() failed. Out of memory");
return 0;
}
- c->buflen_w = DEFAULT_BUF_SIZE + (size/DEFAULT_BUF_SIZE)*DEFAULT_BUF_SIZE;
+ c->buflen_w = DEFAULT_BUF_SIZE + (size / DEFAULT_BUF_SIZE) * DEFAULT_BUF_SIZE;
}
-if ((c->buflen_w - c->w_pos) < size)
+ if ((c->buflen_w - c->w_pos) < size)
{
unsigned char *p;
- p=realloc(c->w_buf,size + c->w_pos);
+ p = realloc(c->w_buf, size + c->w_pos);
if (p)
{
- c->w_buf=p;
- c->buflen_w=size + c->w_pos;
+ c->w_buf = p;
+ c->buflen_w = size + c->w_pos;
}
else
return 0;
}
-struct PICA_proto_msg *mp=(struct PICA_proto_msg *)(c->w_buf + c->w_pos);
-mp->head[0]=mp->head[1]=msgid;
-c->w_pos+=size;
-return mp;
+ struct PICA_proto_msg *mp = (struct PICA_proto_msg *)(c->w_buf + c->w_pos);
+ mp->head[0] = mp->head[1] = msgid;
+ c->w_pos += size;
+ return mp;
}
int client_rbuf_grow(struct client *c)
{
-unsigned char *p;
+ unsigned char *p;
-p=realloc(c->r_buf, c->buflen_r + DEFAULT_BUF_SIZE);
+ p = realloc(c->r_buf, c->buflen_r + DEFAULT_BUF_SIZE);
-if (!p)
+ if (!p)
{
PICA_error("realloc() failed");
return 0;
}
-c->r_buf = p;
-c->buflen_r +=DEFAULT_BUF_SIZE;
+ c->r_buf = p;
+ c->buflen_r += DEFAULT_BUF_SIZE;
-return 1;
+ return 1;
}
struct nodelink *nodelink_list_addnew(struct newconn *nc)
{
-struct nodelink *nl;
+ struct nodelink *nl;
-nl=(struct nodelink*)calloc(1,sizeof(struct nodelink));
+ nl = (struct nodelink*)calloc(1, sizeof(struct nodelink));
-if (!nl)
+ if (!nl)
return 0;
-if (nodelink_list_end)
+ if (nodelink_list_end)
{
- nodelink_list_end->next=nl;
- nl->prev=nodelink_list_end;
- nodelink_list_end=nl;
+ nodelink_list_end->next = nl;
+ nl->prev = nodelink_list_end;
+ nodelink_list_end = nl;
}
-else
+ else
{
- nodelink_list_head=nl;
- nodelink_list_end=nl;
+ nodelink_list_head = nl;
+ nodelink_list_end = nl;
}
-nl->sck=nc->sck;
-nl->addr=nc->addr;
+ nl->sck = nc->sck;
+ nl->addr = nc->addr;
-nl->r_buf=calloc(1,DEFAULT_BUF_SIZE);
-if (!nl->r_buf)
+ nl->r_buf = calloc(1, DEFAULT_BUF_SIZE);
+ if (!nl->r_buf)
{
free(nl);
return 0;
}
-nl->buflen_r=DEFAULT_BUF_SIZE;
+ nl->buflen_r = DEFAULT_BUF_SIZE;
-nl->tmst = time(0);
+ nl->tmst = time(0);
-nodelink_list_count++;
-return nl;
+ nodelink_list_count++;
+ return nl;
}
void nodelink_list_delete(struct nodelink *n)
{
-PICA_debug1("nodelink_list_delete(%p)", (void*)n);
+ PICA_debug1("nodelink_list_delete(%p)", (void*)n);
-if (n->r_buf)
+ if (n->r_buf)
free(n->r_buf);
-if (n->w_buf)
+ if (n->w_buf)
free(n->w_buf);
-if (n->node_addr)
+ if (n->node_addr)
free(n->node_addr);
-CLOSE(n->sck);
-PICA_debug2("closed socket %i", n->sck);
+ CLOSE(n->sck);
+ PICA_debug2("closed socket %i", n->sck);
-if (n->prev)
- n->prev->next=n->next;
-else
- nodelink_list_head=n->next;
+ if (n->prev)
+ n->prev->next = n->next;
+ else
+ nodelink_list_head = n->next;
-if (n->next)
- n->next->prev=n->prev;
-else
- nodelink_list_end=n->prev;
+ if (n->next)
+ n->next->prev = n->prev;
+ else
+ nodelink_list_end = n->prev;
-cclink_list_delete_by_nodelink(n);
+ cclink_list_delete_by_nodelink(n);
-nodelink_list_count--;
-free(n);
+ nodelink_list_count--;
+ free(n);
}
int nodelink_attach_nodeaddr(struct nodelink *nl, unsigned int addr_type, void* nodeaddr, unsigned int nodeaddr_size)
{
-if (nl && nodeaddr)
+ if (nl && nodeaddr)
{
if (nl->node_addr)
free(nl->node_addr);
- nl->node_addr=malloc(nodeaddr_size);
+ nl->node_addr = malloc(nodeaddr_size);
if (!nl->node_addr)
return 0;//ERR_CHECK
- memcpy(nl->node_addr,nodeaddr,nodeaddr_size);
+ memcpy(nl->node_addr, nodeaddr, nodeaddr_size);
- nl->addr_type=addr_type;
+ nl->addr_type = addr_type;
return 1;
}
-return 0;
+ return 0;
}
int nodelink_rbuf_grow(struct nodelink *nl)
{
-unsigned char *p;
+ unsigned char *p;
-p=realloc(nl->r_buf,nl->buflen_r + DEFAULT_BUF_SIZE);
+ p = realloc(nl->r_buf, nl->buflen_r + DEFAULT_BUF_SIZE);
-if (!p)
+ if (!p)
{
PICA_error("realloc() failed");
return 0;
}
-nl->r_buf = p;
-nl->buflen_r +=DEFAULT_BUF_SIZE;
+ nl->r_buf = p;
+ nl->buflen_r += DEFAULT_BUF_SIZE;
-return 1;
+ return 1;
}
struct PICA_proto_msg* nodelink_wbuf_push
- (struct nodelink *nl,unsigned int msgid,unsigned int size)
+(struct nodelink *nl, unsigned int msgid, unsigned int size)
{
-struct PICA_proto_msg *mp;
+ struct PICA_proto_msg *mp;
-if (!nl->w_buf)
+ if (!nl->w_buf)
{
- nl->w_buf=calloc(1,DEFAULT_BUF_SIZE );
+ nl->w_buf = calloc(1, DEFAULT_BUF_SIZE );
if (!nl->w_buf)
{
PICA_error("calloc() failed. Out of memory");
return 0;
}
- nl->buflen_w=DEFAULT_BUF_SIZE;
+ nl->buflen_w = DEFAULT_BUF_SIZE;
}
-if ((nl->buflen_w - nl->w_pos) < size)
+ if ((nl->buflen_w - nl->w_pos) < size)
{
unsigned char *p;
- p=realloc(nl->w_buf,size + nl->w_pos);
+ p = realloc(nl->w_buf, size + nl->w_pos);
if (p)
{
- nl->w_buf=p;
- nl->buflen_w=size + nl->w_pos;
+ nl->w_buf = p;
+ nl->buflen_w = size + nl->w_pos;
}
else
return 0;
}
-mp=(struct PICA_proto_msg *)(nl->w_buf + nl->w_pos);
-mp->head[0]=mp->head[1]=msgid;
-nl->w_pos+=size;
-return mp;
+ mp = (struct PICA_proto_msg *)(nl->w_buf + nl->w_pos);
+ mp->head[0] = mp->head[1] = msgid;
+ nl->w_pos += size;
+ return mp;
}
struct nodelink *nodelink_search_by_ipv4addr(in_addr_t ip, in_port_t port)
{
-struct nodelink *nl;
+ struct nodelink *nl;
-nl = nodelink_list_head;
+ nl = nodelink_list_head;
-while(nl && !(
+ while(nl && !(
(nl->addr.sin_addr.s_addr == ip && nl->addr.sin_port == port) ||
(nl->node_addr && nl->addr_type == PICA_PROTO_NEWNODE_IPV4 &&
((struct PICA_nodeaddr_ipv4*)nl->node_addr) ->addr == ip &&
@@ -1897,32 +1909,32 @@ while(nl && !(
nl = nl->next;
}
-return nl;
+ return nl;
}
// обработка различных таймаутов. Отправка пингов
void process_timeouts_newconn()
{
-clock_t t;
-int i;
+ clock_t t;
+ int i;
-t=time(0);
+ t = time(0);
-for (i=0;i<MAX_NEWCONNS;i++)
+ for (i = 0; i < MAX_NEWCONNS; i++)
{
if (newconns[i].sck)
{
- if (newconns[i].tmst<t)
+ if (newconns[i].tmst < t)
{
- if (t-newconns[i].tmst>NEWCONN_TIMEOUT)
+ if (t - newconns[i].tmst > NEWCONN_TIMEOUT)
{
- newconn_close(newconns+i);
+ newconn_close(newconns + i);
}
}
- else if ( newconns[i].tmst-t>NEWCONN_TIMEOUT)
+ else if ( newconns[i].tmst - t > NEWCONN_TIMEOUT)
{
- newconn_close(newconns+i);
+ newconn_close(newconns + i);
}
}
}
@@ -1930,11 +1942,11 @@ for (i=0;i<MAX_NEWCONNS;i++)
void process_timeouts_c2c()
{
-struct cclink *il;
+ struct cclink *il;
-il=cclink_list_head;
+ il = cclink_list_head;
-while(il)
+ while(il)
{
switch(il->state)
{
@@ -1946,30 +1958,30 @@ while(il)
break;
default:
- if ((time(0)- il->tmst)>TMO_CCLINK_WAITACTIVE)
+ if ((time(0) - il->tmst) > TMO_CCLINK_WAITACTIVE)
{
struct cclink *dl;
- dl=il;
- il=il->next;
+ dl = il;
+ il = il->next;
cclink_list_delete(dl);
continue;
}
}
- il=il->next;
+ il = il->next;
}
}
void process_timeouts_c2n()
{
-struct client *i_ptr, *kill_ptr;
-int ret;
+ struct client *i_ptr, *kill_ptr;
+ int ret;
-i_ptr = client_list_head;
-kill_ptr = 0;
+ i_ptr = client_list_head;
+ kill_ptr = 0;
-clock_t cur_time = time(0);
+ clock_t cur_time = time(0);
-while(i_ptr)
+ while(i_ptr)
{
if (i_ptr->disconnect_ticking)
{
@@ -1979,7 +1991,8 @@ while(i_ptr)
kill_ptr = i_ptr;
}
else
- {//2038 year has come, and this code is still working somewhere with 32bit Unix timestamps :)
+ {
+ //2038 year has come, and this code is still working somewhere with 32bit Unix timestamps :)
if ((i_ptr->tmst - cur_time ) > NOREPLY_TIMEOUT)
kill_ptr = i_ptr;
}
@@ -1995,7 +2008,7 @@ while(i_ptr)
if ((mp = client_wbuf_push(i_ptr, PICA_PROTO_PINGREQ, PICA_PROTO_PINGREQ_SIZE)))
{
PICA_debug3("sending PINGREQ to %p", i_ptr);
- RAND_bytes(mp->tail, 2);
+ RAND_pseudo_bytes(mp->tail, 2);
i_ptr->tmst = time(0);
i_ptr->disconnect_ticking = 1;
@@ -2012,22 +2025,22 @@ while(i_ptr)
{
PICA_info("Disconnecting user %u due to noreply timeout", kill_ptr -> id);
client_list_delete(kill_ptr);
- kill_ptr=0;
+ kill_ptr = 0;
}
}
}
void process_timeouts_n2n()
{
-struct nodelink *i_ptr, *kill_ptr;
-int ret;
+ struct nodelink *i_ptr, *kill_ptr;
+ int ret;
-i_ptr = nodelink_list_head;
-kill_ptr = 0;
+ i_ptr = nodelink_list_head;
+ kill_ptr = 0;
-clock_t cur_time = time(0);
+ clock_t cur_time = time(0);
-while(i_ptr)
+ while(i_ptr)
{
if (i_ptr->disconnect_ticking)
{
@@ -2037,7 +2050,8 @@ while(i_ptr)
kill_ptr = i_ptr;
}
else
- {//2038 year has come, and this code is still working somewhere with 32bit Unix timestamps :)
+ {
+ //2038 year has come, and this code is still working somewhere with 32bit Unix timestamps :)
if ((i_ptr->tmst - cur_time ) > NOREPLY_TIMEOUT)
kill_ptr = i_ptr;
}
@@ -2053,7 +2067,7 @@ while(i_ptr)
if ((mp = nodelink_wbuf_push(i_ptr, PICA_PROTO_PINGREQ, PICA_PROTO_PINGREQ_SIZE)))
{
PICA_debug3("sending PINGREQ to node %p", i_ptr);
- RAND_bytes(mp->tail, 2);
+ RAND_pseudo_bytes(mp->tail, 2);
i_ptr->tmst = time(0);
i_ptr->disconnect_ticking = 1;
@@ -2070,103 +2084,103 @@ while(i_ptr)
{
PICA_info("Disconnecting node %p due to noreply timeout", kill_ptr);
nodelink_list_delete(kill_ptr);
- kill_ptr=0;
+ kill_ptr = 0;
}
}
}
int process_timeouts()
{
-process_timeouts_newconn();
-process_timeouts_c2n();
-process_timeouts_c2c();
-process_timeouts_n2n();
+ process_timeouts_newconn();
+ process_timeouts_c2n();
+ process_timeouts_c2c();
+ process_timeouts_n2n();
-if (time(0) - skynet_refresh_tmst > SKYNET_REFRESH_TIMEOUT && !nodewait_list)
+ if (time(0) - skynet_refresh_tmst > SKYNET_REFRESH_TIMEOUT && !nodewait_list)
{
PICA_debug3("refreshing nodelist database");
PICA_node_joinskynet(nodecfg.nodes_db_file, nodecfg.announced_addr);
}
-return 1;
+ return 1;
}
void set_select_fd(SOCKET s, fd_set *readfds, int *nfds)
{
-FD_SET(s,readfds);
+ FD_SET(s, readfds);
-if (s > *nfds)
- *nfds=s;
+ if (s > *nfds)
+ *nfds = s;
}
-void listen_set_fds(fd_set *readfds,int *nfds)
+void listen_set_fds(fd_set *readfds, int *nfds)
{
-set_select_fd(listen_comm_sck,readfds,nfds);
+ set_select_fd(listen_comm_sck, readfds, nfds);
}
-void newconn_set_fds(fd_set *readfds,int *nfds)
+void newconn_set_fds(fd_set *readfds, int *nfds)
{
-int i;
+ int i;
-for (i=0;i<MAX_NEWCONNS;i++)
+ for (i = 0; i < MAX_NEWCONNS; i++)
if (newconns[i].sck)
- set_select_fd(newconns[i].sck,readfds,nfds);
+ set_select_fd(newconns[i].sck, readfds, nfds);
}
-void c2n_set_fds(fd_set *readfds,int *nfds)
+void c2n_set_fds(fd_set *readfds, int *nfds)
{
-struct client *i_ptr;
+ struct client *i_ptr;
-i_ptr=client_list_head;
-while(i_ptr)
+ i_ptr = client_list_head;
+ while(i_ptr)
{
- set_select_fd(i_ptr->sck_comm,readfds,nfds);
+ set_select_fd(i_ptr->sck_comm, readfds, nfds);
- i_ptr=i_ptr->next;
+ i_ptr = i_ptr->next;
}
}
-void c2c_set_fds(fd_set *readfds,int *nfds)
+void c2c_set_fds(fd_set *readfds, int *nfds)
{
-struct cclink *cc;
+ struct cclink *cc;
-cc=cclink_list_head;
-while(cc)
+ cc = cclink_list_head;
+ while(cc)
{
- if ( !cc->jam_p1p2 && (cc->state==PICA_CCLINK_LOCAL_ACTIVE || cc->state==PICA_CCLINK_N2NCLR_ACTIVE) )
- set_select_fd(cc->sck_p1,readfds,nfds);
+ if ( !cc->jam_p1p2 && (cc->state == PICA_CCLINK_LOCAL_ACTIVE || cc->state == PICA_CCLINK_N2NCLR_ACTIVE) )
+ set_select_fd(cc->sck_p1, readfds, nfds);
- if ( !cc->jam_p2p1 && (cc->state==PICA_CCLINK_LOCAL_ACTIVE || cc->state==PICA_CCLINK_N2NCLE_ACTIVE) )
- set_select_fd(cc->sck_p2,readfds,nfds);
+ if ( !cc->jam_p2p1 && (cc->state == PICA_CCLINK_LOCAL_ACTIVE || cc->state == PICA_CCLINK_N2NCLE_ACTIVE) )
+ set_select_fd(cc->sck_p2, readfds, nfds);
- cc=cc->next;
+ cc = cc->next;
}
}
-void n2n_set_fds(fd_set *readfds,int *nfds)
+void n2n_set_fds(fd_set *readfds, int *nfds)
{
-struct nodelink *nl;
-nl=nodelink_list_head;
+ struct nodelink *nl;
+ nl = nodelink_list_head;
-while(nl)
+ while(nl)
{
- set_select_fd(nl->sck,readfds,nfds);
- nl=nl->next;
+ set_select_fd(nl->sck, readfds, nfds);
+ nl = nl->next;
}
}
void process_listen_read(fd_set *readfds)
{
-struct newconn *nc;
-SOCKET s;
-struct sockaddr_in addr;
-int addrsize = sizeof(struct sockaddr_in);
-if (FD_ISSET(listen_comm_sck,readfds))
+ struct newconn *nc;
+ SOCKET s;
+ struct sockaddr_in addr;
+ int addrsize = sizeof(struct sockaddr_in);
+ if (FD_ISSET(listen_comm_sck, readfds))
{
- s = accept(listen_comm_sck,(struct sockaddr*)&addr,&addrsize);
+ s = accept(listen_comm_sck, (struct sockaddr*)&addr, &addrsize);
if (s >= 0)
{
- nc = newconn_add(newconns,&newconns_pos);
+ nc = newconn_add(newconns, &newconns_pos);
nc->sck = s;
nc->addr = addr;
@@ -2183,24 +2197,24 @@ if (FD_ISSET(listen_comm_sck,readfds))
void process_newconn_read(fd_set *readfds)
{
-int i,ret;
+ int i, ret;
-for (i=0;i<MAX_NEWCONNS;i++)
- if (newconns[i].sck && FD_ISSET(newconns[i].sck,readfds))
+ for (i = 0; i < MAX_NEWCONNS; i++)
+ if (newconns[i].sck && FD_ISSET(newconns[i].sck, readfds))
{
- ret=recv(newconns[i].sck,newconns[i].buf+newconns[i].pos,NEWCONN_BUFSIZE - newconns[i].pos,0);
+ ret = recv(newconns[i].sck, newconns[i].buf + newconns[i].pos, NEWCONN_BUFSIZE - newconns[i].pos, 0);
- if (ret<=0)
+ if (ret <= 0)
{
//perror("process_newconn_read - recv:");//debug
- newconn_close(newconns+i);
+ newconn_close(newconns + i);
continue;
}
- newconns[i].pos+=ret;
+ newconns[i].pos += ret;
- if(!PICA_processdatastream(newconns[i].buf,&(newconns[i].pos),newconns+i /*arg*/,_msginfo_newconn, MSGINFO_MSGSNUM(_msginfo_newconn) ))
+ if(!PICA_processdatastream(newconns[i].buf, &(newconns[i].pos), newconns + i /*arg*/, _msginfo_newconn, MSGINFO_MSGSNUM(_msginfo_newconn) ))
{
- newconn_close(newconns+i);
+ newconn_close(newconns + i);
}
//FD_CLR(newconns[i].sck,readfds);
}
@@ -2210,38 +2224,38 @@ for (i=0;i<MAX_NEWCONNS;i++)
void process_c2n_read(fd_set *readfds)
{
-struct client *i_ptr,*kill_ptr;
-int ret;
+ struct client *i_ptr, *kill_ptr;
+ int ret;
-i_ptr=client_list_head;
-kill_ptr=0;
+ i_ptr = client_list_head;
+ kill_ptr = 0;
-while (i_ptr)
+ while (i_ptr)
{
- if (FD_ISSET(i_ptr->sck_comm,readfds))
+ if (FD_ISSET(i_ptr->sck_comm, readfds))
switch(i_ptr->state)
{
case PICA_CLSTATE_CONNECTED:
- ret=SSL_read(i_ptr->ssl_comm, i_ptr->r_buf + i_ptr->r_pos, i_ptr->buflen_r - i_ptr->r_pos);
+ ret = SSL_read(i_ptr->ssl_comm, i_ptr->r_buf + i_ptr->r_pos, i_ptr->buflen_r - i_ptr->r_pos);
if (!ret)
- kill_ptr=i_ptr;
+ kill_ptr = i_ptr;
- if (ret<0)
- switch(SSL_get_error(i_ptr->ssl_comm,ret))
+ if (ret < 0)
+ switch(SSL_get_error(i_ptr->ssl_comm, ret))
{
case SSL_ERROR_WANT_WRITE:
case SSL_ERROR_WANT_READ:
break;
default:
- kill_ptr=i_ptr;
+ kill_ptr = i_ptr;
}
- if (ret>0)
+ if (ret > 0)
{
- i_ptr->r_pos+=ret;
- if(!PICA_processdatastream(i_ptr->r_buf,&(i_ptr->r_pos),i_ptr,_msginfo_comm, MSGINFO_MSGSNUM(_msginfo_comm) ))
- kill_ptr=i_ptr;
+ i_ptr->r_pos += ret;
+ if(!PICA_processdatastream(i_ptr->r_buf, &(i_ptr->r_pos), i_ptr, _msginfo_comm, MSGINFO_MSGSNUM(_msginfo_comm) ))
+ kill_ptr = i_ptr;
if (i_ptr->buflen_r == i_ptr->r_pos)
if (!client_rbuf_grow(i_ptr))
@@ -2250,17 +2264,17 @@ while (i_ptr)
}
break;
case PICA_CLSTATE_TLSNEGOTIATION:
- i_ptr->w_pos=1;//????
+ i_ptr->w_pos = 1; //????
//-------------- <<<<<<<<<<<<<<<<<<<<<<<<----------------------------------------
break;
};
- i_ptr=i_ptr->next;
+ i_ptr = i_ptr->next;
if (kill_ptr)
{
client_list_delete(kill_ptr);
- kill_ptr=0;
+ kill_ptr = 0;
}
}
@@ -2268,103 +2282,103 @@ while (i_ptr)
void process_c2c_read(fd_set *readfds)
{
-int i,ret;
-struct cclink *cc,*kill_ptr;
+ int i, ret;
+ struct cclink *cc, *kill_ptr;
-cc=cclink_list_head;
-kill_ptr=0;
+ cc = cclink_list_head;
+ kill_ptr = 0;
-while(cc)
+ while(cc)
{
- if ((cc->state==PICA_CCLINK_LOCAL_ACTIVE || cc->state==PICA_CCLINK_N2NCLR_ACTIVE)
- && FD_ISSET(cc->sck_p1,readfds) && !cc->jam_p1p2 )
+ if ((cc->state == PICA_CCLINK_LOCAL_ACTIVE || cc->state == PICA_CCLINK_N2NCLR_ACTIVE)
+ && FD_ISSET(cc->sck_p1, readfds) && !cc->jam_p1p2 )
{
- ret=recv(cc->sck_p1,cc->buf_p1p2 + cc->bufpos_p1p2,cc->buflen_p1p2 - cc->bufpos_p1p2,0);
- PICA_debug3("process_c2c_read: recv p1p2: ret=%i",ret);
- if (ret>0)
+ ret = recv(cc->sck_p1, cc->buf_p1p2 + cc->bufpos_p1p2, cc->buflen_p1p2 - cc->bufpos_p1p2, 0);
+ PICA_debug3("process_c2c_read: recv p1p2: ret=%i", ret);
+ if (ret > 0)
{
- cc->bufpos_p1p2+=ret;
+ cc->bufpos_p1p2 += ret;
}
else
- kill_ptr=cc;
+ kill_ptr = cc;
}
- if ((cc->state==PICA_CCLINK_LOCAL_ACTIVE || cc->state==PICA_CCLINK_N2NCLE_ACTIVE)
- && FD_ISSET(cc->sck_p2,readfds) && !cc->jam_p2p1 )
+ if ((cc->state == PICA_CCLINK_LOCAL_ACTIVE || cc->state == PICA_CCLINK_N2NCLE_ACTIVE)
+ && FD_ISSET(cc->sck_p2, readfds) && !cc->jam_p2p1 )
{
- ret=recv(cc->sck_p2,cc->buf_p2p1 + cc->bufpos_p2p1,cc->buflen_p2p1 - cc->bufpos_p2p1,0);
- PICA_debug3("process_c2c_read: recv p2p1: ret=%i\n",ret);
- if (ret>0)
+ ret = recv(cc->sck_p2, cc->buf_p2p1 + cc->bufpos_p2p1, cc->buflen_p2p1 - cc->bufpos_p2p1, 0);
+ PICA_debug3("process_c2c_read: recv p2p1: ret=%i\n", ret);
+ if (ret > 0)
{
- cc->bufpos_p2p1+=ret;
+ cc->bufpos_p2p1 += ret;
}
else
- kill_ptr=cc;
+ kill_ptr = cc;
}
- cc=cc->next;
+ cc = cc->next;
if (kill_ptr)
{
cclink_list_delete(kill_ptr);
- kill_ptr=0;
+ kill_ptr = 0;
}
}
}
void process_n2n_read(fd_set *readfds)
{
-int i,ret;
-struct nodelink *nl,*kill_ptr;
+ int i, ret;
+ struct nodelink *nl, *kill_ptr;
-nl=nodelink_list_head;
-kill_ptr=0;
+ nl = nodelink_list_head;
+ kill_ptr = 0;
-while(nl)
+ while(nl)
{
- if (FD_ISSET(nl->sck,readfds))
+ if (FD_ISSET(nl->sck, readfds))
{
- ret=recv(nl->sck,nl->r_buf+nl->r_pos,nl->buflen_r - nl->r_pos,0);
+ ret = recv(nl->sck, nl->r_buf + nl->r_pos, nl->buflen_r - nl->r_pos, 0);
- if (ret<=0)
+ if (ret <= 0)
{
if (ret < 0)
PICA_debug3("recv() failed in process_n2n_read(): %s", strerror(errno));
- kill_ptr=nl;
+ kill_ptr = nl;
}
else
{
- nl->r_pos+=ret;
+ nl->r_pos += ret;
- if(!PICA_processdatastream(nl->r_buf,&(nl->r_pos),nl,_msginfo_node, MSGINFO_MSGSNUM(_msginfo_node) ))
- kill_ptr=nl;
+ if(!PICA_processdatastream(nl->r_buf, &(nl->r_pos), nl, _msginfo_node, MSGINFO_MSGSNUM(_msginfo_node) ))
+ kill_ptr = nl;
if (nl->buflen_r == nl->r_pos)
if (!nodelink_rbuf_grow(nl))
- kill_ptr=nl;
+ kill_ptr = nl;
}
}
- nl=nl->next;
+ nl = nl->next;
if (kill_ptr)
{
nodelink_list_delete(kill_ptr);
- kill_ptr=0;
+ kill_ptr = 0;
}
}
}
void process_c2n_write()
{
-struct client *i_ptr,*kill_ptr;
-int ret;
+ struct client *i_ptr, *kill_ptr;
+ int ret;
-i_ptr=client_list_head;
-kill_ptr=0;
+ i_ptr = client_list_head;
+ kill_ptr = 0;
-while(i_ptr)
+ while(i_ptr)
{
//---------
switch(i_ptr->state)
@@ -2374,63 +2388,63 @@ while(i_ptr)
break;
if (!i_ptr->btw_ssl)
- i_ptr->btw_ssl=i_ptr->w_pos;
+ i_ptr->btw_ssl = i_ptr->w_pos;
- ret=SSL_write(i_ptr->ssl_comm,i_ptr->w_buf,i_ptr->btw_ssl);
+ ret = SSL_write(i_ptr->ssl_comm, i_ptr->w_buf, i_ptr->btw_ssl);
- PICA_debug3("process_c2n_write: ret of SSL_write()=%i",ret);
+ PICA_debug3("process_c2n_write: ret of SSL_write()=%i", ret);
- if (ret==i_ptr->btw_ssl)
+ if (ret == i_ptr->btw_ssl)
{
- i_ptr->w_pos-=i_ptr->btw_ssl;
- i_ptr->btw_ssl=0;
+ i_ptr->w_pos -= i_ptr->btw_ssl;
+ i_ptr->btw_ssl = 0;
}
if (!ret)
- kill_ptr=i_ptr;
+ kill_ptr = i_ptr;
- if (ret<0)
+ if (ret < 0)
{
- ret=SSL_get_error(i_ptr->ssl_comm,ret);
- if (ret!=SSL_ERROR_WANT_WRITE && ret!=SSL_ERROR_WANT_READ)
- kill_ptr=i_ptr;
+ ret = SSL_get_error(i_ptr->ssl_comm, ret);
+ if (ret != SSL_ERROR_WANT_WRITE && ret != SSL_ERROR_WANT_READ)
+ kill_ptr = i_ptr;
}
break;
case PICA_CLSTATE_SENDINGRESP:
- ret=send(i_ptr->sck_comm,i_ptr->w_buf,i_ptr->w_pos,0);
+ ret = send(i_ptr->sck_comm, i_ptr->w_buf, i_ptr->w_pos, 0);
if (!ret)
- kill_ptr=i_ptr;
+ kill_ptr = i_ptr;
- if (ret==SOCKET_ERROR)
+ if (ret == SOCKET_ERROR)
;//ERR_CHECK
if (ret < i_ptr->w_pos)
- memmove(i_ptr->w_buf,i_ptr->w_buf+ret,i_ptr->w_pos - ret); //ring buffer is better (??)
+ memmove(i_ptr->w_buf, i_ptr->w_buf + ret, i_ptr->w_pos - ret); //ring buffer is better (??)
- i_ptr->w_pos-=ret;
+ i_ptr->w_pos -= ret;
if (!i_ptr->w_pos)
- i_ptr->state=PICA_CLSTATE_TLSNEGOTIATION;
+ i_ptr->state = PICA_CLSTATE_TLSNEGOTIATION;
break;
case PICA_CLSTATE_TLSNEGOTIATION:
- i_ptr->w_pos=0;
- ret=SSL_connect(i_ptr->ssl_comm);
+ i_ptr->w_pos = 0;
+ ret = SSL_connect(i_ptr->ssl_comm);
- PICA_debug3("process_c2n_write: SSL_connect()=%i",ret);
+ PICA_debug3("process_c2n_write: SSL_connect()=%i", ret);
if (!ret)
- kill_ptr=i_ptr;
+ kill_ptr = i_ptr;
- if (ret<0)
+ if (ret < 0)
{
int eret;
- eret=SSL_get_error(i_ptr->ssl_comm,ret);
+ eret = SSL_get_error(i_ptr->ssl_comm, ret);
switch(eret)
{
case SSL_ERROR_WANT_WRITE:
- i_ptr->w_pos=1;
+ i_ptr->w_pos = 1;
PICA_debug3("SSL_ERROR_WANT_WRITE");
break;
case SSL_ERROR_WANT_READ:
@@ -2438,21 +2452,21 @@ while(i_ptr)
break;
default:
PICA_debug3("SSL_get_error() = %i", eret);
- kill_ptr=i_ptr;
+ kill_ptr = i_ptr;
}
}
- if (ret==1)
+ if (ret == 1)
//проверить сертификат пользователя
{
X509* client_cert;
PICA_info("SSL c2n connection established using %s cipher", SSL_get_cipher(i_ptr->ssl_comm));
- client_cert=SSL_get_peer_certificate (i_ptr->ssl_comm);
+ client_cert = SSL_get_peer_certificate (i_ptr->ssl_comm);
if (!client_cert)
{
//ERR_CHECK //нет сертификата
- kill_ptr=i_ptr;
+ kill_ptr = i_ptr;
}
ret = PICA_id_from_X509(client_cert, i_ptr->id);
@@ -2460,234 +2474,242 @@ while(i_ptr)
if (ret == 0)
{
PICA_error("Unable to get client id from certificate");
- kill_ptr=i_ptr;
+ kill_ptr = i_ptr;
}
- //PICA_debug2("user id=%u",i_ptr->id);
- #warning "see comments below"
- //сделать проверку названия сети!!!!---------------------------<<<<<<<<<<<<<<<<<<<<<<
X509_free(client_cert);
- //прицепить структуру к дереву
- if (client_tree_search(i_ptr->id))
+
+ //reject all-zeroes ID
+ {
+ static const char zeroID[PICA_ID_SIZE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ if (memcmp(zeroID, i_ptr->id, PICA_ID_SIZE) == 0)
+ {
+ PICA_error("Rejecting all-zero Pica ID");
+ kill_ptr = i_ptr;
+ }
+ }
+
+ if (!kill_ptr && client_tree_search(i_ptr->id))
{
PICA_info("Disconnecting client %p because other user with same ID = %u is already connected", i_ptr, i_ptr->id);
+ memset(i_ptr->id, 0, PICA_ID_SIZE);//reset id to all zeros to prevent removing existing ID from previous connection from client_tree
ret = 0;//id already exists in tree
}
else
{
- ret=client_tree_add(i_ptr);
+ ret = client_tree_add(i_ptr);
client_tree_print(client_tree_root);
}
if (!ret)
{
//ERR_CHECK //не уникальный id
- kill_ptr=i_ptr;
+ kill_ptr = i_ptr;
}
- i_ptr->state=PICA_CLSTATE_CONNECTED;
+ i_ptr->state = PICA_CLSTATE_CONNECTED;
}
break;
}
//---------
- i_ptr=i_ptr->next;
+ i_ptr = i_ptr->next;
if (kill_ptr)
{
client_list_delete(kill_ptr);
- kill_ptr=0;
+ kill_ptr = 0;
}
}
}
void process_c2c_write()
{
-int i,ret;
-struct cclink *cc,*kill_ptr;
+ int i, ret;
+ struct cclink *cc, *kill_ptr;
-cc=cclink_list_head;
-kill_ptr=0;
+ cc = cclink_list_head;
+ kill_ptr = 0;
-while(cc)
+ while(cc)
{
if (cc->bufpos_p1p2/* && (cc->state==PICA_CCLINK_LOCAL_ACTIVE || cc->state==PICA_CCLINK_N2NCLE_ACTIVE)*/)
{
- if (cc->state==PICA_CCLINK_N2NCLR_ACTIVE)//receiver is on remote node
+ if (cc->state == PICA_CCLINK_N2NCLR_ACTIVE) //receiver is on remote node
{
int sendlen;
struct PICA_proto_msg *mp;
sendlen = (cc->bufpos_p1p2 > PICA_PROTO_N2NMSG_MAXDATASIZE) ? PICA_PROTO_N2NMSG_MAXDATASIZE : cc->bufpos_p1p2;
- if(mp=nodelink_wbuf_push(cc->callee_node,PICA_PROTO_N2NMSG,sendlen + 4 + 2 * PICA_ID_SIZE))
+ if(mp = nodelink_wbuf_push(cc->callee_node, PICA_PROTO_N2NMSG, sendlen + 4 + 2 * PICA_ID_SIZE))
{
*((unsigned short*)mp->tail) = 2 * PICA_ID_SIZE + sendlen;
memcpy(mp->tail + 2, cc->caller_id, PICA_ID_SIZE);
memcpy(mp->tail + 2 + PICA_ID_SIZE, cc->callee_id, PICA_ID_SIZE);
memcpy(mp->tail + 2 + 2 * PICA_ID_SIZE, cc->buf_p1p2, sendlen);
- ret=sendlen;
+ ret = sendlen;
}
else
- ret=0;
+ ret = 0;
}
else
- ret=send(cc->sck_p2,cc->buf_p1p2,cc->bufpos_p1p2,MSG_NOSIGNAL);
+ ret = send(cc->sck_p2, cc->buf_p1p2, cc->bufpos_p1p2, MSG_NOSIGNAL);
- PICA_debug3("process_c2c_write: send p1p2: ret=%i",ret);
- if (ret>0)
+ PICA_debug3("process_c2c_write: send p1p2: ret=%i", ret);
+ if (ret > 0)
{
if (ret < cc->bufpos_p1p2)
- memmove(cc->buf_p1p2,cc->buf_p1p2+ret,cc->bufpos_p1p2-ret);//may be it's better to implement ring buffer here
- cc->bufpos_p1p2-=ret;
- cc->jam_p1p2=0;
+ memmove(cc->buf_p1p2, cc->buf_p1p2 + ret, cc->bufpos_p1p2 - ret); //may be it's better to implement ring buffer here
+ cc->bufpos_p1p2 -= ret;
+ cc->jam_p1p2 = 0;
}
- if (ret==0)
+ if (ret == 0)
{
- kill_ptr=cc;
+ kill_ptr = cc;
}
- if (ret==-1)
+ if (ret == -1)
{
- #ifdef WIN32
- ret=WSAGetLastError();
- if (ret==WSAEWOULDBLOCK || ret==WSAENOBUFS)
- cc->jam_p1p2=1;
+#ifdef WIN32
+ ret = WSAGetLastError();
+ if (ret == WSAEWOULDBLOCK || ret == WSAENOBUFS)
+ cc->jam_p1p2 = 1;
else
{
- kill_ptr=cc;
+ kill_ptr = cc;
}
- #else
- ret=errno;
- if (ret==EAGAIN || ret==ENOBUFS)
- cc->jam_p1p2=1;
+#else
+ ret = errno;
+ if (ret == EAGAIN || ret == ENOBUFS)
+ cc->jam_p1p2 = 1;
else
{
- kill_ptr=cc;
+ kill_ptr = cc;
}
- #endif
+#endif
}
}
if (cc->bufpos_p2p1 /*&& (cc->state==PICA_CCLINK_LOCAL_ACTIVE || cc->state==PICA_CCLINK_N2NCLR_ACTIVE)*/)
{
- if (cc->state==PICA_CCLINK_N2NCLE_ACTIVE)//receiver is on remote node
+ if (cc->state == PICA_CCLINK_N2NCLE_ACTIVE) //receiver is on remote node
{
int sendlen;
struct PICA_proto_msg *mp;
sendlen = (cc->bufpos_p2p1 > PICA_PROTO_N2NMSG_MAXDATASIZE) ? PICA_PROTO_N2NMSG_MAXDATASIZE : cc->bufpos_p2p1;
- if(mp=nodelink_wbuf_push(cc->caller_node,PICA_PROTO_N2NMSG,sendlen + 4 + 2 * PICA_ID_SIZE))
+ if(mp = nodelink_wbuf_push(cc->caller_node, PICA_PROTO_N2NMSG, sendlen + 4 + 2 * PICA_ID_SIZE))
{
*((unsigned short*)mp->tail) = 2 * PICA_ID_SIZE + sendlen;
memcpy(mp->tail + 2, cc->callee_id, PICA_ID_SIZE);
memcpy(mp->tail + 2 + PICA_ID_SIZE, cc->caller_id, PICA_ID_SIZE);
- memcpy(mp->tail +2 + 2 * PICA_ID_SIZE, cc->buf_p2p1, sendlen);
- ret=sendlen;
+ memcpy(mp->tail + 2 + 2 * PICA_ID_SIZE, cc->buf_p2p1, sendlen);
+ ret = sendlen;
}
else
- ret=0;
+ ret = 0;
}
else
- ret=send(cc->sck_p1,cc->buf_p2p1,cc->bufpos_p2p1,MSG_NOSIGNAL);
+ ret = send(cc->sck_p1, cc->buf_p2p1, cc->bufpos_p2p1, MSG_NOSIGNAL);
- PICA_debug3("process_c2c_write: send p2p1: ret=%i",ret);
- if (ret>0)
+ PICA_debug3("process_c2c_write: send p2p1: ret=%i", ret);
+ if (ret > 0)
{
if (ret < cc->bufpos_p2p1)
- memmove(cc->buf_p2p1,cc->buf_p2p1+ret,cc->bufpos_p2p1-ret);//may be it's better to implement ring buffer here
- cc->bufpos_p2p1-=ret;
- cc->jam_p2p1=0;
+ memmove(cc->buf_p2p1, cc->buf_p2p1 + ret, cc->bufpos_p2p1 - ret); //may be it's better to implement ring buffer here
+ cc->bufpos_p2p1 -= ret;
+ cc->jam_p2p1 = 0;
}
- if (ret==0)
+ if (ret == 0)
{
- kill_ptr=cc;
+ kill_ptr = cc;
}
- if (ret==-1)
+ if (ret == -1)
{
- #ifdef WIN32
- ret=WSAGetLastError();
- if (ret==WSAEWOULDBLOCK || ret==WSAENOBUFS)
- cc->jam_p2p1=1;
+#ifdef WIN32
+ ret = WSAGetLastError();
+ if (ret == WSAEWOULDBLOCK || ret == WSAENOBUFS)
+ cc->jam_p2p1 = 1;
else
{
- kill_ptr=cc;
+ kill_ptr = cc;
}
- #else
- ret=errno;
- if (ret==EAGAIN || ret==ENOBUFS)
- cc->jam_p2p1=1;
+#else
+ ret = errno;
+ if (ret == EAGAIN || ret == ENOBUFS)
+ cc->jam_p2p1 = 1;
else
{
- kill_ptr=cc;
+ kill_ptr = cc;
}
- #endif
+#endif
}
}
- cc=cc->next;
+ cc = cc->next;
if (kill_ptr)
{
cclink_list_delete(kill_ptr);
- kill_ptr=0;
+ kill_ptr = 0;
}
}
}
void process_n2n_write()
{
-int ret;
-struct nodelink *nl,*kill_ptr;
+ int ret;
+ struct nodelink *nl, *kill_ptr;
-nl=nodelink_list_head;
-kill_ptr=0;
+ nl = nodelink_list_head;
+ kill_ptr = 0;
-while(nl)
+ while(nl)
{
- if (nl->w_pos>0)
+ if (nl->w_pos > 0)
{
- ret=send(nl->sck,nl->w_buf,nl->w_pos,MSG_NOSIGNAL);
+ ret = send(nl->sck, nl->w_buf, nl->w_pos, MSG_NOSIGNAL);
- if (ret>0)
+ if (ret > 0)
{
if (ret < nl->w_pos)
- memmove(nl->w_buf,nl->w_buf+ret,nl->w_pos-ret);//may be it's better to implement ring buffer here
- nl->w_pos-=ret;
+ memmove(nl->w_buf, nl->w_buf + ret, nl->w_pos - ret); //may be it's better to implement ring buffer here
+ nl->w_pos -= ret;
}
- if (ret<0)
+ if (ret < 0)
{
- #ifdef WIN32
- ret=WSAGetLastError();
- if (!(ret==WSAEWOULDBLOCK || ret==WSAENOBUFS))
- kill_ptr=nl;
- #else
- ret=errno;
- if (!(ret==EAGAIN || ret==ENOBUFS || ret == EINTR))
- kill_ptr=nl;
- #endif
+#ifdef WIN32
+ ret = WSAGetLastError();
+ if (!(ret == WSAEWOULDBLOCK || ret == WSAENOBUFS))
+ kill_ptr = nl;
+#else
+ ret = errno;
+ if (!(ret == EAGAIN || ret == ENOBUFS || ret == EINTR))
+ kill_ptr = nl;
+#endif
}
- if (ret==0)
- kill_ptr=nl;
+ if (ret == 0)
+ kill_ptr = nl;
}
- nl=nl->next;
+ nl = nl->next;
if (kill_ptr)
{
nodelink_list_delete(kill_ptr);
- kill_ptr=0;
+ kill_ptr = 0;
}
}
}
void process_nodewait()
{
-struct nodewait *kill_ptr = 0, *nw = nodewait_list;
+ struct nodewait *kill_ptr = 0, *nw = nodewait_list;
-while(nw)
+ while(nw)
{
//PICA_debug3("checking nodewait pointer %p", nw);
switch(nw->state)
@@ -2734,7 +2756,7 @@ while(nw)
PICA_debug1("connected to %.255s %u, sending request ", nw->addr.addr, nw->addr.port);
PICA_debug2("connection socket is %i", nw->nc.sck);
- nlp=nodelink_list_addnew(&nw->nc);
+ nlp = nodelink_list_addnew(&nw->nc);
if (nlp)
{
struct PICA_proto_msg *mp;
@@ -2781,34 +2803,34 @@ while(nw)
int node_loop()
{
-fd_set fds;
-struct timeval tv;
-int nfds, ret;
+ fd_set fds;
+ struct timeval tv;
+ int nfds, ret;
-do
+ do
{
nfds = 0;
FD_ZERO(&fds);
- tv.tv_sec=SELECT_TIMEOUT;
- tv.tv_usec=0;
-
- listen_set_fds(&fds,&nfds);
- newconn_set_fds(&fds,&nfds);
- c2n_set_fds(&fds,&nfds);
- c2c_set_fds(&fds,&nfds);
- n2n_set_fds(&fds,&nfds);
+ tv.tv_sec = SELECT_TIMEOUT;
+ tv.tv_usec = 0;
+
+ listen_set_fds(&fds, &nfds);
+ newconn_set_fds(&fds, &nfds);
+ c2n_set_fds(&fds, &nfds);
+ c2c_set_fds(&fds, &nfds);
+ n2n_set_fds(&fds, &nfds);
- ret=select(nfds+1,&fds,0,0,&tv);
+ ret = select(nfds + 1, &fds, 0, 0, &tv);
- if (ret<0)
+ if (ret < 0)
{
perror("node_loop-select error ");
//ERR_CHECK
return -1;
}
- if (ret>0)
+ if (ret > 0)
{
process_c2n_read(&fds);
process_c2c_read(&fds);
@@ -2825,13 +2847,13 @@ do
process_timeouts();
process_nodewait();
}
-while(1);////<<<<<<<<<<
-return 0;
+ while(1);////<<<<<<<<<<
+ return 0;
}
void print_usage()
{
-puts("Usage: pica-node [-f config-file]\n\
+ puts("Usage: pica-node [-f config-file]\n\
\n\
Options:\n\
-f configuration file\n\
@@ -2842,30 +2864,30 @@ Options:\n\
void print_version()
{
-puts("Pica Pica Node v"PACKAGE_VERSION" \n(c) 2012 - 2016 Anton Sviridenko\n");
-puts("protocol version "PICA_PROTO_VER_STRING"\n");
+ puts("Pica Pica Node v"PACKAGE_VERSION" \n(c) 2012 - 2017 Anton Sviridenko\n");
+ puts("protocol version "PICA_PROTO_VER_STRING"\n");
////----include this only if OpenSSL is statically linked
-puts("This product includes software developed by the OpenSSL Project\n\
+ puts("This product includes software developed by the OpenSSL Project\n\
for use in the OpenSSL Toolkit (http://www.openssl.org/)\n");
-puts("This product includes cryptographic software written by\n\
+ puts("This product includes cryptographic software written by\n\
Eric Young (eay@cryptsoft.com)\n");
-puts(SSLeay_version(SSLEAY_VERSION));
+ puts(SSLeay_version(SSLEAY_VERSION));
////---
-puts("\nThis product includes iniParser\n\
+ puts("\nThis product includes iniParser\n\
Copyright (c) 2000-2012 by Nicolas Devillard.\n\
MIT License");
}
-void process_cmdline(int argc,char** argv)
+void process_cmdline(int argc, char** argv)
{
-int opt;
-int verbosity = 0;
+ int opt;
+ int verbosity = 0;
-while((opt = getopt(argc, argv, "f:hvV")) != -1)
+ while((opt = getopt(argc, argv, "f:hvV")) != -1)
{
switch(opt)
{
@@ -2895,27 +2917,27 @@ while((opt = getopt(argc, argv, "f:hvV")) != -1)
}
}
-if (verbosity > 3)
+ if (verbosity > 3)
verbosity = 3;
-PICA_set_loglevel(PICA_LOG_INFO + verbosity);
+ PICA_set_loglevel(PICA_LOG_INFO + verbosity);
}
void PICA_node_joinskynet(const char* addrlistfilename, const char *my_addr)
{
-struct PICA_nodeaddr *nap,*addrlist_h=0;
-struct nodelink *nl;
-int ret;
+ struct PICA_nodeaddr *nap, *addrlist_h = 0;
+ struct nodelink *nl;
+ int ret;
-skynet_refresh_tmst = time(0);
+ skynet_refresh_tmst = time(0);
-ret = PICA_nodeaddr_list_load(addrlistfilename, &addrlist_h);//MEM
-if (ret <= 0)
+ ret = PICA_nodeaddr_list_load(addrlistfilename, &addrlist_h);//MEM
+ if (ret <= 0)
return;
-nap = addrlist_h;
+ nap = addrlist_h;
-while(nap)
+ while(nap)
{
int skip = 0;
@@ -2940,7 +2962,7 @@ while(nap)
switch(nl->addr_type)
{
case PICA_PROTO_NEWNODE_IPV4:
- if (0 == strncmp(nap->addr, inet_ntoa(*(struct in_addr*)&(((struct PICA_nodeaddr_ipv4*)nl->node_addr)->addr)) , 16)
+ if (0 == strncmp(nap->addr, inet_ntoa(*(struct in_addr*) & (((struct PICA_nodeaddr_ipv4*)nl->node_addr)->addr)) , 16)
&&
nap->port == ntohs(((struct PICA_nodeaddr_ipv4*)nl->node_addr)->port))
skip = 1;
@@ -2949,7 +2971,7 @@ while(nap)
}
}
- if (0 == strncmp(nap->addr, inet_ntoa(nl->addr.sin_addr),16) && nap->port == ntohs(nl->addr.sin_port))
+ if (0 == strncmp(nap->addr, inet_ntoa(nl->addr.sin_addr), 16) && nap->port == ntohs(nl->addr.sin_port))
skip = 1;
@@ -2959,50 +2981,50 @@ while(nap)
if (!skip)
nodewait_start_resolve(nap);
- nap=nap->next;
+ nap = nap->next;
}
-PICA_nodeaddr_list_free(addrlist_h);
+ PICA_nodeaddr_list_free(addrlist_h);
}
-int main(int argc,char** argv)
+int main(int argc, char** argv)
{
-process_cmdline(argc, argv);
+ process_cmdline(argc, argv);
-nodecfg.config_file = (nodecfg.config_file ? nodecfg.config_file :PICA_NODECONFIG_DEF_CONFIG_FILE);
+ nodecfg.config_file = (nodecfg.config_file ? nodecfg.config_file : PICA_NODECONFIG_DEF_CONFIG_FILE);
-if (!PICA_nodeconfig_load(nodecfg.config_file))
+ if (!PICA_nodeconfig_load(nodecfg.config_file))
{
PICA_fatal("Unable to load configuration. Please check if config file %s exists and has correct permissions", nodecfg.config_file);
}
-PICA_debug1("nodecfg.config_file = %s", nodecfg.config_file);
-PICA_debug1("nodecfg.announced_addr = %s",nodecfg.announced_addr);
-PICA_debug1("nodecfg.listen_port = %s",nodecfg.listen_port);
-PICA_debug1("nodecfg.nodes_db_file = %s",nodecfg.nodes_db_file);
-PICA_debug1("nodecfg.disable_reserved_addrs = %s", nodecfg.disable_reserved_addrs ? "yes" : "no");
+ PICA_debug1("nodecfg.config_file = %s", nodecfg.config_file);
+ PICA_debug1("nodecfg.announced_addr = %s", nodecfg.announced_addr);
+ PICA_debug1("nodecfg.listen_port = %s", nodecfg.listen_port);
+ PICA_debug1("nodecfg.nodes_db_file = %s", nodecfg.nodes_db_file);
+ PICA_debug1("nodecfg.disable_reserved_addrs = %s", nodecfg.disable_reserved_addrs ? "yes" : "no");
-if (!PICA_node_init())
+ if (!PICA_node_init())
return -1;
-if (INADDR_NONE == inet_addr(nodecfg.announced_addr) || INADDR_ANY == inet_addr(nodecfg.announced_addr))
+ if (INADDR_NONE == inet_addr(nodecfg.announced_addr) || INADDR_ANY == inet_addr(nodecfg.announced_addr))
{
PICA_fatal("announced_addr (%.16s) is invalid or not configured. Please set correct public IP address of your pica-node instance in config file.",
nodecfg.announced_addr
);
}
-if (nodecfg.disable_reserved_addrs && PICA_is_reserved_addr_ipv4(inet_addr(nodecfg.announced_addr)))
+ if (nodecfg.disable_reserved_addrs && PICA_is_reserved_addr_ipv4(inet_addr(nodecfg.announced_addr)))
{
PICA_fatal("announced_addr (%.16s) is in private range and is unacceptable for global Internet. Private ranges are disabled by node configuration.",
nodecfg.announced_addr
);
}
-PICA_node_joinskynet(nodecfg.nodes_db_file, nodecfg.announced_addr);//CONF-CONF имя файла с адресами узлов, свой адрес
+ PICA_node_joinskynet(nodecfg.nodes_db_file, nodecfg.announced_addr);//CONF-CONF имя файла с адресами узлов, свой адрес
-my_addr = nodecfg.announced_addr;//TEMP FIXME
+ my_addr = nodecfg.announced_addr;//TEMP FIXME
-return node_loop();
+ return node_loop();
}