|
|
|
|
@ -1131,7 +1131,7 @@ void etcp_conn_input(struct ETCP_DGRAM* pkt) {
|
|
|
|
|
etcp->ack_resp_timer = uasync_set_timeout(etcp->instance->ua, ACK_DELAY_TB, etcp, ack_response_timer_cb); |
|
|
|
|
DEBUG_TRACE(DEBUG_CATEGORY_ETCP, "[%s] set ack_timer for delayed ACK send", etcp->log_name); |
|
|
|
|
} |
|
|
|
|
if ((int32_t)(etcp->last_delivered_id-seq)<0) if (queue_find_data_by_index(etcp->recv_q, &seq, 4)==NULL) {// проверяем есть ли пакет с этим seq
|
|
|
|
|
if (((int32_t)(etcp->last_delivered_id-seq)<0) && (queue_find_data_by_index(etcp->recv_q, &seq, 4)==NULL)) {// проверяем есть ли пакет с этим seq
|
|
|
|
|
uint32_t pkt_len=len-5; |
|
|
|
|
DEBUG_TRACE(DEBUG_CATEGORY_ETCP, "[%s] adding packet seq=%u to recv_q (last_delivered_id=%u)", etcp->log_name, seq, etcp->last_delivered_id); |
|
|
|
|
// отправляем пакет в очередь на сборку
|
|
|
|
|
@ -1159,7 +1159,9 @@ void etcp_conn_input(struct ETCP_DGRAM* pkt) {
|
|
|
|
|
queue_data_put_with_index(etcp->recv_q, (struct ll_entry*)rx_pkt, 0, 4); |
|
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_ETCP, "[%s] RX seq=%u need=%u asm_len=%d", etcp->log_name, seq, etcp->last_delivered_id+1, etcp->recv_q->count); |
|
|
|
|
if ((int32_t)(seq - etcp->last_delivered_id) == 1) etcp_output_try_assembly(etcp);// пробуем собрать выходную очередь из фрагментов
|
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_ETCP, "[%s] RX dup: seq=%u need=%u asm_len=%d", etcp->log_name, seq, etcp->last_delivered_id+1, etcp->recv_q->count); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
len=0; |
|
|
|
|
break; |
|
|
|
|
|