mtn.c
上传用户:mei_mei897
上传日期:2007-01-05
资源大小:82k
文件大小:6k
源码类别:

手机短信编程

开发平台:

Unix_Linux

  1. /* -------------------------------------------------------------------- */ 
  2. /* SMS Client, send messages to mobile phones and pagers */ 
  3. /* */ 
  4. /* mtn.c  */
  5. /* */ 
  6. /*  Copyright (C) 1998 Alf Stockton */ 
  7. /* */ 
  8. /*  This library is free software; you can redistribute it and/or */ 
  9. /*  modify it under the terms of the GNU Library General Public  */ 
  10. /*  License as published by the Free Software Foundation; either */ 
  11. /*  version 2 of the License, or (at your option) any later version. */ 
  12. /* */ 
  13. /*  This library is distributed in the hope that it will be useful, */ 
  14. /*  but WITHOUT ANY WARRANTY; without even the implied warranty of */ 
  15. /*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU */ 
  16. /*  Library General Public License for more details. */ 
  17. /* */ 
  18. /*  You should have received a copy of the GNU Library General Public */ 
  19. /*  License along with this library; if not, write to the Free */ 
  20. /*  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ 
  21. /* */ 
  22. /*  You can contact the author at this e-mail address: */ 
  23. /* */ 
  24. /*  stockton@fast.co.za  */ 
  25. /* */ 
  26. /* -------------------------------------------------------------------- */ 
  27. /* $Id: mtn.c,v 5.1 1998/02/01 07:10:39 root Exp root $ 
  28.    -------------------------------------------------------------------- */ 
  29.  
  30. #include <stdio.h> 
  31. #include <string.h> 
  32. #include <unistd.h>
  33.  
  34. #include "common.h"
  35. #include "logfile.h" 
  36. #include "driver.h" 
  37. #include "expect.h" 
  38. #include "sms_error.h" 
  39. #include "sms_resource.h"
  40. /* -------------------------------------------------------------------- */
  41. static char ACK1[] = "Number : 083";
  42. static char ACK3[] = "Please enter message :";
  43. static char ACK4[] = "Wait for confirmation ? (Y/N)";
  44. /* -------------------------------------------------------------------- */
  45. static struct mtn_env
  46. {
  47. DRIVER_DEFAULT_ENV def;
  48. /* Place any extended driver */ 
  49. /* variables here  */
  50. } driver_env;
  51. /* -------------------------------------------------------------------- */
  52. static  RESOURCE resource_list[] = 
  53. {
  54. { RESOURCE_STRING,  "SMS_comms_params",  0, 1, NULL, 0,  "8N1",     0,   &(driver_env.def.comms_params)   },
  55. { RESOURCE_STRING,  "SMS_centre_number",  0, 1, NULL, 0,  NULL,      0,   &(driver_env.def.centre_number)   },
  56. { RESOURCE_NUMERIC, "SMS_baud",  0, 1, NULL, 0,  NULL,      1200, &(driver_env.def.baud)   },
  57. { RESOURCE_NUMERIC, "SMS_deliver_timeout",  0, 0, NULL, 0,  NULL,      60,   &(driver_env.def.deliver_timeout)   },
  58. { RESOURCE_NUMERIC, "SMS_timeout",  0, 0, NULL, 0,  NULL,      15,   &(driver_env.def.timeout)   },
  59. { RESOURCE_NUMERIC, "SMS_write_timeout",  0, 0, NULL, 0,  NULL,      10,   &(driver_env.def.write_timeout)   },
  60. { RESOURCE_NUMERIC, "SMS_max_deliver",  0, 0, NULL, 0,  NULL,       0,    &(driver_env.def.max_deliver)    },
  61. { RESOURCE_NULL,     NULL,  0, 1, NULL, 0,  NULL,       0,   NULL   }
  62. };
  63. /* -------------------------------------------------------------------- */
  64. #define DELIVERTIMEOUT  (driver_env.def.deliver_timeout)
  65. #define TIMEOUT  (driver_env.def.timeout)
  66. #define WRITETIMEOUT  (driver_env.def.write_timeout)
  67. /* -------------------------------------------------------------------- */
  68. #define FD (driver_env.def.fd)
  69. /* -------------------------------------------------------------------- */ 
  70.  
  71. static void MTN_hangup(void); 
  72. static int MTN_sendmessage(char *msisdn, char *message); 
  73.  
  74. /* -------------------------------------------------------------------- */
  75. /* -------------------------------------------------------------------- */
  76. static void MTN_hangup(void)
  77. { default_hangup((DRIVER_DEFAULT_ENV *)(&driver_env));
  78. }
  79. /* -------------------------------------------------------------------- */
  80. /* -------------------------------------------------------------------- */
  81. static int MTN_sendmessage(char *msisdn, char *message)
  82. {
  83. char  buf[MAX_RESPONSE_BUFSIZE];
  84. if (expstr(FD, buf, ACK1, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  85. {
  86. lprintf(LOG_STANDARD, "MTN Service Loginn");
  87. }
  88. else
  89. { lprintf(LOG_STANDARD, "No MTN Service Responsen");
  90. MTN_hangup();
  91. return EMTN_NORESPONSE;
  92. }
  93. twrite(FD, msisdn, sms_strlen(msisdn), WRITETIMEOUT);
  94. twrite(FD, "n", sms_strlen("n"), WRITETIMEOUT); 
  95. if (expstr(FD, buf, msisdn, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  96. {
  97. lprintf(LOG_STANDARD, "Number Returnedn");
  98. }
  99. else
  100. { lprintf(LOG_STANDARD, "No Number Returnedn");
  101. MTN_hangup();
  102. return EMTN_NONUMBER;
  103. }
  104. if (expstr(FD, buf, ACK3, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  105. {
  106. lprintf(LOG_STANDARD, "Message Request Received n");
  107. }
  108. else
  109. { lprintf(LOG_STANDARD, "No Message Requestn");
  110. MTN_hangup();
  111. return EMTN_NONUMBER;
  112. }
  113. sleep(2);
  114. twrite(FD, message, sms_strlen(message), WRITETIMEOUT); 
  115. twrite(FD, "n", sms_strlen("n"), WRITETIMEOUT); 
  116. if (expstr(FD, buf, ACK4, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  117. {
  118. lprintf(LOG_STANDARD, "Wait for confirmation Received n");
  119. }
  120. else
  121. { lprintf(LOG_STANDARD, "No Wait Confirmation Responsen");
  122. MTN_hangup();
  123. return EMTN_NODELIVERY;
  124. }
  125.    
  126. twrite(FD, "nn", sms_strlen("nn"), WRITETIMEOUT);
  127. if (expstr(FD, buf, ACK1, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  128. {
  129. lprintf(LOG_STANDARD, "EXIT to exit Received n");
  130. }
  131. else
  132. { lprintf(LOG_STANDARD, "No EXIT to exit Responsen");
  133. MTN_hangup();
  134. return EMTN_NODELIVERY; 
  135. }
  136. twrite(FD, "exitn", sms_strlen("exitn"), WRITETIMEOUT); 
  137.  
  138. return 0; 
  139.  
  140. /* -------------------------------------------------------------------- */ 
  141. /* -------------------------------------------------------------------- */ 
  142. DEVICE_ENTRY mtn_device = {
  143. "MTN",
  144. resource_list,
  145. (DRIVER_DEFAULT_ENV *)(&driver_env),
  146. default_init,
  147. default_main,
  148. default_validate_numeric_id,
  149. default_dial,
  150. default_hangup,
  151. default_send_disconnect,
  152. default_single_deliver,
  153. MTN_sendmessage,
  154. default_login
  155. };