پرش به محتویات

پروتکل FD Control

این قابلیت عمدتاً برای توسعهٔ اپلیکیشن‌های پروکسی اندروید به کار می‌رود.

کلاینت Hysteria از ارسال توصیفگر فایل (fd) اتصال‌های خروجی QUIC به هر فرآیندی که روی fdControlUnixSocket گوش می‌دهد پشتیبانی می‌کند.

توجه: fdControlUnixSocket در حال حاضر فقط برای اتصال‌های خروجی QUIC مؤثر است. کلاینت‌های شخص‌ثالث اندرویدی که از این قابلیت استفاده می‌کنند باید درخواست‌های DNS اضافی برای دامنهٔ سرور Hysteria را خودشان مدیریت کنند، یا مطمئن شوند گزینهٔ server در پیکربندی کلاینت Hysteria یک آدرس IP است، نه دامنه.

نقش‌ها

  • سرور: فرآیند شخص‌ثالثی که روی fdControlUnixSocket گوش می‌دهد، مثلاً فرآیند اصلی یک اپ اندروید.
  • کلاینت: فرآیند کلاینت Hysteria.

پیاده‌سازی سمت سرور

  1. به یک Unix Socket مبتنی بر مسیر گوش دهید که باید از نوع SOCK_STREAM باشد.
  2. با accept(2) اتصال‌هایی را که کلاینت آغاز کرده بپذیرید.
  3. یک fd تکی که کلاینت با recvmsg(2) فرستاده دریافت کنید.
  4. fd دریافت‌شده در مرحلهٔ ۳ را پردازش کنید (مثلاً با فراخوانی VpnService.protect()) و سپس fd را ببندید.
  5. با یک بایت به کلاینت پاسخ دهید تا به او اعلام شود ادامه دهد. در شرایط عادی توصیه می‌شود با '\x01' پاسخ دهید؛ مقادیر دیگر در حال حاضر تعریف‌نشده‌اند.
  6. اتصال برقرارشده در مرحلهٔ ۲ را ببندید — هر اتصال فقط یک fd را پردازش می‌کند.

مراجع