ನಿಮ್ಮ ಆ್ಯಪ್ ಸಂಪರ್ಕ ಕಡಿತ ಎನ್ನುತ್ತದೆ, ಮೆನು ಬಾರ್ ಸಂಪರ್ಕ ಎನ್ನುತ್ತದೆ, ಮತ್ತು ಟ್ರಾಫಿಕ್ ಸ್ಪಷ್ಟವಾಗಿ ಹರಿಯುತ್ತಿದೆ. ಆ ಅಂತರವು ಮರುಪ್ರಯತ್ನದಿಂದ ಸರಿಪಡಿಸಬಹುದಾದ ರೇಸ್ ಕಂಡೀಷನ್ ಅಲ್ಲ: ಆ್ಯಪ್ ಮತ್ತು ಟನೆಲ್ ಪ್ರತ್ಯೇಕ ಪ್ರಕ್ರಿಯೆಗಳು, ಮತ್ತು ನಿಮ್ಮ ಕೋಡ್ ಓದುವ ವಸ್ತು ಸಿಸ್ಟಮ್ ಸಂಗ್ರಹಿಸುವ ಕಾನ್ಫಿಗರೇಶನ್‌ನ ಕ್ಯಾಶ್ ಮಾಡಿದ ನೋಟವಾಗಿದೆ. Apple ನ Personal VPN ಮೇಲ್ಮೈ ನಿಯಂತ್ರಣ API, ಡೇಟಾ ಮಾರ್ಗವಲ್ಲ, ಮತ್ತು ಅದರ ವಿಚಿತ್ರ ವರ್ತನೆಯ ಬಹುಪಾಲು ಈ ಒಂದೇ ಸತ್ಯದಿಂದ ಬರುತ್ತದೆ. ಪ್ರತಿ ಕರೆಯಲ್ಲಿ ನಿಜವಾಗಿ ಏನಾಗುತ್ತದೆ ಎಂಬುದು ಇಲ್ಲಿದೆ.

ಮ್ಯಾನೇಜರ್ ವಸ್ತು ಕ್ಯಾಶ್ ಮಾಡಿದ ನೋಟ, ಟನೆಲ್ ಅಲ್ಲ

NETunnelProviderManager ಸಿಸ್ಟಮ್ ಒಡೆತನದ ಆದ್ಯತೆ ಸಂಗ್ರಹದಿಂದ ತುಂಬುತ್ತದೆ, ಆದ್ದರಿಂದ loadFromPreferences ಪೂರ್ಣಗೊಳ್ಳುವವರೆಗೆ ಅದರ ಗುಣಲಕ್ಷಣಗಳಿಗೆ ಯಾವುದೇ ಅರ್ಥವಿಲ್ಲ. ಅದಕ್ಕೂ ಮೊದಲು connection.status ಓದಿದರೆ ನಿಮಗೆ ಡೀಫಾಲ್ಟ್ ಮೌಲ್ಯ ಸಿಗುತ್ತದೆ, ಮತ್ತು ಅದಕ್ಕಾಗಿಯೇ ಮರುಪ್ರಾರಂಭದ ನಂತರದ ಮೊದಲ ಸ್ಥಿತಿ ನವೀಕರಣ ಟನೆಲ್ ಚಾಲನೆಯಲ್ಲಿದ್ದರೂ ಸಂಪರ್ಕ ಕಡಿತ ಎಂದು ವರದಿ ಮಾಡುತ್ತದೆ. ಮೊದಲು ಲೋಡ್ ಮಾಡಿ, ನಂತರ ಅದೇ ಪೂರ್ಣಗೊಳಿಸುವ ಹ್ಯಾಂಡ್ಲರ್‌ನಿಂದ ಸ್ಥಿತಿ ಮತ್ತು ಪ್ರೋಟೋಕಾಲ್ ಕಾನ್ಫಿಗರೇಶನ್ ಓದಿ. ನಂತರದ ಬದಲಾವಣೆಗಳನ್ನು ಪೋಲಿಂಗ್ ಬದಲು NEVPNStatusDidChange ಮೂಲಕ ಗಮನಿಸಿ, ಮತ್ತು On Demand ಪ್ರಾರಂಭಿಸಿದ ಸಂಪರ್ಕಗಳಿಗೂ ಅಧಿಸೂಚನೆ ಬರುತ್ತದೆ ಎಂಬುದನ್ನು ಗಮನಿಸಿ, ಅಲ್ಲಿ ಏನನ್ನಾದರೂ ಹಿಂತಿರುಗಿಸುವ ಆ್ಯಪ್ ಕರೆಯೇ ಇರುವುದಿಲ್ಲ. ಪ್ರೋಟೋಕಾಲ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೂ ಇದೇ ಅನ್ವಯಿಸುತ್ತದೆ: ಅವು ಲೋಡ್ ಮಾಡಿದ ಕಾನ್ಫಿಗರೇಶನ್‌ನಿಂದ ಓದಲ್ಪಡುತ್ತವೆ, ಆ್ಯಪ್ ರವಾನಿಸಿದ್ದರಿಂದ ಅಲ್ಲ.

