diff options
author | Mikael Magnusson <mikma@users.sourceforge.net> | 2023-03-26 23:49:06 +0200 |
---|---|---|
committer | Mikael Magnusson <mikma@users.sourceforge.net> | 2023-04-28 23:10:17 +0200 |
commit | 73913f449437d7c5aab8b47650835af10fcee882 (patch) | |
tree | a59eb00fc2b3e9bcc08979968891cb85efdf5d96 /tunnel | |
parent | 4182067e6e429c00220e4776ef3bd82fa005b829 (diff) |
tunnel: use UdsChannelBuilder impl from grpc-android
Replace local unix domain socket implementation with UdsChannelBuilder
from grpc-android version 1.55.0-SNAPSHOT in maven local repository.
Diffstat (limited to 'tunnel')
4 files changed, 4 insertions, 390 deletions
diff --git a/tunnel/build.gradle b/tunnel/build.gradle index bb53f2e9..0c78b6ba 100644 --- a/tunnel/build.gradle +++ b/tunnel/build.gradle @@ -72,6 +72,7 @@ android { dependencies { implementation "androidx.annotation:annotation:$annotationsVersion" implementation "androidx.collection:collection:$collectionVersion" + implementation "io.grpc:grpc-android:$grpcVersion" implementation "io.grpc:grpc-okhttp:$grpcVersion" implementation "io.grpc:grpc-protobuf-lite:$grpcVersion" implementation "io.grpc:grpc-stub:$grpcVersion" @@ -87,7 +88,7 @@ protobuf { } plugins { grpc { - artifact = "io.grpc:protoc-gen-grpc-java:$grpcVersion" + artifact = "io.grpc:protoc-gen-grpc-java:$protocGenGrpcVersion" } } generateProtoTasks { diff --git a/tunnel/src/main/java/com/wireguard/android/backend/GoBackend.java b/tunnel/src/main/java/com/wireguard/android/backend/GoBackend.java index 0ec2dbf5..98ce8d7d 100644 --- a/tunnel/src/main/java/com/wireguard/android/backend/GoBackend.java +++ b/tunnel/src/main/java/com/wireguard/android/backend/GoBackend.java @@ -34,6 +34,7 @@ import com.wireguard.util.NonNullForAll; import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; +import io.grpc.android.UdsChannelBuilder; import io.grpc.okhttp.OkHttpChannelBuilder; import java.io.File; @@ -81,11 +82,7 @@ public final class GoBackend implements Backend { File socketFile = new File(context.getCacheDir(), "libwg.sock"); String socketName = socketFile.getAbsolutePath(); Log.i(TAG, "wgStartGrpc: " + wgStartGrpc(socketName)); - ManagedChannelBuilder<?> channelBuilder = ManagedChannelBuilder.forAddress("localhost", 10000).usePlaintext(); - LocalSocketAddress address = new LocalSocketAddress(socketName, LocalSocketAddress.Namespace.FILESYSTEM); - SocketFactory socketFactory = new UnixDomainSocketFactory(address); - ((OkHttpChannelBuilder) channelBuilder).socketFactory(socketFactory); - channel = channelBuilder.build(); + channel = UdsChannelBuilder.forPath(socketName, LocalSocketAddress.Namespace.FILESYSTEM).build(); } /** diff --git a/tunnel/src/main/java/com/wireguard/android/backend/LocalSocketAdapter.java b/tunnel/src/main/java/com/wireguard/android/backend/LocalSocketAdapter.java deleted file mode 100644 index bf027ae1..00000000 --- a/tunnel/src/main/java/com/wireguard/android/backend/LocalSocketAdapter.java +++ /dev/null @@ -1,325 +0,0 @@ -/* - */ -package com.wireguard.android.backend; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.Socket; -import java.net.SocketAddress; -import java.net.SocketException; -import java.net.SocketImplFactory; -import java.net.SocketOptions; -import java.nio.channels.SocketChannel; -import java.util.Vector; -import android.net.LocalSocket; -import android.net.LocalSocketAddress; -import android.util.Log; - -/** - * Adaptor allows using a LocalSocket as a Socket. - */ -final class LocalSocketAdapter extends Socket { - private final LocalSocketAddress address; - private final LocalSocket unix; - private final SocketAddress localAddress; - private InetSocketAddress inetSocketAddress; - private InputStream is; - private OutputStream os; - - LocalSocketAdapter(LocalSocketAddress address) { - this.address = address; - this.localAddress = new InetSocketAddress(0); - unix = new LocalSocket(); - } - - LocalSocketAdapter(LocalSocketAddress address, InetSocketAddress inetAddress) { - this(address); - this.inetSocketAddress = inetAddress; - } - - private void throwUnsupportedOperationException() { - Log.i("helloworld", "Unsupported: " + Log.getStackTraceString(new Exception())); - throw new UnsupportedOperationException(); - } - - @Override - public void bind (SocketAddress bindpoint) { - throwUnsupportedOperationException(); - } - - @Override - public void close() throws IOException { - unix.close(); - } - - @Override public void connect(SocketAddress endpoint) throws IOException { - this.inetSocketAddress = (InetSocketAddress) endpoint; - try { - unix.connect(address); - } catch (IOException e) { - Log.i("helloworld", "Error: " + e.toString()); - throw e; - } - } - - @Override - public void connect(SocketAddress endpoint, int timeout) throws IOException { - this.inetSocketAddress = (InetSocketAddress) endpoint; - unix.connect(address, timeout); - } - - @Override - public SocketChannel getChannel() { - throwUnsupportedOperationException(); - return null; - } - - @Override public InetAddress getInetAddress() { - return inetSocketAddress.getAddress(); - } - - @Override - public InputStream getInputStream() throws IOException { - is = unix.getInputStream(); - return is; - } - - @Override - public boolean getKeepAlive() { - throwUnsupportedOperationException(); - return false; - } - - @Override - public InetAddress getLocalAddress() { - throwUnsupportedOperationException(); - return null; - } - - @Override - public int getLocalPort() { - throwUnsupportedOperationException(); - return 0; - } - - @Override - public SocketAddress getLocalSocketAddress() { - //throwUnsupportedOperationException(); - return localAddress; - } - - @Override - public boolean getOOBInline() { - throwUnsupportedOperationException(); - return false; - } - - @Override - public OutputStream getOutputStream() throws IOException { - if (os != null) - return os; - - OutputStream unixOs = unix.getOutputStream(); - os = new OutputStream() { - @Override - public void close() throws IOException { - // LocalSocket's default implementation closes the socket, - // which leaves readers of thes InputStream hanging. - // Instead shutdown input (and output) to release readers. - LocalSocketAdapter.this.shutdownInput(); - LocalSocketAdapter.this.shutdownOutput(); - } - - @Override - public void write (byte[] b) throws IOException { - unixOs.write(b); - } - - @Override - public void write (byte[] b, int off, int len) throws IOException { - unixOs.write(b, off, len); - } - - @Override - public void write (int b) throws IOException { - unixOs.write(b); - } - }; - return os; - } - - @Override - public int getPort() { - return inetSocketAddress.getPort(); - } - - @Override - public int getReceiveBufferSize() throws SocketException { - try { - return unix.getReceiveBufferSize(); - } catch (IOException e) { - throw new SocketException(e.getMessage()); - } - } - - @Override - public SocketAddress getRemoteSocketAddress() { - return inetSocketAddress; - } - - @Override - public boolean getReuseAddress() { - throwUnsupportedOperationException(); - return false; - } - - @Override - public int getSendBufferSize() throws SocketException { - try { - return unix.getSendBufferSize(); - } catch (IOException e) { - throw new SocketException(e.getMessage()); - } - } - - @Override - public int getSoLinger() { - throwUnsupportedOperationException(); - return 0; - } - - @Override - public int getSoTimeout() throws SocketException { - try { - return unix.getSoTimeout(); - } catch (IOException e) { - throw new SocketException(e.getMessage()); - } - } - - @Override - public boolean getTcpNoDelay() { - throwUnsupportedOperationException(); - return false; - } - - @Override - public int getTrafficClass() { - throwUnsupportedOperationException(); - return 0; - } - - @Override - public boolean isBound() { - return unix.isBound(); - } - - @Override - public boolean isClosed() { - return unix.isClosed(); - } - - @Override - public boolean isConnected() { - return unix.isConnected(); - } - - @Override - public boolean isInputShutdown() { - return unix.isInputShutdown(); - } - - @Override - public boolean isOutputShutdown() { - return unix.isOutputShutdown(); - } - - @Override - public void sendUrgentData (int data) { - throwUnsupportedOperationException(); - } - - @Override - public void setKeepAlive (boolean on) { - throwUnsupportedOperationException(); - } - - @Override - public void setOOBInline (boolean on) { - throwUnsupportedOperationException(); - } - - @Override - public void setPerformancePreferences (int connectionTime, - int latency, - int bandwidth) { - throwUnsupportedOperationException(); - } - - @Override - public void setReceiveBufferSize(int size) throws SocketException { - try { - unix.setReceiveBufferSize(size); - } catch (IOException e) { - throw new SocketException(e.getMessage()); - } - } - - @Override - public void setReuseAddress (boolean on) { - throwUnsupportedOperationException(); - } - - @Override - public void setSendBufferSize(int size) throws SocketException { - try { - unix.setSendBufferSize(size); - } catch (IOException e) { - throw new SocketException(e.getMessage()); - } - } - - @Override - public void setSoLinger (boolean on, - int linger) { - throwUnsupportedOperationException(); - } - - @Override - public void setSoTimeout(int timeout) throws SocketException { - try { - unix.setSoTimeout(timeout); - } catch (IOException e) { - throw new SocketException(e.getMessage()); - } - } - - @Override - public void setTcpNoDelay (boolean on) { - // Not relevant for local sockets. - } - - @Override - public void setTrafficClass (int tc) { - throwUnsupportedOperationException(); - } - - @Override - public void shutdownInput() throws IOException { - unix.shutdownInput(); - } - - @Override - public void shutdownOutput() throws IOException { - unix.shutdownOutput(); - } - - @Override - public String toString() { - return unix.toString(); - } -} diff --git a/tunnel/src/main/java/com/wireguard/android/backend/UnixDomainSocketFactory.java b/tunnel/src/main/java/com/wireguard/android/backend/UnixDomainSocketFactory.java deleted file mode 100644 index 427a19f1..00000000 --- a/tunnel/src/main/java/com/wireguard/android/backend/UnixDomainSocketFactory.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2018 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.wireguard.android.backend; - -import java.io.File; -import java.io.IOException; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.Socket; -import javax.net.SocketFactory; -import android.net.LocalSocketAddress; - -/** Impersonate TCP-style SocketFactory over UNIX domain sockets. */ -public final class UnixDomainSocketFactory extends SocketFactory { - private final LocalSocketAddress address; - - public UnixDomainSocketFactory(LocalSocketAddress address) { - this.address = address; - } - - @Override public Socket createSocket() throws IOException { - return new LocalSocketAdapter(address); - } - - @Override public Socket createSocket(String host, int port) throws IOException { - Socket result = createSocket(); - result.connect(new InetSocketAddress(host, port)); - return result; - } - - @Override public Socket createSocket( - String host, int port, InetAddress localHost, int localPort) throws IOException { - return createSocket(host, port); - } - - @Override public Socket createSocket(InetAddress host, int port) throws IOException { - Socket result = createSocket(); - result.connect(new InetSocketAddress(host, port)); - return result; - } - - @Override public Socket createSocket( - InetAddress host, int port, InetAddress localAddress, int localPort) throws IOException { - return createSocket(host, port); - } -} |