Browse Source

ts

nodeinfo-routing-update
jeka 1 month ago
parent
commit
aef89a0258
  1. 27
      src/etcp.c
  2. 2
      src/etcp_connections.h

27
src/etcp.c

@ -628,6 +628,24 @@ struct ETCP_DGRAM* etcp_request_pkt(struct ETCP_CONN* etcp) {
dgram->data[1]=ptr/8;
if (link->last_recv_updated) {// если есть данные - добавим channel_timestamp
uint64_t now=get_time_tb();
uint64_t dt=now - link->last_recv_local_time;
link->last_recv_updated=0;
if (dt<1000000) {
dgram->data[ptr++]=ETCP_SECTION_TIMESTAMP;
uint16_t t=link->last_recv_timestamp + dt;
dgram->data[ptr++]=t;
dgram->data[ptr++]=t>>8;
t=link->last_recv_local_time - link->last_recv_timestamp;
dgram->data[ptr++]=t;
dgram->data[ptr++]=t>>8;
}
}
if (inf_pkt) {
// фрейм data (0) обязательно в конец
DEBUG_DEBUG(DEBUG_CATEGORY_ETCP, "[%s] add DATA (seq=%u, len=%u), ack_size=%d", etcp->log_name, inf_pkt->seq, inf_pkt->ll.len, dgram->data[1]);
@ -835,6 +853,15 @@ void etcp_conn_input(struct ETCP_DGRAM* pkt) {
while ((int32_t)(etcp->rx_ack_till-till)<0) { etcp->rx_ack_till++; etcp_ack_recv(etcp, etcp->rx_ack_till, -1, -1); }// подтверждаем всё по till
break;
}
case ETCP_SECTION_TIMESTAMP: {
uint16_t cur_ts=get_current_timestamp();
uint16_t ret_ts=data[1] | (data[2]<<8);// cur_ts=ret_ts = RTT
uint16_t recv_dt=data[3] | (data[4]<<8);
pkt->link->rtt_last=cur_ts-ret_ts;
pkt->link->recv_dt_last=recv_dt;
data+=5; len-=5;
break;
}
case ETCP_SECTION_PAYLOAD: {
if (len>=5) {

2
src/etcp_connections.h

@ -92,6 +92,8 @@ struct ETCP_LINK {
size_t total_encrypted;
size_t total_decrypted;
uint16_t rtt_last;
uint16_t recv_dt_last;
uint32_t bandwidth; // Link bandwidth in Kbits/sec
// NAT address tracking (from INIT_RESPONSE)

Loading…
Cancel
Save