Prevođenje SOCKS5 zahteva u HTTP tunel
Završite CONNECT razmenu sa roditeljem, vratite SOCKS odgovor klijentu i tek onda prosledite bajtove aplikacije.
Jedan SOCKS5 frontend može koristiti HTTP proksi kao svoj dalji transport. Deluje kao SOCKS server prema klijentu i kao HTTP CONNECT klijent prema roditelju. Dve kontrolne razmene završavaju pre nego što počne tok aplikacije.
SOCKS CONNECT zahtev već daje odredišni host ili adresu i port. Za ilustrativnu HTTP/1.1 razmenu sa roditeljem:
client → adapter: SOCKS5 CONNECT service.example.net:443
adapter → parent:
CONNECT service.example.net:443 HTTP/1.1
Host: service.example.net:443
parent → adapter: HTTP/1.1 200 Connection Established
[end of headers]
adapter → client: SOCKS5 success reply
client ↔ adapter ↔ parent ↔ service: application bytes
Prevedite rezultat na granici
Adapter obavlja svaku potrebnu autentifikaciju kod roditelja i čeka rezultat CONNECT-a. Uspešan 2xx odgovor uspostavlja roditeljski tunel. Tek tada treba da vrati odgovarajući SOCKS odgovor o uspehu klijentu nizvodno.
Ako roditelj odbije operaciju, pošaljite definisani SOCKS odgovor o neuspehu, a zatim odmah prekinite vezu sa klijentom. SOCKS5 zahteva to zatvaranje u roku od deset sekundi od otkrivanja neuspeha. Sačuvajte HTTP status roditelja kao dijagnostičku informaciju za adapter. Prosleđivanje tog statusnog reda kao podataka aplikacije stavilo bi HTTP kontrolnu poruku u tok čiji klijent očekuje SOCKS uokvirenje.
Pre uspešnog rezultata CONNECT-a roditelj još govori HTTP, uključujući uokvirenje bilo kog odgovora sa izazovom ili greškom. Posle razdelnika zaglavlja uspešnog rezultata veza postaje tunel; nema HTTP tela odgovora koje bi se prvo trošilo.
Sačuvajte bajtove nakon zaglavlja
Jedno čitanje može sadržati kraj roditeljskih zaglavlja i bajtove sa odredišta zajedno. Sačuvajte te dodatne bajtove za nizvodnu aplikaciju. Protokoli u kojima server govori prvi mogu se javiti odmah nakon otvaranja veze.
Nakon što je SOCKS odgovor o uspehu poslat, prosleđujte tok aplikacije u oba smera. Adapter ne mora da izmenjuje jednu klijentsku poruku sa jednom serverskom porukom i ne mora da razume TLS zapise da bi ih prosledio. Njegov protokolarni posao bio je uspostavljanje i prevođenje dve tunelske pregovore.