الضغط على «قطع الاتصال» ينجح، وبعد عشر ثوانٍ يعود النفق على أي حال. هذه الحلقة نادراً ما تكون عطلاً في عميل VPN؛ إنها برنامج استعادة لم يسأل إلا سؤالاً واحداً، «هل هو معطل؟»، وأجاب عنه بالاتصال. وبمجرد أن تفصل السؤال الذي أجاب عنه المستخدم عن السؤال الذي يبلغ عنه النظام، تصبح المعالجة قليلاً من الحالة بدل انتظار أطول.

سؤالان، لا سؤال واحد

هل ينبغي أن يكون هذا الملف الشخصي متصلاً الآن، وماذا يبلغ النظام حالياً؟ هذان سؤالان مختلفان بمالكين مختلفين، وسياسة الاستعادة تحتاج إلى كليهما قبل أن تتصرف. النيّة شيء تقرره أداتك وتتذكره. الحالة المرصودة شيء تخبرك به المنصة.

IntentWhat you observeWhat to do
WantedDropped unexpectedlyAllow one supported recovery attempt
Paused by the userDisconnectedDo nothing until intent changes
WantedAlready connectingWait instead of starting a rival attempt
WantedAuthentication needs a personPrompt, then stop replaying credentials

اقرأ الصفوف كسياسة لا كقائمة حالات. الصف الثاني هو الذي تغفله معظم النصوص البرمجية، وهو الصف الوحيد الذي يفرّق بين مراقب وآلة تصرّ على أن تكون محقة.

الحالة المرصودة ليست تفضيلاً

يبلغ نموذج حالة Network Extension من Apple عن حالات الاتصال الجاري، والمتصل، وقطع الاتصال الجاري، والمنقطع، والاستعادة. الخمسة كلها تصف الاتصال. لا يقول أي منها «طلب المستخدم أن يبقى هذا الملف الشخصي متوقفاً»، لأن ذلك ليس حالة اتصال على الإطلاق. أما العملاء غير المبنيين على ذلك الإطار فيعرضون أدوات التحكم واستدعاءات الحالة المدعومة لديهم، ويرسمون الخط نفسه بمفرداتهم الخاصة.

النتيجة أن حالة الانقطاع لا يمكن تفسيرها بمعزل عن غيرها أبداً. إنها تعني واحداً من ثلاثة أشياء على الأقل: سقط النفق، أو أوقفه المستخدم، أو أن النظام بين محاولتين. ولا يمكن التمييز بينها إلا بسجلك الخاص للنيّة. دوّن ذلك السجل، واحفظه عبر إعادة التشغيل إن كان لا بد أن يبقى بعد إعادة الإقلاع، وحدّثه في اللحظة التي يتصرف فيها المستخدم بدل استنتاجه لاحقاً من سطر في السجل.

scutil --nc list
scutil --nc status "Office VPN"

من غيرك مسموح له ببدء هذا الملف الشخصي

الإيقاف المؤقت الذي يعد به مساعدك لا يكون أقوى من المالكين الآخرين للملف الشخصي نفسه. فقاعدة On Demand أو إعداد مُدار أو عميل ثانٍ يمكنها جميعاً طلب اتصال، وسيبدو مساعدك معطلاً بينما يتصرف تماماً كما كُتب.

اعثر على كل آلية يمكنها بدء الملف الشخصي قبل أن تعد باحترام الإيقاف المؤقت، ودوّن أيها يفوز. وحين تحجب خدمة مُدارة خيار إيقاف شخصي عمداً، فذلك قرار مسؤول عن السياسة، وليس ثغرة يملأها نص برمجي بالتصارع مع الإدارة.

اجعل المحاولات مملة

حدّد عدد المحاولات واجعل كل واحدة تستجيب لشيء تغيّر: عادت الشبكة، أو أجاب البوابة، أو اكتمل طلب بيانات الاعتماد. فالبوابة غير المتاحة والهوية المنتهية والعامل الثاني المرفوض تحتاج ثلاث استجابات مختلفة، والحلقة الضيقة تعطي الثلاثة الاستجابة نفسها.

راقب ما ينتجه التكرار السريع فعلاً على الشاشة. فالنوافذ المتكررة التي يغلقها المستخدم أسوأ من رسالة فشل واحدة واضحة، وهي تدرّب الناس على النقر عبر المطالبات دون قراءتها.

الإيقاف المؤقت وسياسة حركة المرور وعدان منفصلان

غالباً ما يترك النفق الموقوف من المستخدم حركة المرور محجوبة عن قصد، وهذا هو جوهر سياسة من طراز مفتاح القتل. وهذا يعني أن الإيقاف المؤقت يجب أن يعد بشيء واحد بالضبط: توقف الاستعادة. ولا ينبغي أن يغيّر بصمت ما تسمح به الشبكة.

حدّد سلوك حركة المرور بشكل منفصل، ووثّقه بجوار عنصر التحكم في الإيقاف المؤقت، وأبقه متسقاً سواء كان النفق موقوفاً أو فاشلاً أو غائباً. وإلا سيتعلم المستخدم أن الضغط على قطع الاتصال يفعل شيئاً غير متوقع، وستكون تذكرة الدعم التالية عن شبكة «تتوقف عن العمل أحياناً» دون سبب ظاهر.

مقالات ذات صلة