ಟನೆಲ್ ಸ್ವತಃ Network Extension ಪೂರೈಕೆದಾರ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ವಾಸಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ಆ್ಯಪ್ ಸಂಪರ್ಕ ಕಳೆದುಕೊಳ್ಳದೆ ತನ್ನ ಸ್ಥಿತಿಯನ್ನು ಕಳೆದುಕೊಳ್ಳಬಹುದು. ಇಂಟರ್ಫೇಸ್ ತೋರಿಸುವ ಎಲ್ಲವನ್ನೂ ಮ್ಯಾನೇಜರ್‌ನಿಂದ ಮರುನಿರ್ಮಿಸಬೇಕು, ಕಳೆದ ಅವಧಿಯಿಂದ ನೆನಪಿಟ್ಟುಕೊಳ್ಳಬಾರದು.

ಪ್ರಾರಂಭದ ಕ್ರಮ: ಉಳಿಸಿ, ಲೋಡ್ ಮಾಡಿ, ನಂತರ ಪ್ರಾರಂಭಿಸಿ

ಪೂರೈಕೆದಾರ ಆಧಾರಿತ ಸಂಪರ್ಕಕ್ಕೆ ಕ್ರಮವಾಗಿ ಮೂರು ಹಂತಗಳು ಬೇಕು. ಪೂರೈಕೆದಾರ ಕಾನ್ಫಿಗರೇಶನ್ ಬರೆದು saveToPreferences ಕರೆಯಿರಿ, ಉಳಿಸಿದ ಕಾನ್ಫಿಗರೇಶನ್ ನಿಮ್ಮ ಕೈಯಲ್ಲಿರುವುದೇ ಆಗುವಂತೆ ಮ್ಯಾನೇಜರ್ ಲೋಡ್ ಮಾಡಿ, ನಂತರ NETunnelProviderSession.startVPNTunnel() ಮೂಲಕ ಪ್ರಾರಂಭಿಸಿ. ಉಳಿಸುವಿಕೆಯನ್ನು ಬಿಟ್ಟರೆ ಪ್ರಾರಂಭಕ್ಕೆ ಪ್ರಾರಂಭಿಸಲು ಏನೂ ಇಲ್ಲ; ಉಳಿಸುವ ಮೊದಲು ಲೋಡ್ ಮಾಡಿದರೆ ಮ್ಯಾನೇಜರ್ ಇನ್ನೂ ಹಳೆಯ ಕಾನ್ಫಿಗರೇಶನ್ ಪ್ರತಿಬಿಂಬಿಸುತ್ತದೆ.

