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

手机WAP编程

开发平台:

WINDOWS

  1. #ifndef SMSCCONN_H
  2. #define SMSCCONN_H
  3. /*
  4.  * SMSC Connection
  5.  *
  6.  * Interface for main bearerbox to SMS center connection modules
  7.  *
  8.  * At first stage a simple wrapper for old ugly smsc module
  9.  *
  10.  * Kalle Marjola 2000
  11.  */
  12. #include "gwlib/gwlib.h"
  13. #include "gw/msg.h"
  14. /*
  15.  * Structure hierarchy:
  16.  *
  17.  * Bearerbox keeps list of pointers to SMSCConn structures, which
  18.  * include all data needed by connection, including routing data.
  19.  * If any extra data not linked to that SMSC Connection is needed,
  20.  * that is held in bearerbox 
  21.  *
  22.  * SMSCConn is internal structure for smscconn module. It has a list
  23.  * of common variables like number of sent/received messages and
  24.  * and pointers to appropriate lists, and then it has a void pointer
  25.  * to appropriate smsc structure defined and used by corresponding smsc
  26.  * connection type module (like CIMD2, SMPP etc al)
  27.  *
  28.  * Concurrency notes:
  29.  *
  30.  * bearerbox is responsible for not calling cleanup at the same time
  31.  * as it calls other functions, but must call it after it has noticed that
  32.  * status == KILLED
  33.  */
  34. typedef struct smscconn SMSCConn;
  35. /* create new SMS center connection from given configuration group,
  36.  * or return NULL if failed.
  37.  *
  38.  * The new connection does its work in its own privacy, and calls
  39.  * callback functions at bb_smscconn_cb module. It calls function
  40.  * bb_smscconn_ready when it has put everything up.
  41.  *
  42.  * NOTE: this function starts one or more threads to
  43.  *   handle traffic with SMSC, and caller does not need to
  44.  *   care about it afterwards.
  45.  */
  46. SMSCConn *smscconn_create(CfgGroup *cfg, int start_as_stopped);
  47. /* shutdown/destroy smscc. Stop receiving messages and accepting
  48.  * new message to-be-sent. Die when any internal queues are empty,
  49.  * if finish_sending != 0, or if set to 0, kill connection ASAP and
  50.  * call send_failed -callback for all messages still in queue
  51.  */
  52. void smscconn_shutdown(SMSCConn *smscconn, int finish_sending);
  53. /* this is final function to cleanup all memory still held by
  54.  * SMSC Connection after it has been killed (for synchronization
  55.  *  problems it cannot be cleaned automatically)
  56.  * Call this after send returns problems or otherwise notice that
  57.  * status is KILLED. Returns 0 if OK, -1 if it cannot be (yet) destroyed.
  58.  */
  59. int smscconn_destroy(SMSCConn *smscconn);
  60. /* stop smscc. A stopped smscc does not receive any messages, but can
  61.  * still send messages, so that internal queue can be emptied. The caller
  62.  * is responsible for not to add new messages into queue if the caller wants
  63.  * the list to empty at some point
  64.  */
  65. int smscconn_stop(SMSCConn *smscconn);
  66. /* start stopped smscc. Return -1 if failed, 0 otherwise */
  67. void smscconn_start(SMSCConn *smscconn);
  68. /* Return name of the SMSC, as reference - caller may not free it! */
  69. Octstr *smscconn_name(SMSCConn *smscconn);
  70. /* Return ID of the SMSC, as reference - caller may not free it! */
  71. Octstr *smscconn_id(SMSCConn *conn);
  72. /* Check if this SMSC Connection is usable as sender for given
  73.  * message. The bearerbox must then select the good SMSC for sending
  74.  * according to load levels and connected/disconnected status, this
  75.  * function only checks preferred/denied strings and overall status
  76.  *
  77.  * Return -1 if not (denied or permanently down), 0 if okay,
  78.  * 1 if preferred one.
  79.  */
  80. int smscconn_usable(SMSCConn *conn, Msg *msg);
  81. /* Call SMSC specific function to handle sending of 'msg'
  82.  * Returns immediately, with 0 if successful and -1 if failed.
  83.  * In any case the caller is still responsible for 'msg' after this
  84.  * call
  85.  * Note that return value does NOT mean that message has been send
  86.  * or send has failed, but SMSC Connection calls appropriate callback
  87.  * function later
  88.  */
  89. int smscconn_send(SMSCConn *smsccconn, Msg *msg);
  90. /* Return just status as defined below */
  91. int smscconn_status(SMSCConn *smscconn);
  92. typedef struct smsc_state {
  93.     int status; /* see enumeration, below */
  94.     int killed; /* if we are killed, why */
  95.     int is_stopped; /* is connection currently in stopped state? */
  96.     unsigned long received; /* total number */
  97.     unsigned long sent; /* total number */
  98.     unsigned long failed; /* total number */
  99.     long queued; /* set our internal outgoing queue length */
  100.     long online; /* in seconds */
  101.     int load; /* subjective value 'how loaded we are' for
  102.  * routing purposes, similar to sms/wapbox load */
  103. } StatusInfo;
  104. enum {
  105.     SMSCCONN_CONNECTING,
  106.     SMSCCONN_ACTIVE,
  107.     SMSCCONN_ACTIVE_RECV,
  108.     SMSCCONN_RECONNECTING,
  109.     SMSCCONN_DISCONNECTED,
  110.     SMSCCONN_DEAD /* ready to be cleaned */
  111. };
  112. enum {
  113.     SMSCCONN_ALIVE = 0,
  114.     SMSCCONN_KILLED_WRONG_PASSWORD = 1,
  115.     SMSCCONN_KILLED_CANNOT_CONNECT = 2,
  116.     SMSCCONN_KILLED_SHUTDOWN = 3
  117. };
  118. /* return current status of the SMSC connection, filled to infotable.
  119.  * For unknown numbers, put -1. Return -1 if either argument was NULL.
  120.  */
  121. int smscconn_info(SMSCConn *smscconn, StatusInfo *infotable);
  122. #endif