Commit Graph

99 Commits

Author SHA1 Message Date
Jason A. Donenfeld 5716e3fb50 ringlogger: support mpsc for singlefile 2019-03-17 08:51:27 +01:00
Jason A. Donenfeld 6134817b23 Global: fix swiftlint issues 2019-02-08 17:07:28 +01:00
Jason A. Donenfeld 657915e931 Info.plist: Add missing key types
I worry that LSMinimumSystemVersion in the extension's plist might be
problematic, since that same plist runs on macOS and iOS. We _might_
need to bifurcate.
2019-02-08 03:47:36 +01:00
Jason A. Donenfeld 7ebf36d0f4 Key: Use C implementation instead
Swift compiles so slowly and it's unclear all of the insane type punning
was even correct.
2019-02-08 03:23:15 +01:00
Jason A. Donenfeld e2c717212b Key: Constant time encoding 2019-02-08 03:23:15 +01:00
Jason A. Donenfeld 2d761b4a00 PacketTunnelProvider: proper fix for 32073323 2019-02-07 15:01:37 +01:00
Jason A. Donenfeld 0407d41005 Keychain: store configurations in keychain instead of providerConfig 2019-02-06 06:20:23 +01:00
Jason A. Donenfeld fef3e80472 Tunnel: support getting runtime configuration 2019-01-24 01:37:57 +01:00
Jason A. Donenfeld d3db8519b0 macOS: remove mobile network tweeks 2019-01-22 13:11:28 +01:00
Roopesh Chander ca827d2d10 Better os() directives 2019-01-22 04:06:37 +05:30
Roopesh Chander 670673cccc macOS: Use tunnelOverheadBytes for automatic MTU in macOS 2019-01-16 01:51:56 +05:30
Roopesh Chander 1e543f7f8c macOS: NE: Add entitlements for making network connections 2019-01-14 14:52:28 +05:30
Roopesh Chander c41be2a29d Make app groups work on both iOS and macOS 2019-01-14 14:52:28 +05:30
Roopesh Chander 2632ead1bf iOS: Fix WireGuardNetworkExtensioniOS target
- Rename WireGuardNetworkExtension.entitlements to WireGuardNetworkExtension_iOS.entitlements
2019-01-14 14:52:28 +05:30
Roopesh Chander 966883ea05 macOS: Fix WireGuardNetworkExtensionmacOS target
- Build using common network extension code
- Add run scripts
- Set Info.plist to common network extension's Info.plist
- Move entitlements to common network extension folder
- Remove Xcode-generated macOS network extension code
- Set Swift-Obj-C bridging header
2019-01-14 14:52:27 +05:30
Roopesh Chander 8715b66caa xcconfig: Make app id platform-specific 2019-01-14 14:52:26 +05:30
Jason A. Donenfeld a266171157 PacketTunnelSettingsGenerator: use 127.0.0.1 as dummy address
It turns out that using 0.0.0.0 somehow conflicts with DNS lookups when
CLAT is in use.
2019-01-08 01:51:12 +01:00
Jason A. Donenfeld 83cc642b34 Avoid dynamic MTU calculations for now 2019-01-07 19:23:39 -05:00
Jason A. Donenfeld 7bf3d7b09d Update copyright 2019-01-07 19:23:39 -05:00
Jason A. Donenfeld 013d603109 Rework DNS and routes in network extension
The DNS resolver prior had useless comments, awful nesting, converted
bytes into strings and back into bytes, and generally made no sense.
That's been rewritten now.

But more fundumentally, this commit made the DNS resolver actually
accomplish its objective, by passing AI_ALL to it. It turns out, though,
that the Go library isn't actually using GAI in the way we need for
parsing IP addresses, so we actually need to do another round, this time
with hints flag as zero, so that we get the DNS64 address.

