Outline SDK टूल, कुछ बुनियादी कॉन्सेप्ट पर आधारित है. इन्हें इंटरऑपरेबल इंटरफ़ेस के तौर पर परिभाषित किया गया है. इनकी मदद से, कॉम्पोनेंट को आसानी से फिर से इस्तेमाल किया जा सकता है.
कनेक्शन
कनेक्शन, किसी एब्स्ट्रैक्ट ट्रांसपोर्ट के ज़रिए दो एंडपॉइंट के बीच कम्यूनिकेशन की सुविधा देते हैं. कनेक्शन दो तरह के होते हैं:
transport.StreamConn: स्ट्रीम पर आधारित कनेक्शन, जैसे कि टीसीपी औरSOCK_STREAMPosix सॉकेट टाइप.transport.PacketConn: डेटाग्राम पर आधारित कनेक्शन, जैसे कि यूडीपी औरSOCK_DGRAMPosix सॉकेट टाइप. हम "डेटाग्राम" के बजाय "पैकेट" का इस्तेमाल करते हैं, क्योंकि Go स्टैंडर्ड लाइब्रेरी में यही नियम है.
नए ट्रांसपोर्ट पर नेस्ट किए गए कनेक्शन बनाने के लिए, कनेक्शन को रैप किया जा सकता है.
उदाहरण के लिए, StreamConn को टीसीपी, टीसीपी के ऊपर टीएलएस, टीसीपी के ऊपर एचटीटीपी, और टीसीपी के ऊपर क्यूयूआईसी के साथ इस्तेमाल किया जा सकता है.
डायलर
डायलर, होस्ट:पोर्ट पते के आधार पर कनेक्शन बनाने की सुविधा देते हैं. साथ ही, वे ट्रांसपोर्ट या प्रॉक्सी प्रोटोकॉल को एन्कैप्सुलेट करते हैं.
StreamDialer और PacketDialer टाइप, किसी पते के हिसाब से StreamConn और PacketConn
कनेक्शन बनाते हैं. डायलर को नेस्ट भी किया जा सकता है.
उदाहरण के लिए, टीएलएस स्ट्रीम डायलर, टीसीपी कनेक्शन के ज़रिए StreamConn बनाने के लिए टीसीपी डायलर का इस्तेमाल कर सकता है. इसके बाद, टीसीपी StreamConn के ज़रिए टीएलएस StreamConn बना सकता है. SOCKS5-over-TLS डायलर, टारगेट पते से SOCKS5 कनेक्शन बनाने से पहले, TLS डायलर का इस्तेमाल करके, प्रोक्सी के लिए TLS StreamConn बना सकता है.
रिज़ॉल्वर
रिज़ॉल्वर (dns.Resolver), डीएनएस के सवालों के जवाब देने की सुविधा देते हैं. साथ ही, वे डीएनएस के लिए इस्तेमाल किए जाने वाले एल्गोरिदम या प्रोटोकॉल को भी कवर करते हैं.
रिज़ॉल्वर का इस्तेमाल मुख्य रूप से, डोमेन नेम को आईपी पतों से मैप करने के लिए किया जाता है.