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

手机短信编程

开发平台:

Unix_Linux

  1. /* -------------------------------------------------------------------- */
  2. /* SMS Client, send messages to mobile phones and pagers */
  3. /* */
  4. /* orange.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: orange.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 Orange Dial-up Messagingrn";
  39. static char ACK2[] = "Please choose an option (do not press return) : rn"
  40.      "rn"
  41.      "       S   :- Send a messagern"
  42.      "       H   :- Helprn"
  43.      "       E   :- Exitrn";
  44. static char ACK3[] = "Enter destination Orange or Hutchison Pager number and press returnrn"
  45.      "rn"
  46.      ":";
  47. static char ACK4[] = "Type your message (160 characters max) and press return to sendrn"
  48.      "rn"
  49.      ":";
  50. static char ACK5[] = "Message accepted - thankyourn"
  51.      "rn";
  52. static char ACK6[] = "Thanks for calling.rn"
  53.      "rn"
  54.      "The future's bright. The future's Orange.";
  55. /* -------------------------------------------------------------------- */
  56. static struct orange_env
  57. {
  58. DRIVER_DEFAULT_ENV def;
  59. /* Place any extended driver */ 
  60. /* variables here  */
  61. } driver_env;
  62. /* -------------------------------------------------------------------- */
  63. static  RESOURCE resource_list[] = 
  64. {
  65. { RESOURCE_STRING,  "SMS_comms_params",  0, 1, NULL, 0,  "8N1",      0,    &(driver_env.def.comms_params)   },
  66. { RESOURCE_STRING,  "SMS_centre_number",  0, 1, NULL, 0,  NULL,       0,    &(driver_env.def.centre_number)   },
  67. { RESOURCE_NUMERIC, "SMS_baud",  0, 1, NULL, 0,  NULL,       9600, &(driver_env.def.baud)   },
  68. { RESOURCE_NUMERIC, "SMS_deliver_timeout",  0, 0, NULL, 0,  NULL,       30,   &(driver_env.def.deliver_timeout)   },
  69. { RESOURCE_NUMERIC, "SMS_timeout",  0, 0, NULL, 0,  NULL,       10,   &(driver_env.def.timeout)   },
  70. { RESOURCE_NUMERIC, "SMS_write_timeout",  0, 0, NULL, 0,  NULL,       10,   &(driver_env.def.write_timeout)   },
  71. { RESOURCE_NUMERIC, "SMS_max_deliver",  0, 0, NULL, 0,  NULL,       3,    &(driver_env.def.max_deliver)   },
  72. { RESOURCE_NULL,     NULL,  0, 1, NULL, 0,  NULL,       0,    NULL   }
  73. };
  74. /* -------------------------------------------------------------------- */
  75. #define DELIVERTIMEOUT  (driver_env.def.deliver_timeout)
  76. #define TIMEOUT  (driver_env.def.timeout)
  77. #define WRITETIMEOUT  (driver_env.def.write_timeout)
  78. /* -------------------------------------------------------------------- */
  79. #define FD (driver_env.def.fd)
  80. /* -------------------------------------------------------------------- */
  81. static int ORANGE_login(void);
  82. static int ORANGE_sendmessage(char *msisdn, char *message);
  83. static int ORANGE_send_disconnect(void);
  84. static void ORANGE_hangup(void);
  85. /* -------------------------------------------------------------------- */
  86. /* -------------------------------------------------------------------- */
  87. static int ORANGE_login(void)
  88. {
  89. char buf[MAX_RESPONSE_BUFSIZE];
  90. if (expstr(FD, buf, ACK1, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  91. {
  92. lprintf(LOG_STANDARD, "Orange Service Loginn");
  93. }
  94. else
  95. { lprintf(LOG_STANDARD, "No Orange Service Loginn");
  96. ORANGE_hangup();
  97. return EORANGE_NORESPONSE;
  98. }
  99. return 0;
  100. }
  101. /* -------------------------------------------------------------------- */
  102. /* -------------------------------------------------------------------- */
  103. static int ORANGE_sendmessage(char *msisdn, char *message)
  104. {
  105. char buf[MAX_RESPONSE_BUFSIZE];
  106. if (expstr(FD, buf, ACK2, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  107. {
  108. lprintf(LOG_STANDARD, "Received Orange Service Requestn");
  109. }
  110. else
  111. { lprintf(LOG_STANDARD, "No Orange Service Requestn");
  112. ORANGE_hangup();
  113. return EORANGE_NOSERVICE;
  114. }
  115. twrite(FD, "S", sms_strlen("S"), WRITETIMEOUT);
  116. if (expstr(FD, buf, ACK3, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  117. {
  118. lprintf(LOG_STANDARD, "Received Number Requestn");
  119. }
  120. else
  121. { lprintf(LOG_STANDARD, "No Number Requestn");
  122. ORANGE_hangup();
  123. return EORANGE_NONUMBER;
  124. }
  125. twrite(FD, msisdn, sms_strlen(msisdn), WRITETIMEOUT);
  126. twrite(FD, "rn", sms_strlen("rn"), WRITETIMEOUT);
  127. if (expstr(FD, buf, ACK4, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  128. {
  129. lprintf(LOG_STANDARD, "Received Message Requestn");
  130. }
  131. else
  132. { lprintf(LOG_STANDARD, "No Message Requestn");
  133. ORANGE_hangup();
  134. return EORANGE_NOMESSAGE;
  135. }
  136. twrite(FD, message, sms_strlen(message), WRITETIMEOUT);
  137. twrite(FD, "rn", sms_strlen("rn"), WRITETIMEOUT);
  138. if (expstr(FD, buf, ACK5, MAX_RESPONSE_BUFSIZE, DELIVERTIMEOUT) == 0)
  139. {
  140. lprintf(LOG_STANDARD, "Received Message Delivery Responsen");
  141. }
  142. else
  143. { lprintf(LOG_STANDARD, "No Message Delivery Responsen");
  144. ORANGE_hangup();
  145. return EORANGE_NODELIVERY;
  146. }
  147. return 0;
  148. }
  149. /* -------------------------------------------------------------------- */
  150. /* -------------------------------------------------------------------- */
  151. static int ORANGE_send_disconnect(void)
  152. {
  153. char buf[MAX_RESPONSE_BUFSIZE];
  154. twrite(FD, "E", sms_strlen("E"), WRITETIMEOUT);
  155. if (expstr(FD, buf, ACK6, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  156. {
  157. lprintf(LOG_STANDARD, "Received Disconnection Responsen");
  158. }
  159. else
  160. { lprintf(LOG_STANDARD, "No Disconnection Responsen");
  161. ORANGE_hangup();
  162. return EORANGE_NODISCONNECT;
  163. }
  164. return 0;
  165. }
  166. /* -------------------------------------------------------------------- */
  167. /* -------------------------------------------------------------------- */
  168. static void ORANGE_hangup(void)
  169. { default_hangup((DRIVER_DEFAULT_ENV *)(&driver_env));
  170. }
  171. /* -------------------------------------------------------------------- */
  172. /* -------------------------------------------------------------------- */
  173. DEVICE_ENTRY orange_device = {
  174. "ORANGE",
  175. resource_list,
  176. (DRIVER_DEFAULT_ENV *)(&driver_env),
  177. default_init,
  178. default_main,
  179. default_validate_numeric_id,
  180. default_dial,
  181. default_hangup,
  182. ORANGE_send_disconnect,
  183. default_multiple_counted_deliver,
  184. ORANGE_sendmessage,
  185. ORANGE_login
  186. };