Prevođenje SOCKS5 zahtjeva u HTTP tunel
Završite CONNECT razmjenu s roditeljem, vratite SOCKS odgovor klijentu i tek onda prenesite bajtove aplikacije.
Jedan SOCKS5 frontend može koristiti HTTP proxy kao svoj dalji transport. Djeluje kao SOCKS server prema klijentu i kao HTTP CONNECT klijent prema roditelju. Dvije kontrolne razmjene završavaju prije nego što počne tok aplikacije.
SOCKS CONNECT zahtjev već daje odredišni host ili adresu i port. Za ilustrativnu HTTP/1.1 razmjenu s 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. Uspješan 2xx odgovor uspostavlja roditeljski tunel. Tek tada treba vratiti odgovarajući SOCKS odgovor o uspjehu klijentu nizvodno.
Ako roditelj odbije operaciju, pošaljite definisani SOCKS odgovor o neuspjehu, a zatim odmah prekinite vezu s klijentom. SOCKS5 zahtijeva to zatvaranje u roku od deset sekundi od otkrivanja neuspjeha. Sačuvajte HTTP status roditelja kao dijagnostičku informaciju za adapter. Prosljeđivanje tog statusnog reda kao podataka aplikacije stavilo bi HTTP kontrolnu poruku u tok čiji klijent očekuje SOCKS uokvirenje.
Prije uspješnog rezultata CONNECT-a roditelj još govori HTTP, uključujući uokvirenje bilo kojeg odgovora s izazovom ili greškom. Nakon razdjelnika zaglavlja uspješnog rezultata veza postaje tunel; nema HTTP tijela odgovora koje bi se prvo trošilo.
Sačuvajte bajtove nakon zaglavlja
Jedno čitanje može sadržavati kraj roditeljskih zaglavlja i bajtove s 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 uspjehu poslan, prenosite tok aplikacije u oba smjera. Adapter ne mora izmjenjivati jednu klijentsku poruku s jednom serverskom porukom i ne mora razumjeti TLS zapise da bi ih proslijedio. Njegov protokolarni posao bio je uspostaviti i prevesti dvije tunelske pregovore.