startVPNTunnel ಹಿಂತಿರುಗಿಸುವ ಬೂಲಿಯನ್ ಕೇವಲ ವಿನಂತಿ ಸ್ವೀಕರಿಸಲ್ಪಟ್ಟಿದೆ ಎಂದು ಹೇಳುತ್ತದೆ. ಪೂರೈಕೆದಾರ ಮಟ್ಟದ ವೈಫಲ್ಯಗಳು ನಂತರ ಸಂಪರ್ಕ ಕಡಿತ ಸ್ಥಿತಿಗೆ ಬದಲಾವಣೆಯಾಗಿ ಬರುತ್ತವೆ, ಅದನ್ನು ನೀವು NEVPNStatusDidChange ಅಧಿಸೂಚನೆಯ ಮೂಲಕ ಗಮನಿಸುತ್ತೀರಿ, ಮತ್ತು ಅಧಿಸೂಚನೆ ಹ್ಯಾಂಡ್ಲರ್ loadFromPreferences ನಂತರ connection.status ಅನ್ನು ಮತ್ತೆ ಓದಬೇಕು ಏಕೆಂದರೆ ಕ್ಯಾಶ್ ಮಾಡಿದ ಮೌಲ್ಯ ಇನ್ನೂ ಹಳೆಯದಾಗಿರಬಹುದು. ವಿನಂತಿ ಮಟ್ಟದ ವೈಫಲ್ಯಗಳು ಕರೆಯ ಎಸೆಯುವ ರೂಪದಿಂದ ತಕ್ಷಣ ಹಿಂತಿರುಗುತ್ತವೆ, ಅಥವಾ startVPNTunnelAndReturnError: ನ ದೋಷ ಔಟ್-ಪ್ಯಾರಾಮೀಟರ್ ಮೂಲಕ. ಹಿಂತಿರುಗಿಸಿದ ಮೌಲ್ಯವನ್ನು ಫಲಿತಾಂಶವೆಂದು ಪರಿಗಣಿಸುವ ಕೋಡ್ ಎಂದಿಗೂ ಸ್ಥಾಪಿತವಾಗದ ಸಂಪರ್ಕವನ್ನು ವರದಿ ಮಾಡುತ್ತದೆ. ಇನ್ನೊಂದು ಮೌನ ವೈಫಲ್ಯ ಎಂದರೆ ಸ್ಥಾಪಿತ ವಿಸ್ತರಣೆಗೆ ಹೊಂದದ ಪೂರೈಕೆದಾರ ಬಂಡಲ್ ಗುರುತಿಸುವಿಕೆ: ವಿನಂತಿ ತಿರಸ್ಕರಿಸಲ್ಪಡುತ್ತದೆ, ಮತ್ತು ಸಂದೇಶದಲ್ಲಿ ಯಾವುದೂ ಗುರುತಿಸುವಿಕೆಯತ್ತ ಸೂಚಿಸುವುದಿಲ್ಲ. ಗುರುತಿಸುವಿಕೆ ತಪ್ಪಾಗಿದ್ದರೆ ವಿನಂತಿ ಸಾಮಾನ್ಯವಾಗಿ ತಕ್ಷಣ ವಿಫಲವಾಗುತ್ತದೆ, ಪೂರೈಕೆದಾರದ ಯಾವುದೇ ಲಾಗ್ ಸಾಲು ಬರುವ ಮೊದಲೇ.

ಪ್ರಾರಂಭದ ನಂತರ ಆದ್ಯತೆಗಳನ್ನು ಮತ್ತೆ ಲೋಡ್ ಮಾಡುವುದೇ ಸ್ಥಿತಿ ಪರದೆಗಳನ್ನು ಸರಿಯಾಗಿಸುತ್ತದೆ. ಸಿಸ್ಟಮ್ ಕಾನ್ಫಿಗರೇಶನ್ ಬದಲಿಸಿದಾಗ ಮ್ಯಾನೇಜರ್ ನಿಮಗೆ ಹೊಸ ಕಾನ್ಫಿಗರೇಶನ್ ತಳ್ಳುವುದಿಲ್ಲ.

ನಂಬಿಕೆ ಸಾಮಗ್ರಿ ಪ್ರೊಫೈಲ್ ಮೂಲಕ ಬರುತ್ತದೆ, ಎಂದಿಗೂ ಆ್ಯಪ್ ಕೋಡ್‌ನಿಂದ ಅಲ್ಲ

