diff options
| author | Anton <anton@picapica> | 2017-06-26 18:42:09 +0400 |
|---|---|---|
| committer | Anton <anton@picapica> | 2017-06-26 18:42:09 +0400 |
| commit | 41117d6c03271b971e48c5d5989168f826dfddcd (patch) | |
| tree | 919ddf75641bb0c697e9347d117778c15d1e4d26 /PICA_client.c | |
| parent | 705fb54609386b65e4b8b973082fb37408db553c (diff) | |
| download | pica-pica-41117d6c03271b971e48c5d5989168f826dfddcd.tar.gz pica-pica-41117d6c03271b971e48c5d5989168f826dfddcd.zip | |
fixed directc2c logic for cases when receiver side does not wait for incoming direct connection
Diffstat (limited to 'PICA_client.c')
| -rw-r--r-- | PICA_client.c | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/PICA_client.c b/PICA_client.c index 0488737..d9f26df 100644 --- a/PICA_client.c +++ b/PICA_client.c @@ -582,16 +582,10 @@ static unsigned int procmsg_PICA_PROTO_DIRECTC2C_ADDRLIST(unsigned char* buf, un if (cc->conn->directc2c_config != PICA_DIRECTC2C_CFG_DISABLED) { - //if (cc->directc2c_state != PICA_DIRECTC2C_STATE_INACTIVE) - // return 1; - - //if (cc->outgoing == PICA_C2C_OUTGOING) - // cc->directc2c_state = PICA_DIRECTC2C_STATE_CONNECTING; - //else if (cc->outgoing == PICA_C2C_INCOMING) - // cc->directc2c_state = PICA_DIRECTC2C_STATE_WAITINGINCOMING; - //else - // return 0; - if (cc->directc2c_state != PICA_DIRECTC2C_STATE_WAITINGINCOMING) + if (cc->directc2c_state != PICA_DIRECTC2C_STATE_INACTIVE && cc->directc2c_state != PICA_DIRECTC2C_STATE_WAITINGINCOMING) + return 0; + + if (cc->outgoing == PICA_C2C_OUTGOING || cc->conn->directc2c_config == PICA_DIRECTC2C_CFG_CONNECTONLY) cc->directc2c_state = PICA_DIRECTC2C_STATE_CONNECTING; cc->direct = calloc(1, sizeof(struct PICA_directc2c)); @@ -611,7 +605,7 @@ static unsigned int procmsg_PICA_PROTO_DIRECTC2C_ADDRLIST(unsigned char* buf, un cc->direct->addrlist[nb - 2] = 0; cc->direct->addrpos = 0; - if (cc->directc2c_state == PICA_DIRECTC2C_STATE_WAITINGINCOMING) + if (cc->outgoing == PICA_C2C_INCOMING && cc->conn->directc2c_config == PICA_DIRECTC2C_CFG_ALLOWINCOMING) return 1;//connect later, if no incoming connection is accepted and DIRECTC2C_FAILED is received ret = directc2c_connect_next(cc->direct, cc); @@ -637,6 +631,9 @@ static unsigned int procmsg_PICA_PROTO_DIRECTC2C_FAILED(unsigned char* buf, unsi if (cc->conn->directc2c_config == PICA_DIRECTC2C_CFG_DISABLED) return 0; + if (cc->outgoing != PICA_C2C_INCOMING) + return 0; + ret = directc2c_connect_next(cc->direct, cc); if (ret == PICA_ERRNOTFOUND) @@ -2938,8 +2935,7 @@ int PICA_send_directc2caddrlist(struct PICA_c2c *chn) *((uint32_t*)(mp->tail + 3)) = chn->conn->directc2c_listener->public_addr_ipv4; *((uint16_t*)(mp->tail + 7)) = htons(chn->conn->directc2c_listener->public_port); - if (chn->outgoing == PICA_C2C_INCOMING) - chn->directc2c_state = PICA_DIRECTC2C_STATE_WAITINGINCOMING; + chn->directc2c_state = PICA_DIRECTC2C_STATE_WAITINGINCOMING; } } |
