C# OpenVPN egoera-behatzailea: begiratu saioa, ez sare-txartela
NetworkAvailabilityChanged ez da VPN gertaera bat. Irakurri tunela duen bezeroaren egoera-fluxua, babestu zunda zaharkituetatik eta argitaratu prestutasuna konexio bakoitzeko.
Zure aplikazioak lanean jarraitzen du tunela hiltzen den bitartean. Wi-Fi oraindik martxan dago, internet oraindik erantzuten ari da, eta aplikazioak mendekotasuna duen API pribatua iristezin bihurtu da. Jendeak hemen normalean erabiltzen duen .NET gertaera, NetworkAvailabilityChanged, ez du egoera hori batere deskribatzen. Makinaren egoera agregatuaren aldaketaren berri ematen du, eta egoera hori egia izan daiteke VPN deskonexio eta berrikonexio baten zehar. Behatzaileak tunela duen bezeroa begiratu behar du, ez sare-pilaren laburpena.
Erabilgarritasuna agregatu bat da, ez zure tunela
NetworkAvailabilityChanged pizten da makinaren erabilgarritasun-erantzun agregatua aldatzen denean, eta erantzun horrek loopback edo tunela ez den edozein interfaze aktibo zenbatzen du.
Wi-Fi martxan dagoela VPN erortzeak ez du ezer aldatzen neurtzen duenetik, eta horregatik gertaera isilik egon daiteke zuri axola zaizun hutsegite zehatzaren zehar.
Egoera-fluxua tunela duen bezeroarena da
Zehaztu zein osagai den konexioaren jabe: OpenVPN GUI edo zerbitzua, OpenVPN Connect, edo zure aplikazioak abiatu eta kontrolatzen duen prozesu bat. Jabe desberdinak dira interfaze onartu desberdinekin, eta behatzaileak hedapenari dagokion interfazea erabili behar du. Integratzeko baimena duzun OpenVPN prozesu batentzat, kudeaketa-interfazeak uneko egoera, historia eta denbora errealeko jakinarazpenak ematen ditu. Aztertu dokumentatutako mezu egituratuak, GUI lokalizatuko epigrafean connected hitza bilatu beharrean.
Kudeaketa-kanala kontrol-gainazal pribilegiatua da, beraz ez ireki entzule berririk eta ez borrokatu GUIarekin honek jada duen kanal baten bila.
Belaunaldi-babesek emaitza zaharkituak gelditzen dituzte
Behaketa bakoitza konexio-saiakera zehatz bati dagokio. Handitu belaunaldi-kontagailu bat saiakera berria hasten denean, kanala galtzen denean eta bezeroak irteera jakinarazten duenean.
Demagun A konexioan zehar hasitako zunda bat. Tunela erortzen da, B konexioa hasten da, eta gero A-ren HTTP arrakasta atzeratua iristen da. Babesik gabe, emaitza zahar horrek pantaila berde jartzen du B oraindik autentifikatzen ari den bitartean. Ezeztapenak alferrikako lana murrizten du, eta belaunaldi-egiaztapenak eragozten du amaiera zaharkitu bat uneko egoera bihurtzea:
var generation = _generation;
var reachable = await ProbeAsync(token);
if (generation != _generation) return;
Publish(reachable);
Aplikatu arau bera UI bidalketaren inguruan, zeren marshall egindako eguneraketa belaunaldia aurrera egin ondoren irits baitaiteke.
Hasieratzea eta berrikonexioa bizi-ziklo bakarra dira
Hartu lehen konexioa, berrikonexioa eta kanal-galera bizi-ziklo bakar gisa, arau-multzo bakarrarekin:
- Irakurri uneko egoera eta harpidetu jakinarazpenei urrats bakarrean, interfazeak uzten duen lekuan.
- Markatu behaketa bakoitza konexioaren identitatearekin eta belaunaldiarekin.
- Baliogabetu prestutasuna berrikonexioan, irteeran edo galdu den behaketa-kanalean.
- Zundatu baliabide pribatua jabeak hasieratzea amaitutzat jakinarazi ondoren soilik.
- Argitaratu uneko belaunaldiari oraindik dagozkion emaitzak soilik.
Galdutako kanalak ezezaguna esan nahi du, ez deskonektatua. Ezezaguna jakinaraztea frogatu ezin duzun deskonexio bat jakinaraztea baino zintzoagoa da, eta berriro saiatzeko logikak uste baten arabera jardutea eragozten du.
Eman frogak, ez boolear bat
Itzuli izendatutako saio-egoera eta baliabide-prestutasuna balio bereizi gisa, bakoitza adin batekin. Zerbait erabaki behar duen kontsumitzaileak ikus dezake azken zunda arrakastatsuak berrogei segundo dituela, hau da, informazio desberdina fresko batena baino.
IP publikoaren bilaketak ez du frogatzen API pribatu batek beharrezko bidea erabili zuenik, beraz ez aurkeztu horrela balitz bezala.
Eduki betearazpena behatzailearen kanpoan
Callback bat gertaeraren ondoren exekutatzen da. Ezin du bermatu gertaeraren eta kudeatzailearen artean paketerik irten ez zenik makinatik. Diseinuak blokeoa eskatzen badu, sare-politikak eman behar du, eta behatzailearen zeregina frogak deitzaileari azaltzea da. Biak nahasteak boolear bat duelako suebakia dela uste duen kodea sortzen du. Egon betearazpen-geruza aspergarri eta probagarri, eta utzi behatzailea irakurle izaten.
Orduan UI galdera sinplea bihurtzen da: erakutsi jakina dena, bere adinarekin, eta esan ezezaguna denenn.