Network programming assignment for University
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

114 lines
2.9 KiB

  1. package net.hoo2.auth.vmodem;
  2. import ithakimodem.*;
  3. class Com {
  4. static final int SPEED_DEFAULT = 9600;
  5. static final int TIMEOUT_DEFAULT = 2000;
  6. static final String URL_DEFAULT = "ithaki";
  7. Com () {
  8. modem_ = new Modem();
  9. speed_ = SPEED_DEFAULT;
  10. timeout_ = TIMEOUT_DEFAULT;
  11. modem_.setSpeed(speed_);
  12. modem_.setTimeout(timeout_);
  13. }
  14. Com (int speed, int timeout) {
  15. modem_ = new Modem();
  16. speed_ = speed;
  17. timeout_ = timeout;
  18. modem_.setSpeed(speed_);
  19. modem_.setTimeout(timeout_);
  20. }
  21. // get/set
  22. int timeout () { return timeout_; }
  23. void timeout (int t) {
  24. timeout_ = t;
  25. modem_.setTimeout(timeout_);
  26. }
  27. int speed () { return speed_; }
  28. void speed (int speed) {
  29. speed_ = speed;
  30. modem_.setSpeed(speed_);
  31. }
  32. boolean open (String url) { return modem_.open(url); }
  33. boolean open () { return modem_.open(URL_DEFAULT); }
  34. boolean close() { return modem_.close(); }
  35. Transaction request (Transaction data, boolean ask, byte[] delimiter) {
  36. int ch =0;
  37. int i =0;
  38. _clear (data.response);
  39. if (ask) {
  40. modem_.write(data.code);
  41. modem_.write((int)'\r');
  42. data.departure = System.currentTimeMillis() - (long)((8*(data.code.length+1))*(1000.0/speed_));
  43. }
  44. do {
  45. try {
  46. ch = modem_.read();
  47. }
  48. catch (Exception e) {
  49. System.out.println (e.getMessage());
  50. }
  51. if (i == 0)
  52. data.arrival = System.currentTimeMillis() - (long)(8*(1000.0/speed_));
  53. data.response [i++] = (byte)ch;
  54. } while (!_detect (data.response, "\r\n\n\n".getBytes())
  55. && !_detect (data.response, "NO CARRIER".getBytes())
  56. && !_detect (data.response, delimiter)
  57. && ch != -1);
  58. return data;
  59. }
  60. private boolean _detect (byte[] response, byte[] pattern) {
  61. if (pattern != null) {
  62. for (int i =0 ; i<response.length - pattern.length ; ++i) {
  63. boolean detected = true;
  64. for (int j=0 ; j<pattern.length ; ++j) {
  65. if (response[i+j] != pattern[j]) {
  66. detected = false;
  67. break;
  68. }
  69. }
  70. if (detected)
  71. return true;
  72. }
  73. }
  74. return false;
  75. }
  76. private void _clear (byte[] buffer) {
  77. for (int i=0 ; i<buffer.length ; ++i)
  78. buffer[i] = 0;
  79. }
  80. private Modem modem_;
  81. private int speed_;
  82. private int timeout_;
  83. }
  84. class Transaction {
  85. byte[] code;
  86. byte[] response;
  87. long departure;
  88. long arrival;
  89. Transaction (byte[] code, byte[] response) {
  90. this.code = code;
  91. this.response = response;
  92. departure = arrival = 0;
  93. }
  94. }