iOS ನಂಬಿಕೆ ಸಂಗ್ರಹಕ್ಕೆ ಮೂಲ ಪ್ರಮಾಣಪತ್ರ ಸೇರಿಸಲು ಆ್ಯಪ್‌ಗೆ ಯಾವುದೇ ಬೆಂಬಲಿತ ಮಾರ್ಗವಿಲ್ಲ, ಆದ್ದರಿಂದ Personal VPN ಕಾನ್ಫಿಗರೇಶನ್ ಸಾಧನ ಈಗಾಗಲೇ ನಂಬುವ ಸಾಮಗ್ರಿಯನ್ನು ಮಾತ್ರ ಉಲ್ಲೇಖಿಸಬಹುದು: ಸ್ಥಾಪಿತ ಪ್ರೊಫೈಲ್, ಸಾಧನ ನಿರ್ವಹಣೆ ಅಥವಾ ಸಿಸ್ಟಮ್ ಬೇರೆ ಕಾರಣಗಳಿಗಾಗಿ ನಂಬುವ CA ಸ್ಥಾಪಿಸಿದ ಸರಪಳಿ. ಮೊದಲ ಪ್ರಾರಂಭದಲ್ಲಿ ತನ್ನದೇ CA ರಚಿಸಿ ಸಿಸ್ಟಮ್ ಅದನ್ನು ಗೌರವಿಸುತ್ತದೆ ಎಂದು ನಿರೀಕ್ಷಿಸುವ ಆ್ಯಪ್ ಪೂರೈಕೆದಾರನ ಒಳಗಿನ ಮಾನ್ಯತೆಯಲ್ಲಿ ವಿಫಲವಾಗುತ್ತದೆ, ಅಲ್ಲಿ ಆ್ಯಪ್‌ನ ಇಂಟರ್ಫೇಸ್ ಕಾರಣವನ್ನು ನೋಡಲಾರದು.

ಆ ಗಡಿಯನ್ನು ಅದು ಇರುವಂತೆಯೇ ವಿನ್ಯಾಸ ನಿರ್ಬಂಧವೆಂದು ಪರಿಗಣಿಸಿ ಮತ್ತು ನೋಂದಣಿ ಪ್ರೊಫೈಲ್ ಜೊತೆಗೆ ನಂಬಿಕೆ ಆಧಾರವನ್ನು ಕಳುಹಿಸಿ. VPN ದೃಢೀಕರಣವನ್ನು ನಂಬಿಕೆ ನಿರ್ಧಾರದಿಂದ ಪ್ರತ್ಯೇಕವಾಗಿ ಇರಿಸಿ, ಏಕೆಂದರೆ ಅವು ಬೇರೆ ಬೇರೆ ಸ್ಥಳಗಳಲ್ಲಿ ವಿಫಲವಾಗುತ್ತವೆ ಮತ್ತು ಬೇರೆ ಬೇರೆ ಜನರು ಅವುಗಳನ್ನು ಡೀಬಗ್ ಮಾಡುತ್ತಾರೆ.

ಕೌಂಟರ್‌ಗಳು ಇಂಟರ್ಫೇಸ್‌ನಿಂದ ಬರುತ್ತವೆ, VPN API ಯಿಂದ ಅಲ್ಲ

ಮ್ಯಾನೇಜರ್ ಸ್ಥಿತಿ ಮತ್ತು ಕಾನ್ಫಿಗರೇಶನ್ ಬಹಿರಂಗಪಡಿಸುತ್ತದೆ, ಮತ್ತು ಪ್ರತಿ ಟನೆಲ್‌ಗೆ ಬೈಟ್‌ಗಳನ್ನು ಎಣಿಸುವ ಯಾವುದನ್ನೂ ಅಲ್ಲ. ನಿಮಗೆ ಬಳಕೆಯ ಸಂಖ್ಯೆಗಳು ಬೇಕಾದರೆ getifaddrs() ಕರೆಯಿರಿ ಮತ್ತು ಸಂಬಂಧಿತ ಇಂಟರ್ಫೇಸ್‌ಗಾಗಿ if_data ಓದಿ: Wi-Fi ಗಾಗಿ en0, ಸೆಲ್ಯುಲರ್‌ಗಾಗಿ pdp_ip ಇಂಟರ್ಫೇಸ್‌ಗಳು, ಮತ್ತು ಟನೆಲ್‌ಗಾಗಿಯೇ utun ಸಾಧನ. utun ಕೌಂಟರ್‌ಗಳು ಒಳಗಿನ ಟ್ರಾಫಿಕ್ ವಿವರಿಸುತ್ತವೆ ಮತ್ತು ಪ್ರೋಟೋಕಾಲ್ ಓವರ್‌ಹೆಡ್ ಒಳಗೊಂಡಿವೆ.

