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.annotation.UnsupportedAppUsage;
20 import android.net.StaticIpConfiguration;
21 import android.os.Parcel;
22 import android.os.Parcelable;
23 
24 import java.util.Objects;
25 
26 /**
27  * A class representing a configured network.
28  * @hide
29  */
30 public class IpConfiguration implements Parcelable {
31     private static final String TAG = "IpConfiguration";
32 
33     public enum IpAssignment {
34         /* Use statically configured IP settings. Configuration can be accessed
35          * with staticIpConfiguration */
36         @UnsupportedAppUsage
37         STATIC,
38         /* Use dynamically configured IP settings */
39         DHCP,
40         /* no IP details are assigned, this is used to indicate
41          * that any existing IP settings should be retained */
42         UNASSIGNED
43     }
44 
45     public IpAssignment ipAssignment;
46 
47     public StaticIpConfiguration staticIpConfiguration;
48 
49     public enum ProxySettings {
50         /* No proxy is to be used. Any existing proxy settings
51          * should be cleared. */
52         @UnsupportedAppUsage
53         NONE,
54         /* Use statically configured proxy. Configuration can be accessed
55          * with httpProxy. */
56         STATIC,
57         /* no proxy details are assigned, this is used to indicate
58          * that any existing proxy settings should be retained */
59         UNASSIGNED,
60         /* Use a Pac based proxy.
61          */
62         PAC
63     }
64 
65     public ProxySettings proxySettings;
66 
67     @UnsupportedAppUsage
68     public ProxyInfo httpProxy;
69 
init(IpAssignment ipAssignment, ProxySettings proxySettings, StaticIpConfiguration staticIpConfiguration, ProxyInfo httpProxy)70     private void init(IpAssignment ipAssignment,
71                       ProxySettings proxySettings,
72                       StaticIpConfiguration staticIpConfiguration,
73                       ProxyInfo httpProxy) {
74         this.ipAssignment = ipAssignment;
75         this.proxySettings = proxySettings;
76         this.staticIpConfiguration = (staticIpConfiguration == null) ?
77                 null : new StaticIpConfiguration(staticIpConfiguration);
78         this.httpProxy = (httpProxy == null) ?
79                 null : new ProxyInfo(httpProxy);
80     }
81 
IpConfiguration()82     public IpConfiguration() {
83         init(IpAssignment.UNASSIGNED, ProxySettings.UNASSIGNED, null, null);
84     }
85 
86     @UnsupportedAppUsage
IpConfiguration(IpAssignment ipAssignment, ProxySettings proxySettings, StaticIpConfiguration staticIpConfiguration, ProxyInfo httpProxy)87     public IpConfiguration(IpAssignment ipAssignment,
88                            ProxySettings proxySettings,
89                            StaticIpConfiguration staticIpConfiguration,
90                            ProxyInfo httpProxy) {
91         init(ipAssignment, proxySettings, staticIpConfiguration, httpProxy);
92     }
93 
IpConfiguration(IpConfiguration source)94     public IpConfiguration(IpConfiguration source) {
95         this();
96         if (source != null) {
97             init(source.ipAssignment, source.proxySettings,
98                  source.staticIpConfiguration, source.httpProxy);
99         }
100     }
101 
getIpAssignment()102     public IpAssignment getIpAssignment() {
103         return ipAssignment;
104     }
105 
setIpAssignment(IpAssignment ipAssignment)106     public void setIpAssignment(IpAssignment ipAssignment) {
107         this.ipAssignment = ipAssignment;
108     }
109 
getStaticIpConfiguration()110     public StaticIpConfiguration getStaticIpConfiguration() {
111         return staticIpConfiguration;
112     }
113 
setStaticIpConfiguration(StaticIpConfiguration staticIpConfiguration)114     public void setStaticIpConfiguration(StaticIpConfiguration staticIpConfiguration) {
115         this.staticIpConfiguration = staticIpConfiguration;
116     }
117 
getProxySettings()118     public ProxySettings getProxySettings() {
119         return proxySettings;
120     }
121 
setProxySettings(ProxySettings proxySettings)122     public void setProxySettings(ProxySettings proxySettings) {
123         this.proxySettings = proxySettings;
124     }
125 
getHttpProxy()126     public ProxyInfo getHttpProxy() {
127         return httpProxy;
128     }
129 
setHttpProxy(ProxyInfo httpProxy)130     public void setHttpProxy(ProxyInfo httpProxy) {
131         this.httpProxy = httpProxy;
132     }
133 
134     @Override
toString()135     public String toString() {
136         StringBuilder sbuf = new StringBuilder();
137         sbuf.append("IP assignment: " + ipAssignment.toString());
138         sbuf.append("\n");
139         if (staticIpConfiguration != null) {
140             sbuf.append("Static configuration: " + staticIpConfiguration.toString());
141             sbuf.append("\n");
142         }
143         sbuf.append("Proxy settings: " + proxySettings.toString());
144         sbuf.append("\n");
145         if (httpProxy != null) {
146             sbuf.append("HTTP proxy: " + httpProxy.toString());
147             sbuf.append("\n");
148         }
149 
150         return sbuf.toString();
151     }
152 
153     @Override
equals(Object o)154     public boolean equals(Object o) {
155         if (o == this) {
156             return true;
157         }
158 
159         if (!(o instanceof IpConfiguration)) {
160             return false;
161         }
162 
163         IpConfiguration other = (IpConfiguration) o;
164         return this.ipAssignment == other.ipAssignment &&
165                 this.proxySettings == other.proxySettings &&
166                 Objects.equals(this.staticIpConfiguration, other.staticIpConfiguration) &&
167                 Objects.equals(this.httpProxy, other.httpProxy);
168     }
169 
170     @Override
hashCode()171     public int hashCode() {
172         return 13 + (staticIpConfiguration != null ? staticIpConfiguration.hashCode() : 0) +
173                17 * ipAssignment.ordinal() +
174                47 * proxySettings.ordinal() +
175                83 * httpProxy.hashCode();
176     }
177 
178     /** Implement the Parcelable interface */
describeContents()179     public int describeContents() {
180         return 0;
181     }
182 
183     /** Implement the Parcelable interface  */
writeToParcel(Parcel dest, int flags)184     public void writeToParcel(Parcel dest, int flags) {
185         dest.writeString(ipAssignment.name());
186         dest.writeString(proxySettings.name());
187         dest.writeParcelable(staticIpConfiguration, flags);
188         dest.writeParcelable(httpProxy, flags);
189     }
190 
191     /** Implement the Parcelable interface */
192     public static final @android.annotation.NonNull Creator<IpConfiguration> CREATOR =
193         new Creator<IpConfiguration>() {
194             public IpConfiguration createFromParcel(Parcel in) {
195                 IpConfiguration config = new IpConfiguration();
196                 config.ipAssignment = IpAssignment.valueOf(in.readString());
197                 config.proxySettings = ProxySettings.valueOf(in.readString());
198                 config.staticIpConfiguration = in.readParcelable(null);
199                 config.httpProxy = in.readParcelable(null);
200                 return config;
201             }
202 
203             public IpConfiguration[] newArray(int size) {
204                 return new IpConfiguration[size];
205             }
206         };
207 }
208