/* * Copyright © 2022 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ package com.wireguard.config; import com.wireguard.config.BadConfigException.Location; import com.wireguard.config.BadConfigException.Section; import com.wireguard.util.NonNullForAll; import java.net.MalformedURLException; import java.net.URL; import android.net.ProxyInfo; import android.net.Uri; @NonNullForAll public final class HttpProxy { public static final int DEFAULT_PROXY_PORT = 8080; private ProxyInfo pi; protected HttpProxy(ProxyInfo pi) { this.pi = pi; } public ProxyInfo getProxyInfo() { return pi; } public String getHost() { return pi.getHost(); } public Uri getPacFileUrl() { return pi.getPacFileUrl(); } public int getPort() { return pi.getPort(); } public static HttpProxy parse(final String httpProxy) throws BadConfigException { try { if (httpProxy.startsWith("pac:")) { return new HttpProxy(ProxyInfo.buildPacProxy(Uri.parse(httpProxy.substring(4)))); } else { final String urlStr; if (!httpProxy.contains("://")) { urlStr = "http://" + httpProxy; } else { urlStr = httpProxy; } URL url = new URL(urlStr); return new HttpProxy(ProxyInfo.buildDirectProxy(url.getHost(), url.getPort() <= 0 ? DEFAULT_PROXY_PORT : url.getPort())); } } catch (final MalformedURLException e) { throw new BadConfigException(Section.INTERFACE, Location.HTTP_PROXY, httpProxy, e); } } @Override public String toString() { final StringBuilder sb = new StringBuilder(); if (pi.getPacFileUrl() != null && pi.getPacFileUrl() != Uri.EMPTY) sb.append("pac:").append(pi.getPacFileUrl()); else { sb.append("http://").append(pi.getHost()).append(':'); if (pi.getPort() <= 0) sb.append(DEFAULT_PROXY_PORT); else sb.append(pi.getPort()); } return sb.toString(); } }