smsc_p.h
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:6k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * smsc_p.h - private interface to SMS center subsystem
  3.  *
  4.  * Lars Wirzenius
  5.  *
  6.  * New API by Kalle Marjola 1999
  7.  */
  8. #ifndef SMSC_P_H
  9. #define SMSC_P_H
  10. #include <stddef.h>
  11. #include <stdio.h>
  12. #include <signal.h>
  13. #include <time.h>
  14. #include "smsc.h"
  15. /*
  16.  * List of SMS center types that we support.
  17.  */
  18. enum {
  19. SMSC_TYPE_DELETED,
  20. SMSC_TYPE_CIMD,
  21. SMSC_TYPE_CIMD2,
  22. SMSC_TYPE_EMI,
  23. SMSC_TYPE_EMI_X31,
  24. SMSC_TYPE_EMI_IP,
  25. SMSC_TYPE_SEMA_X28,
  26. SMSC_TYPE_OIS,
  27. SMSC_TYPE_AT
  28. };
  29. /*
  30.  * The implementation of the SMSCenter object. 
  31.  */
  32. #define DIAL_PREFIX_MAX_LEN 1024
  33. struct SMSCenter {
  34. int type;
  35. int transport;
  36. char name[1024];
  37. int id;
  38.         /* Routing prefixes (based on phone number) */
  39. char *preferred_prefix;
  40. char *allowed_prefix;
  41. char *denied_prefix;
  42. /* Alternative charset */
  43.         long alt_charset;
  44. /* For locking/unlocking. */
  45. Mutex *mutex;
  46.         /* for dying */
  47.         volatile sig_atomic_t killed;
  48. /* General IO device */
  49. int socket;
  50. /* Maximum minutes idle time before ping is sent. 0 for no pings. */
  51. int keepalive;
  52. /* TCP/IP */
  53. char *hostname;
  54. int port;
  55.         int receive_port; /* if used, with EMI 2.0/OIS 4.5 */
  56. /* PSTN/ISDN */
  57. char *phonenum;
  58. char *serialdevice;
  59. /* X.31 */
  60. char *x31_phonenum;
  61. char *x31_serialdevice;
  62. /* Unix pipes */
  63. char *pipe_command;
  64. /* CIMD */
  65. char *cimd_hostname;
  66. int cimd_port;
  67. char *cimd_username;
  68. char *cimd_password;
  69. time_t cimd_last_spoke;
  70. int cimd_config_bits;
  71. /* CIMD 2 */
  72. Octstr *cimd2_hostname;
  73. int cimd2_port;
  74. Octstr *cimd2_username;
  75. Octstr *cimd2_password;
  76. int cimd2_send_seq;
  77. int cimd2_receive_seq;
  78. Octstr *cimd2_inbuffer;
  79. List *cimd2_received;
  80. int cimd2_error;
  81. time_t cimd2_next_ping;
  82.         Octstr *sender_prefix;
  83. /* EMI */
  84. int emi_fd;
  85. FILE *emi_fp;
  86. char *emi_phonenum;
  87. char *emi_serialdevice;
  88. char *emi_hostname;
  89. int  emi_port;
  90. char *emi_username;
  91. char *emi_password;
  92. int emi_current_msg_number;
  93. time_t emi_last_spoke;
  94. int emi_backup_fd;
  95.         int emi_backup_port; /* different one! rename! */
  96.         char *emi_backup_allow_ip;     
  97.         int emi_our_port; /* port to bind us when connecting smsc */
  98.         int emi_secondary_fd;
  99.         /* SEMA SMS2000 OIS 4.5 X28 */
  100.         char * sema_smscnua;
  101.         char * sema_homenua;
  102.         char * sema_serialdevice;
  103.         struct sema_msglist *sema_mt, *sema_mo;
  104.         int sema_fd;
  105.         /* SEMA SMS2000 OIS 5.0 (TCP/IP to X.25 router) */
  106.         time_t ois_alive;
  107.         time_t ois_alive2;
  108.         void *ois_received_mo;
  109.         int ois_ack_debt;
  110.         int ois_flags;
  111.         int ois_listening_socket;
  112.         int ois_socket;
  113.         char *ois_buffer;
  114.         size_t ois_bufsize;
  115.         size_t ois_buflen;
  116.     
  117. /* AT Commands (wireless modems...) */
  118. char *at_serialdevice;
  119. int at_fd;
  120. char *at_modemtype;
  121. char *at_pin;
  122. List *at_received;
  123. Octstr *at_inbuffer;
  124. char *at_validityperiod;
  125. int at_alt_dcs;
  126. /* For buffering input. */
  127. char *buffer;
  128. size_t bufsize;
  129. size_t buflen;
  130. };
  131. /*
  132.  * Operations on an SMSCenter object.
  133.  */
  134. SMSCenter *smscenter_construct(void);
  135. void smscenter_destruct(SMSCenter *smsc);
  136. int smscenter_read_into_buffer(SMSCenter *);
  137. void smscenter_remove_from_buffer(SMSCenter *smsc, size_t n);
  138. /* Send an SMS message via an SMS center. Return -1 for error,
  139.    0 for OK. */
  140. int smscenter_submit_msg(SMSCenter *smsc, Msg *msg);
  141. /* Receive an SMS message from an SMS center. Return -1 for error,
  142.    0 end of messages (other end closed their end of the connection),
  143.    or 1 for a message was received. If a message was received, a 
  144.    pointer to it is returned via `*msg'. Note that this operation
  145.    blocks until there is a message. */
  146. int smscenter_receive_msg(SMSCenter *smsc, Msg **msg);
  147. /* Is there an SMS message pending from an SMS center? Return -1 for
  148.    error, 0 for no, 1 for yes. This operation won't block, but may
  149.    not be instantenous, if it has to read a few characters to see
  150.    if there is a message. Use smscenter_receive_smsmessage to actually receive
  151.    the message. */
  152. int smscenter_pending_smsmessage(SMSCenter *smsc);
  153. /*
  154.  * Interface to Nokia SMS centers using CIMD.
  155.  */
  156. SMSCenter *cimd_open(char *hostname, int port, char *username, char *password);
  157. int cimd_reopen(SMSCenter *smsc);
  158. int cimd_close(SMSCenter *smsc);
  159. int cimd_pending_smsmessage(SMSCenter *smsc);
  160. int cimd_submit_msg(SMSCenter *smsc, Msg *msg);
  161. int cimd_receive_msg(SMSCenter *smsc, Msg **msg);
  162. /*
  163.  * Interface to Nokia SMS centers using CIMD 2.
  164.  */
  165. SMSCenter *cimd2_open(Octstr *hostname, int port, Octstr *username, Octstr *password, int keepalive, Octstr *sender_prefix);
  166. int cimd2_reopen(SMSCenter *smsc);
  167. int cimd2_close(SMSCenter *smsc);
  168. int cimd2_pending_smsmessage(SMSCenter *smsc);
  169. int cimd2_submit_msg(SMSCenter *smsc, Msg *msg);
  170. int cimd2_receive_msg(SMSCenter *smsc, Msg **msg);
  171. /*
  172.  * Interface to CMG SMS centers using EMI.
  173.  */
  174. SMSCenter *emi_open(char *phonenum, char *serialdevice, char *username, char *password);
  175. int emi_reopen(SMSCenter *smsc);
  176. int emi_close(SMSCenter *smsc);
  177. SMSCenter *emi_open_ip(char *hostname, int port, char *username,
  178.        char *password, int receive_port, char *allow_ip, int our_port);
  179. int emi_reopen_ip(SMSCenter *smsc);
  180. int emi_close_ip(SMSCenter *smsc);
  181. int emi_pending_smsmessage(SMSCenter *smsc);
  182. int emi_submit_msg(SMSCenter *smsc, Msg *msg);
  183. int emi_receive_msg(SMSCenter *smsc, Msg **msg);
  184. /*
  185.  * Interface to Sema SMS centers using SM2000
  186.  */
  187. SMSCenter *sema_open(char *smscnua,  char *homenua, char* serialdevice,
  188.      int waitreport);
  189. int sema_reopen(SMSCenter *smsc);
  190. int sema_close(SMSCenter *smsc);
  191. int sema_pending_smsmessage(SMSCenter *smsc);
  192. int sema_submit_msg(SMSCenter *smsc, Msg *msg);
  193. int sema_receive_msg(SMSCenter *smsc, Msg **msg);
  194. /*
  195.  * Interface to Sema SMS centers using OIS 5.0.
  196.  * Interface to Sema SMS centers using SM2000
  197.  */
  198. SMSCenter *ois_open(int receiveport, const char *hostname, int port,
  199.     int debug_level);
  200. int ois_reopen(SMSCenter *smsc);
  201. int ois_close(SMSCenter *smsc);
  202. int ois_pending_smsmessage(SMSCenter *smsc);
  203. int ois_submit_msg(SMSCenter *smsc, const Msg *msg);
  204. int ois_receive_msg(SMSCenter *smsc, Msg **msg);
  205. void ois_delete_queue(SMSCenter *smsc);
  206. /*
  207.  * Interface to wireless modems using AT commands.
  208.  */
  209. SMSCenter *at_open(char *serialdevice, char *modemtype, char *pin,
  210.              char *validityperiod, int alt_dcs);
  211. int at_reopen(SMSCenter *smsc);
  212. int at_close(SMSCenter *smsc);
  213. int at_pending_smsmessage(SMSCenter *smsc);
  214. int at_submit_msg(SMSCenter *smsc, Msg *msg);
  215. int at_receive_msg(SMSCenter *smsc, Msg **msg);
  216. #endif