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

手机短信编程

开发平台:

Unix_Linux

  1. /* -------------------------------------------------------------------- */
  2. /* SMS Client, send messages to mobile phones and pagers */
  3. /* */
  4. /* libertel.c */
  5. /* */
  6. /*  Copyright (C) 1998 Aart Koelewijn */
  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. /*  jhwevers@telekabel.nl */
  25. /*  aart@mtack.xs4all.nl */
  26. /* */
  27. /* -------------------------------------------------------------------- */
  28. /* $Id: libertel.c,v 0.1 1998/04/02 22:49:15 aart
  29.    -------------------------------------------------------------------- */
  30. #include <stdio.h>
  31. #include <string.h>
  32. #include "common.h"
  33. #include "logfile.h"
  34. #include "driver.h"
  35. #include "expect.h"
  36. #include "sms_error.h"
  37. #include "sms_resource.h"
  38. /* -------------------------------------------------------------------- */
  39. static char ACK1[] = "Welkom bij LIBERTEL Text-PCrn"
  40.                      "Als u vragen heeft over deze dienst kunt u bellen naar 0800-0560rn";
  41. static char ACK2[] = "Typ het mobiele telefoonnummer in volgens het internationale formaat, rn"
  42.                      "bijvoorbeeld 31654XXXXXX, gevolgd door enter (of druk op enter om te stoppen)rn"
  43.                      ">";
  44.                      
  45. static char ACK3[] = "Typ uw bericht in, (maximaal 160 tekens), gevolgd door enterrn"
  46.                      ">";
  47. static char ACK4[] = "Bericht geaccepteerdrn";
  48. /* -------------------------------------------------------------------- */
  49. static struct libertel_env
  50. {
  51. DRIVER_DEFAULT_ENV def;
  52. /* Place any extended driver */ 
  53. /* variables here  */
  54. } driver_env;
  55. /* -------------------------------------------------------------------- */
  56. static  RESOURCE resource_list[] = 
  57. {
  58. { RESOURCE_STRING,  "SMS_comms_params",  0, 1, NULL, 0,  "8N1",      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,       0,    &(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 void LIBERTEL_hangup(void);
  75. static int LIBERTEL_sendmessage(char *msisdn, char *message);
  76. static int LIBERTEL_login(void);
  77. static int LIBERTEL_send_disconnect(void);
  78. /* -------------------------------------------------------------------- */
  79. /* -------------------------------------------------------------------- */
  80. static void LIBERTEL_hangup(void)
  81. { default_hangup((DRIVER_DEFAULT_ENV *)(&driver_env));
  82. }
  83. /* -------------------------------------------------------------------- */
  84. /* -------------------------------------------------------------------- */
  85. static int LIBERTEL_login(void)
  86. {
  87. char buf[MAX_RESPONSE_BUFSIZE];
  88. if (expstr(FD, buf, ACK1, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  89. {
  90. lprintf(LOG_STANDARD, "Libertel Service Loginn");
  91. }
  92. else
  93. { lprintf(LOG_STANDARD, "No Libertel Service Responsen");
  94. LIBERTEL_hangup();
  95. return ELIBERTEL_NORESPONSE;
  96. }
  97. return 0;
  98. }
  99. /* -------------------------------------------------------------------- */
  100. /* -------------------------------------------------------------------- */
  101. static int LIBERTEL_send_disconnect(void)
  102. {
  103. twrite(FD, "rn", sms_strlen("rn"), TIMEOUT);
  104. return 0;
  105. }
  106. /* -------------------------------------------------------------------- */
  107. /* -------------------------------------------------------------------- */
  108. static int LIBERTEL_sendmessage(char *msisdn, char *message)
  109. {
  110. char buf[MAX_RESPONSE_BUFSIZE];
  111. if (expstr(FD, buf, ACK2, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  112. {
  113. lprintf(LOG_STANDARD, "Received Number Requestn");
  114. }
  115. else
  116. { lprintf(LOG_STANDARD, "No Number Requestn");
  117. LIBERTEL_hangup();
  118. return ELIBERTEL_NONUMBER;
  119. }
  120. twrite(FD, msisdn, sms_strlen(msisdn), WRITETIMEOUT);
  121. twrite(FD, "rn", sms_strlen("rn"), WRITETIMEOUT);
  122. if (expstr(FD, buf, ACK3, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)
  123. {
  124. lprintf(LOG_STANDARD, "Received Message Requestn");
  125. }
  126. else
  127. { lprintf(LOG_STANDARD, "No Message Requestn");
  128. LIBERTEL_hangup();
  129. return ELIBERTEL_NOMESSAGE;
  130. }
  131. twrite(FD, message, sms_strlen(message), WRITETIMEOUT);
  132. twrite(FD, "rn", sms_strlen("rn"), WRITETIMEOUT);
  133. if (expstr(FD, buf, ACK4, MAX_RESPONSE_BUFSIZE, DELIVERTIMEOUT) == 0)
  134. {
  135. lprintf(LOG_STANDARD, "Received Message Delivery Responsen");
  136. }
  137. else
  138. { lprintf(LOG_STANDARD, "No Message Delivery Responsen");
  139. LIBERTEL_hangup();
  140. return ELIBERTEL_NODELIVERY;
  141. }
  142. return 0;
  143. }
  144. /* -------------------------------------------------------------------- */
  145. /* -------------------------------------------------------------------- */
  146. DEVICE_ENTRY libertel_device = {
  147. "LIBERTEL",
  148. resource_list,
  149. (DRIVER_DEFAULT_ENV *)(&driver_env),
  150. default_init,
  151. default_main,
  152. default_validate_numeric_id,
  153. default_dial,
  154. default_hangup,
  155. LIBERTEL_send_disconnect,
  156. default_multiple_counted_deliver,
  157. LIBERTEL_sendmessage,
  158. LIBERTEL_login
  159. };