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     */
876e80997a9a7b6a15370544edde322cd8833e9524Wink Saville    public void onCapabilitiesChanged(LinkSocket socket, LinkCapabilities changedCapabilities);
8800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville}
89