blob: 5fdac587ecc4accf24e68fceaec1b51fc0955357 [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.net;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.os.Binder;
import android.os.RemoteException;
/**
* Class that handles throttling. It provides read/write numbers per interface
* and methods to apply throttled rates.
* {@hide}
*/
public class ThrottleManager
{
/**
* Broadcast each polling period to indicate new data counts.
*
* Includes four extras:
* EXTRA_CYCLE_READ - a long of the read bytecount for the current cycle
* EXTRA_CYCLE_WRITE -a long of the write bytecount for the current cycle
* EXTRA_CYLCE_START -a long of MS for the cycle start time
* EXTRA_CYCLE_END -a long of MS for the cycle stop time
* {@hide}
*/
public static final String THROTTLE_POLL_ACTION = "android.net.thrott.POLL_ACTION";
/**
* The lookup key for a long for the read bytecount for this period. Retrieve with
* {@link android.content.Intent#getLongExtra(String)}.
* {@hide}
*/
public static final String EXTRA_CYCLE_READ = "cycleRead";
/**
* contains a long of the number of bytes written in the cycle
* {@hide}
*/
public static final String EXTRA_CYCLE_WRITE = "cycleWrite";
/**
* contains a long of the number of bytes read in the cycle
* {@hide}
*/
public static final String EXTRA_CYCLE_START = "cycleStart";
/**
* contains a long of the ms since 1970 used to init a calendar, etc for the end
* of the cycle
* {@hide}
*/
public static final String EXTRA_CYCLE_END = "cycleEnd";
/**
* Broadcast when the thottle level changes.
* {@hide}
*/
public static final String THROTTLE_ACTION = "android.net.thrott.THROTTLE_ACTION";
/**
* int of the current bandwidth in TODO
* {@hide}
*/
public static final String EXTRA_THROTTLE_LEVEL = "level";
/**
* Broadcast on boot and whenever the settings change.
* {@hide}
*/
public static final String POLICY_CHANGED_ACTION = "android.net.thrott.POLICY_CHANGED_ACTION";
// {@hide}
public static final int DIRECTION_TX = 0;
// {@hide}
public static final int DIRECTION_RX = 1;
// {@hide}
public static final int PERIOD_CYCLE = 0;
// {@hide}
public static final int PERIOD_YEAR = 1;
// {@hide}
public static final int PERIOD_MONTH = 2;
// {@hide}
public static final int PERIOD_WEEK = 3;
// @hide
public static final int PERIOD_7DAY = 4;
// @hide
public static final int PERIOD_DAY = 5;
// @hide
public static final int PERIOD_24HOUR = 6;
// @hide
public static final int PERIOD_HOUR = 7;
// @hide
public static final int PERIOD_60MIN = 8;
// @hide
public static final int PERIOD_MINUTE = 9;
// @hide
public static final int PERIOD_60SEC = 10;
// @hide
public static final int PERIOD_SECOND = 11;
/**
* returns a long of the ms from the epoch to the time the current cycle ends for the
* named interface
* {@hide}
*/
public long getResetTime(String iface) {
try {
return mService.getResetTime(iface);
} catch (RemoteException e) {
return -1;
}
}
/**
* returns a long of the ms from the epoch to the time the current cycle started for the
* named interface
* {@hide}
*/
public long getPeriodStartTime(String iface) {
try {
return mService.getPeriodStartTime(iface);
} catch (RemoteException e) {
return -1;
}
}
/**
* returns a long of the byte count either read or written on the named interface
* for the period described. Direction is either DIRECTION_RX or DIRECTION_TX and
* period may only be PERIOD_CYCLE for the current cycle (other periods may be supported
* in the future). Ago indicates the number of periods in the past to lookup - 0 means
* the current period, 1 is the last one, 2 was two periods ago..
* {@hide}
*/
public long getByteCount(String iface, int direction, int period, int ago) {
try {
return mService.getByteCount(iface, direction, period, ago);
} catch (RemoteException e) {
return -1;
}
}
/**
* returns the number of bytes read+written after which a particular cliff
* takes effect on the named iface. Currently only cliff #1 is supported (1 step)
* {@hide}
*/
public long getCliffThreshold(String iface, int cliff) {
try {
return mService.getCliffThreshold(iface, cliff);
} catch (RemoteException e) {
return -1;
}
}
/**
* returns the thottling bandwidth (bps) for a given cliff # on the named iface.
* only cliff #1 is currently supported.
* {@hide}
*/
public int getCliffLevel(String iface, int cliff) {
try {
return mService.getCliffLevel(iface, cliff);
} catch (RemoteException e) {
return -1;
}
}
/**
* returns the help URI for throttling
* {@hide}
*/
public String getHelpUri() {
try {
return mService.getHelpUri();
} catch (RemoteException e) {
return null;
}
}
private IThrottleManager mService;
/**
* Don't allow use of default constructor.
*/
@SuppressWarnings({"UnusedDeclaration"})
private ThrottleManager() {
}
/**
* {@hide}
*/
public ThrottleManager(IThrottleManager service) {
if (service == null) {
throw new IllegalArgumentException(
"ThrottleManager() cannot be constructed with null service");
}
mService = service;
}
}