diff options
Diffstat (limited to 'ecp/src')
-rw-r--r-- | ecp/src/ecp/core.c | 2 | ||||
-rw-r--r-- | ecp/src/ecp/dir/dir_client.c | 4 | ||||
-rw-r--r-- | ecp/src/ecp/dir/dir_client.h | 4 | ||||
-rw-r--r-- | ecp/src/platform/fe310/time.c | 6 | ||||
-rw-r--r-- | ecp/src/platform/fe310/transport.c | 50 |
5 files changed, 34 insertions, 32 deletions
diff --git a/ecp/src/ecp/core.c b/ecp/src/ecp/core.c index 2cef860..b5610c8 100644 --- a/ecp/src/ecp/core.c +++ b/ecp/src/ecp/core.c @@ -3167,8 +3167,6 @@ int ecp_pld_set_pts(unsigned char *pld, size_t pld_size, ecp_pts_t pts) { } unsigned char *ecp_pld_get_msg(unsigned char *pld, size_t pld_size) { - size_t offset; - if (pld_size < ECP_SIZE_MTYPE) return NULL; if (pld_size < (ECP_SIZE_MTYPE + ECP_SIZE_MT_FLAG(pld[0]))) return NULL; diff --git a/ecp/src/ecp/dir/dir_client.c b/ecp/src/ecp/dir/dir_client.c index cf82754..a9bc9e3 100644 --- a/ecp/src/ecp/dir/dir_client.c +++ b/ecp/src/ecp/dir/dir_client.c @@ -185,7 +185,7 @@ void ecp_dir_set_unavailable(ECPDirList *dir_list, ecp_ecdh_public_t *public) { } } -int ecp_dir_sel_dir(ECPDirList *dir_list, ecp_ecdh_public_t *public, struct ECPNetAddr *addr) { +int ecp_dir_sel_dir(ECPDirList *dir_list, ecp_ecdh_public_t *public, ecp_tr_addr_t *addr) { ECPDHPub *key; uint16_t dir_cnt; uint32_t rnd_sel; @@ -215,7 +215,7 @@ int ecp_dir_sel_dir(ECPDirList *dir_list, ecp_ecdh_public_t *public, struct ECPN #ifdef ECP_WITH_VCONN -ssize_t ecp_dir_sel_vconn(ECPDirList *dir_list, ecp_ecdh_public_t *srv_pub, ecp_ecdh_public_t vconn_keys[], size_t vconn_size, struct ECPNetAddr *addr) { +ssize_t ecp_dir_sel_vconn(ECPDirList *dir_list, ecp_ecdh_public_t *srv_pub, ecp_ecdh_public_t vconn_keys[], size_t vconn_size, ecp_tr_addr_t *addr) { unsigned char tmp_hash[ECP_SIZE_HASH_DIGEST]; unsigned char hrw_hash[ECP_SIZE_HASH_DIGEST]; ecp_ecdh_public_t public[2]; diff --git a/ecp/src/ecp/dir/dir_client.h b/ecp/src/ecp/dir/dir_client.h index 8efed1c..a76915e 100644 --- a/ecp/src/ecp/dir/dir_client.h +++ b/ecp/src/ecp/dir/dir_client.h @@ -15,8 +15,8 @@ int ecp_dir_set_handler(ECPContext *ctx, ECPConnHandler *handler, ecp_dir_handle int ecp_dir_get(ECPConnection *conn, ECPSocket *sock, ecp_ecdh_public_t *public, ecp_tr_addr_t *addr, unsigned char region); void ecp_dir_set_unavailable(ECPDirList *dir_list, ecp_ecdh_public_t *public); -int ecp_dir_sel_dir(ECPDirList *dir_list, ecp_ecdh_public_t *public, struct ECPNetAddr *addr); +int ecp_dir_sel_dir(ECPDirList *dir_list, ecp_ecdh_public_t *public, ecp_tr_addr_t *addr); #ifdef ECP_WITH_VCONN -ssize_t ecp_dir_sel_vconn(ECPDirList *dir_list, ecp_ecdh_public_t *srv_pub, ecp_ecdh_public_t vconn_keys[], size_t vconn_size, struct ECPNetAddr *addr); +ssize_t ecp_dir_sel_vconn(ECPDirList *dir_list, ecp_ecdh_public_t *srv_pub, ecp_ecdh_public_t vconn_keys[], size_t vconn_size, ecp_tr_addr_t *addr); #endif diff --git a/ecp/src/platform/fe310/time.c b/ecp/src/platform/fe310/time.c index 4bf530c..5f92d7f 100644 --- a/ecp/src/platform/fe310/time.c +++ b/ecp/src/platform/fe310/time.c @@ -24,15 +24,15 @@ int ecp_tm_init(ECPContext *ctx) { } ecp_sts_t ecp_tm_get_s(void) { - return eos_time_get_tick() / EOS_TIMER_RTC_FREQ; + return eos_get_tick() / EOS_TIMER_RTC_FREQ; } ecp_sts_t ecp_tm_get_ms(void) { - return eos_time_get_tick() * 1000 / EOS_TIMER_RTC_FREQ; + return eos_get_tick() * 1000 / EOS_TIMER_RTC_FREQ; } void ecp_tm_sleep(ecp_sts_t msec) { - eos_time_sleep(msec); + eos_sleep(msec); } void ecp_tm_timer_set(ecp_sts_t next) { diff --git a/ecp/src/platform/fe310/transport.c b/ecp/src/platform/fe310/transport.c index 1ae0f56..ed33fa0 100644 --- a/ecp/src/platform/fe310/transport.c +++ b/ecp/src/platform/fe310/transport.c @@ -10,31 +10,34 @@ ECPSocket *_ecp_tr_sock = NULL; unsigned char pld_buf[ECP_MAX_PLD]; -static void packet_handler(unsigned char type, unsigned char *buffer, uint16_t len) { - ECPContext *ctx; +static void packet_handler(unsigned char type, unsigned char *buffer, uint16_t buf_len) { ECP2Buffer bufs; ECPBuffer packet; ECPBuffer payload; ecp_tr_addr_t addr; + size_t hdr_size; ssize_t rv; + unsigned char *_packet; + int _rv; + + _rv = eos_sock_recvfrom(buffer, buf_len, &addr, NULL, 0); + if (!_rv) _packet = eos_sock_buf2pkt(buffer, buf_len); + if (_rv || _packet == NULL) { + if (_rv == EOS_SOCK_ERR_CLOSED) _ecp_tr_sock->sock = 0; + eos_net_free(buffer, 0); + return; + } bufs.packet = &packet; bufs.payload = &payload; - packet.buffer = buffer+EOS_SOCK_SIZE_UDP_HDR; - packet.size = EOS_NET_MTU-EOS_SOCK_SIZE_UDP_HDR; + hdr_size = _packet - buffer; + packet.buffer = _packet; + packet.size = EOS_NET_MTU - hdr_size; payload.buffer = pld_buf; payload.size = ECP_MAX_PLD; - if (len < EOS_SOCK_SIZE_UDP_HDR) { - eos_net_free(buffer, 0); - return; - } - - eos_sock_recvfrom(buffer, len, NULL, 0, &addr); - - ctx = _ecp_tr_sock->ctx; - rv = ecp_pkt_handle(_ecp_tr_sock, NULL, &addr, &bufs, len-EOS_SOCK_SIZE_UDP_HDR); + rv = ecp_pkt_handle(_ecp_tr_sock, NULL, &addr, &bufs, buf_len - hdr_size); if (rv < 0) ECP_LOG_ERR(_ecp_tr_sock, "packet_handler: err:%d\n", (int)rv); if (bufs.packet->buffer) { @@ -81,24 +84,25 @@ void ecp_tr_close(ECPSocket *sock) { } ssize_t ecp_tr_send(ECPSocket *sock, ECPBuffer *packet, size_t pkt_size, ecp_tr_addr_t *addr, unsigned char flags) { - unsigned char *buf = NULL; + unsigned char *buffer = NULL; int reply; int rv; + if (sock->sock == 0) return ECP_ERR_CLOSED; + reply = 0; if (flags & ECP_SEND_FLAG_REPLY) { if (flags & ECP_SEND_FLAG_MORE) return ECP_ERR; - if (packet->buffer) { - buf = packet->buffer-EOS_SOCK_SIZE_UDP_HDR; - packet->buffer = NULL; - reply = 1; - } + if (packet->buffer == NULL) return ECP_ERR; + buffer = packet->buffer; + packet->buffer = NULL; + reply = 1; } else { - buf = eos_net_alloc(); + rv = eos_sock_pkt_alloc(&buffer, packet->buffer, pkt_size); + if (rv) return ECP_ERR; } - if (buf == NULL) return ECP_ERR_ALLOC; - rv = eos_sock_sendto_async(sock->sock, reply ? NULL : packet->buffer, pkt_size, addr, buf, !!(flags & ECP_SEND_FLAG_MORE)); + rv = eos_sock_sendto_async(sock->sock, addr, buffer, pkt_size, !!(flags & ECP_SEND_FLAG_MORE)); if (rv) return ECP_ERR_SEND; return pkt_size; @@ -110,7 +114,7 @@ ssize_t ecp_tr_recv(ECPSocket *sock, ECPBuffer *packet, ecp_tr_addr_t *addr, int void ecp_tr_release(ECPBuffer *packet, unsigned char more) { if (packet->buffer) { - eos_net_free(packet->buffer-EOS_SOCK_SIZE_UDP_HDR, more); + eos_net_free(eos_sock_pkt2buf(packet->buffer), more); packet->buffer = NULL; } else if (!more) { eos_net_release(); |