16346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim/* 26346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * Copyright (C) 2014 The Android Open Source Project 36346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * 46346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * Licensed under the Apache License, Version 2.0 (the "License"); 56346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * you may not use this file except in compliance with the License. 66346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * You may obtain a copy of the License at 76346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * 86346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * http://www.apache.org/licenses/LICENSE-2.0 96346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * 106346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * Unless required by applicable law or agreed to in writing, software 116346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * distributed under the License is distributed on an "AS IS" BASIS, 126346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * See the License for the specific language governing permissions and 146346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * limitations under the License. 156346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim */ 166346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 176346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimpackage android.net; 186346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 190a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colittiimport android.net.StaticIpConfiguration; 206346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport android.os.Parcel; 216346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport android.os.Parcelable; 226346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 236346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport java.util.Objects; 246346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 256346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim/** 266346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * A class representing a configured network. 276346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * @hide 286346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim */ 296346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimpublic class IpConfiguration implements Parcelable { 306346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim private static final String TAG = "IpConfiguration"; 316346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 326346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public enum IpAssignment { 336346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /* Use statically configured IP settings. Configuration can be accessed 340a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti * with staticIpConfiguration */ 356346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim STATIC, 366346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /* Use dynamically configured IP settigns */ 376346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim DHCP, 386346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /* no IP details are assigned, this is used to indicate 396346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * that any existing IP settings should be retained */ 406346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim UNASSIGNED 416346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 426346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 436346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpAssignment ipAssignment; 446346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 450a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public StaticIpConfiguration staticIpConfiguration; 460a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 476346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public enum ProxySettings { 486346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /* No proxy is to be used. Any existing proxy settings 496346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * should be cleared. */ 506346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim NONE, 516346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /* Use statically configured proxy. Configuration can be accessed 520a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti * with httpProxy. */ 536346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim STATIC, 546346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /* no proxy details are assigned, this is used to indicate 556346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim * that any existing proxy settings should be retained */ 566346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim UNASSIGNED, 576346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /* Use a Pac based proxy. 586346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim */ 596346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim PAC 606346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 616346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 626346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public ProxySettings proxySettings; 636346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 640a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public ProxyInfo httpProxy; 656346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 660a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti private void init(IpAssignment ipAssignment, 670a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti ProxySettings proxySettings, 680a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti StaticIpConfiguration staticIpConfiguration, 690a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti ProxyInfo httpProxy) { 700a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti this.ipAssignment = ipAssignment; 710a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti this.proxySettings = proxySettings; 720a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti this.staticIpConfiguration = (staticIpConfiguration == null) ? 730a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti null : new StaticIpConfiguration(staticIpConfiguration); 740a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti this.httpProxy = (httpProxy == null) ? 750a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti null : new ProxyInfo(httpProxy); 766346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 776346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 786346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpConfiguration() { 790a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti init(IpAssignment.UNASSIGNED, ProxySettings.UNASSIGNED, null, null); 806346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 816346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 826346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpConfiguration(IpAssignment ipAssignment, 836346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim ProxySettings proxySettings, 840a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti StaticIpConfiguration staticIpConfiguration, 850a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti ProxyInfo httpProxy) { 860a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti init(ipAssignment, proxySettings, staticIpConfiguration, httpProxy); 870a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 880a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 890a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public IpConfiguration(IpConfiguration source) { 900a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti this(); 910a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti if (source != null) { 920a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti init(source.ipAssignment, source.proxySettings, 930a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti source.staticIpConfiguration, source.httpProxy); 940a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 950a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 960a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 970a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public IpAssignment getIpAssignment() { 980a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti return ipAssignment; 990a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 1000a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 1010a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public void setIpAssignment(IpAssignment ipAssignment) { 1026346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim this.ipAssignment = ipAssignment; 1030a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 1040a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 1050a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public StaticIpConfiguration getStaticIpConfiguration() { 1060a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti return staticIpConfiguration; 1070a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 1080a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 1090a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public void setStaticIpConfiguration(StaticIpConfiguration staticIpConfiguration) { 1100a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti this.staticIpConfiguration = staticIpConfiguration; 1110a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 1120a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 1130a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public ProxySettings getProxySettings() { 1140a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti return proxySettings; 1150a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 1160a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 1170a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public void setProxySettings(ProxySettings proxySettings) { 1186346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim this.proxySettings = proxySettings; 1190a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 1200a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 1210a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public ProxyInfo getHttpProxy() { 1220a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti return httpProxy; 1230a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 1240a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 1250a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public void setHttpProxy(ProxyInfo httpProxy) { 1260a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti this.httpProxy = httpProxy; 1276346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 1286346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 1296346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim @Override 1306346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public String toString() { 1316346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim StringBuilder sbuf = new StringBuilder(); 1326346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim sbuf.append("IP assignment: " + ipAssignment.toString()); 1336346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim sbuf.append("\n"); 1340a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti if (staticIpConfiguration != null) { 1350a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti sbuf.append("Static configuration: " + staticIpConfiguration.toString()); 1360a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti sbuf.append("\n"); 1370a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 1386346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim sbuf.append("Proxy settings: " + proxySettings.toString()); 1396346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim sbuf.append("\n"); 1400a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti if (httpProxy != null) { 1410a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti sbuf.append("HTTP proxy: " + httpProxy.toString()); 1420a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti sbuf.append("\n"); 1430a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 1446346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 1456346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return sbuf.toString(); 1466346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 1476346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 1486346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim @Override 1496346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public boolean equals(Object o) { 1506346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim if (o == this) { 1516346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return true; 1526346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 1536346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 1546346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim if (!(o instanceof IpConfiguration)) { 1556346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return false; 1566346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 1576346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 1586346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim IpConfiguration other = (IpConfiguration) o; 1596346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return this.ipAssignment == other.ipAssignment && 1606346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim this.proxySettings == other.proxySettings && 1610a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti Objects.equals(this.staticIpConfiguration, other.staticIpConfiguration) && 1620a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti Objects.equals(this.httpProxy, other.httpProxy); 1636346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 1646346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 1656346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim @Override 1666346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public int hashCode() { 1670a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti return 13 + (staticIpConfiguration != null ? staticIpConfiguration.hashCode() : 0) + 1686346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 17 * ipAssignment.ordinal() + 1690a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 47 * proxySettings.ordinal() + 1700a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 83 * httpProxy.hashCode(); 1716346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 1726346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 1736346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** Implement the Parcelable interface */ 1746346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public int describeContents() { 1756346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return 0; 1766346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 1776346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 1786346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** Implement the Parcelable interface */ 1796346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void writeToParcel(Parcel dest, int flags) { 1806346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim dest.writeString(ipAssignment.name()); 1816346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim dest.writeString(proxySettings.name()); 1820a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti dest.writeParcelable(staticIpConfiguration, flags); 1830a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti dest.writeParcelable(httpProxy, flags); 1846346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 1856346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 1866346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** Implement the Parcelable interface */ 1876346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public static final Creator<IpConfiguration> CREATOR = 1886346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim new Creator<IpConfiguration>() { 1896346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpConfiguration createFromParcel(Parcel in) { 1906346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim IpConfiguration config = new IpConfiguration(); 1916346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim config.ipAssignment = IpAssignment.valueOf(in.readString()); 1926346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim config.proxySettings = ProxySettings.valueOf(in.readString()); 1930a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti config.staticIpConfiguration = in.readParcelable(null); 1940a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti config.httpProxy = in.readParcelable(null); 1956346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return config; 1966346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 1976346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 1986346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpConfiguration[] newArray(int size) { 1996346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return new IpConfiguration[size]; 2006346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 2016346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim }; 2026346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim} 203