package com.limegroup.gnutella.rudp; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.net.UnknownHostException; import org.limewire.io.NetworkUtils; import org.limewire.rudp.messages.RUDPMessage; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; import com.limegroup.gnutella.NetworkManager; import com.limegroup.gnutella.UDPService; import com.limegroup.gnutella.messages.Message; @Singleton class LimeUDPService implements org.limewire.rudp.UDPService { private final NetworkManager networkManager; private final Provider<UDPService> udpService; @Inject public LimeUDPService(NetworkManager networkManager, Provider<UDPService> udpService) { this.networkManager = networkManager; this.udpService = udpService; } public InetAddress getStableListeningAddress() { InetAddress lip = null; try { lip = InetAddress.getByName( NetworkUtils.ip2string(networkManager.getNonForcedAddress())); } catch (UnknownHostException uhe) { try { lip = InetAddress.getLocalHost(); } catch (UnknownHostException uhe2) { } } return lip; } public int getStableListeningPort() { return udpService.get().getStableUDPPort(); } public boolean isListening() { return udpService.get().isListening(); } public boolean isNATTraversalCapable() { return networkManager.canDoFWT(); } public void send(RUDPMessage message, SocketAddress address) { udpService.get().send((Message)message, (InetSocketAddress)address); } }