Browse Source

media: BLOCK_REQ транзитом — убрать требование прямого соединения (NAT-узлы качают через роутер)

v2
evgeny 3 weeks ago
parent
commit
905fde5a27
  1. 21
      src/media_delivery/media_download.c

21
src/media_delivery/media_download.c

@ -204,27 +204,12 @@ static int md_dl_request_block(struct media_download* dl, int bi) {
dl->inflight++; dl->inflight++;
struct UTUN_INSTANCE* inst = dl->inst; struct UTUN_INSTANCE* inst = dl->inst;
if (instance_find_conn(inst, holder)) { /* BLOCK_REQ шлём через роутер (etcp_route_send): при наличии прямого соединения
* пойдёт напрямую, иначе — транзитом. Держатель ответит чанками по лучшему пути,
* поэтому прямое соединение не требуется (NAT-узлы качают транзитом). */
p->connected = 1; p->connected = 1;
b->state = MD_BLK_REQ; b->state = MD_BLK_REQ;
md_dl_send_block_req(inst, holder, dl, bi); md_dl_send_block_req(inst, holder, dl, bi);
} else {
struct TOPO_GROUP* grp = inst->topo_groups ? topo_groups_find(inst->topo_groups, dl->group_id) : NULL;
if (grp && grp->conn_mgr) {
int rc = conn_mgr_open(inst, grp->group_id, holder, md_dl_conn_cb, dl, &p->cm_handle);
if (rc != 0) {
DEBUG_WARN(DEBUG_CATEGORY_GENERAL, "%s: conn_mgr_open failed rc=%d for 0x%016llx", MDL_ID, rc, (unsigned long long)holder);
dl->inflight--;
return -1;
}
/* CONN — BLOCK_REQ отправится в md_dl_conn_cb по CONN_EVENT_UP */
} else {
/* нет conn_mgr — шлём напрямую best-effort */
p->connected = 1;
b->state = MD_BLK_REQ;
md_dl_send_block_req(inst, holder, dl, bi);
}
}
return 0; return 0;
} }

Loading…
Cancel
Save