package com.limegroup.gnutella.udpconnect;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.net.SocketImplFactory;
import com.limegroup.gnutella.UDPService;
/**
* Create a reliable udp connection interface.
*/
public class UDPConnection extends Socket {
public static final byte VERSION = (byte) 1;
private UDPConnectionProcessor _processor;
/**
* Create the UDPConnection.
*/
public UDPConnection(String ip, int port) throws IOException {
// Handle the real work in the processor
this(InetAddress.getByName(ip), port);
}
/**
* Create the UDPConnection.
*/
public UDPConnection(InetAddress ip, int port) throws IOException {
// Handle the real work in the processor
_processor = new UDPConnectionProcessor(ip, port);
}
public InputStream getInputStream() throws IOException {
return _processor.getInputStream();
}
public OutputStream getOutputStream() throws IOException {
return _processor.getOutputStream();
}
public void setSoTimeout(int timeout) throws SocketException {
_processor.setSoTimeout(timeout);
}
public void close() throws IOException {
_processor.close();
}
public InetAddress getInetAddress() {
return _processor.getInetAddress();
}
public InetAddress getLocalAddress() {
return _processor.getLocalAddress();
}
public int getSoTimeout() {
return _processor.getReadTimeout();
}
//------- Mostly Unimplemented ----------------
public UDPConnection() throws IOException {
throw new IOException("not implemented");
}
public UDPConnection(String host, int port, InetAddress localAddr,
int localPort) throws IOException {
throw new IOException("not implemented");
}
public UDPConnection(InetAddress address, int port, InetAddress localAddr,
int localPort) throws IOException {
throw new IOException("not implemented");
}
public UDPConnection(String host, int port, boolean stream)
throws IOException {
throw new IOException("not implemented");
}
public UDPConnection(InetAddress host, int port, boolean stream)
throws IOException {
throw new IOException("not implemented");
}
// These won't compile in Java 1.3
//public void connect(SocketAddress endpoint) throws IOException {
//throw new IOException("not implemented");
//}
//public void connect(SocketAddress endpoint, int timeout)
//throws IOException {
//throw new IOException("not implemented");
//}
//public void bind(SocketAddress bindpoint) throws IOException {
//throw new IOException("not implemented");
//}
public int getPort() {
return _processor.getPort();
}
public int getLocalPort() {
return UDPService.instance().getStableUDPPort();
}
// These won't compile in Java 1.3
//public SocketAddress getRemoteSocketAddress() {
//return null;
//}
//public SocketAddress getLocalSocketAddress() {
//return null;
//}
//public SocketChannel getChannel() {
//return null;
//}
public void setTcpNoDelay(boolean on) throws SocketException {
// does nothing
}
public boolean getTcpNoDelay() throws SocketException {
return true;
}
public void setSoLinger(boolean on, int linger) throws SocketException {
// does nothing
}
public int getSoLinger() throws SocketException {
return -1;
}
public void sendUrgentData (int data) throws IOException {
throw new IOException("not implemented");
}
public void setOOBInline(boolean on) throws SocketException {
throw new SocketException("not implemented");
}
public boolean getOOBInline() throws SocketException {
throw new SocketException("not implemented");
}
public synchronized void setSendBufferSize(int size)
throws SocketException {
throw new SocketException("not implemented");
}
public synchronized int getSendBufferSize() throws SocketException {
throw new SocketException("not implemented");
}
public synchronized void setReceiveBufferSize(int size)
throws SocketException{
throw new SocketException("not implemented");
}
public synchronized int getReceiveBufferSize()
throws SocketException{
throw new SocketException("not implemented");
}
public void setKeepAlive(boolean on) throws SocketException {
// ignore
}
public boolean getKeepAlive() throws SocketException {
return true;
}
public void setTrafficClass(int tc) throws SocketException {
throw new SocketException("not implemented");
}
public int getTrafficClass() throws SocketException {
throw new SocketException("not implemented");
}
public void setReuseAddress(boolean on) throws SocketException {
throw new SocketException("not implemented");
}
public boolean getReuseAddress() throws SocketException {
throw new SocketException("not implemented");
}
public void shutdownInput() throws IOException {
throw new SocketException("not implemented");
}
public void shutdownOutput() throws IOException
{
throw new IOException("not implemented");
}
public String toString() {
return "UDPConnection";
}
public boolean isConnected() {
return _processor.isConnected();
}
public boolean isBound() {
return true;
}
public boolean isClosed() {
return !_processor.isConnected();
}
public boolean isInputShutdown() {
return !_processor.isConnected();
}
public boolean isOutputShutdown() {
return !_processor.isConnected();
}
public static void setSocketImplFactory(SocketImplFactory fac)
throws IOException {
throw new IOException("not implemented");
}
}