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 android.net.LinkCapabilities; 2000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Savilleimport android.net.LinkProperties; 2100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Savilleimport android.net.LinkSocketNotifier; 2200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 2300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Savilleimport android.util.Log; 2400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 2500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Savilleimport java.io.IOException; 2600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Savilleimport java.net.Socket; 2700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Savilleimport java.net.SocketAddress; 2800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Savilleimport java.net.SocketTimeoutException; 2900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Savilleimport java.net.UnknownHostException; 3000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Savilleimport java.util.HashSet; 3100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Savilleimport java.util.Set; 3200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 3300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville/** @hide */ 3400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Savillepublic class LinkSocket extends Socket { 3500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville private final static String TAG = "LinkSocket"; 3600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville private final static boolean DBG = true; 3700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 3800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 3900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Default constructor 4000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 4100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public LinkSocket() { 4200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("LinkSocket() EX"); 4300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 4400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 4500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 4600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Creates a new unconnected socket. 4700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param notifier a reference to a class that implements {@code LinkSocketNotifier} 4800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 4900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public LinkSocket(LinkSocketNotifier notifier) { 5000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("LinkSocket(notifier) EX"); 5100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 5200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 5300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 5400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Creates a new unconnected socket usign the given proxy type. 5500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param notifier a reference to a class that implements {@code LinkSocketNotifier} 5600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param proxy the specified proxy for this socket 5700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @throws IllegalArgumentException if the argument proxy is null or of an invalid type. 5800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @throws SecurityException if a security manager exists and it denies the permission 5900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * to connect to the given proxy. 6000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 6100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public LinkSocket(LinkSocketNotifier notifier, Proxy proxy) { 6200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("LinkSocket(notifier, proxy) EX"); 6300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 6400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 6500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 6600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @return the {@code LinkProperties} for the socket 6700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 6800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public LinkProperties getLinkProperties() { 6900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("LinkProperties() EX"); 7000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville return new LinkProperties(); 7100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 7200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 7300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 7400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Set the {@code LinkCapabilies} needed for this socket. If the socket is already connected 7500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * or is a duplicate socket the request is ignored and {@code false} will 7600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * be returned. A needs map can be created via the {@code createNeedsMap} static 7700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * method. 7800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param needs the needs of the socket 7900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @return {@code true} if needs are successfully set, {@code false} otherwise 8000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 8100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public boolean setNeededCapabilities(LinkCapabilities needs) { 8200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("setNeeds() EX"); 8300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville return false; 8400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 8500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 8600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 8700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @return the LinkCapabilites set by setNeededCapabilities, empty if none has been set 8800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 8900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public LinkCapabilities getNeededCapabilities() { 9000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("getNeeds() EX"); 9100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville return null; 9200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 9300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 9400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 9500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @return all of the {@code LinkCapabilities} of the link used by this socket 9600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 9700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public LinkCapabilities getCapabilities() { 9800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("getCapabilities() EX"); 9900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville return null; 10000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 10100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 10200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 10300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Returns this LinkSockets set of capabilities, filtered according to 10400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * the given {@code Set}. Capabilities in the Set but not available from 10500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * the link will not be reported in the results. Capabilities of the link 10600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * but not listed in the Set will also not be reported in the results. 10700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param capabilities {@code Set} of capabilities requested 10800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @return the filtered {@code LinkCapabilities} of this LinkSocket, may be empty 10900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 11000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public LinkCapabilities getCapabilities(Set<Integer> capabilities) { 11100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("getCapabilities(capabilities) EX"); 11200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville return new LinkCapabilities(); 11300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 11400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 11500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 11600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Provide the set of capabilities the application is interested in tracking 11700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * for this LinkSocket. 11800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param capabilities a {@code Set} of capabilities to track 11900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 12000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public void setTrackedCapabilities(Set<Integer> capabilities) { 12100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("setTrackedCapabilities(capabilities) EX"); 12200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 12300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 12400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 12500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @return the {@code LinkCapabilities} that are tracked, empty if none has been set. 12600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 12700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public Set<Integer> getTrackedCapabilities() { 12800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("getTrackedCapabilities(capabilities) EX"); 12900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville return new HashSet<Integer>(); 13000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 13100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 13200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 13300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Connects this socket to the given remote host address and port specified 13400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * by dstName and dstPort. 13500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param dstName the address of the remote host to connect to 13600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param dstPort the port to connect to on the remote host 13700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param timeout the timeout value in milliseconds or 0 for infinite timeout 13800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @throws UnknownHostException if the given dstName is invalid 13900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @throws IOException if the socket is already connected or an error occurs 14000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * while connecting 14100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @throws SocketTimeoutException if the timeout fires 14200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 14300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public void connect(String dstName, int dstPort, int timeout) 14400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville throws UnknownHostException, IOException, SocketTimeoutException { 14500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("connect(dstName, dstPort, timeout) EX"); 14600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 14700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 14800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 14900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Connects this socket to the given remote host address and port specified 15000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * by dstName and dstPort. 15100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param dstName the address of the remote host to connect to 15200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param dstPort the port to connect to on the remote host 15300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @throws UnknownHostException if the given dstName is invalid 15400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @throws IOException if the socket is already connected or an error occurs 15500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * while connecting 15600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 15700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public void connect(String dstName, int dstPort) 15800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville throws UnknownHostException, IOException { 15900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("connect(dstName, dstPort, timeout) EX"); 16000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 16100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 16200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 16300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Connects this socket to the given remote host address and port specified 16400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * by the SocketAddress with the specified timeout. 16500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @deprecated Use {@code connect(String dstName, int dstPort, int timeout)} 16600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * instead. Using this method may result in reduced functionality. 16700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param remoteAddr the address and port of the remote host to connect to 16800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @throws IllegalArgumentException if the given SocketAddress is invalid 16900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @throws IOException if the socket is already connected or an error occurs 17000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * while connecting 17100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @throws SocketTimeoutException if the timeout expires 17200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 17300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville @Override 17400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville @Deprecated 17500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public void connect(SocketAddress remoteAddr, int timeout) 17600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville throws IOException, SocketTimeoutException { 17700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("connect(remoteAddr, timeout) EX DEPRECATED"); 17800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 17900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 18000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 18100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Connects this socket to the given remote host address and port specified 18200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * by the SocketAddress. 18300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * TODO add comment on all these that the network selection happens during connect 18400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * and may take 30 seconds 18500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @deprecated Use {@code connect(String dstName, int dstPort)} 18600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Using this method may result in reduced functionality. 18700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param remoteAddr the address and port of the remote host to connect to. 18800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @throws IllegalArgumentException if the SocketAddress is invalid or not supported. 18900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @throws IOException if the socket is already connected or an error occurs 19000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * while connecting 19100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 19200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville @Override 19300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville @Deprecated 19400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public void connect(SocketAddress remoteAddr) throws IOException { 19500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("connect(remoteAddr) EX DEPRECATED"); 19600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 19700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 19800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 19900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Connect a duplicate socket socket to the same remote host address and port 2006e80997a9a7b6a15370544edde322cd8833e9524Wink Saville * as the original with a timeout parameter. 2016e80997a9a7b6a15370544edde322cd8833e9524Wink Saville * @param timeout the timeout value in milliseconds or 0 for infinite timeout 2026e80997a9a7b6a15370544edde322cd8833e9524Wink Saville * @throws IOException if the socket is already connected or an error occurs 2036e80997a9a7b6a15370544edde322cd8833e9524Wink Saville * while connecting 2046e80997a9a7b6a15370544edde322cd8833e9524Wink Saville */ 2056e80997a9a7b6a15370544edde322cd8833e9524Wink Saville public void connect(int timeout) throws IOException { 2066e80997a9a7b6a15370544edde322cd8833e9524Wink Saville if (DBG) log("connect(timeout) EX"); 2076e80997a9a7b6a15370544edde322cd8833e9524Wink Saville } 2086e80997a9a7b6a15370544edde322cd8833e9524Wink Saville 2096e80997a9a7b6a15370544edde322cd8833e9524Wink Saville /** 2106e80997a9a7b6a15370544edde322cd8833e9524Wink Saville * Connect a duplicate socket socket to the same remote host address and port 21100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * as the original. 21200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @throws IOException if the socket is already connected or an error occurs 21300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * while connecting 21400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 21500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public void connect() throws IOException { 21600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("connect() EX"); 21700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 21800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 21900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 22000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Closes the socket. It is not possible to reconnect or rebind to this 22100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * socket thereafter which means a new socket instance has to be created. 22200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @throws IOException if an error occurs while closing the socket 22300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 22400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville @Override 22500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public synchronized void close() throws IOException { 22600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("close() EX"); 22700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 22800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 22900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 23000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Request that a new LinkSocket be created using a different radio 23100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * (such as WiFi or 3G) than the current LinkSocket. If a different 23200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * radio is available a call back will be made via {@code onBetterLinkAvail}. 23300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * If unable to find a better radio, application will be notified via 23400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * {@code onNewLinkUnavailable} 23500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @see LinkSocketNotifier#onBetterLinkAvailable(LinkSocket, LinkSocket) 23600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param linkRequestReason reason for requesting a new link. 23700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 23800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public void requestNewLink(LinkRequestReason linkRequestReason) { 23900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("requestNewLink(linkRequestReason) EX"); 24000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 24100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 24200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 24300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @deprecated LinkSocket will automatically pick the optimum interface 24400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * to bind to 24500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @param localAddr the specific address and port on the local machine 24600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * to bind to 24700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * @throws IOException always as this method is deprecated for LinkSocket 24800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 24900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville @Override 25000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville @Deprecated 2516e80997a9a7b6a15370544edde322cd8833e9524Wink Saville public void bind(SocketAddress localAddr) throws UnsupportedOperationException { 25200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville if (DBG) log("bind(localAddr) EX throws IOException"); 2536e80997a9a7b6a15370544edde322cd8833e9524Wink Saville throw new UnsupportedOperationException("bind is deprecated for LinkSocket"); 25400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 25500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 25600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 25700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Reason codes an application can specify when requesting for a new link. 25800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * TODO: need better documentation 25900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 26000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public static final class LinkRequestReason { 26100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** No constructor */ 26200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville private LinkRequestReason() {} 26300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 26400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** This link is working properly */ 26500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public static final int LINK_PROBLEM_NONE = 0; 26600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** This link has an unknown issue */ 26700cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville public static final int LINK_PROBLEM_UNKNOWN = 1; 26800cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 26900cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville 27000cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville /** 27100cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville * Debug logging 27200cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville */ 27300cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville protected static void log(String s) { 27400cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville Log.d(TAG, s); 27500cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville } 27600cfe112b436eaafb44c0466ceacce3baf10a8f3Wink Saville} 277