Home | History | Annotate | Download | only in net
      1 /*
      2  * Copyright (C) 2011 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 com.android.internal.net;
     18 
     19 import android.app.PendingIntent;
     20 import android.content.Context;
     21 import android.content.Intent;
     22 import android.os.Parcel;
     23 import android.os.Parcelable;
     24 import android.os.UserHandle;
     25 import android.net.RouteInfo;
     26 import android.net.LinkAddress;
     27 
     28 import com.android.internal.util.Preconditions;
     29 
     30 import java.net.InetAddress;
     31 import java.util.List;
     32 import java.util.ArrayList;
     33 
     34 /**
     35  * A simple container used to carry information in VpnBuilder, VpnDialogs,
     36  * and com.android.server.connectivity.Vpn. Internal use only.
     37  *
     38  * @hide
     39  */
     40 public class VpnConfig implements Parcelable {
     41 
     42     public static final String SERVICE_INTERFACE = "android.net.VpnService";
     43 
     44     public static final String DIALOGS_PACKAGE = "com.android.vpndialogs";
     45 
     46     public static final String LEGACY_VPN = "[Legacy VPN]";
     47 
     48     public static Intent getIntentForConfirmation() {
     49         Intent intent = new Intent();
     50         intent.setClassName(DIALOGS_PACKAGE, DIALOGS_PACKAGE + ".ConfirmDialog");
     51         return intent;
     52     }
     53 
     54     public static PendingIntent getIntentForStatusPanel(Context context) {
     55         Intent intent = new Intent();
     56         intent.setClassName(DIALOGS_PACKAGE, DIALOGS_PACKAGE + ".ManageDialog");
     57         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY |
     58                 Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
     59         return PendingIntent.getActivityAsUser(context, 0, intent, 0, null, UserHandle.CURRENT);
     60     }
     61 
     62     public String user;
     63     public String interfaze;
     64     public String session;
     65     public int mtu = -1;
     66     public List<LinkAddress> addresses = new ArrayList<LinkAddress>();
     67     public List<RouteInfo> routes = new ArrayList<RouteInfo>();
     68     public List<String> dnsServers;
     69     public List<String> searchDomains;
     70     public PendingIntent configureIntent;
     71     public long startTime = -1;
     72     public boolean legacy;
     73 
     74     public void addLegacyRoutes(String routesStr) {
     75         if (routesStr.trim().equals("")) {
     76             return;
     77         }
     78         String[] routes = routesStr.trim().split(" ");
     79         for (String route : routes) {
     80             //each route is ip/prefix
     81             String[] split = route.split("/");
     82             RouteInfo info = new RouteInfo(new LinkAddress
     83                     (InetAddress.parseNumericAddress(split[0]), Integer.parseInt(split[1])), null);
     84             this.routes.add(info);
     85         }
     86     }
     87 
     88     public void addLegacyAddresses(String addressesStr) {
     89         if (addressesStr.trim().equals("")) {
     90             return;
     91         }
     92         String[] addresses = addressesStr.trim().split(" ");
     93         for (String address : addresses) {
     94             //each address is ip/prefix
     95             String[] split = address.split("/");
     96             LinkAddress addr = new LinkAddress(InetAddress.parseNumericAddress(split[0]),
     97                     Integer.parseInt(split[1]));
     98             this.addresses.add(addr);
     99         }
    100     }
    101 
    102     @Override
    103     public int describeContents() {
    104         return 0;
    105     }
    106 
    107     @Override
    108     public void writeToParcel(Parcel out, int flags) {
    109         out.writeString(user);
    110         out.writeString(interfaze);
    111         out.writeString(session);
    112         out.writeInt(mtu);
    113         out.writeTypedList(addresses);
    114         out.writeTypedList(routes);
    115         out.writeStringList(dnsServers);
    116         out.writeStringList(searchDomains);
    117         out.writeParcelable(configureIntent, flags);
    118         out.writeLong(startTime);
    119         out.writeInt(legacy ? 1 : 0);
    120     }
    121 
    122     public static final Parcelable.Creator<VpnConfig> CREATOR =
    123             new Parcelable.Creator<VpnConfig>() {
    124         @Override
    125         public VpnConfig createFromParcel(Parcel in) {
    126             VpnConfig config = new VpnConfig();
    127             config.user = in.readString();
    128             config.interfaze = in.readString();
    129             config.session = in.readString();
    130             config.mtu = in.readInt();
    131             in.readTypedList(config.addresses, LinkAddress.CREATOR);
    132             in.readTypedList(config.routes, RouteInfo.CREATOR);
    133             config.dnsServers = in.createStringArrayList();
    134             config.searchDomains = in.createStringArrayList();
    135             config.configureIntent = in.readParcelable(null);
    136             config.startTime = in.readLong();
    137             config.legacy = in.readInt() != 0;
    138             return config;
    139         }
    140 
    141         @Override
    142         public VpnConfig[] newArray(int size) {
    143             return new VpnConfig[size];
    144         }
    145     };
    146 }
    147