package voip; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; import java.io.IOException; public abstract class UdpManager implements Runnable { protected DatagramSocket socket = null; protected InetAddress clientAddr = null; protected int clientPort = 0; protected InetAddress myAddr = null; protected int myPort = 0; public UDPManager() { try { socket = new DatagramSocket(); myAddr = InetAddress.getLocalHost(); myPort = socket.getLocalPort(); } catch (SocketException e) { System.out.println("Unable to start UDPManager: " + e.getMessage()); e.printStackTrace(); } catch(UnknownHostException ex) { System.out.println("Unable to create InetAddress out of localhost: " + ex.getMessage()); ex.printStackTrace(); } } public UDPManager(int port) { try { socket = new DatagramSocket(port); myAddr = InetAddress.getLocalHost(); myPort = port; } catch (SocketException e) { System.out.println("Unable to start UDPManager: " + e.getMessage()); e.printStackTrace(); } catch(UnknownHostException ex) { System.out.println("Unable to create InetAddress out of localhost: " + ex.getMessage()); ex.printStackTrace(); } } public void run() { try { while ( true ) { DatagramPacket packet = new DatagramPacket(new byte[Constants.MAX_PACKET_SIZE], Constants.MAX_PACKET_SIZE); socket.receive( packet ); DatagramPacket newPacket = rewritePacket( packet ); if (newPacket != null) socket.send( newPacket ); } } catch ( IOException e ) { System.out.println("Unable to communicate with UDP client: " + e.getMessage()); e.printStackTrace(); } } abstract protected DatagramPacket rewritePacket (DatagramPacket packet); InetAddress getMyAddr() { return myAddr; } void setMyAddr(InetAddress addr) { myAddr = addr; } int getMyPort() { return myPort; } void setMyPort(int port) { myPort = port; } InetAddress getClientAddr() { return clientAddr; } void setClientAddr(InetAddress addr) { clientAddr = addr; } int getClientPort() { return clientPort; } void setClientPort(int port) { clientPort = port; } public String toString() { Assert.assertTrue(myAddr!=null); Assert.assertTrue(clientAddr!=null); Assert.assertTrue(guestAddr!=null); return "my addr = " + myAddr.toString() + ":" + myPort + "\n" + "client: " + clientAddr.toString() + ":" + clientPort + "\n"; } }