mirror of
https://github.com/oxen-io/session-android.git
synced 2024-12-25 01:07:47 +00:00
Improved address resolution for ContentProxySelector.
We can use an unresolved address to avoid all the threading stuff in that class.
This commit is contained in:
parent
b2d4608cdb
commit
276e867f9a
@ -24,36 +24,23 @@ public class ContentProxySelector extends ProxySelector {
|
|||||||
|
|
||||||
private static final String TAG = ContentProxySelector.class.getSimpleName();
|
private static final String TAG = ContentProxySelector.class.getSimpleName();
|
||||||
|
|
||||||
public static final Set<String> WHITELISTED_DOMAINS = new HashSet<>();
|
private static final Set<String> WHITELISTED_DOMAINS = new HashSet<>();
|
||||||
static {
|
static {
|
||||||
WHITELISTED_DOMAINS.addAll(LinkPreviewDomains.LINKS);
|
WHITELISTED_DOMAINS.addAll(LinkPreviewDomains.LINKS);
|
||||||
WHITELISTED_DOMAINS.addAll(LinkPreviewDomains.IMAGES);
|
WHITELISTED_DOMAINS.addAll(LinkPreviewDomains.IMAGES);
|
||||||
WHITELISTED_DOMAINS.add("giphy.com");
|
WHITELISTED_DOMAINS.add("giphy.com");
|
||||||
}
|
}
|
||||||
|
|
||||||
private final List<Proxy> EMPTY = new ArrayList<>(1);
|
private final List<Proxy> CONTENT = new ArrayList<Proxy>(1) {{
|
||||||
private volatile List<Proxy> CONTENT = null;
|
add(new Proxy(Proxy.Type.HTTP, InetSocketAddress.createUnresolved(BuildConfig.CONTENT_PROXY_HOST,
|
||||||
|
BuildConfig.CONTENT_PROXY_PORT)));
|
||||||
public ContentProxySelector() {
|
}};
|
||||||
EMPTY.add(Proxy.NO_PROXY);
|
|
||||||
|
|
||||||
if (Util.isMainThread()) {
|
|
||||||
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
|
|
||||||
synchronized (ContentProxySelector.this) {
|
|
||||||
initializeContentProxy();
|
|
||||||
ContentProxySelector.this.notifyAll();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
initializeContentProxy();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Proxy> select(URI uri) {
|
public List<Proxy> select(URI uri) {
|
||||||
for (String domain : WHITELISTED_DOMAINS) {
|
for (String domain : WHITELISTED_DOMAINS) {
|
||||||
if (uri.getHost().endsWith(domain)) {
|
if (uri.getHost().endsWith(domain)) {
|
||||||
return getOrCreateContentProxy();
|
return CONTENT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw new IllegalArgumentException("Tried to proxy a non-whitelisted domain.");
|
throw new IllegalArgumentException("Tried to proxy a non-whitelisted domain.");
|
||||||
@ -61,24 +48,6 @@ public class ContentProxySelector extends ProxySelector {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void connectFailed(URI uri, SocketAddress address, IOException failure) {
|
public void connectFailed(URI uri, SocketAddress address, IOException failure) {
|
||||||
Log.w(TAG, failure);
|
Log.w(TAG, "Connection failed.", failure);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeContentProxy() {
|
|
||||||
CONTENT = new ArrayList<Proxy>(1) {{
|
|
||||||
add(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(BuildConfig.CONTENT_PROXY_HOST,
|
|
||||||
BuildConfig.CONTENT_PROXY_PORT)));
|
|
||||||
}};
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<Proxy> getOrCreateContentProxy() {
|
|
||||||
if (CONTENT == null) {
|
|
||||||
synchronized (this) {
|
|
||||||
while (CONTENT == null) Util.wait(this, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return CONTENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user