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

手机短信编程

开发平台:

Unix_Linux

  1. /* -------------------------------------------------------------------- */
  2. /* SMS Client, send messages to mobile phones and pagers */
  3. /* */
  4. /* vodacom.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. /*  angelo@styx.demon.co.uk */
  25. /* */
  26. /* -------------------------------------------------------------------- */
  27. /* $Id: vodacom.c,v 5.1 1998/02/01 07:10:39 root Exp root $
  28.    -------------------------------------------------------------------- */
  29. #include <stdio.h>
  30. #include <string.h>
  31. #include "common.h"
  32. #include "logfile.h"
  33. #include "driver.h"
  34. #include "expect.h"
  35. #include "sms_error.h"
  36. #include "sms_resource.h"
  37. /* -------------------------------------------------------------------- */
  38. static char ACK1[] = "followed by RETURN, (or RETURN to quit)"; 
  39. static char ACK2[] = "Please type your message, (maximum 160 characters), followed by RETURN.";
  40. /* -------------------------------------------------------------------- */
  41. static struct vodacom_env
  42. {
  43. DRIVER_DEFAULT_ENV def;
  44. /* Place any extended driver */ 
  45. /* variables here  */
  46. } driver_env;
  47. /* -------------------------------------------------------------------- */
  48. static  RESOURCE resource_list[] = 
  49. {
  50. { RESOURCE_STRING,  "SMS_comms_params",  0, 1, NULL, 0,  "7E1",     0,   &(driver_env.def.comms_params)   },
  51. { RESOURCE_STRING,  "SMS_centre_number",  0, 1, NULL, 0,  NULL,      0,   &(driver_env.def.centre_number)   },
  52. { RESOURCE_NUMERIC, "SMS_baud",  0, 1, NULL, 0,  NULL,      1200, &(driver_env.def.baud)   },
  53. { RESOURCE_NUMERIC, "SMS_deliver_timeout",  0, 0, NULL, 0,  NULL,      45,   &(driver_env.def.deliver_timeout)   },
  54. { RESOURCE_NUMERIC, "SMS_timeout",  0, 0, NULL, 0,  NULL,      15,   &(driver_env.def.timeout)   },
  55. { RESOURCE_NUMERIC, "SMS_write_timeout",  0, 0, NULL, 0,  NULL,      10,   &(driver_env.def.write_timeout)   },
  56. { RESOURCE_NUMERIC, "SMS_max_deliver",  0, 0, NULL, 0,  NULL,       0,    &(driver_env.def.max_deliver)    },
  57. { RESOURCE_NULL,     NULL,  0, 1, NULL, 0,  NULL,      0,   NULL   }
  58. };
  59. /* -------------------------------------------------------------------- */
  60. #define DELIVERTIMEOUT  (driver_env.def.deliver_timeout)
  61. #define TIMEOUT  (driver_env.def.timeout)
  62. #define WRITETIMEOUT  (driver_env.def.write_timeout)
  63. /* -------------------------------------------------------------------- */
  64. #define FD (driver_env.def.fd)
  65. /* -------------------------------------------------------------------- */
  66. static int VODACOM_sendmessage(char *msisdn, char *message);
  67. static int VODACOM_send_disconnect(void);
  68. static void VODACOM_hangup(void);
  69. /* -------------------------------------------------------------------- */
  70. /* -------------------------------------------------------------------- */
  71. static void VODACOM_hangup(void)
  72. { default_hangup((DRIVER_DEFAULT_ENV *)(&driver_env));
  73. }
  74. /* -------------------------------------------------------------------- */
  75. /* -------------------------------------------------------------------- */
  76. static int VODACOM_sendmessage(char *msisdn, char *message)
  77. {
  78. char  buf[MAX_RESPONSE_BUFSIZE];
  79. char  nmessage[1024];
  80. if (expstr(FD, buf, ACK1, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  81. {
  82. lprintf(LOG_STANDARD, "Number Requestn");
  83. }
  84. else
  85. { lprintf(LOG_STANDARD, "No Number Requestn");
  86. VODACOM_hangup();
  87. return EVODACOM_NORESPONSE;
  88. }
  89. twrite(FD, msisdn, sms_strlen(msisdn), WRITETIMEOUT);
  90. twrite(FD, "rn", sms_strlen("rn"), WRITETIMEOUT);
  91.    
  92. if (expstr(FD, buf, msisdn, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  93. {
  94. lprintf(LOG_STANDARD, "Received Number Returnedn");
  95. }
  96. else
  97. { lprintf(LOG_STANDARD, "No Number Returnedn");
  98. VODACOM_hangup();
  99. return EVODACOM_NONUMBER;
  100. }
  101. if (expstr(FD, buf, ACK2, MAX_RESPONSE_BUFSIZE, DELIVERTIMEOUT) == 0)
  102. {
  103. lprintf(LOG_STANDARD, "Received Message Requestn");
  104. }
  105. else
  106. { lprintf(LOG_STANDARD, "No Message Requestn");
  107. VODACOM_hangup();
  108. return EVODACOM_NONUMBER;
  109. }
  110. twrite(FD, message, sms_strlen(message), WRITETIMEOUT);
  111. twrite(FD, "rn", sms_strlen("rn"), WRITETIMEOUT);
  112. sprintf(nmessage, "rnrn>%s", message);
  113. if (expstr(FD, buf, nmessage, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  114.         {
  115.         lprintf(LOG_STANDARD, "Received Message backn");
  116.         }
  117. else
  118.         {       lprintf(LOG_STANDARD, "No Message Returnedn");
  119.         VODACOM_hangup();
  120.         return EVODACOM_NOMESSAGE;
  121.         }
  122.     
  123. twrite(FD, "rn", sms_strlen("rn"), WRITETIMEOUT);
  124. if (expstr(FD, buf, ACK1, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  125. {
  126. lprintf(LOG_STANDARD, "Received Number Requestn");
  127. }
  128. else
  129. { lprintf(LOG_STANDARD, "No Number Requestn");
  130. VODACOM_hangup();
  131. return EVODACOM_NOMESSAGE;
  132. }
  133. return 0;
  134. }
  135. /* -------------------------------------------------------------------- */
  136. /* -------------------------------------------------------------------- */
  137. static int VODACOM_send_disconnect(void)
  138. {
  139. twrite(FD, "rn", sms_strlen("rn"), WRITETIMEOUT);
  140. return 0;
  141. }
  142. /* -------------------------------------------------------------------- */
  143. /* -------------------------------------------------------------------- */
  144. DEVICE_ENTRY vodacom_device = {
  145. "VODACOM",
  146. resource_list,
  147. (DRIVER_DEFAULT_ENV *)(&driver_env),
  148. default_init,
  149. default_main,
  150. default_validate_numeric_id,
  151. default_dial,
  152. default_hangup,
  153. VODACOM_send_disconnect,
  154. default_single_deliver,
  155. VODACOM_sendmessage,
  156. default_login
  157. };