يتّبع تصميم حزمة Outline SDK بعض المفاهيم الأساسية، فهو مبني على واجهات تعمل بشكل تفاعلي، ما يضمن سهولة دمجها وإعادة استخدامها.
الاتصالات
تتيح الاتصالات التواصل بين نقطتَي نهاية من خلال بروتوكولات نقل بسيطة. وهناك نوعان من الاتصالات:
-
transport.StreamConn
: الاتصال المستنِد إلى البثّ مثل بروتوكول TCP ونوع المقبسSOCK_STREAM
من Posix -
transport.PacketConn
: الاتصال المستندِ إلى مخططات نقل البيانات مثل بروتوكول UDP ونوع المقبسSOCK_DGRAM
من Posix. ونحن نستخدم مصطلح "الحزمة" بدلاً من "مخطط نقل البيانات" لأنّه المصطلح المستخدَم في مكتبة لغة Go العادية.
يمكن تجميع الاتصالات لإنشاء اتصالات مُدمجة عبر بروتوكول نقل جديد.
فعلى سبيل المثال، يمكن نقل StreamConn
من خلال بروتوكول TCP، أو TLS عبر TCP، أو HTTP عبر
TLS عبر TCP، أو بروتوكول QUIC، وغير ذلك من الخيارات الأخرى.
برامج الاتصال
تتيح برامج الاتصال إنشاء الاتصالات باستخدام عنوان من المضيف إلى المنفذ، بينما يتم
تغليف بروتوكول النقل أو بروتوكول الخادم الوكيل الأساسي.
وتُنشئ أنواع StreamDialer
وPacketDialer
اتصالات StreamConn
وPacketConn
،
على التوالي، بالاستناد إلى أحد العناوين. ويمكن أن تكون برامج الاتصال مُدمجة،
فعلى سبيل المثال، يمكن أن يستخدم "برنامج اتصال بثّ عبر بروتوكول أمان طبقة النقل (TLS)" برنامج اتصال TCP لإنشاء StreamConn
استنادًا إلى اتصال TCP، ثم إنشاء StreamConn
عبر TLS استنادًا إلى
StreamConn
عبر TCP. ويمكن أن يستخدم "برنامج اتصال SOCKS5 عبر بروتوكول TLS" "برنامج اتصال TLS" لإنشاء StreamConn
عبر TLS
مع الخادم الوكيل قبل أن يبدأ الاتصال SOCKS5 مع العنوان
المطلوب.
برامج التعيين
تتيح برامج التعيين (dns.Resolver
) إمكانية الردّ على طلبات نظام أسماء النطاقات، بينما
يتم تغليف الخوارزمية أو البروتوكول الأساسي.
وتُستخدم هذه البرامج بشكل رئيسي لتحويل أسماء النطاقات إلى عناوين IP.