Home | History | Annotate | Download | only in net
      1 /*
      2  * Copyright (C) 2010 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 
     20 import android.os.Parcel;
     21 import android.os.Parcelable;
     22 import android.text.TextUtils;
     23 import android.util.Log;
     24 
     25 import java.net.InetAddress;
     26 import java.net.InetSocketAddress;
     27 import java.net.UnknownHostException;
     28 
     29 /**
     30  * A container class for the http proxy info
     31  * @hide
     32  */
     33 public class ProxyProperties implements Parcelable {
     34 
     35     private String mHost;
     36     private int mPort;
     37     private String mExclusionList;
     38     private String[] mParsedExclusionList;
     39 
     40     public ProxyProperties(String host, int port, String exclList) {
     41         mHost = host;
     42         mPort = port;
     43         setExclusionList(exclList);
     44     }
     45 
     46     private ProxyProperties(String host, int port, String exclList, String[] parsedExclList) {
     47         mHost = host;
     48         mPort = port;
     49         mExclusionList = exclList;
     50         mParsedExclusionList = parsedExclList;
     51     }
     52 
     53     // copy constructor instead of clone
     54     public ProxyProperties(ProxyProperties source) {
     55         if (source != null) {
     56             mHost = source.getHost();
     57             mPort = source.getPort();
     58             mExclusionList = source.getExclusionList();
     59             mParsedExclusionList = source.mParsedExclusionList;
     60         }
     61     }
     62 
     63     public InetSocketAddress getSocketAddress() {
     64         InetSocketAddress inetSocketAddress = null;
     65         try {
     66             inetSocketAddress = new InetSocketAddress(mHost, mPort);
     67         } catch (IllegalArgumentException e) { }
     68         return inetSocketAddress;
     69     }
     70 
     71     public String getHost() {
     72         return mHost;
     73     }
     74 
     75     public int getPort() {
     76         return mPort;
     77     }
     78 
     79     // comma separated
     80     public String getExclusionList() {
     81         return mExclusionList;
     82     }
     83 
     84     // comma separated
     85     private void setExclusionList(String exclusionList) {
     86         mExclusionList = exclusionList;
     87         if (mExclusionList == null) {
     88             mParsedExclusionList = new String[0];
     89         } else {
     90             String splitExclusionList[] = exclusionList.toLowerCase().split(",");
     91             mParsedExclusionList = new String[splitExclusionList.length * 2];
     92             for (int i = 0; i < splitExclusionList.length; i++) {
     93                 String s = splitExclusionList[i].trim();
     94                 if (s.startsWith(".")) s = s.substring(1);
     95                 mParsedExclusionList[i*2] = s;
     96                 mParsedExclusionList[(i*2)+1] = "." + s;
     97             }
     98         }
     99     }
    100 
    101     public boolean isExcluded(String url) {
    102         if (TextUtils.isEmpty(url) || mParsedExclusionList == null ||
    103                 mParsedExclusionList.length == 0) return false;
    104 
    105         Uri u = Uri.parse(url);
    106         String urlDomain = u.getHost();
    107         if (urlDomain == null) return false;
    108         for (int i = 0; i< mParsedExclusionList.length; i+=2) {
    109             if (urlDomain.equals(mParsedExclusionList[i]) ||
    110                     urlDomain.endsWith(mParsedExclusionList[i+1])) {
    111                 return true;
    112             }
    113         }
    114         return false;
    115     }
    116 
    117     public java.net.Proxy makeProxy() {
    118         java.net.Proxy proxy = java.net.Proxy.NO_PROXY;
    119         if (mHost != null) {
    120             try {
    121                 InetSocketAddress inetSocketAddress = new InetSocketAddress(mHost, mPort);
    122                 proxy = new java.net.Proxy(java.net.Proxy.Type.HTTP, inetSocketAddress);
    123             } catch (IllegalArgumentException e) {
    124             }
    125         }
    126         return proxy;
    127     }
    128 
    129     @Override
    130     public String toString() {
    131         StringBuilder sb = new StringBuilder();
    132         if (mHost != null) {
    133             sb.append("[");
    134             sb.append(mHost);
    135             sb.append("] ");
    136             sb.append(Integer.toString(mPort));
    137             if (mExclusionList != null) {
    138                     sb.append(" xl=").append(mExclusionList);
    139             }
    140         } else {
    141             sb.append("[ProxyProperties.mHost == null]");
    142         }
    143         return sb.toString();
    144     }
    145 
    146     @Override
    147     public boolean equals(Object o) {
    148         if (!(o instanceof ProxyProperties)) return false;
    149         ProxyProperties p = (ProxyProperties)o;
    150         if (mExclusionList != null && !mExclusionList.equals(p.getExclusionList())) return false;
    151         if (mHost != null && p.getHost() != null && mHost.equals(p.getHost()) == false) {
    152             return false;
    153         }
    154         if (mHost != null && p.mHost == null) return false;
    155         if (mHost == null && p.mHost != null) return false;
    156         if (mPort != p.mPort) return false;
    157         return true;
    158     }
    159 
    160     /**
    161      * Implement the Parcelable interface
    162      * @hide
    163      */
    164     public int describeContents() {
    165         return 0;
    166     }
    167 
    168     @Override
    169     /*
    170      * generate hashcode based on significant fields
    171      */
    172     public int hashCode() {
    173         return ((null == mHost) ? 0 : mHost.hashCode())
    174         + ((null == mExclusionList) ? 0 : mExclusionList.hashCode())
    175         + mPort;
    176     }
    177 
    178     /**
    179      * Implement the Parcelable interface.
    180      * @hide
    181      */
    182     public void writeToParcel(Parcel dest, int flags) {
    183         if (mHost != null) {
    184             dest.writeByte((byte)1);
    185             dest.writeString(mHost);
    186             dest.writeInt(mPort);
    187         } else {
    188             dest.writeByte((byte)0);
    189         }
    190         dest.writeString(mExclusionList);
    191         dest.writeStringArray(mParsedExclusionList);
    192     }
    193 
    194     /**
    195      * Implement the Parcelable interface.
    196      * @hide
    197      */
    198     public static final Creator<ProxyProperties> CREATOR =
    199         new Creator<ProxyProperties>() {
    200             public ProxyProperties createFromParcel(Parcel in) {
    201                 String host = null;
    202                 int port = 0;
    203                 if (in.readByte() == 1) {
    204                     host = in.readString();
    205                     port = in.readInt();
    206                 }
    207                 String exclList = in.readString();
    208                 String[] parsedExclList = in.readStringArray();
    209                 ProxyProperties proxyProperties =
    210                         new ProxyProperties(host, port, exclList, parsedExclList);
    211                 return proxyProperties;
    212             }
    213 
    214             public ProxyProperties[] newArray(int size) {
    215                 return new ProxyProperties[size];
    216             }
    217         };
    218 }
    219