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

手机短信编程

开发平台:

Unix_Linux

  1. /* -------------------------------------------------------------------- */
  2. /* SMS Client, send messages to mobile phones and pagers */
  3. /* */
  4. /* one2one.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: one2one.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[] = "ID=";
  39. static char ACK2[] = "Welcome to the One 2 One Short Message Servicern";
  40. static char ACK3[] = "Password: ";
  41. static char ACK4[] = "Please enter below the message you wish to sendrn";
  42. static char ACK5[] = "Enter the One 2 One phone number to receive your message: ";
  43. static char ACK6[] = "Goodbye (you should hangup now)";
  44. /* -------------------------------------------------------------------- */
  45. static struct one2one_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,  "7E1",     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,      30,   &(driver_env.def.deliver_timeout)   },
  58. { RESOURCE_NUMERIC, "SMS_timeout",  0, 0, NULL, 0,  NULL,      10,   &(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. static void ONE2ONE_hangup(void);
  71. static int ONE2ONE_login(void);
  72. static int ONE2ONE_sendmessage(char *msisdn, char *message);
  73. /* -------------------------------------------------------------------- */
  74. /* -------------------------------------------------------------------- */
  75. int ONE2ONE_login(void)
  76. {
  77. char  buf[MAX_RESPONSE_BUFSIZE];
  78. twrite(FD, "r", sms_strlen("r"), WRITETIMEOUT);
  79. if (expstr(FD, buf, ACK1, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  80. {
  81. lprintf(LOG_STANDARD, "Received one2one ID Requestn");
  82. }
  83. else
  84. { lprintf(LOG_STANDARD, "No one2one ID Requestn");
  85. ONE2ONE_hangup();
  86. return EONE2ONE_NORESPONSE;
  87. }
  88. twrite(FD, "Ar", sms_strlen("Ar"), WRITETIMEOUT);
  89. if (expstr(FD, buf, ACK2, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  90. {
  91. lprintf(LOG_STANDARD, "Received one2one Welcomen");
  92. }
  93. else
  94. { lprintf(LOG_STANDARD, "No one2one Welcomen");
  95. ONE2ONE_hangup();
  96. return EONE2ONE_NORESPONSE;
  97. }
  98. if (expstr(FD, buf, ACK3, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  99. {
  100. lprintf(LOG_STANDARD, "Received one2one Password Requestn");
  101. }
  102. else
  103. { lprintf(LOG_STANDARD, "No one2one Password Requestn");
  104. ONE2ONE_hangup();
  105. return EONE2ONE_NORESPONSE;
  106. }
  107. twrite(FD, "r", sms_strlen("r"), WRITETIMEOUT);
  108. return 0;
  109. }
  110. /* -------------------------------------------------------------------- */
  111. /* -------------------------------------------------------------------- */
  112. static int ONE2ONE_sendmessage(char *msisdn, char *message)
  113. {
  114. char  buf[MAX_RESPONSE_BUFSIZE];
  115. if (expstr(FD, buf, ACK4, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  116. {
  117. lprintf(LOG_STANDARD, "Received one2one Message Requestn");
  118. }
  119. else
  120. { lprintf(LOG_STANDARD, "No one2one Message Requestn");
  121. ONE2ONE_hangup();
  122. return EONE2ONE_NONUMBER;
  123. }
  124. twrite(FD, message, sms_strlen(message), WRITETIMEOUT);
  125. twrite(FD, "r", sms_strlen("r"), WRITETIMEOUT);
  126. if (expstr(FD, buf, ACK5, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  127. {
  128. lprintf(LOG_STANDARD, "Received Number Requestn");
  129. }
  130. else
  131. { lprintf(LOG_STANDARD, "No Number Requestn");
  132. ONE2ONE_hangup();
  133. return EONE2ONE_NOMESSAGE;
  134. }
  135. twrite(FD, msisdn, sms_strlen(msisdn), WRITETIMEOUT);
  136. twrite(FD, "r", sms_strlen("r"), WRITETIMEOUT);
  137. if (expstr(FD, buf, ACK6, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  138. {
  139. lprintf(LOG_STANDARD, "Received Message Delivery Responsen");
  140. }
  141. else
  142. { lprintf(LOG_STANDARD, "No Message Delivery Responsen");
  143. ONE2ONE_hangup();
  144. return EONE2ONE_NODELIVERY;
  145. }
  146. return 0;
  147. }
  148. /* -------------------------------------------------------------------- */
  149. /* -------------------------------------------------------------------- */
  150. static void ONE2ONE_hangup(void)
  151. { default_hangup((DRIVER_DEFAULT_ENV *)(&driver_env));
  152. }
  153. /* -------------------------------------------------------------------- */
  154. /* -------------------------------------------------------------------- */
  155. DEVICE_ENTRY one2one_device = {
  156. "ONE2ONE",
  157. resource_list,
  158. (DRIVER_DEFAULT_ENV *)(&driver_env),
  159. default_init,
  160. default_main,
  161. default_validate_numeric_id,
  162. default_dial,
  163. default_hangup,
  164. default_send_disconnect,
  165. default_multiple_counted_deliver,
  166. ONE2ONE_sendmessage,
  167. ONE2ONE_login
  168. };