छोटे कंट्रोलर को NetworkManager VPN से जोड़ना
सक्रियण एक हैंडल लौटाता है, तैयार सत्र नहीं। प्रोफ़ाइल, अनुरोध और सक्रिय कनेक्शन को अलग रखें, और पुनः आरंभ के बाद स्थिति फिर से बनाएँ।
मौजूदा VPN को जोड़ने वाले छोटे प्रोग्राम को नया VPN कार्यान्वयन नहीं, कंट्रोलर चाहिए। समर्थित इंजन को बातचीत और टनल ट्रैफ़िक संभालना चाहिए; आपके प्रोग्राम को उपयोगकर्ता का अनुरोध व्यक्त करना चाहिए और परिणाम को ईमानदारी से समझाना चाहिए। Linux पर NetworkManager D-Bus इंटरफ़ेस उस कंट्रोलर को अनुसरण करने के लिए ठोस मॉडल देता है।
चार जाँचें कंट्रोलर को सहेजी गई प्रोफ़ाइल, सक्रियण अनुरोध और चल रहे सत्र में उलझने से रोकती हैं।
जाँच एक: कौन सी पहचान चुनी जा रही है
प्रोफ़ाइल UUID को स्थायी पहचान रखें, और जब ऑब्जेक्ट पथ चाहिए तो उसे प्रबंधक के माध्यम से हल करें। एक प्रदर्शित नाम दो प्रोफ़ाइल साझा कर सकती हैं, और रनटाइम बस पथ संग्रह करने योग्य समझदार उपयोगकर्ता वरीयता नहीं है। चयन अपने कॉन्फ़िगरेशन में लिखें, इस टिप्पणी में नहीं कि सूची में कौन सी प्रविष्टि दूसरी थी।
इसे मिलान कहने से पहले जाँचें कि प्रबंधक क्या लौटाता है। ऐसा UUID जो अब मौजूद नहीं है, खोज विफलता उत्पन्न करता है, और यह उस प्रोफ़ाइल से अलग कोड पथ है जो मौजूद है और सक्रिय होने से इनकार करती है।
जाँच दो: सक्रियण कॉल क्या लौटाता है
प्रलेखित सक्रियण कॉल मौजूदा कनेक्शन का ऑब्जेक्ट पथ, एक डिवाइस पथ और एक विशिष्ट ऑब्जेक्ट लेता है। यह सक्रिय-कनेक्शन पथ लौटाता है, और वह उत्तर तैयारी का परिणाम नहीं बल्कि हैंडल है। अपने एप्लिकेशन का तैयार फ़्लैग लौटाए गए मान से निर्धारित न करें; इसके बजाय सक्रिय कनेक्शन की स्थिति और कारण की सदस्यता लें।
VPN के लिए विशिष्ट ऑब्जेक्ट सक्रिय आधार कनेक्शन चुनता है। रूट पथ भेजने से डिवाइस का चयन NetworkManager को मिल जाता है, जो उस समय डिफ़ॉल्ट वाला चुनता है। यह पासवर्ड फ़ील्ड नहीं बल्कि रूटिंग संदर्भ का निर्णय है, और यह बदलता है कि टनल किस डिवाइस पर बिछाई जाती है।
सामान्य जोड़ें-और-सक्रिय करें उदाहरण उठाकर यह अपेक्षा न करें कि वह VPN प्रोफ़ाइल बनाएगा। प्रलेखित सहायक VPN कनेक्शनों को बाहर रखता है, इसलिए प्रोफ़ाइल का प्रावधान या आयात अलग, समीक्षित चरण है। यह महत्वपूर्ण है क्योंकि प्रावधान के लिए प्राधिकरण और समीक्षा चाहिए जो कनेक्ट बटन नहीं देता। आयात को अपनी लॉग पंक्ति और अपने अनुमोदक वाली प्रशासनिक क्रिया मानें।
जाँच तीन: स्थिति कैसे दर्शाई जाती है
सक्रिय कनेक्शन सक्रियण, सक्रिय, निष्क्रियण और निष्क्रिय से गुज़रता है, और कारण फ़ील्ड बताता है क्यों। इन सबको loggedIn नामक बूलियन में दबाने से वह जानकारी खो जाती है जो उपयोगकर्ता को चाहिए और जो सहायता टीम पूछेगी। कम से कम दिखाएँ कि कनेक्शन लंबित, स्थापित या जा चुका है, और विफलता के मामले के लिए कारण स्ट्रिंग रखें।
अतुल्यकालिक उत्तरों को उस अनुरोध से जोड़ें जिसने उन्हें पैदा किया। पुराने प्रयास का देर से पूरा होना नई उपयोगकर्ता क्रिया को अधिलेखित नहीं करना चाहिए, और Connect पर दोहरा दबाव या तो अनदेखा किया जाए या दृश्यमान नीति के साथ रद्द-और-पुनः प्रयास माना जाए।
जाँच चार: पुनः आरंभ के बाद क्या होता है
जब प्रबंधक पुनः आरंभ होता है या आपका कंट्रोलर फिर से बस से जुड़ता है, तो देखी गई स्थिति को स्वामी से फिर से बनाएँ। पुराना ऑब्जेक्ट पथ अब भी मेमोरी में है इसलिए कैश किए गए सत्र को सक्रिय दिखाना जारी न रखें। स्थिति-परिवर्तन संकेत ठीक इसलिए हैं ताकि कंट्रोलर अनुमान लगाने के बजाय पुनः समन्वय कर सके।
चुनें कि कंट्रोलर बंद करने का क्या अर्थ है। मशीन के स्वामित्व वाला मौजूदा कनेक्शन चालू छोड़ना सही हो सकता है, और जानबूझकर अल्पकालिक सत्र तोड़ना भी सही हो सकता है। मशीन के स्वामित्व वाला मौजूदा कनेक्शन चालू छोड़ना सही हो सकता है; जानबूझकर अल्पकालिक सत्र तोड़ना भी सही हो सकता है। प्रक्रिया के बाहर जाने से नेटवर्क क्रिया हो जाएगी यह मानने के बजाय वह स्वामित्व अनुबंध इंटरफ़ेस में लिखें। उपयोगकर्ताओं को अनुमान नहीं लगाना चाहिए कि विंडो बंद करने से उनकी टनल टूटेगी या नहीं। उत्तर केवल कोड टिप्पणी में नहीं, इंटरफ़ेस पाठ में रखें।
अधिकार और रहस्य उनके स्वामियों के पास रखें
अनुमतियाँ हाँ, auth या नहीं के रूप में लौटती हैं, और इंटरफ़ेस को अनुमत, प्रमाणीकरण के बाद अनुमत और अस्वीकृत के बीच अंतर दर्शाना चाहिए। कंट्रोलर को root के रूप में चलाना अनुमति नीति लागू नहीं करता; यह प्रश्न ही हटा देता है।
कॉन्फ़िगर की गई प्रमाणीकरण विधि के लिए क्रेडेंशियल समर्थित सीक्रेट एजेंट या क्लाइंट एकीकरण के हैं। स्रोत कोड में, किसी आर्ग्युमेंट में या लॉग में पासवर्ड एक निष्कर्ष है, और स्थानीय प्रशासनिक प्राधिकरण गेटवे प्रमाणीकरण की वही घटना नहीं है।
अंत में, कनेक्शन की स्थिति को उस कार्य से अलग बताएँ जो उपयोगकर्ता करना चाहता है। टनल सक्रिय हो सकती है जबकि कोई निजी नाम या एप्लिकेशन अनुपलब्ध रहे, और वह दूसरी विफलता अपना संदेश और अपनी स्थिति की हकदार है। जो कंट्रोलर ठीक-ठीक बताता है कि कौन सी परत विफल हुई, वह उससे अधिक उपयोगी है जो कहता है कि VPN बंद है।