Překlad požadavku SOCKS5 do tunelu HTTP
Dokončete výměnu CONNECT s rodičem, vraťte klientovi odpověď SOCKS a teprve poté přenášejte bajty aplikace.
Frontend SOCKS5 může používat HTTP proxy jako svou další přenosovou cestu. Vystupuje jako server SOCKS vůči klientovi a jako klient HTTP CONNECT vůči rodiči. Obě řídicí výměny skončí dříve, než začne tok aplikace.
Požadavek SOCKS CONNECT už obsahuje cílového hostitele nebo adresu a port. Pro ilustrativní výměnu HTTP/1.1 s rodičem:
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
Přeložte výsledek na hranici
Adaptér provede veškerou požadovanou autentizaci u rodiče a čeká na výsledek CONNECT. Úspěšná odpověď 2xx vytvoří tunel k rodiči. Teprve potom má klientovi níže po proudu vrátit odpovídající odpověď SOCKS o úspěchu.
Pokud rodič operaci odmítne, odešlete definovanou odpověď SOCKS o selhání a poté okamžitě ukončete spojení s klientem. SOCKS5 vyžaduje toto uzavření do deseti sekund od zjištění selhání. Uchovávejte stavový kód HTTP rodiče jako diagnostickou informaci pro adaptér. Předávání tohoto stavového řádku jako dat aplikace by vložilo řídicí zprávu HTTP do toku, jehož klient očekává rámování SOCKS.
Před úspěšným výsledkem CONNECT rodič stále mluví HTTP, včetně rámování jakékoli odpovědi s výzvou nebo chybou. Po oddělovači hlaviček úspěšného výsledku se spojení stane tunelem; nejprve není žádné tělo odpovědi HTTP ke spotřebování.
Zachovejte bajty za hlavičkami
Jedno čtení může obsahovat konec hlaviček rodiče i bajty z cíle společně. Tyto bajty navíc si ponechte pro aplikaci níže po proudu. Protokoly, v nichž mluví server první, mohou pozdravit hned po otevření spojení.
Poté, co byla odeslána odpověď SOCKS o úspěchu, přenášejte tok aplikace oběma směry. Adaptér nemusí střídat jednu zprávu klienta s jednou zprávou serveru a nemusí rozumět záznamům TLS, aby je předal. Jeho protokolovou prací bylo navázat a přeložit dvě tunelová vyjednávání.