Home | History | Annotate | Download | only in net
      1 /*
      2  * Copyright (C) 2008 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.SdkConstant;
     20 import android.annotation.SdkConstant.SdkConstantType;
     21 import android.os.Binder;
     22 import android.os.RemoteException;
     23 
     24 /**
     25  * Class that handles throttling.  It provides read/write numbers per interface
     26  * and methods to apply throttled rates.
     27  * {@hide}
     28  */
     29 public class ThrottleManager
     30 {
     31     /**
     32      * Broadcast each polling period to indicate new data counts.
     33      *
     34      * Includes four extras:
     35      * EXTRA_CYCLE_READ - a long of the read bytecount for the current cycle
     36      * EXTRA_CYCLE_WRITE -a long of the write bytecount for the current cycle
     37      * EXTRA_CYLCE_START -a long of MS for the cycle start time
     38      * EXTRA_CYCLE_END   -a long of MS for the cycle stop time
     39      * {@hide}
     40      */
     41     public static final String THROTTLE_POLL_ACTION = "android.net.thrott.POLL_ACTION";
     42     /**
     43      * The lookup key for a long for the read bytecount for this period.  Retrieve with
     44      * {@link android.content.Intent#getLongExtra(String)}.
     45      * {@hide}
     46      */
     47     public static final String EXTRA_CYCLE_READ = "cycleRead";
     48     /**
     49      * contains a long of the number of bytes written in the cycle
     50      * {@hide}
     51      */
     52     public static final String EXTRA_CYCLE_WRITE = "cycleWrite";
     53     /**
     54      * contains a long of the number of bytes read in the cycle
     55      * {@hide}
     56      */
     57     public static final String EXTRA_CYCLE_START = "cycleStart";
     58     /**
     59      * contains a long of the ms since 1970 used to init a calendar, etc for the end
     60      * of the cycle
     61      * {@hide}
     62      */
     63     public static final String EXTRA_CYCLE_END = "cycleEnd";
     64 
     65     /**
     66      * Broadcast when the thottle level changes.
     67      * {@hide}
     68      */
     69     public static final String THROTTLE_ACTION = "android.net.thrott.THROTTLE_ACTION";
     70     /**
     71      * int of the current bandwidth in TODO
     72      * {@hide}
     73      */
     74     public static final String EXTRA_THROTTLE_LEVEL = "level";
     75 
     76     /**
     77      * Broadcast on boot and whenever the settings change.
     78      * {@hide}
     79      */
     80     public static final String POLICY_CHANGED_ACTION = "android.net.thrott.POLICY_CHANGED_ACTION";
     81 
     82     // {@hide}
     83     public static final int DIRECTION_TX = 0;
     84     // {@hide}
     85     public static final int DIRECTION_RX = 1;
     86 
     87     // {@hide}
     88     public static final int PERIOD_CYCLE  = 0;
     89     // {@hide}
     90     public static final int PERIOD_YEAR   = 1;
     91     // {@hide}
     92     public static final int PERIOD_MONTH  = 2;
     93     // {@hide}
     94     public static final int PERIOD_WEEK   = 3;
     95     // @hide
     96     public static final int PERIOD_7DAY   = 4;
     97     // @hide
     98     public static final int PERIOD_DAY    = 5;
     99     // @hide
    100     public static final int PERIOD_24HOUR = 6;
    101     // @hide
    102     public static final int PERIOD_HOUR   = 7;
    103     // @hide
    104     public static final int PERIOD_60MIN  = 8;
    105     // @hide
    106     public static final int PERIOD_MINUTE = 9;
    107     // @hide
    108     public static final int PERIOD_60SEC  = 10;
    109     // @hide
    110     public static final int PERIOD_SECOND = 11;
    111 
    112 
    113 
    114     /**
    115      * returns a long of the ms from the epoch to the time the current cycle ends for the
    116      * named interface
    117      * {@hide}
    118      */
    119     public long getResetTime(String iface) {
    120         try {
    121             return mService.getResetTime(iface);
    122         } catch (RemoteException e) {
    123             return -1;
    124         }
    125     }
    126 
    127     /**
    128      * returns a long of the ms from the epoch to the time the current cycle started for the
    129      * named interface
    130      * {@hide}
    131      */
    132     public long getPeriodStartTime(String iface) {
    133         try {
    134             return mService.getPeriodStartTime(iface);
    135         } catch (RemoteException e) {
    136             return -1;
    137         }
    138     }
    139 
    140     /**
    141      * returns a long of the byte count either read or written on the named interface
    142      * for the period described.  Direction is either DIRECTION_RX or DIRECTION_TX and
    143      * period may only be PERIOD_CYCLE for the current cycle (other periods may be supported
    144      * in the future).  Ago indicates the number of periods in the past to lookup - 0 means
    145      * the current period, 1 is the last one, 2 was two periods ago..
    146      * {@hide}
    147      */
    148     public long getByteCount(String iface, int direction, int period, int ago) {
    149         try {
    150             return mService.getByteCount(iface, direction, period, ago);
    151         } catch (RemoteException e) {
    152             return -1;
    153         }
    154     }
    155 
    156     /**
    157      * returns the number of bytes read+written after which a particular cliff
    158      * takes effect on the named iface.  Currently only cliff #1 is supported (1 step)
    159      * {@hide}
    160      */
    161     public long getCliffThreshold(String iface, int cliff) {
    162         try {
    163             return mService.getCliffThreshold(iface, cliff);
    164         } catch (RemoteException e) {
    165             return -1;
    166         }
    167     }
    168 
    169     /**
    170      * returns the thottling bandwidth (bps) for a given cliff # on the named iface.
    171      * only cliff #1 is currently supported.
    172      * {@hide}
    173      */
    174     public int getCliffLevel(String iface, int cliff) {
    175         try {
    176             return mService.getCliffLevel(iface, cliff);
    177         } catch (RemoteException e) {
    178             return -1;
    179         }
    180     }
    181 
    182     /**
    183      * returns the help URI for throttling
    184      * {@hide}
    185      */
    186     public String getHelpUri() {
    187         try {
    188             return mService.getHelpUri();
    189         } catch (RemoteException e) {
    190             return null;
    191         }
    192     }
    193 
    194 
    195     private IThrottleManager mService;
    196 
    197     /**
    198      * Don't allow use of default constructor.
    199      */
    200     @SuppressWarnings({"UnusedDeclaration"})
    201     private ThrottleManager() {
    202     }
    203 
    204     /**
    205      * {@hide}
    206      */
    207     public ThrottleManager(IThrottleManager service) {
    208         if (service == null) {
    209             throw new IllegalArgumentException(
    210                 "ThrottleManager() cannot be constructed with null service");
    211         }
    212         mService = service;
    213     }
    214 }
    215