LinkSocketNotifier.java revision 00cfe112b436eaafb44c0466ceacce3baf10a8f3
100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville/* 200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Copyright (C) 2010 The Android Open Source Project 300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * 400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * you may not use this file except in compliance with the License. 600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * You may obtain a copy of the License at 700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * 800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * 1000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Unless required by applicable law or agreed to in writing, software 1100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 1200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * See the License for the specific language governing permissions and 1400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * limitations under the License. 1500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 1600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 1700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Savillepackage android.net; 1800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 1900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Savilleimport java.util.Map; 2000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 2100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville/** 2200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Interface used to get feedback about a {@link android.net.LinkSocket}. Instance is optionally 2300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * passed when a LinkSocket is constructed. Multiple LinkSockets may use the same notifier. 2400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @hide 2500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 2600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Savillepublic interface LinkSocketNotifier { 2700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 2800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * This callback function will be called if a better link 2900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * becomes available. 3000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * TODO - this shouldn't be checked for all cases - what's the conditional 3100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * flag? 3200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * If the duplicate socket is accepted, the original will be marked invalid 3300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * and additional use will throw exceptions. 3400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param original the original LinkSocket 3500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param duplicate the new LinkSocket that better meets the application 3600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * requirements 3700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @return {@code true} if the application intends to use this link 3800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * 3900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * REM 4000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * TODO - how agressive should we be? 4100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * At a minimum CS tracks which LS have this turned on and tracks the requirements 4200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * When a new link becomes available, automatically check if any of the LinkSockets 4300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * will care. 4400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * If found, grab a refcount on the link so it doesn't go away and send notification 4500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Optionally, periodically setup connection on available networks to check for better links 4600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Maybe pass this info into the LinkFactories so condition changes can be acted on more quickly 4700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 4800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public boolean onBetterLinkAvailable(LinkSocket original, LinkSocket duplicate); 4900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 5000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 5100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * This callback function will be called when a LinkSocket no longer has 5200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * an active link. 5300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param socket the LinkSocket that lost its link 5400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * 5500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * REM 5600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * NetworkStateTracker tells us it is disconnected 5700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * CS checks the table for LS on that link 5800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * CS calls each callback (need to work out p2p cross process callback) 5900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 6000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public void onLinkLost(LinkSocket socket); 6100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 6200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 6300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * This callback function will be called when an application calls 6400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * requestNewLink on a LinkSocket but the LinkSocket is unable to find 6500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * a suitable new link. 6600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param socket the LinkSocket for which a new link was not found 6700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * TODO - why the diff between initial request (sync) and requestNewLink? 6800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * 6900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * REM 7000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * CS process of trying to find a new link must track the LS that started it 7100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * on failure, call callback 7200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 7300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public void onNewLinkUnavailable(LinkSocket socket); 7400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 7500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 7600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * This callback function will be called when any of the notification-marked 7700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * capabilities of the LinkSocket (e.g. upstream bandwidth) have changed. 7800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param socket the linkSocet for which capabilities have changed 7900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param changedCapabilities the set of capabilities that the application 8000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * is interested in and have changed (with new values) 8100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * 8200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * REM 8300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Maybe pass the interesting capabilities into the Links. 8400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Get notified of every capability change 8500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * check for LinkSockets on that Link that are interested in that Capability - call them 8600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 8700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public void onCapabilityChanged(LinkSocket socket, LinkCapabilities changedCapabilities); 8800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville} 89