package org.mobicents.qa.performance.jainsip.util; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class SippController { private static final boolean debugFlag = false; public static final String INCREASE_ONE_COMMAND = new String("+"); public static final String INCREASE_TEN_COMMAND = new String("*"); public static final String DECREASE_ONE_COMMAND = new String("-"); public static final String DECREASE_TEN_COMMAND = new String("/"); public static final String QUIT_COMMAND = new String("q"); public static final String SET_RATE_COMMAND = new String("c set rate"); public static final String DUMP_TASKS_COMMAND = new String("c dump tasks"); private DatagramSocket socket; private int controlPort; private InetAddress controlAddress; private int sippCallRate; public SippController(String controlIp, String controlPort) { try { this.socket = new DatagramSocket(); this.controlPort = Integer.parseInt(controlPort); this.controlAddress = InetAddress.getByName(controlIp); this.sippCallRate = 0; Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { quit(); } }); } catch (Exception e) { e.printStackTrace(); } } public void setRate(int n) { sendMessage(SET_RATE_COMMAND + " " + n); sippCallRate = n; } public void increaseRate() { sendMessage(INCREASE_ONE_COMMAND); sippCallRate++; } public void increaseRate(int n) { if (n < 0) throw new IllegalArgumentException(); for (int i = 0; i < n; i++){ increaseRate(); } } public void decreaseRate() { sendMessage(DECREASE_ONE_COMMAND); sippCallRate++; } public void decreaseRate(int n) { if (n < 0) throw new IllegalArgumentException(); for (int i = 0; i < n; i++){ decreaseRate(); } } public void increaseRateTen() { sendMessage(INCREASE_TEN_COMMAND); sippCallRate++; } public void increaseRateTen(int n) { if (n < 0) throw new IllegalArgumentException(); for (int i = 0; i < n; i++){ increaseRateTen(); } } public void decreaseRateTen() { sendMessage(DECREASE_TEN_COMMAND); sippCallRate++; } public void decreaseRateTen(int n) { if (n < 0) throw new IllegalArgumentException(); for (int i = 0; i < n; i++){ decreaseRateTen(); } } public void quit() { sendMessage(QUIT_COMMAND); sendMessage(QUIT_COMMAND); } private void sendMessage(String msg) { try { byte[] msgbytes = msg.getBytes(); socket.send(new DatagramPacket(msgbytes, msgbytes.length, controlAddress, controlPort)); if (debugFlag) { System.out.println("SippController: message sent: " + msg); } } catch (Exception e) { e.printStackTrace(); } } }