Additionally, since we're now binding sockets to interfaces, we can
entirely remove the excludedRoutes logic.
2018-12-28 19:38:03 +01:00
Jason A. Donenfeld 0cc55db4cb NetworkExtension: rescope socket instead of tearing down socket 2018-12-26 01:17:55 +01:00
Jason A. Donenfeld b68b3785be Rely on availability of fd only after setting network settings 2018-12-22 18:29:54 +01:00
Jason A. Donenfeld a60b2a37d0 Retain aggressive socket reestablishment for now
This can be reverted once we've done more testing.
2018-12-22 15:45:09 +01:00
Eric Kuck 8fb8d9a9d2 All models now Equatable 2018-12-21 22:57:17 -06:00
Jason A. Donenfeld 27cd93a898 Do not crash if we can't get socket.fileDescriptor 2018-12-22 05:13:04 +01:00
Eric Kuck 3269c54718 Removing a tunnel from iOS's settings is now immediately reflected in app 2018-12-21 21:59:43 -06:00
Jason A. Donenfeld 0b2d91a7f4 Localize remaining strings in network extension 2018-12-22 03:42:01 +01:00
Jason A. Donenfeld d0cc2a8afd Combine double log invocations 2018-12-22 02:21:07 +01:00
Jason A. Donenfeld e1c3d9b57a Move name from interface to tunnel 2018-12-22 00:28:18 +01:00
Jason A. Donenfeld 775e174967 Nuke trailing spaces 2018-12-21 23:34:56 +01:00
Eric Kuck c62c56da13 providerConfiguration is now a WgQuickConfig 2018-12-21 16:32:08 -06:00
Jason A. Donenfeld 137d453c0d Do not require NetworkExtension to know its own name 2018-12-21 22:05:47 +01:00
Jason A. Donenfeld df698658d2 Get rid of superflous isActivateOnDemandEnabled key 2018-12-21 18:50:32 +01:00
Eric Kuck f39893685f Updated NETunnelProvider save format 2018-12-21 16:42:16 +01:00
Jason A. Donenfeld cab80f8fc0 NE: simplify logic 2018-12-21 15:56:03 +01:00
Roopesh Chander b02754a7bd NE: Simplify DNS resolution 2018-12-21 19:24:22 +05:30
Roopesh Chander 939e96e5c1 NE: Update listen port only when first interface changes
When handling network path changes, change the listen port
only when the first interface has changed.
2018-12-21 17:32:44 +05:30
Roopesh Chander 115e057d96 NE: Change handling of bad domain names and Activate On Demand
The solution implemented in commit b8c331c causes the tunnel to
remain in 'Activating' state, without the ability to cancel that.

So, in this commit, instead of retrying DNS silently on
Activated-On-Demand tunnels, we fail the startTunnel() silently.

To summarize, if activate-on-demand is on:
  - If started from the WireGuard app, show error using lastErrorFile
    mechanism, suggesting a way to turn off Activate On Demand
  - If not started from WireGuard app, don't call displayMessage()
    (don't show error to user) and silently fail starting the tunnel
2018-12-21 15:52:47 +05:30
Eric Kuck 9c7f27f19f Enabled more swiftlint rules 2018-12-20 11:22:37 -06:00
Roopesh Chander d36b764e20 NE: Log whether tunnel was activated from the app or not 2018-12-19 18:35:53 +05:30
Roopesh Chander 8f46713b0d Remove non-helpful comments 2018-12-19 18:35:53 +05:30
Roopesh Chander b8c331c72d NE: Handle bad domain names and Activate On Demand
This combination causes iOS to keep trying to bring up the tunnel,
leading to a lot of displayMessage() alerts.

In this fix, if we get a DNS resolution error in an Activate On Demand
enabled tunnel, we silently retry 9 times (with a 4-second delay before
each retry) and then show the displayMessage() alert.
2018-12-19 15:38:00 +05:30
Roopesh Chander 82ca9f7c5a NE: No need for two startTunnel() methods 2018-12-19 13:10:42 +05:30
Eric Kuck d1825d6b6c Got TunnelsManager back under the max file length by splitting out NEVPNStatus+CustomStringConvertible 2018-12-16 23:51:25 -06:00
Eric Kuck b06a43e2a2 Most similar views now shared between ViewControllers 2018-12-14 17:15:22 -06:00
Jason A. Donenfeld 33d88529c6 Simplify logging tags
This was roop's initial idea, and it turns out to be the better one, now
that we can pass cstrings more easily.
2018-12-14 22:53:42 +01:00
Roopesh Chander e6c1e46b1d NE: Communicate last error to app through a shared file 2018-12-14 02:24:53 +05:30
Jason A. Donenfeld b40bbd1cdc Localize swiftlint 2018-12-13 20:06:37 +01:00
Eric Kuck a8cbe0d683 Reorganized ViewControllers (split out UIViews and UITableViewCells into their own classes)
All swiftlint warnings except one fixed up
2018-12-13 12:58:50 -06:00
Jason A. Donenfeld a5aaec673a Avoid escaping heap allocation 2018-12-13 19:43:12 +01:00