Skip to content

Commit

Permalink
Set libsignal network proxy to match java proxy
Browse files Browse the repository at this point in the history
Fixes #1523
  • Loading branch information
AsamK committed Feb 7, 2025
1 parent 8aa71c1 commit 3cd07ae
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@

import org.asamk.signal.manager.config.ServiceConfig;
import org.asamk.signal.manager.config.ServiceEnvironmentConfig;
import org.asamk.signal.manager.util.Utils;
import org.signal.libsignal.metadata.certificate.CertificateValidator;
import org.signal.libsignal.net.Network;
import org.signal.libsignal.zkgroup.profiles.ClientZkProfileOperations;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.whispersystems.signalservice.api.SignalServiceAccountManager;
import org.whispersystems.signalservice.api.SignalServiceDataStore;
import org.whispersystems.signalservice.api.SignalServiceMessageReceiver;
Expand All @@ -31,13 +34,18 @@
import org.whispersystems.signalservice.internal.websocket.OkHttpWebSocketConnection;
import org.whispersystems.signalservice.internal.websocket.WebSocketConnection;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.ExecutorService;
import java.util.function.Supplier;

public class SignalDependencies {

private static final Logger logger = LoggerFactory.getLogger(SignalDependencies.class);

private final Object LOCK = new Object();

private final ServiceEnvironmentConfig serviceEnvironmentConfig;
Expand Down Expand Up @@ -129,8 +137,34 @@ public ProvisioningSocket getProvisioningSocket() {
}

public Network getLibSignalNetwork() {
return getOrCreate(() -> libSignalNetwork,
() -> libSignalNetwork = new Network(serviceEnvironmentConfig.netEnvironment(), userAgent));
return getOrCreate(() -> libSignalNetwork, () -> {
libSignalNetwork = new Network(serviceEnvironmentConfig.netEnvironment(), userAgent);
setSignalNetworkProxy(libSignalNetwork);
});
}

private void setSignalNetworkProxy(Network libSignalNetwork) {
final var proxy = Utils.getHttpsProxy();
if (proxy.address() instanceof InetSocketAddress addr) {
switch (proxy.type()) {
case Proxy.Type.DIRECT -> {
}
case Proxy.Type.HTTP -> {
try {
libSignalNetwork.setProxy("http", addr.getHostName(), addr.getPort(), null, null);
} catch (IOException e) {
logger.warn("Failed to set http proxy", e);
}
}
case Proxy.Type.SOCKS -> {
try {
libSignalNetwork.setProxy("socks", addr.getHostName(), addr.getPort(), null, null);
} catch (IOException e) {
logger.warn("Failed to set socks proxy", e);
}
}
}
}
}

public SignalServiceAccountManager getAccountManager() {
Expand Down
19 changes: 19 additions & 0 deletions lib/src/main/java/org/asamk/signal/manager/util/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
Expand Down Expand Up @@ -202,4 +206,19 @@ public static <T> T firstNonNull(T... values) {
public static String nullIfEmpty(String string) {
return string == null || string.isEmpty() ? null : string;
}

public static Proxy getHttpsProxy() {
final URI uri;
try {
uri = new URI("https://example");
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
final var proxies = ProxySelector.getDefault().select(uri);
if (proxies.isEmpty()) {
return Proxy.NO_PROXY;
} else {
return proxies.getFirst();
}
}
}

0 comments on commit 3cd07ae

Please sign in to comment.