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 રેકોર્ડ સમજવાની પણ જરૂર નથી. તેનું પ્રોટોકોલ કામ બે ટનલ વાટાઘાટો સ્થાપવાનું અને અનુવાદ કરવાનું હતું.