<html><head><style>body{font-family:Helvetica,Arial;font-size:13px}</style></head><body style="word-wrap:break-word"><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto">Excellent. I unfortunately haven’t done any C programming for almost a decade and have never done any kind of kernel development, so I’m not going to be any help adding this functionality to the wg-quick implementation. If I were to do the work I initially proposed (new fragment + GoBackend implementation), would this be enough to get merged? If so, would it be better if I simply disabled the new fragment for custom kernel users or if I left a placeholder assuming someone else can add the missing implementation?</div> <br> <div id="bloop_sign_1530577058338650880" class="bloop_sign"></div> <br><p class="airmail_on">On July 2, 2018 at 4:43:53 PM, Samuel Holland (<a href="mailto:samuel@sholland.org">samuel@sholland.org</a>) wrote:</p> <blockquote type="cite" class="clean_bq"><span><div><div></div><div>Hello Eric,
<br>
<br>On 07/02/18 15:35, Eric Kuck wrote:
<br>> I’d like to make a contribution to the Android app, but would like to know if
<br>> this is something that would actually get merged before I go through all the
<br>> effort. What I’d like to do is add an exceptions list (apps that will not be
<br>> routed through the Wireguard interface). The rationale for this being that  
<br>> some apps simply don’t work with Wireguard. For example, the use of a  
<br>> Wireguard VPN with custom DNS breaks WearOS watches due to Google hardcoding  
<br>> the use of the 8.8.8.8 DNS server. Another example is that Netflix doesn’t  
<br>> work when routed through my VPN server since they know it’s a DigitalOcean  
<br>> instance, but works fine without the VPN enabled. Another example is that  
<br>> there’s often no reason to route data-heavy video apps through your VPN  
<br>> server. Rather than turning the VPN on my phone off to use my wearable or to  
<br>> watch something on my phone, I’d like to be able to opt those apps out of  
<br>> using the VPN at all. I’m sure there are many more examples of apps that  
<br>> simply don’t need to go through a VPN, as no confidential information is  
<br>> passed through them.
<br>
<br>This sounds like a generally useful feature.
<br>
<br>> My proposal is to add another Fragment that’s just a list of all apps  
<br>> installed on the phone with check boxes next to them. If the checkbox is  
<br>> checked, that app will be routed through Wireguard. If not, it will be free  
<br>> to bypass the VPN. Naturally, all apps will be default to being checked.
<br>
<br>If you base the UI on DialogPreference or MultiSelectListPreference, Android
<br>will take care of persisting the setting for you, and it would be easy to add to
<br>the settings page.
<br>
<br>> This is an easy change to make for the GoBackend implementation using  
<br>> VpnService.Builder.addDisallowedApplication(<packageName>), but would likely  
<br>> be pretty complicated to add to WgQuickBackend. Perhaps this is something  
<br>> that would only be possible for GoBackend users.
<br>
<br>For WgQuickBackend, we'd need to modify the set_users function[1] in the
<br>wg-quick "script" to take a dynamic list of user IDs instead of hard coding it.
<br>PackageManager should provide us the UIDs of other applications. I'm not sure
<br>the best way to communicate the ID list from the app to the script. Jason, thoughts?
<br>
<br>> Any thoughts on this? I have everything working locally by simply adding  
<br>> these two hardcoded lines to GoBackend.java:
<br>>  
<br>> builder.addDisallowedApplication("com.netflix.mediaclient");  
<br>> builder.addDisallowedApplication("com.google.android.wearable.app”);
<br>>  
<br>> but I would like to make this more configurable and available to the rest of
<br>>  Wireguard users if you’re agreeable to it. Thanks.
<br>
<br>Thank you,
<br>Samuel
<br>
<br>[1]:
<br><a href="https://git.zx2c4.com/WireGuard/tree/src/tools/wg-quick/android.c?id=dfd9827d5b08c506522bb3762cd3b0dbac640bbc#n291">https://git.zx2c4.com/WireGuard/tree/src/tools/wg-quick/android.c?id=dfd9827d5b08c506522bb3762cd3b0dbac640bbc#n291</a>
<br></div></div></span></blockquote></body></html>