package com.limegroup.gnutella; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import junit.framework.Test; import com.limegroup.gnutella.messages.PingReply; import com.limegroup.gnutella.messages.PingRequest; import com.limegroup.gnutella.settings.ConnectionSettings; import com.limegroup.gnutella.stubs.ActivityCallbackStub; import com.limegroup.gnutella.util.PrivilegedAccessor; public class UDPStatusTest extends ClientSideTestCase { public UDPStatusTest(String name) { super(name); } public static Test suite() { return buildTestSuite(UDPStatusTest.class); } protected static ActivityCallback getActivityCallback() { return new ActivityCallbackStub(); } protected static Integer numUPs() { return new Integer(1); } public void testSolicited() throws Exception { drainAll(); assertFalse(RouterService.canReceiveSolicited()); assertFalse(RouterService.canReceiveUnsolicited()); assertTrue(RouterService.getUdpService().isListening()); DatagramSocket s = new DatagramSocket(6346); s.setSoTimeout(1000); try { PingReply pong = PingReply.create(RouterService.getUdpService().getSolicitedGUID().bytes(), (byte)1,6346,InetAddress.getLocalHost().getAddress()); ByteArrayOutputStream baos = new ByteArrayOutputStream(); pong.write(baos); byte []buf = baos.toByteArray(); s.send(new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(), RouterService.getUdpService().getStableUDPPort())); Thread.sleep(100); assertTrue(RouterService.canReceiveSolicited()); assertFalse(RouterService.canReceiveUnsolicited()); } catch (IOException bad) { fail(bad); } finally { s.close(); } PrivilegedAccessor.setValue(RouterService.getUdpService(),"_acceptedSolicitedIncoming",Boolean.FALSE); assertFalse(RouterService.canReceiveSolicited()); } public void testUnsolicited() throws Exception { drainAll(); assertFalse(RouterService.canReceiveSolicited()); assertFalse(RouterService.canReceiveUnsolicited()); assertTrue(RouterService.getUdpService().isListening()); DatagramSocket s = new DatagramSocket(6346); s.setSoTimeout(1000); try { PingRequest ping = new PingRequest(RouterService.getUdpService().getConnectBackGUID().bytes(), (byte)1); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ping.write(baos); byte []buf = baos.toByteArray(); s.send(new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(), RouterService.getUdpService().getStableUDPPort())); Thread.sleep(100); assertFalse(RouterService.canReceiveSolicited()); assertTrue(RouterService.canReceiveUnsolicited()); } catch (IOException bad) { fail(bad); } finally { s.close(); } PrivilegedAccessor.setValue(RouterService.getUdpService(),"_acceptedUnsolicitedIncoming",Boolean.FALSE); assertFalse(RouterService.canReceiveUnsolicited()); } public void testUnsolicitedConnected() throws Exception { drainAll(); assertFalse(RouterService.canReceiveSolicited()); assertFalse(RouterService.canReceiveUnsolicited()); assertTrue(RouterService.getUdpService().isListening()); DatagramSocket s = new DatagramSocket(testUP[0].getPort(),testUP[0].getInetAddress()); s.setSoTimeout(1000); try { PingRequest ping = new PingRequest(RouterService.getUdpService().getConnectBackGUID().bytes(), (byte)1); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ping.write(baos); byte []buf = baos.toByteArray(); s.send(new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(), RouterService.getUdpService().getStableUDPPort())); Thread.sleep(100); assertFalse(RouterService.canReceiveSolicited()); assertFalse(RouterService.canReceiveUnsolicited()); } catch (IOException bad) { fail(bad); } finally { s.close(); } } }