1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.net; 18 19 import android.net.StaticIpConfiguration; 20 import android.os.Parcel; 21 import android.os.Parcelable; 22 23 import java.util.Objects; 24 25 /** 26 * A class representing a configured network. 27 * @hide 28 */ 29 public class IpConfiguration implements Parcelable { 30 private static final String TAG = "IpConfiguration"; 31 32 public enum IpAssignment { 33 /* Use statically configured IP settings. Configuration can be accessed 34 * with staticIpConfiguration */ 35 STATIC, 36 /* Use dynamically configured IP settigns */ 37 DHCP, 38 /* no IP details are assigned, this is used to indicate 39 * that any existing IP settings should be retained */ 40 UNASSIGNED 41 } 42 43 public IpAssignment ipAssignment; 44 45 public StaticIpConfiguration staticIpConfiguration; 46 47 public enum ProxySettings { 48 /* No proxy is to be used. Any existing proxy settings 49 * should be cleared. */ 50 NONE, 51 /* Use statically configured proxy. Configuration can be accessed 52 * with httpProxy. */ 53 STATIC, 54 /* no proxy details are assigned, this is used to indicate 55 * that any existing proxy settings should be retained */ 56 UNASSIGNED, 57 /* Use a Pac based proxy. 58 */ 59 PAC 60 } 61 62 public ProxySettings proxySettings; 63 64 public ProxyInfo httpProxy; 65 init(IpAssignment ipAssignment, ProxySettings proxySettings, StaticIpConfiguration staticIpConfiguration, ProxyInfo httpProxy)66 private void init(IpAssignment ipAssignment, 67 ProxySettings proxySettings, 68 StaticIpConfiguration staticIpConfiguration, 69 ProxyInfo httpProxy) { 70 this.ipAssignment = ipAssignment; 71 this.proxySettings = proxySettings; 72 this.staticIpConfiguration = (staticIpConfiguration == null) ? 73 null : new StaticIpConfiguration(staticIpConfiguration); 74 this.httpProxy = (httpProxy == null) ? 75 null : new ProxyInfo(httpProxy); 76 } 77 IpConfiguration()78 public IpConfiguration() { 79 init(IpAssignment.UNASSIGNED, ProxySettings.UNASSIGNED, null, null); 80 } 81 IpConfiguration(IpAssignment ipAssignment, ProxySettings proxySettings, StaticIpConfiguration staticIpConfiguration, ProxyInfo httpProxy)82 public IpConfiguration(IpAssignment ipAssignment, 83 ProxySettings proxySettings, 84 StaticIpConfiguration staticIpConfiguration, 85 ProxyInfo httpProxy) { 86 init(ipAssignment, proxySettings, staticIpConfiguration, httpProxy); 87 } 88 IpConfiguration(IpConfiguration source)89 public IpConfiguration(IpConfiguration source) { 90 this(); 91 if (source != null) { 92 init(source.ipAssignment, source.proxySettings, 93 source.staticIpConfiguration, source.httpProxy); 94 } 95 } 96 getIpAssignment()97 public IpAssignment getIpAssignment() { 98 return ipAssignment; 99 } 100 setIpAssignment(IpAssignment ipAssignment)101 public void setIpAssignment(IpAssignment ipAssignment) { 102 this.ipAssignment = ipAssignment; 103 } 104 getStaticIpConfiguration()105 public StaticIpConfiguration getStaticIpConfiguration() { 106 return staticIpConfiguration; 107 } 108 setStaticIpConfiguration(StaticIpConfiguration staticIpConfiguration)109 public void setStaticIpConfiguration(StaticIpConfiguration staticIpConfiguration) { 110 this.staticIpConfiguration = staticIpConfiguration; 111 } 112 getProxySettings()113 public ProxySettings getProxySettings() { 114 return proxySettings; 115 } 116 setProxySettings(ProxySettings proxySettings)117 public void setProxySettings(ProxySettings proxySettings) { 118 this.proxySettings = proxySettings; 119 } 120 getHttpProxy()121 public ProxyInfo getHttpProxy() { 122 return httpProxy; 123 } 124 setHttpProxy(ProxyInfo httpProxy)125 public void setHttpProxy(ProxyInfo httpProxy) { 126 this.httpProxy = httpProxy; 127 } 128 129 @Override toString()130 public String toString() { 131 StringBuilder sbuf = new StringBuilder(); 132 sbuf.append("IP assignment: " + ipAssignment.toString()); 133 sbuf.append("\n"); 134 if (staticIpConfiguration != null) { 135 sbuf.append("Static configuration: " + staticIpConfiguration.toString()); 136 sbuf.append("\n"); 137 } 138 sbuf.append("Proxy settings: " + proxySettings.toString()); 139 sbuf.append("\n"); 140 if (httpProxy != null) { 141 sbuf.append("HTTP proxy: " + httpProxy.toString()); 142 sbuf.append("\n"); 143 } 144 145 return sbuf.toString(); 146 } 147 148 @Override equals(Object o)149 public boolean equals(Object o) { 150 if (o == this) { 151 return true; 152 } 153 154 if (!(o instanceof IpConfiguration)) { 155 return false; 156 } 157 158 IpConfiguration other = (IpConfiguration) o; 159 return this.ipAssignment == other.ipAssignment && 160 this.proxySettings == other.proxySettings && 161 Objects.equals(this.staticIpConfiguration, other.staticIpConfiguration) && 162 Objects.equals(this.httpProxy, other.httpProxy); 163 } 164 165 @Override hashCode()166 public int hashCode() { 167 return 13 + (staticIpConfiguration != null ? staticIpConfiguration.hashCode() : 0) + 168 17 * ipAssignment.ordinal() + 169 47 * proxySettings.ordinal() + 170 83 * httpProxy.hashCode(); 171 } 172 173 /** Implement the Parcelable interface */ describeContents()174 public int describeContents() { 175 return 0; 176 } 177 178 /** Implement the Parcelable interface */ writeToParcel(Parcel dest, int flags)179 public void writeToParcel(Parcel dest, int flags) { 180 dest.writeString(ipAssignment.name()); 181 dest.writeString(proxySettings.name()); 182 dest.writeParcelable(staticIpConfiguration, flags); 183 dest.writeParcelable(httpProxy, flags); 184 } 185 186 /** Implement the Parcelable interface */ 187 public static final Creator<IpConfiguration> CREATOR = 188 new Creator<IpConfiguration>() { 189 public IpConfiguration createFromParcel(Parcel in) { 190 IpConfiguration config = new IpConfiguration(); 191 config.ipAssignment = IpAssignment.valueOf(in.readString()); 192 config.proxySettings = ProxySettings.valueOf(in.readString()); 193 config.staticIpConfiguration = in.readParcelable(null); 194 config.httpProxy = in.readParcelable(null); 195 return config; 196 } 197 198 public IpConfiguration[] newArray(int size) { 199 return new IpConfiguration[size]; 200 } 201 }; 202 } 203