sms_serv.h
上传用户:eo_sii
上传日期:2007-01-05
资源大小:91k
文件大小:9k
源码类别:

手机短信编程

开发平台:

Unix_Linux

  1. /*==========================================================
  2.  * Program : sms_serv.h                    Project : smslink
  3.  * Author  : Philippe Andersson.
  4.  * Date    : 29/02/00
  5.  * Version : 0.34b
  6.  * Notice  : (c) Les Ateliers du Heron, 1998 for Scitex Europe, S.A.
  7.  * Comment : Main include file for SMSLink server.
  8.  *
  9.  * Modification History :
  10.  * - 0.01a (13/08/98) : Initial release.
  11.  * - 0.02a (25/08/98) : Added section for logging facility and
  12.  *   a function declarations section. Cosmetics.
  13.  * - 0.10a (27/08/98) : Integration of the parser module into the
  14.  *   main sms_serv program. Merged server.h into this file.
  15.  *   Added code to prevent double inclusion. Cosmetics.
  16.  * - 0.11a (01/09/98) : Increased BUFFSIZE from 200 to 400.
  17.  * - 0.12a (27/09/98) : Added MINIBUFF define.
  18.  * - 1.13a (19/10/98) : Added GSMDEVFILE define and function
  19.  *   definitions for gsmdevices.c. Changed 'struct modem_def'
  20.  *   to 'struct gsms_def' and added fields.
  21.  * ++++ Switched to Beta ++++
  22.  * - 0.14b (23/10/98) : Added 'user' member in 'symbols' struct
  23.  *   and defined MAXUIDLEN.
  24.  * - 0.15b (22/11/98) : Added MBCHKINTERVAL define.
  25.  * - 0.16b (13/12/98) : Added member "owner" to struct gsms_def.
  26.  * - 0.17b (06/02/99) : Added support for access control.
  27.  *   Contributed by Philipp Klaus <pklaus@access.ch>.
  28.  * - 0.18b (11/02/99) : Start rewriting of ACL support.
  29.  * - 0.19b (14/02/99) : Declared public functions for new ACL
  30.  *   implementation.
  31.  * - 0.20b (28/06/99) : Added struct mbox_item to be used by
  32.  *   mbcheck() and friends.
  33.  * - 0.21b (29/06/99) : Moved 3 functions to stuff.c and made
  34.  *   them public.
  35.  * - 0.22b (03/07/99) : Added public definition for trim().
  36.  * - 0.23b (11/07/99) : Added mailbox files definitions.
  37.  * - 0.24b (17/08/99) : Added checkpoint file definition for
  38.  *   interaction with the SMS to mail gateway.
  39.  * - 0.25b (18/08/99) : Published mailgws_death().
  40.  * - 0.26b (20/08/99) : Adapted structure after splitting
  41.  *   stuff.c. Mostly cosmetic.
  42.  * - 0.27b (25/08/99) : Added MAXRETRIES define, as well as
  43.  *   version tracking for sms2mailgw.
  44.  * - 0.28b (28/09/99) : Created struct email_msg and inbox_line,
  45.  *   and exported mailbox_run(). Defined DEFAULTDOMAIN.
  46.  * - 0.29b (17/10/99) : Added FIELD_HEADERS definition.
  47.  * - 0.30b (20/10/99) : Added GWUSER definition.
  48.  * - 0.31b (21/10/99) : Added MAILHOST definition. Moved tellsock()
  49.  *   definition to stuff.c.
  50.  * - 0.32b (09/11/99) : Added nicedate() declaration (exported by
  51.  *   stuff.c).
  52.  * - 0.33b (02/12/99) : Changed DEFAULTSMSC to a catch-all
  53.  *   "default" value in order to improve its handling. See
  54.  *   send_sms() in server.y. Added public export of empty_acl_list()
  55.  *   to accessctrl.c (for "aclist" command).
  56.  * - 0.34b (29/02/00) : Changed struct email_msg to replace recepients
  57.  *   fields with linked lists for easier handling by send_mail().
  58.  *========================================================*/
  59. #ifndef _SMS_SERV_H
  60. #define _SMS_SERV_H
  61. /* Program information */
  62. #define SMS_SERV_VERSION "0.44b"
  63. #define SMS_SERV_DATE "25/02/00"
  64. #define PROMPT "SMS> "
  65. /* GSM devices */
  66. #define GSMDEVFILE "/etc/gsmdevices"
  67. #define PINLEN 4
  68. #define PUKLEN 8
  69. #define MAXATTEMPTS 4         /* 3 wrong PIN's + 1 PUK */
  70. #define CTRL_Z "x1A" /* SM end marker */
  71. /* access control (INA) */
  72. #define ACCESSFILE "/etc/gsmaccess"
  73. #define MAXACLS 10000 /* precaution */
  74. #define ACL_ALLOW 1
  75. #define ACL_DENY 2
  76. /* Buffer handling */
  77. #define BUFFSIZE 400
  78. #define MINIBUFF 80 /* for hostname, for inst. */
  79. #define BIGBUFF 1024
  80. /* SMS Messages-related */
  81. #define MAXPHNUMLEN 80 /* max length for phone num */
  82. #define MAXMSGLEN 160 /* max msg length for SMS */
  83. #define DEFAULTSMSC "default" /* device-level default */
  84. #define MAXUIDLEN 12 /* max length for sender ID */
  85. /* For incoming messages handling */
  86. #define MBCHKINTERVAL 3600 /* mailbox check interv.(sec)*/
  87. #define MBOX_FILE "/var/spool/smslink/inbox"
  88. #define MBOX_LOCKF "/var/spool/smslink/LCK..inbox"
  89. #define CHECKPOINTF "/var/spool/smslink/checkpoint"
  90. /* For the SMS to Mail gateway */
  91. #define SMS_GW_VERSION "0.07b"
  92. #define SMS_GW_DATE "02/03/00"
  93. #define MAXRETRIES 5 /* max tries to lock inbox */
  94. #define MAILHOST "localhost" /* SMTP relay */
  95. #define DEFAULTDOMAIN "."             /* set to override server's */
  96. #define GWUSER "smsgw" /* local user for mail deliv. */
  97. #define FIELD_HEADERS "TCRBFS"        /* supported field headers */
  98. /* For the logging calls */
  99. #include <syslog.h>
  100. #define FACILITY LOG_USER /* default */
  101. /* Local socket options */
  102. #define MAXCLIENTCONN 5 /* max socket queue length */
  103. #define MAXCHILDPROC 5 /* max child processes */
  104. /* Semaphore-related parameters */
  105. #define MAXMODEMS 2 /* max supported modem devs */
  106. #define M_TIMEOUT 90 /* secs wait for free modem */
  107. #define W_STEP 5 /* secs to sleep */
  108. /* Modem-related parameters */
  109. #define MAXDEVLEN 40 /* max. device name length */
  110. /* Can be usefull */
  111. #define TRUE        1
  112. #define FALSE       0
  113. /*==========================================================
  114.  * Structure Declarations
  115.  *========================================================*/
  116. #include <unistd.h>                  /* for pid_t typedef */
  117. #include <netinet/in.h>            /* for struct acl_item */
  118. /* This  structure defines an outbound SMS message */
  119. struct symbols {
  120.   char *smsc;                           /* message center */
  121.   char *destgsm;                       /* destination gsm */
  122.   char *message;                          /* message text */
  123.   char *user;                    /* sender identification */
  124. };
  125. /* This structure stores an incoming message */
  126. struct mbox_item {
  127.   int msgid;                       /* used for SIM access */
  128.   char fromgsm[MAXPHNUMLEN + 1];     /* sender GSM number */
  129.   char date[9];                        /* format YYYYMMDD */
  130.   char time[10];                      /* format xxhyymzzs */
  131.   char text[MAXMSGLEN + 1];
  132.   struct mbox_item *next;
  133.   struct mbox_item *prev;
  134. };
  135. typedef struct mbox_list_header {
  136.   struct mbox_item *head;
  137.   struct mbox_item *tail;
  138. } mbox_list;
  139. /* This defines a gsm device instance */
  140. struct gsms_def {
  141.   int free;                                 /* bool value */
  142.   pid_t owner;                    /* pid of owner process */
  143.   char device[MAXDEVLEN + 1];              /* device name */
  144.   char PIN[PINLEN + 1];                       /* PIN code */
  145.   char PUK[PUKLEN + 1];                       /* PUK code */
  146.   char addr[MAXPHNUMLEN + 1];       /* SIM calling number */
  147.   char defsca[MAXPHNUMLEN + 1]; /* def. Service Center Addr. */
  148.   char provider[MAXDEVLEN + 1]; /* GSM Net. provider name */
  149. };
  150. /* structures for access control (ACL items) */
  151. struct acl_item {
  152.   int action;                          /* allow or reject */
  153.   struct in_addr network;                /* network or IP */
  154.   unsigned long nomask;                /* net. order mask */
  155.   struct acl_item *next;
  156.   struct acl_item *prev;
  157. };
  158. typedef struct acl_list_header {
  159.   struct acl_item *head;
  160.   struct acl_item *tail;
  161. } acl_list;
  162. /*--------------------------------------------------------*/
  163. /* Structures for the SMS to Mail gateway */
  164. struct rcpt_item {
  165.   char *rcpt;
  166.   struct rcpt_item *next;
  167.   struct rcpt_item *prev;
  168. };
  169. typedef struct rcpt_list_header {
  170.   struct rcpt_item *head;
  171.   struct rcpt_item *tail;
  172. } rcpt_list;
  173. struct email_msg {
  174.   char *from;
  175.   rcpt_list to;
  176.   rcpt_list cc;
  177.   rcpt_list bcc;
  178.   char *reply_to;
  179.   char *subject;
  180.   char *body;
  181. };
  182. struct inbox_line {
  183.   char device[MAXDEVLEN + 1];          /* GSM device file */
  184.   int msgid;                       /* used for SIM access */
  185.   char fromgsm[MAXPHNUMLEN + 1];     /* sender GSM number */
  186.   char date[9];                        /* format YYYYMMDD */
  187.   char time[10];                      /* format xxhyymzzs */
  188.   char text[MAXMSGLEN + 1];
  189. };
  190. /*==========================================================
  191.  * Function Declarations
  192.  *========================================================*/
  193. /* --- in "stuff.c" --- */
  194. int shiftleft (char*, int);
  195. int dequote (char *);
  196. int trim (char *);
  197. int deslashdot (char *);
  198. char *nicedate (char *);
  199. void tellsock (int, char *);
  200. void syserr (char *);
  201. void fatal (char *);
  202. /* --- in "serv_stuff.c" --- */
  203. void daemons_death ();           /* main exit function for sms_serv */
  204. int gsmdevcpy (struct gsms_def *, struct gsms_def *);
  205. int tell_gsm (int, char *);
  206. int get_gsm_answer (int, char *, int, int);
  207. int set_semvalue (int, int);
  208. int sem_wait (int);
  209. int sem_decreq (int);
  210. int sem_signal (int);
  211. /* --- in "gw_stuff.c" --- */
  212. void mailgws_death ();           /* main exit function for sms2mailgw */
  213. int mailbox_run (char *, char*);
  214. /* --- in "mbchecker.c" --- */
  215. void mbcheck_wrapper (void);
  216. /* --- in "accessctrl.c" --- */
  217. int empty_acl_list (acl_list);
  218. void acl_list_init (acl_list *);
  219. void free_acl_list (acl_list *);
  220. int read_acl (acl_list *);
  221. int check_acl (struct in_addr *, acl_list);
  222. /* --- in "gsmdevices.c" --- */
  223. static int open_gsmdevs (void);
  224. static void close_gsmdevs (void);
  225. struct gsms_def *getgsmdevbynam (char *);
  226. int getgsmdevscount (int);
  227. void setgsmdevs (void);
  228. struct gsms_def *getnextgsmdev (void);
  229. static int demangle_gsmdev_entry (struct gsms_def *, char *);
  230. /* --- in "server.y" --- */
  231. int parser ();                           /* parser module */
  232. int my_yyinput (char *, int);       /* new input for flex */
  233. /* --- in "server.l" --- */
  234. void yyerror (const char *);
  235. #endif                             /* #ifndef _SMS_SERV_H */
  236. /*==========================================================
  237.  * EOF : sms_serv.h
  238.  *===================*/