Menerjemahkan Permintaan SOCKS5 menjadi Terowongan HTTP
Selesaikan pertukaran CONNECT dengan induk, kirim balik balasan SOCKS ke klien, dan baru setelah itu teruskan bita aplikasi.
Frontend SOCKS5 dapat memakai proxy HTTP sebagai transport lanjutannya. Ia bertindak sebagai server SOCKS terhadap klien dan sebagai klien HTTP CONNECT terhadap induk. Kedua pertukaran kendali selesai sebelum aliran aplikasi dimulai.
Permintaan SOCKS CONNECT sudah menyediakan host atau alamat tujuan dan portnya. Untuk ilustrasi pertukaran HTTP/1.1 dengan induk:
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
Terjemahkan hasilnya di batas
Adapter menyelesaikan autentikasi apa pun yang diminta induk dan menunggu hasil CONNECT. Balasan 2xx yang berhasil membentuk terowongan induk. Baru setelah itu ia harus mengirim balik balasan sukses SOCKS yang sesuai ke klien hilir.
Jika induk menolak operasi, kirim balasan kegagalan SOCKS yang terdefinisi, lalu hentikan koneksi klien dengan segera. SOCKS5 mewajibkan penutupan itu dalam sepuluh detik sejak kegagalan terdeteksi. Simpan status HTTP induk sebagai informasi diagnostik bagi adapter. Meneruskan baris status itu sebagai data aplikasi akan menaruh pesan kendali HTTP ke dalam aliran yang kliennya mengharapkan pembingkaian SOCKS.
Sebelum hasil CONNECT yang berhasil, induk masih berbicara HTTP, termasuk pembingkaian balasan tantangan atau kesalahan apa pun. Setelah pembatas header hasil yang berhasil, koneksi menjadi terowongan; tidak ada badan balasan HTTP yang perlu dikonsumsi lebih dulu.
Pertahankan bita setelah header
Satu pembacaan dapat memuat akhir header induk dan bita dari tujuan sekaligus. Simpan bita tambahan itu untuk aplikasi hilir. Protokol yang server-nya berbicara lebih dulu dapat menyapa segera setelah koneksinya terbuka.
Setelah balasan sukses SOCKS terkirim, teruskan aliran aplikasi ke kedua arah. Adapter tidak perlu bergantian satu pesan klien dengan satu pesan server, dan tidak perlu memahami rekaman TLS untuk meneruskannya. Pekerjaan protokolnya adalah membangun dan menerjemahkan kedua negosiasi terowongan.