summaryrefslogtreecommitdiff
path: root/ecp
diff options
context:
space:
mode:
Diffstat (limited to 'ecp')
-rw-r--r--ecp/src/ecp/core.c2
-rw-r--r--ecp/src/ecp/dir/dir_client.c4
-rw-r--r--ecp/src/ecp/dir/dir_client.h4
-rw-r--r--ecp/src/platform/fe310/time.c6
-rw-r--r--ecp/src/platform/fe310/transport.c50
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();