Preklad požiadavky SOCKS5 do tunela HTTP
Dokončite výmenu CONNECT s rodičom, vráťte klientovi odpoveď SOCKS a až potom prenášajte bajty aplikácie.
Frontend SOCKS5 môže používať HTTP proxy ako svoju ďalšiu prenosovú cestu. Vystupuje ako server SOCKS voči klientovi a ako klient HTTP CONNECT voči rodičovi. Obe riadiace výmeny sa skončia predtým, než sa začne tok aplikácie.
Požiadavka SOCKS CONNECT už obsahuje cieľového hostiteľa alebo adresu a port. Pre ilustratívnu výmenu HTTP/1.1 s rodičom:
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
Preložte výsledok na hranici
Adaptér vykoná všetku požadovanú autentifikáciu u rodiča a čaká na výsledok CONNECT. Úspešná odpoveď 2xx vytvorí tunel k rodičovi. Až potom by mal klientovi nižšie v toku vrátiť zodpovedajúcu odpoveď SOCKS o úspechu.
Ak rodič operáciu odmietne, odošlite definovanú odpoveď SOCKS o zlyhaní a potom okamžite ukončite spojenie s klientom. SOCKS5 vyžaduje toto zatvorenie do desiatich sekúnd od zistenia zlyhania. Uchovávajte stavový kód HTTP rodiča ako diagnostickú informáciu pre adaptér. Preposielanie tohto stavového riadku ako dát aplikácie by vložilo riadiacu správu HTTP do toku, ktorého klient očakáva rámcovanie SOCKS.
Pred úspešným výsledkom CONNECT rodič stále hovorí HTTP, vrátane rámcovania akejkoľvek odpovede s výzvou alebo chybou. Po oddeľovači hlavičiek úspešného výsledku sa spojenie stane tunelom; najprv nie je žiadne telo odpovede HTTP na spotrebovanie.
Zachovajte bajty za hlavičkami
Jedno čítanie môže obsahovať koniec hlavičiek rodiča aj bajty z cieľa spoločne. Tieto bajty navyše si ponechajte pre aplikáciu nižšie v toku. Protokoly, v ktorých hovorí server prvý, môžu pozdraviť hneď po otvorení spojenia.
Po odoslaní odpovede SOCKS o úspechu prenášajte tok aplikácie oboma smermi. Adaptér nemusí striedať jednu správu klienta s jednou správou servera a nemusí rozumieť záznamom TLS, aby ich preposlal. Jeho protokolovou prácou bolo nadviazať a preložiť obe tunelové rokovania.