@@ -19,13 +19,13 @@ import ithakimodem.*; | |||||
* a convenient and common API for all the session functionalities | * a convenient and common API for all the session functionalities | ||||
*/ | */ | ||||
class Com { | class Com { | ||||
static final int SPEED_DEFAULT = 48000; /**< default communication speed [bps] */ | |||||
static final int TIMEOUT_DEFAULT = 2000; /**< default timeout values [sec] */ | |||||
static final String URL_DEFAULT = "ithaki"; /**< Default destination. Ithaki of-course */ | |||||
static final int SPEED_DEFAULT = 48000; /** default communication speed [bps] */ | |||||
static final int TIMEOUT_DEFAULT = 2000; /** default timeout values [sec] */ | |||||
static final String URL_DEFAULT = "ithaki"; /** Default destination. Ithaki of-course */ | |||||
private Modem modem_; /**< Ref to Modem */ | |||||
private int speed_; /**< Communication speed [bps] */ | |||||
private int timeout_; /**< communication timeout [sec] */ | |||||
private Modem modem_; /** Ref to Modem */ | |||||
private int speed_; /** Communication speed [bps] */ | |||||
private int timeout_; /** communication timeout [sec] */ | |||||
/** | /** | ||||
* Basic constructor | * Basic constructor | ||||
@@ -146,14 +146,15 @@ class Com { | |||||
data.size = _copy (data.response, begin); | data.size = _copy (data.response, begin); | ||||
have_begin = true; | have_begin = true; | ||||
} | } | ||||
} while (ch != -1 && | |||||
(!have_begin || | |||||
( (bin || (detect (data.response, "\r\n\n\n".getBytes(), data.size) == -1)) | |||||
&& (bin || (detect (data.response, "NO CARRIER".getBytes(), data.size) == -1)) | |||||
&& (detect (data.response, end, data.size) == -1) | |||||
) | |||||
) | |||||
); | |||||
} while ( | |||||
ch != -1 && ( | |||||
!have_begin || ( | |||||
(bin || (detect (data.response, "\r\n\n\n".getBytes(), data.size) == -1)) | |||||
&& (bin || (detect (data.response, "NO CARRIER".getBytes(), data.size) == -1)) | |||||
&& (detect (data.response, end, data.size) == -1) | |||||
) | |||||
) | |||||
); | |||||
/*^ | /*^ | ||||
* We loop until: | * We loop until: | ||||
* 1) server returns -1 | * 1) server returns -1 | ||||
@@ -229,11 +230,11 @@ class Com { | |||||
* Class to represent client-server transaction data | * Class to represent client-server transaction data | ||||
*/ | */ | ||||
class Transaction { | class Transaction { | ||||
byte[] code; /**< request code from client */ | |||||
byte[] response; /**< response data from server */ | |||||
long departure; /**< request time */ | |||||
long arrival; /**< response time */ | |||||
int size; /**< size of response data in bytes */ | |||||
byte[] code; /** request code from client */ | |||||
byte[] response; /** response data from server */ | |||||
long departure; /** request time */ | |||||
long arrival; /** response time */ | |||||
int size; /** size of response data in bytes */ | |||||
/** | /** | ||||
* Basic constructor | * Basic constructor | ||||
@@ -12,16 +12,16 @@ package net.hoo2.auth.vmodem; | |||||
* Class to used for the echo sequence | * Class to used for the echo sequence | ||||
*/ | */ | ||||
class Echo { | class Echo { | ||||
static final int ECHO_DURATION_DEFAULT = 240; /**< Default duration for the sequence */ | |||||
static final int ECHO_BUFFER_SIZE = 256; /**< Echo buffer size */ | |||||
static final String ECHO_BEGIN = "PSTART"; /**< Begin pattern of the response */ | |||||
static final String ECHO_END = "PSTOP"; /**< End pattern of the response */ | |||||
static final int ECHO_DURATION_DEFAULT = 240; /** Default duration for the sequence */ | |||||
static final int ECHO_BUFFER_SIZE = 256; /** Echo buffer size */ | |||||
static final String ECHO_BEGIN = "PSTART"; /** Begin pattern of the response */ | |||||
static final String ECHO_END = "PSTOP"; /** End pattern of the response */ | |||||
private Com com_; /**< Reference to communication module */ | |||||
private Log log_; /**< Reference to logging module */ | |||||
private Transaction transaction_; /**< A transaction object to used as a buffer for all requests */ | |||||
private int duration_; /**< The desired duration for the session */ | |||||
private byte[] code_; /**< The desired code for the session */ | |||||
private Com com_; /** Reference to communication module */ | |||||
private Log log_; /** Reference to logging module */ | |||||
private Transaction transaction_; /** A transaction object to used as a buffer for all requests */ | |||||
private int duration_; /** The desired duration for the session */ | |||||
private byte[] code_; /** The desired code for the session */ | |||||
/** | /** | ||||
* Basic constructor | * Basic constructor | ||||
@@ -17,28 +17,28 @@ import java.util.Arrays; | |||||
* Class to used for the GPS session | * Class to used for the GPS session | ||||
*/ | */ | ||||
class GPS { | class GPS { | ||||
static final int GPS_BUFFER_SIZE = 256; /**< GPS trace buffer size */ | |||||
static final String GPS_BEGIN = "START ITHAKI GPS TRACKING"; /**< starting pattern */ | |||||
static final String GPS_END = "STOP ITHAKI GPS TRACKING"; /**< ending pattern */ | |||||
static final int GPS_USE_TRACK = 1; /**< Which track to use (given) */ | |||||
static final String GPS_TRACK_PREFIX = "R="; /**< GPS command track request prefix */ | |||||
static final String GPS_IMAGE_PREFIX = "T="; /**< GPS command image request prefix */ | |||||
static final int GPS_MAX_POINTS = 9; /**< Maximum points (given) */ | |||||
static final int GPS_COORDINATES_SIZE = 6; /**< Coordinates size */ | |||||
static final int GPS_BUFFER_SIZE = 256; /** GPS trace buffer size */ | |||||
static final String GPS_BEGIN = "START ITHAKI GPS TRACKING"; /** starting pattern */ | |||||
static final String GPS_END = "STOP ITHAKI GPS TRACKING"; /** ending pattern */ | |||||
static final int GPS_USE_TRACK = 1; /** Which track to use (given) */ | |||||
static final String GPS_TRACK_PREFIX = "R="; /** GPS command track request prefix */ | |||||
static final String GPS_IMAGE_PREFIX = "T="; /** GPS command image request prefix */ | |||||
static final int GPS_MAX_POINTS = 9; /** Maximum points (given) */ | |||||
static final int GPS_COORDINATES_SIZE = 6; /** Coordinates size */ | |||||
static final int GPS_LATITUDE_BEGIN = 17; /**< The latitude sequence string position */ | |||||
static final int GPS_LATITUDE_END = 28; /**< The end of latitude sequence string position */ | |||||
static final int GPS_LONGITUDE_BEGIN= 29; /**< The longitude sequence string position */ | |||||
static final int GPS_LONGITUDE_END = 41; /**< The end of longitude sequence string position */ | |||||
static final int GPS_LATITUDE_BEGIN = 17; /** The latitude sequence string position */ | |||||
static final int GPS_LATITUDE_END = 28; /** The end of latitude sequence string position */ | |||||
static final int GPS_LONGITUDE_BEGIN= 29; /** The longitude sequence string position */ | |||||
static final int GPS_LONGITUDE_END = 41; /** The end of longitude sequence string position */ | |||||
private Com com_; /**< Reference to communication module */ | |||||
private Log log_; /**< Reference to logging module */ | |||||
private Transaction transaction_; /**< A transaction object to used as a buffer for all requests */ | |||||
private byte[] code_; /**< The desired code for the session */ | |||||
private int start_; /**< Starting point [sec] */ | |||||
private int duration_; /**< Duration of requested trace */ | |||||
private int points_; /**< Number of points to fetch from the above trace */ | |||||
private byte[] coordinates_; /**< Coordinates buffer */ | |||||
private Com com_; /** Reference to communication module */ | |||||
private Log log_; /** Reference to logging module */ | |||||
private Transaction transaction_; /** A transaction object to used as a buffer for all requests */ | |||||
private byte[] code_; /** The desired code for the session */ | |||||
private int start_; /** Starting point [sec] */ | |||||
private int duration_; /** Duration of requested trace */ | |||||
private int points_; /** Number of points to fetch from the above trace */ | |||||
private byte[] coordinates_; /** Coordinates buffer */ | |||||
/** | /** | ||||
* Basic constructor | * Basic constructor | ||||
@@ -17,16 +17,16 @@ import java.io.*; | |||||
* Class to used for the error free and non error free image requests | * Class to used for the error free and non error free image requests | ||||
*/ | */ | ||||
class Image { | class Image { | ||||
static final int IMAGE_BUFFER_SIZE = 256*1024; /**< image buffer size */ | |||||
static final byte[] IMAGE_BEGIN = {(byte)0xFF, (byte)0xD8}; /**< jpeg image begin pattern */ | |||||
static final byte[] IMAGE_END = {(byte)0xFF, (byte)0xD9}; /**< jpeg image end pattern */ | |||||
static final int IMAGE_BUFFER_SIZE = 256*1024; /** image buffer size */ | |||||
static final byte[] IMAGE_BEGIN = {(byte)0xFF, (byte)0xD8}; /** jpeg image begin pattern */ | |||||
static final byte[] IMAGE_END = {(byte)0xFF, (byte)0xD9}; /** jpeg image end pattern */ | |||||
private Com com_; /**< Reference to communication module */ | |||||
private Log log_; /**< Reference to logging module */ | |||||
private Transaction transaction_; /**< A transaction object to used as a buffer for all requests */ | |||||
private String filename_; /**< The filename to store */ | |||||
private int items_; /**< how many images to fetch */ | |||||
private byte[] code_; /**< The image request code for the virtual lab */ | |||||
private Com com_; /** Reference to communication module */ | |||||
private Log log_; /** Reference to logging module */ | |||||
private Transaction transaction_; /** A transaction object to used as a buffer for all requests */ | |||||
private String filename_; /** The filename to store */ | |||||
private int items_; /** how many images to fetch */ | |||||
private byte[] code_; /** The image request code for the virtual lab */ | |||||
/** | /** | ||||
* Basic constructor | * Basic constructor | ||||
@@ -19,9 +19,9 @@ import java.io.PrintWriter; | |||||
*/ | */ | ||||
class Log { | class Log { | ||||
private String logfile_; /**< The log file name */ | |||||
private boolean verbose_; /**< The desired verbosity (for the console)*/ | |||||
private PrintWriter writer_; /**< A buffered writer to use for streaming */ | |||||
private String logfile_; /** The log file name */ | |||||
private boolean verbose_; /** The desired verbosity (for the console)*/ | |||||
private PrintWriter writer_; /** A buffered writer to use for streaming */ | |||||
/** | /** | ||||
* Basic constructor | * Basic constructor | ||||
@@ -3,6 +3,14 @@ | |||||
* @brief | * @brief | ||||
* Contain the Main class for the project VirtualModem | * Contain the Main class for the project VirtualModem | ||||
* | * | ||||
* Usage examples: | |||||
* ========================== | |||||
* java -jar ./VirtualModem.jar -v -l Exxxx-$(date +%F-%T).log -e Exxxx 600 | |||||
* java -jar ./VirtualModem.jar -v -l Qxxx-Rxxxx-$(date +%F-%T).log -a Qxxxx Rxxxx 600 | |||||
* java -jar ./VirtualModem.jar -v -l Pxxxx_600_80_8p-$(date +%F-%T).log -p Pxxxx 600 80 8 P1124-$(date +%F-%T) | |||||
* java -jar ./VirtualModem.jar -v -l Mxxxx-$(date +%F-%T).log -g Mxxxx Mxxxx-$(date +%F-%T) 2 | |||||
* java -jar ./VirtualModem.jar -v -l Gxxxx-$(date +%F-%T).log -g Gxxxx Gxxxx-$(date +%F-%T) 2 | |||||
* | |||||
* @author Christos Choutouridis AEM:8997 | * @author Christos Choutouridis AEM:8997 | ||||
* @email cchoutou@ece.auth.gr | * @email cchoutou@ece.auth.gr | ||||
*/ | */ | ||||
@@ -10,7 +18,7 @@ package net.hoo2.auth.vmodem; | |||||
/** @name imports */ | /** @name imports */ | ||||
/** @{ */ | /** @{ */ | ||||
import org.apache.commons.cli.*; /**< command line utility */ | |||||
import org.apache.commons.cli.*; /** command line utility */ | |||||
/** @} */ | /** @} */ | ||||
@@ -20,19 +28,19 @@ import org.apache.commons.cli.*; /**< command line utility */ | |||||
* @brief This is the main control class of the program. | * @brief This is the main control class of the program. | ||||
* | * | ||||
* This class includes the main function which read the user input | * This class includes the main function which read the user input | ||||
* and create the apropriate object for the requested sequence to | |||||
* and create the appropriate object for the requested sequence to | |||||
* retrieve data. | * retrieve data. | ||||
*/ | */ | ||||
public class VirtualModem { | public class VirtualModem { | ||||
/** @name Data */ | /** @name Data */ | ||||
/** @{ */ | /** @{ */ | ||||
CommandLine line; /**< Command line for the argument list */ | |||||
CommandLineParser parser; /**< Parser for the argument list */ | |||||
Options options; /**< Option configuration container */ | |||||
HelpFormatter formatter; /**< An extra helper for -h */ | |||||
Com com; /**< Reference to basic configuration module */ | |||||
Log log; /**< Reference to basig logging module */ | |||||
CommandLine line; /** Command line for the argument list */ | |||||
CommandLineParser parser; /** Parser for the argument list */ | |||||
Options options; /** Option configuration container */ | |||||
HelpFormatter formatter; /** An extra helper for -h */ | |||||
Com com; /** Reference to basic configuration module */ | |||||
Log log; /** Reference to basic logging module */ | |||||
/** @} */ | /** @} */ | ||||
/** | /** | ||||
@@ -198,12 +206,16 @@ public class VirtualModem { | |||||
} | } | ||||
else if (line.hasOption("gps")) { | else if (line.hasOption("gps")) { | ||||
byte[] code = line.getOptionValues("gps")[0].getBytes(); | byte[] code = line.getOptionValues("gps")[0].getBytes(); | ||||
GPS g = new GPS (com, log, code, | |||||
Integer.valueOf(line.getOptionValues("gps")[1]), | |||||
Integer.valueOf(line.getOptionValues("gps")[2]), | |||||
Integer.valueOf(line.getOptionValues("gps")[3])); | |||||
Image im = new Image (com, log, null, | |||||
line.getOptionValues("gps")[4], 1); | |||||
GPS g = new GPS ( | |||||
com, log, code, | |||||
Integer.valueOf(line.getOptionValues("gps")[1]), | |||||
Integer.valueOf(line.getOptionValues("gps")[2]), | |||||
Integer.valueOf(line.getOptionValues("gps")[3]) | |||||
); | |||||
Image im = new Image ( | |||||
com, log, null, | |||||
line.getOptionValues("gps")[4], 1 | |||||
); | |||||
if (com.open()) { | if (com.open()) { | ||||
g.caption(); | g.caption(); | ||||
im.code(g.run().getBytes()); | im.code(g.run().getBytes()); | ||||