diff --git a/src/lwIP.cpp b/src/lwIP.cpp index 8f2290c..35c4f7c 100644 --- a/src/lwIP.cpp +++ b/src/lwIP.cpp @@ -850,6 +850,7 @@ namespace ZeroTier #endif char udp_payload_buf[ZT_SOCKET_MSG_BUF_SZ]; + memset(udp_payload_buf, 0, sizeof(ZT_SOCKET_MSG_BUF_SZ)); char *msg_ptr = udp_payload_buf; int tot_len = 0; while(p != NULL) { @@ -861,21 +862,23 @@ namespace ZeroTier tot_len += p->len; p = p->next; } - if (tot_len) { + if (tot_len > 0) { int w = 0; - //DEBUG_INFO("tot_len=%d", tot_len); - char udp_msg_buf[ZT_SOCKET_MSG_BUF_SZ]; // [sz : addr : payload] + // [sz : addr : payload] + char udp_msg_buf[ZT_SOCKET_MSG_BUF_SZ]; + memset(udp_msg_buf, 0, sizeof(ZT_SOCKET_MSG_BUF_SZ)); int32_t len = sizeof(struct sockaddr_storage) + tot_len; int32_t msg_tot_len = sizeof(int32_t) + len; - memcpy(udp_msg_buf, &len, sizeof(int32_t)); // len: sockaddr+payload - memcpy(udp_msg_buf + sizeof(int32_t), &ss, sizeof(struct sockaddr_storage)); // sockaddr - memcpy(udp_msg_buf + sizeof(int32_t) + sizeof(struct sockaddr_storage), &udp_payload_buf, tot_len); // payload + // len: sockaddr+payload + memcpy(udp_msg_buf, &len, sizeof(int32_t)); + // sockaddr + memcpy(udp_msg_buf + sizeof(int32_t), &ss, sizeof(struct sockaddr_storage)); + // payload + memcpy(udp_msg_buf + sizeof(int32_t) + sizeof(struct sockaddr_storage), &udp_payload_buf, tot_len); if ((w = write(vs->sdk_fd, udp_msg_buf, msg_tot_len)) < 0) { perror("write"); DEBUG_ERROR("write(fd=%d)=%d, errno=%d", vs->sdk_fd, w, errno); } - //vs->tap->phyOnUnixWritable(vs->sock, NULL, true); - //vs->tap->_phy.setNotifyWritable(vs->sock, true); } pbuf_free(q); } diff --git a/src/picoTCP.cpp b/src/picoTCP.cpp index afa2b6b..89ed0e2 100644 --- a/src/picoTCP.cpp +++ b/src/picoTCP.cpp @@ -716,11 +716,8 @@ namespace ZeroTier { // get frame len memcpy(&len, tap->pico_frame_rxbuf, sizeof(int32_t)); if (len > sizeof(int32_t)) { // meaning, since we package the len in the msg, we don't want to recv a 0-(sizeof(int32_t)) sized frame - DEBUG_ERROR("tap->pico_frame_rxbuf + sizeof(int32_t)=%p, len=%d", tap->pico_frame_rxbuf + sizeof(int32_t), len-(sizeof(int32_t))); memcpy(frame, tap->pico_frame_rxbuf + sizeof(int32_t), len-(sizeof(int32_t)) ); // get frame data - DEBUG_ERROR("tap->pico_frame_rxbuf=%p, tap->pico_frame_rxbuf + len=%p, MAX_PICO_FRAME_RX_BUF_SZ-len=%d", tap->pico_frame_rxbuf, tap->pico_frame_rxbuf + len, MAX_PICO_FRAME_RX_BUF_SZ-len); memmove(tap->pico_frame_rxbuf, tap->pico_frame_rxbuf + len, MAX_PICO_FRAME_RX_BUF_SZ-len); // shift buffer - DEBUG_ERROR("dev=%p, frame=%p, len=%d", dev, frame, (len-sizeof(int32_t))); if ((err = pico_stack_recv(dev, (uint8_t*)frame, (len-sizeof(int32_t)))) < 0) { if (picostack) { DEBUG_ERROR("pico_stack_recv(), err=%d, pico_err=%d, %s", err, pico_err, picostack->beautify_pico_error(pico_err));