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

手机短信编程

开发平台:

Unix_Linux

  1. /* -------------------------------------------------------------------- */
  2. /* SMS Client, send messages to mobile phones and pagers */
  3. /* */
  4. /* vodafone.c */
  5. /* */
  6. /*  Copyright (C) 1997,1998 Angelo Masci */
  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: vodafone.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[] = "WELCOME TO THE VODAFONE TELENOTE SERVICE.rn";
  39. static char ACK2[] = "PLEASE ENTER THE MOBILE NUMBER IN INTERNATIONAL FORMAT, E.G. 44385XXXXXX,rn"
  40.              "FOLLOWED BY RETURN, (OR RETURN TO QUIT).rn"
  41.              "rn"
  42.              ">";
  43.              
  44. static char ACK3[] = "PLEASE TYPE YOUR TELENOTE, (MAXIMUM 160 CHARACTERS), FOLLOWED BY RETURN.rn"
  45.      "rn"
  46.      ">";
  47. static char ACK4[] = "MESSAGE ACCEPTED.rn";
  48.      
  49. /* -------------------------------------------------------------------- */
  50. static struct vodafone_env
  51. {
  52. DRIVER_DEFAULT_ENV def;
  53. /* Place any extended driver */ 
  54. /* variables here  */
  55. } driver_env;
  56. /* -------------------------------------------------------------------- */
  57. static  RESOURCE resource_list[] = 
  58. { RESOURCE_STRING,  "SMS_comms_params",  0, 1, NULL, 0,  "7E1",      0,    &(driver_env.def.comms_params)    },
  59. { RESOURCE_STRING,  "SMS_centre_number",  0, 1, NULL, 0,  NULL,       0,    &(driver_env.def.centre_number)    },
  60. { RESOURCE_NUMERIC, "SMS_baud",  0, 1, NULL, 0,  NULL,       1200, &(driver_env.def.baud)    },
  61. { RESOURCE_NUMERIC, "SMS_deliver_timeout",  0, 0, NULL, 0,  NULL,       30,   &(driver_env.def.deliver_timeout)    },
  62. { RESOURCE_NUMERIC, "SMS_timeout",  0, 0, NULL, 0,  NULL,       10,   &(driver_env.def.timeout)    },
  63. { RESOURCE_NUMERIC, "SMS_write_timeout",  0, 0, NULL, 0,  NULL,       10,   &(driver_env.def.write_timeout)    },
  64. { RESOURCE_NUMERIC, "SMS_max_deliver",  0, 0, NULL, 0,  NULL,       1,    &(driver_env.def.max_deliver)    },
  65. { RESOURCE_NULL,     NULL,  0, 1, NULL, 0,  NULL,       0,    NULL    }
  66. };
  67. /* -------------------------------------------------------------------- */
  68. #define DELIVERTIMEOUT  (driver_env.def.deliver_timeout)
  69. #define TIMEOUT  (driver_env.def.timeout)
  70. #define WRITETIMEOUT  (driver_env.def.write_timeout)
  71. /* -------------------------------------------------------------------- */
  72. #define FD (driver_env.def.fd)
  73. /* -------------------------------------------------------------------- */
  74. static int VODAFONE_login(void);
  75. static int VODAFONE_sendmessage(char *msisdn, char *message);
  76. static void VODAFONE_hangup(void);
  77. static int VODAFONE_send_disconnect(void);
  78. /* -------------------------------------------------------------------- */
  79. /* -------------------------------------------------------------------- */
  80. static int VODAFONE_login(void)
  81. {
  82. char buf[MAX_RESPONSE_BUFSIZE];
  83. if (expstr(FD, buf, ACK1, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  84. {
  85. lprintf(LOG_STANDARD, "Vodafone Service Loginn");
  86. }
  87. else
  88. {
  89. lprintf(LOG_STANDARD, "No Vodafone Service Responsen");
  90. VODAFONE_hangup();
  91. return EVODAFONE_NORESPONSE;
  92. }
  93. return 0;
  94. }
  95. /* -------------------------------------------------------------------- */
  96. /* -------------------------------------------------------------------- */
  97. static int VODAFONE_sendmessage(char *msisdn, char *message)
  98. {
  99. char buf[MAX_RESPONSE_BUFSIZE];
  100. if (expstr(FD, buf, ACK2, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  101. {
  102. lprintf(LOG_STANDARD, "Received Number Requestn");
  103. }
  104. else
  105. {
  106. lprintf(LOG_STANDARD, "No Number Requestn");
  107. VODAFONE_hangup();
  108. return EVODAFONE_NONUMBER;
  109. }
  110. twrite(FD, msisdn, sms_strlen(msisdn), WRITETIMEOUT);
  111. twrite(FD, "rn", sms_strlen("rn"), WRITETIMEOUT);
  112. if (expstr(FD, buf, ACK3, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  113. {
  114. lprintf(LOG_STANDARD, "Received Message Requestn");
  115. }
  116. else
  117. {
  118. lprintf(LOG_STANDARD, "No Message Requestn");
  119. VODAFONE_hangup();
  120. return EVODAFONE_NOMESSAGE;
  121. }
  122. twrite(FD, message, sms_strlen(message), WRITETIMEOUT);
  123. twrite(FD, "rn", sms_strlen("rn"), WRITETIMEOUT);
  124. if (expstr(FD, buf, ACK4, MAX_RESPONSE_BUFSIZE, DELIVERTIMEOUT) == 0)
  125. {
  126. lprintf(LOG_STANDARD, "Received Message Delivery Responsen");
  127. }
  128. else
  129. {
  130. lprintf(LOG_STANDARD, "No Message Delivery Responsen");
  131. VODAFONE_hangup();
  132. return EVODAFONE_NODELIVERY;
  133. }
  134. return 0;
  135. }
  136. /* -------------------------------------------------------------------- */
  137. /* -------------------------------------------------------------------- */
  138. static int VODAFONE_send_disconnect(void)
  139. {
  140. twrite(FD, "rn", sms_strlen("rn"), WRITETIMEOUT);
  141. return 0;
  142. }
  143. /* -------------------------------------------------------------------- */
  144. /* -------------------------------------------------------------------- */
  145. static void VODAFONE_hangup(void)
  146. { default_hangup((DRIVER_DEFAULT_ENV *)(&driver_env));
  147. }
  148. /* -------------------------------------------------------------------- */
  149. /* -------------------------------------------------------------------- */
  150. DEVICE_ENTRY vodafone_device = {
  151. "VODAFONE",
  152. resource_list,
  153. (DRIVER_DEFAULT_ENV *)(&driver_env),
  154. default_init,
  155. default_main,
  156. default_validate_numeric_id,
  157. default_dial,
  158. default_hangup,
  159. VODAFONE_send_disconnect,
  160. default_single_deliver,
  161. VODAFONE_sendmessage,
  162. VODAFONE_login
  163. };