ಈ ಸಂಖ್ಯೆಗಳು ಅಂದಾಜುಗಳು, ಪ್ರತಿ ಆ್ಯಪ್ ಲೆಕ್ಕವಲ್ಲ, ಮತ್ತು ಇಂಟರ್ಫೇಸ್ ಮತ್ತೆ ರಚಿಸಲ್ಪಟ್ಟಾಗ ಅವು ಮರುಹೊಂದಿಸುತ್ತವೆ. ಇಂಟರ್ಫೇಸ್‌ನಲ್ಲಿ ಅವುಗಳನ್ನು ಹಾಗೆಯೇ ಲೇಬಲ್ ಮಾಡಿ, ಇಲ್ಲದಿದ್ದರೆ ಯಾರಾದರೂ ಅವುಗಳನ್ನು ಗ್ರಾಹಕರಿಗೆ ಬಿಲ್ ಮಾಡಲು ಬಳಸುತ್ತಾರೆ. ನಿಮಗೆ ಪ್ರತಿ ಆ್ಯಪ್ ಸಂಖ್ಯೆಗಳು ಬೇಕಾದರೆ ಸಂಪೂರ್ಣ ಬೇರೆಯದೇ ವ್ಯವಸ್ಥೆ ಬೇಕು, ಈ ಕ್ಷೇತ್ರಗಳ ಉತ್ತಮ ಓದಲ್ಲ.

ಸ್ವಚ್ಛಗೊಳಿಸುವಿಕೆ stopVPNTunnel ನಲ್ಲಿದೆ, ಅಂತ್ಯದಲ್ಲಲ್ಲ

applicationWillTerminate ಸಿಸ್ಟಮ್ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಕೊಲ್ಲುವ ಮೊದಲು ನಿಮಗೆ ಕೆಲವು ಸೆಕೆಂಡುಗಳನ್ನು ನೀಡುತ್ತದೆ, ಅದು ಸಂಪರ್ಕವನ್ನು ಒಡೆಯಲು ವಿಶ್ವಾಸಾರ್ಹ ಸ್ಥಳವಲ್ಲ. ನಿಲ್ಲಿಸುವಿಕೆಯನ್ನು stopVPNTunnel() ಗೆ ಕಳುಹಿಸಿ ಅಥವಾ ಪೂರೈಕೆದಾರನ ನಿಲ್ಲಿಸುವ ಕಾಲ್‌ಬ್ಯಾಕ್‌ನಲ್ಲಿ ನಿರ್ವಹಿಸಿ, ಮತ್ತು ನೀವು ಪ್ರಾರಂಭಿಸಿದ ಮ್ಯಾನೇಜರ್ ಅಥವಾ ಕಾನ್ಫಿಗರೇಶನ್ ಗುರುತಿಸುವಿಕೆಯನ್ನು ಇಟ್ಟುಕೊಳ್ಳಿ, ಇದರಿಂದ ನಿಲ್ಲಿಸುವಿಕೆ ಸಾಧನದ ಪ್ರತಿ ಕಾನ್ಫಿಗರೇಶನ್ ಬದಲು ಆ ಸಂಪರ್ಕವನ್ನೇ ಗುರಿಯಾಗಿಸುತ್ತದೆ.

ಆ ಗುರುತಿಸುವಿಕೆಯನ್ನು ಅದು ಸೇರಿದ ಪ್ರೊಫೈಲ್‌ನ ಪಕ್ಕದಲ್ಲಿ ಸಂಗ್ರಹಿಸಿ, ಏಕೆಂದರೆ ಮ್ಯಾನೇಜರ್ ವಸ್ತು ಬಳಕೆದಾರರು ಯಾವ ಕಾನ್ಫಿಗರೇಶನ್ ಆಯ್ಕೆ ಮಾಡಿದರು ಎಂದು ದಾಖಲಿಸುವುದಿಲ್ಲ. ಮತ್ತು On Demand ಎತ್ತುವ ಸಂಪರ್ಕದ ಹಿಂದೆ ಯಾವುದೇ ಆ್ಯಪ್ ಕರೆಯೇ ಇಲ್ಲ ಎಂದು ನೆನಪಿಡಿ, ಆದ್ದರಿಂದ ಸ್ಥಿತಿ ಪರದೆ ಏನನ್ನಾದರೂ ಬಿಡಿಸುವ ಮೊದಲು ಇನ್ನೂ ಆದ್ಯತೆಗಳನ್ನು ಲೋಡ್ ಮಾಡಬೇಕು.

ಸಂಬಂಧಿತ ಲೇಖನಗಳು