Starea NEVPNManager este invalidă până când preferințele se încarcă
Citirea stării sau salvarea înainte ca loadFromPreferences să se termine dă rezultate învechite sau eșuate. Ordinea încărcării, referințele către breloc și grupurile de acces decid asta.
Repornește aplicația, întreabă managerul despre starea conexiunii, iar acesta raportează deconectat în timp ce meniul sistemului arată clar un tunel activ. Ori un apel de salvare returnează o eroare care nu explică nimic, ori un secret partajat este declarat lipsă la câteva secunde după ce a fost atribuit. Trei simptome, un singur mecanism: managerul este o vedere asupra unui depozit de sistem, iar o vedere se citește goală până când cineva o încarcă.
Înainte de a depana oricare dintre acestea, stabilește ce API ar trebui să folosești. Un tunel IPsec sau IKEv2 de sistem se potrivește managerului încorporat; un protocol pe care sistemul nu îl implementează are nevoie de un furnizor de tunel cu propria ta manipulare a pachetelor, și nicio combinație de câmpuri nu schimbă asta.
Managerul este o vedere asupra unui depozit
Creează sau obține managerul, cere-i să își încarce preferințele și lasă handlerul de finalizare să termine înainte de a citi starea sau de a schimba setările protocolului. Când sarcina este enumerarea configurațiilor salvate, folosește apelul pentru toate variantele în loc să refolosești o singură instanță pentru două scopuri. Înainte să sosească încărcarea, starea este de obicei invalidă, iar maparea invalidului pe oprit este exact eroarea care face o aplicație să pară greșită doar după o repornire.
Scrierea urmează aceeași ordine. O salvare încercată pe un manager care nu a încărcat niciodată nimic poate eșua fără un mesaj util, pentru că nu există o identitate salvată căreia să i se aplice modificarea. Încarcă, modifică, salvează și apoi citește din nou starea. Obiectul la care se conectează sistemul este profilul salvat, nu cel pe care îl editai în memorie.
Schimbările de stare sosesc doar cât timp privești
După ce preferințele sunt încărcate, starea trece prin deconectat, se conectează, conectat, reafirmă și se deconectează. Inițializează interfața dintr-o singură citire, apoi ascultă notificarea de schimbare în loc să interoghezi cu un timer. Interogarea funcționează în prim-plan și minte în fundal, și așa ajung aplicațiile cu un indicator care nu se rezolvă niciodată.
Notificările sosesc doar cât timp aplicația este în prim-plan. Orice menține starea în fundal va părea învechit după o repornire, așa că reîmprospătează la lansare și din nou când aplicația revine în prim-plan. Dacă un furnizor deține tunelul, condu-l prin obiectul de sesiune potrivit; proprietatea simplă de conexiune nu modelează ciclul de viață al unui furnizor.
Secretele sunt referințe, nu șiruri
Un raport despre un secret partajat lipsă rareori înseamnă că nimeni nu a atribuit unul. Obiectul de protocol vrea o referință: una pentru parola utilizatorului și una pentru cheia pre-partajată IPsec. Trecerea lui nil, sau a unei referințe derivate din intrarea greșită a brelocului, produce aceeași reclamație ca un loc gol. Eroarea numește simptomul și ascunde cauza, de aceea oamenii reintroduc același secret de mai multe ori.
Scrie mai întâi secretul ca element de parolă generică, apoi citește înapoi o referință persistentă către el. O referință persistentă supraviețuiește repornirii, spre deosebire de un pointer ținut în memorie, și este reprezentarea pe care profilul o serializează. Alege o clasă de accesibilitate care permite în continuare accesul după ce dispozitivul a fost deblocat, altfel un tunel care trebuie să se reconecteze pe un ecran blocat va eșua autentificarea cu un secret perfect valid.
Extensia are propria vedere asupra brelocului
O extensie de rețea este un proces separat, așa că accesul implicit al aplicației la breloc nu ajunge la ea. Oferă ambelor ținte același grup de acces la breloc în drepturile lor, stochează elementul o dată în acel grup și lasă fiecare proces să îl citească. Fără grup, extensia nu găsește nimic și raportează o eroare de acreditări pe care aplicația nu o poate reproduce.
Dacă furnizorul este configurat prin obiectul său de configurare, nu încorpora și secretul în aplicație. Două copii diverg, iar divergența se prezintă ca acreditări proaste, nu ca duplicare. Un widget sau un al doilea proces care raportează altă stare are aceeași explicație: fiecare are nevoie de grup, și fiecare trebuie să încarce preferințele înainte de a citi.
Potrivește API-ul cu protocolul
Managerul încorporat transportă obiecte de protocol IPsec și IKEv2. Nu devine un client SSL VPN generic prin câmpuri suplimentare, iar un profil nepotrivit se poate salva curat și totuși nu se va conecta niciodată. Decide din ce categorie faci parte înainte de a investiga starea, pentru că o eroare de stare și un protocol neacceptat arată identic din exterior.
Pentru următoarea repornire lista de verificare este scurtă: încarcă preferințele, citește starea, ține abonamentele la schimbări în prim-plan, reconstruiește referințele din grupul partajat și confirmă că obiectul de protocol corespunde API-ului pe care l-ai implementat. Parcurgerea listei durează un minut; ghicirea ei durează o după-amiază.