package com.num.helpers;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import com.num.models.Address;
import com.num.models.LastMile;
import com.num.models.Measure;
import com.num.models.Ping;
import com.num.models.WarmupExperiment;
import com.num.utils.CommandLineUtil;
import com.num.utils.ParseUtil;
public class PingHelper {
public static CommandLineUtil cmdUtil;
public static LastMile firstHopHelp(Address address, int count) {
LastMile p = null;
int ttl = 1;
String ipDst = address.getIp();
String cmd = "ping";
String options = "-n -s 56 -c 1 -t " + ttl;
String output = "";
cmdUtil = new CommandLineUtil();
int hopCount = 1;
output = cmdUtil.runCommand(cmd, ipDst, options);
try{
if (!output.contains("ttl")) {
if (!output.contains("From")){
while(!output.contains("From")) {
options = "-n -s 56 -c 1 -t " + ++ttl;
output = cmdUtil.runCommand(cmd, ipDst, options);
if (ttl > 50) {
break;
}
}
}
ipDst = output.substring(output.indexOf("From") + 4, output.indexOf("icmp")).trim();
options = "-c 5";
output = cmdUtil.runCommand(cmd, ipDst, options);
}
Measure ping_measurement = ParseUtil.PingParser(output);
Socket conn;
String ipSrc = "";
try {
conn = new Socket("www.google.com", 80);
ipSrc = conn.getLocalAddress().toString();
conn.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
p=new LastMile(ipSrc, address ,ping_measurement, ttl, ipDst);
}
catch(Exception e){
p=new LastMile("", address ,new Measure(-1, -1, -1, -1), ttl, ipDst);
}
return p;
}
/**
* Pinghelp helps run ping command by creating cmd and inputs
* @return
*/
public static Ping pingHelp(Address address, int count) {
Ping p = null;
String ipDst = address.getIp();
String cmd = "ping";
double timegap = 0.5;
String options = "-c " + count +" -i "+timegap;
String output = "";
cmdUtil = new CommandLineUtil();
output = cmdUtil.runCommand(cmd, ipDst, options);
Measure ping_measurement = ParseUtil.PingParser(output);
Socket conn;
String ipSrc = "";
try {
conn = new Socket("www.google.com", 80);
ipSrc = conn.getLocalAddress().toString();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
p=new Ping(ipSrc, address ,ping_measurement);
return p;
}
public static void warmupSequenceHelp(WarmupExperiment experiment) {
Ping p = null;
String ipDst = experiment.getAddress().getIp();
String cmd = "ping";
String options = "-c " + experiment.getTotal_count() + " -i " + experiment.getTime_gap();
String output = "";
cmdUtil = new CommandLineUtil();
output = cmdUtil.runCommand(cmd, ipDst, options);
ParseUtil.warmupParser(output,experiment);
}
}