|
|
|
|
@ -101,40 +101,31 @@ int etcp_unbind(struct UTUN_INSTANCE* inst, uint8_t id) {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int etcp_send(struct ETCP_CONN* conn, struct ll_entry* entry) { |
|
|
|
|
DEBUG_TRACE(DEBUG_CATEGORY_ETCP_API, "etcp_send enter conn=%p entry=%p", conn, entry); |
|
|
|
|
if (!conn) { |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_ETCP_API, "etcp_send: NULL connection"); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!entry) { |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_ETCP_API, "etcp_send: NULL entry"); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!conn->normalizer) { |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_ETCP_API, "etcp_send: Connection has no normalizer"); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
struct PKTNORM* pn = conn->normalizer; |
|
|
|
|
|
|
|
|
|
if (!pn->input) { |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_ETCP_API, "etcp_send: Normalizer has no input queue"); |
|
|
|
|
if (!pn || !pn->input) { |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_ETCP_API, "etcp_send: pn=%p or input null", pn); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Помещаем entry в очередь input normalizer
|
|
|
|
|
// queue_data_put забирает ownership entry
|
|
|
|
|
// DEBUG_TRACE(DEBUG_CATEGORY_NORMALIZER, "Before put to input");
|
|
|
|
|
int result = queue_data_put(pn->input, entry); |
|
|
|
|
DEBUG_TRACE(DEBUG_CATEGORY_NORMALIZER, "After put to input"); |
|
|
|
|
|
|
|
|
|
DEBUG_TRACE(DEBUG_CATEGORY_NORMALIZER, "etcp_send after put result=%d", result); |
|
|
|
|
if (result != 0) { |
|
|
|
|
DEBUG_WARN(DEBUG_CATEGORY_ETCP_API, "etcp_send: queue_data_put failed (queue full?)"); |
|
|
|
|
DEBUG_WARN(DEBUG_CATEGORY_ETCP_API, "etcp_send: queue_data_put failed"); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_ETCP_API, "etcp_send: Packet queued for sending to [%s]", conn->log_name); |
|
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_ETCP_API, "etcp_send: queued to [%s]", conn->log_name); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|