[engine] Veri transferi / tünelleme paritesi #30

Closed
opened 2026-06-16 23:54:08 +03:00 by saqut · 1 comment
Owner

Eşler (peer) pair olduktan sonra aralarında veri tüneli üzerinden veri iletiminin Go'da paritesi. (Node'daki "Veri Transferi / Tünelleme" davranışı birebir.)

Kapsam:

  • Pairing sonrası (acceptPair) iki peer arasında tünel: send (tek yön veri gönderimi) ve request (yanıt bekleyen istek).
  • İletim WSTS protokolü üzerinden kimliklendirilmiş paketlerle yapılır; her paket "kimden / kime" bilgisini taşır, sunucu doğru hedefe yönlendirir.
  • Sanallaştırma: sunucu, gönderenin gerçek IP'sini / cihaz türünü karşı tarafa açığa çıkarmadan tünelleme yapar.
  • Büyük / binary payload: dosya transferinin (frontend P2PFileSender) temeli — DataChannel'a geçmeden önce ws tüneli üzerinden parçalı aktarım.
  • Akış kontrolü (backpressure): büyük veride sunucuyu/peer'i boğmamak için tampon ve hız kontrolü.
  • Hata / timeout / peer kopması durumlarında tünelin temiz kapanması.

Bitti kriteri: iki paired peer arasında send ve request çalışıyor; paketler doğru hedefe ve bozulmadan iletiliyor; kaynak IP sızmıyor; büyük payload'da akış kontrolü var; SDK API'si değişmiyor; go test -race yeşil.

Eşler (peer) pair olduktan sonra aralarında **veri tüneli** üzerinden veri iletiminin Go'da paritesi. (Node'daki "Veri Transferi / Tünelleme" davranışı birebir.) **Kapsam:** - Pairing sonrası (`acceptPair`) iki peer arasında tünel: `send` (tek yön veri gönderimi) ve `request` (yanıt bekleyen istek). - İletim WSTS protokolü üzerinden **kimliklendirilmiş paketlerle** yapılır; her paket "kimden / kime" bilgisini taşır, sunucu doğru hedefe yönlendirir. - **Sanallaştırma:** sunucu, gönderenin gerçek IP'sini / cihaz türünü karşı tarafa açığa çıkarmadan tünelleme yapar. - **Büyük / binary payload:** dosya transferinin (frontend `P2PFileSender`) temeli — DataChannel'a geçmeden önce ws tüneli üzerinden parçalı aktarım. - **Akış kontrolü (backpressure):** büyük veride sunucuyu/peer'i boğmamak için tampon ve hız kontrolü. - Hata / timeout / peer kopması durumlarında tünelin temiz kapanması. **Bitti kriteri:** iki paired peer arasında `send` ve `request` çalışıyor; paketler doğru hedefe ve bozulmadan iletiliyor; kaynak IP sızmıyor; büyük payload'da akış kontrolü var; SDK API'si değişmiyor; `go test -race` yeşil.
saqut added this to the 1.0.0 milestone 2026-06-16 23:54:08 +03:00
saqut added the
engine
go
labels 2026-06-16 23:54:08 +03:00
Author
Owner

Tamamlandı (go-rewrite). internal/services/datatransfer.go + testleri.

Kapsam / kabul kriteri:

  • send (tek yön): pack/to — kimliklendirilmiş paket ({from, pack}), sunucu doğru hedefe yönlendirir. Eş pairing istemiyorsa örtük pairing kurulur.
  • request (yanıtlı): request/to → eşe request sinyali; cevap response/to ile aynı request id üzerinden geri döner (out-of-band). Bu zincir #33 ile doğru çalışır hale geldi (erken yanıt yok).
  • oda yayını: pack/room (+ wom).
  • Sanallaştırma: relay yükü yalnızca mantıksal from id + payload taşır; gerçek IP / cihaz türü sızmaz (test: TestTunnelDoesNotLeakSourceAddress).
  • Büyük payload: MaxMessageSize 16 MiB; 1 MiB chunk bozulmadan iletiliyor (test: TestTunnelLargePayloadIntact) — frontend P2PFileSender parçalı aktarımının temeli.
  • Akış kontrolü (backpressure): bağlantı başına sınırlı outbound kuyruğu + dolunca düşür-ama-kapatma politikası (decisions.md §5/§8); ölü peer write-deadline ile reaplenir.
  • Temiz kapanma: peer kopunca pair kenarları temizlenir + peer/disconnect sinyali (auth disconnect hook).
  • SDK API'si değişmedi.

Testler: TestRequestResponseRoundTrip, TestTunnelDoesNotLeakSourceAddress, TestTunnelLargePayloadIntact, TestDataTransferPackToAutoPairs, TestSessionFlagGatesPackReadable. go test -race ./... yeşil.

Tamamlandı (go-rewrite). `internal/services/datatransfer.go` + testleri. **Kapsam / kabul kriteri:** - **send (tek yön):** `pack/to` — kimliklendirilmiş paket (`{from, pack}`), sunucu doğru hedefe yönlendirir. Eş pairing istemiyorsa örtük pairing kurulur. - **request (yanıtlı):** `request/to` → eşe `request` sinyali; cevap `response/to` ile **aynı request id** üzerinden geri döner (out-of-band). Bu zincir #33 ile doğru çalışır hale geldi (erken yanıt yok). - **oda yayını:** `pack/room` (+ `wom`). - **Sanallaştırma:** relay yükü yalnızca mantıksal `from` id + payload taşır; gerçek IP / cihaz türü **sızmaz** (test: `TestTunnelDoesNotLeakSourceAddress`). - **Büyük payload:** `MaxMessageSize` 16 MiB; 1 MiB chunk bozulmadan iletiliyor (test: `TestTunnelLargePayloadIntact`) — frontend `P2PFileSender` parçalı aktarımının temeli. - **Akış kontrolü (backpressure):** bağlantı başına sınırlı `outbound` kuyruğu + dolunca düşür-ama-kapatma politikası (decisions.md §5/§8); ölü peer write-deadline ile reaplenir. - **Temiz kapanma:** peer kopunca pair kenarları temizlenir + `peer/disconnect` sinyali (auth disconnect hook). - **SDK API'si değişmedi.** **Testler:** `TestRequestResponseRoundTrip`, `TestTunnelDoesNotLeakSourceAddress`, `TestTunnelLargePayloadIntact`, `TestDataTransferPackToAutoPairs`, `TestSessionFlagGatesPackReadable`. `go test -race ./...` yeşil.
saqut closed this issue 2026-06-17 08:12:24 +03:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: saqut/MWSE#30
No description provided.