|
- package net.hoo2.auth.vmodem;
-
- import ithakimodem.*;
-
- class Com {
- static final int SPEED_DEFAULT = 9600;
- static final int TIMEOUT_DEFAULT = 2000;
- static final String URL_DEFAULT = "ithaki";
-
- Com () {
- modem_ = new Modem();
- speed_ = SPEED_DEFAULT;
- timeout_ = TIMEOUT_DEFAULT;
- modem_.setSpeed(speed_);
- modem_.setTimeout(timeout_);
- }
- Com (int speed, int timeout) {
- modem_ = new Modem();
- speed_ = speed;
- timeout_ = timeout;
- modem_.setSpeed(speed_);
- modem_.setTimeout(timeout_);
- }
-
- // get/set
- int timeout () { return timeout_; }
- void timeout (int t) {
- timeout_ = t;
- modem_.setTimeout(timeout_);
- }
-
- int speed () { return speed_; }
- void speed (int speed) {
- speed_ = speed;
- modem_.setSpeed(speed_);
- }
-
-
- boolean open (String url) { return modem_.open(url); }
- boolean open () { return modem_.open(URL_DEFAULT); }
- boolean close() { return modem_.close(); }
-
-
- Transaction request (Transaction data, boolean ask, byte[] delimiter) {
- int ch =0;
- int i =0;
-
- _clear (data.response);
- if (ask) {
- modem_.write(data.code);
- modem_.write((int)'\r');
- data.departure = System.currentTimeMillis() - (long)((8*(data.code.length+1))*(1000.0/speed_));
- }
- do {
- try {
- ch = modem_.read();
- }
- catch (Exception e) {
- System.out.println (e.getMessage());
- }
- if (i == 0)
- data.arrival = System.currentTimeMillis() - (long)(8*(1000.0/speed_));
- data.response [i++] = (byte)ch;
- } while (!_detect (data.response, "\r\n\n\n".getBytes())
- && !_detect (data.response, "NO CARRIER".getBytes())
- && !_detect (data.response, delimiter)
- && ch != -1);
-
- return data;
- }
-
- private boolean _detect (byte[] response, byte[] pattern) {
- if (pattern != null) {
- for (int i =0 ; i<response.length - pattern.length ; ++i) {
- boolean detected = true;
- for (int j=0 ; j<pattern.length ; ++j) {
- if (response[i+j] != pattern[j]) {
- detected = false;
- break;
- }
- }
- if (detected)
- return true;
- }
- }
- return false;
- }
-
- private void _clear (byte[] buffer) {
- for (int i=0 ; i<buffer.length ; ++i)
- buffer[i] = 0;
- }
-
- private Modem modem_;
- private int speed_;
- private int timeout_;
-
- }
-
-
- class Transaction {
- byte[] code;
- byte[] response;
- long departure;
- long arrival;
-
- Transaction (byte[] code, byte[] response) {
- this.code = code;
- this.response = response;
- departure = arrival = 0;
- }
- }
-
|