Превођење SOCKS5 захтева у HTTP тунел
Завршите CONNECT размену са родитељем, вратите SOCKS одговор клијенту и тек онда пренесите бајтове апликације.
Један SOCKS5 фронтенд може користити HTTP прокси као свој даљи транспорт. Делује као SOCKS сервер према клијенту и као HTTP CONNECT клијент према родитељу. Две контролне размене завршавају пре него што почне ток апликације.
SOCKS CONNECT захтев већ даје одредишни хост или адресу и порт. За илустративну HTTP/1.1 размену са родитељем:
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
Преведите резултат на граници
Адаптер обавља сваку потребну аутентификацију код родитеља и чека резултат CONNECT-а. Успешан 2xx одговор успоставља родитељски тунел. Тек тада треба да врати одговарајући SOCKS одговор о успеху клијенту низводно.
Ако родитељ одбије операцију, пошаљите дефинисани SOCKS одговор о неуспеху, а затим одмах прекините везу са клијентом. SOCKS5 захтева то затварање у року од десет секунди од откривања неуспеха. Сачувајте HTTP статус родитеља као дијагностичку информацију за адаптер. Прослеђивање тог статусног реда као података апликације ставило би HTTP контролну поруку у ток чији клијент очекује SOCKS уоквирење.
Пре успешног резултата CONNECT-а родитељ још говори HTTP, укључујући уоквирење било ког одговора са изазовом или грешком. После раздвајача заглавља успешног резултата веза постаје тунел; нема HTTP тела одговора које би се прво трошило.
Сачувајте бајтове након заглавља
Једно читање може садржати крај родитељских заглавља и бајтове са одредишта заједно. Сачувајте те додатне бајтове за низводну апликацију. Протоколи у којима сервер говори први могу се јавити одмах након отварања везе.
Након што је SOCKS одговор о успеху послат, прослеђујте ток апликације у оба смера. Адаптер не мора да измењује једну клијентску поруку са једном серверском поруком и не мора да разуме TLS записе да би их проследио. Његов протоколарни посао био је успостављање и превођење две тунелске преговоре.