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

手机WAP编程

开发平台:

WINDOWS

  1. #ifndef SMSCCONN_P_H
  2. #define SMSCCONN_P_H
  3. /* SMSC Connection private header
  4.  *
  5.  * Defines internal private structure
  6.  *
  7.  * Kalle Marjola 2000 for project Kannel
  8.  *
  9.  ADDING AND WORKING OF NEW SMS CENTER CONNECTIONS:
  10.  These are guidelines and rules for adding new SMSC Connections to
  11.  Kannel. See file bb_smscconn_cb.h for callback function prototypes.
  12.  An SMSC Connection handler is free-formed module which only has the following
  13.  rules:
  14.  1) Each new SMSC Connection MUST implement function
  15.     smsc_xxx_create(SMSCConn *conn, CfgGrp *cfg), which:
  16.     a) SHOULD NOT block   (XXX)
  17.     b) MUST warn about any configuration group variables it does
  18.        not support    (XXX)
  19.     c) MUST set up send_msg dynamic function to handle messages
  20.        to-be-sent. This function MAY NOT block. This function MAY
  21.        NOT destroy or alter the supplied message, but instead copy
  22.        it if need to be stored
  23.     d) CAN set up private shutdown function, which MAY NOT block
  24.     e) SHOULD set private function to return number of queued messages
  25.        to-be-sent inside the driver
  26.     f) MUST set SMSCConn->name
  27.  2) Each SMSC Connection MUST call certain BB callback functions when
  28.     certain things occur:
  29.     a) Each SMSC Connection MUST call callback function
  30.        bb_smscconn_killed when it dies because it was put down earlier
  31.        with bb_smscconn_shutdown or it simply cannot keep the connection
  32.        up (wrong password etc. When killed,
  33.        SMSC Connection MUST release all memory it has taken EXCEPT for
  34.        the basic SMSCConn struct, which is laterwards released by the
  35.        bearerbox.
  36.     b) When SMSC Connection receives a message from SMSC, it must
  37.        create a new Msg from it and call bb_smscconn_received
  38.     c) When SMSC Connection has sent a message to SMSC, it MUST call
  39.        callback function bb_smscconn_sent. The msg-parameter must be
  40.        identical to msg supplied with smscconn_send, but it can be
  41.        a duplicate of it
  42.     d) When SMSC Connection has failed to send a message to SMSC, it
  43.        MUST call callback function bb_smscconn_send_failed with appropriate
  44.        reason. The message supplied as with bb_smscconn_send
  45.     e) When SMSC Connection changes to SMSCCONN_ACTIVE, connection MUST
  46.        call bb_smscconn_connected
  47.  3) SMSC Connection MUST fill up SMSCConn structure as needed to, and is
  48.     responsible for any concurrency timings. SMSCConn->status MAY NOT be
  49.     set to SMSCCONN_DEAD until the connection is really that.
  50.     Use why_killed to make internally dead, supplied with reason.
  51.     If the connection is disconnected temporarily, the connection SHOULD
  52.     call bb_smscconn_send_failed for each message in its internal list
  53.  4) When SMSC Connection shuts down (shutdown called), it MUST try to send
  54.     all messages so-far relied to it to be sent if 'finish_sending' is set
  55.     to non-zero. If set to 0, it MUST call bb_smscconn_send_failed
  56.     for each message not yet sent.
  57.     After everything is ready (it can happen in different thread), before
  58.     calling callback function bb_smscconn_killed it MUST release all memory it
  59.     has taken except for basic SMSCConn structure, and set status to
  60.     SMSCCONN_DEAD so it can be finally deleted.
  61.  5) Callback bb_smscconn_ready is automatically called by main
  62.     smscconn_create. New implementation MAY NOT call it directly
  63.  6) SMSC Connection driver must obey is_stopped/stopped variable to
  64.     suspend receiving (it can still send/re-connect), or must set
  65.     appropriate function calls. When connection is stopped, it is not
  66.     allowed to receive any new messages
  67. */
  68. #include <signal.h>
  69. #include "gwlib/gwlib.h"
  70. #include "smscconn.h"
  71. struct smscconn {
  72.     /* variables set by appropriate SMSCConn driver */
  73.     int status; /* see smscconn.h */
  74.     int  load;         /* load factor, 0 = no load */
  75.     int why_killed; /* time to die with reason, set when
  76. * shutdown called */
  77.     time_t  connect_time; /* When connection to SMSC was established */
  78.     Mutex  *flow_mutex; /* used to lock SMSCConn structure (both
  79.  *  in smscconn.c and specific driver) */
  80.     /* connection specific counters (created in smscconn.c, updated
  81.      *  by callback functions in bb_smscconn.c, NOT used by specific driver) */
  82.     Counter *received;
  83.     Counter *sent;
  84.     Counter *failed;
  85.     /* SMSCConn variables set in smscconn.c */
  86.     int  is_stopped;
  87.     Octstr *name; /* Descriptive name filled from connection info */
  88.     Octstr *id; /* Abstract name specified in configuration and
  89.    used for logging and routing */
  90.     Octstr *allowed_smsc_id;
  91.     Octstr *denied_smsc_id;
  92.     Octstr *preferred_smsc_id;
  93.     Octstr *allowed_prefix;
  94.     Octstr *denied_prefix;
  95.     Octstr *preferred_prefix;
  96.     Octstr *unified_prefix;
  97.     /* XXX: move rest global data from Smsc here
  98.      */
  99.     /* pointers set by specific driver, but initiated to NULL by smscconn.
  100.      * Note that flow_mutex is always locked before these functions are
  101.      * called, and released after execution returns from them */
  102.     /* pointer to function called when smscconn_shutdown called.
  103.      * Note that this function is not needed always. If set, this
  104.      * function MUST set why_killed */
  105.     int (*shutdown) (SMSCConn *conn, int finish_sending);
  106.     /* pointer to function called when a new message is needed to be sent.
  107.      * MAY NOT block. Connection MAY NOT use msg directly after it has
  108.      * returned from this function, but must instead duplicate it if need to.
  109.      */
  110.     int (*send_msg) (SMSCConn *conn, Msg *msg);
  111.     /* pointer to function which returns current number of queued
  112.      * messages to-be-sent. The function CAN also set load factor directly
  113.      * to SMSCConn structure (above) */
  114.     long (*queued) (SMSCConn *conn);
  115.     /* pointers to functions called when connection started/stopped
  116.      * (suspend/resume), if not NULL */
  117.     void (*start_conn) (SMSCConn *conn);
  118.     void (*stop_conn) (SMSCConn *conn);
  119.     void *data; /* SMSC specific stuff */
  120. };
  121. /*
  122.  * Initializers for various SMSC connection implementations,
  123.  * each should take same arguments and return an int,
  124.  * which is 0 for okay and -1 for error.
  125.  *
  126.  * Each function is responsible for setting up all dynamic
  127.  * function pointers at SMSCConn structure and starting up any
  128.  * threads it might need.
  129.  *
  130.  * If conn->is_stopped is set (!= 0), create function MUST set
  131.  * its internal state as stopped, so that laterwards called
  132.  * smscconn_start works fine (and until it is called, no messages
  133.  *  are received)
  134.  */
  135. /* generic wrapper for old SMSC implementations (uses old smsc.h).
  136.  * Responsible file: smsc/smsc_wrapper.c */
  137. int smsc_wrapper_create(SMSCConn *conn, CfgGroup *cfg);
  138. /* Responsible file: smsc/smsc_fake.c */
  139. int smsc_fake_create(SMSCConn *conn, CfgGroup *cfg);
  140. /* Responsible file: smsc/smsc_emi2.c */
  141. int smsc_emi2_create(SMSCConn *conn, CfgGroup *cfg);
  142. /* Responsible file: smsc/smsc_http.c */
  143. int smsc_http_create(SMSCConn *conn, CfgGroup *cfg);
  144. /* Responsible file: smsc/smsc_smpp.c */
  145. int smsc_smpp_create(SMSCConn *conn, CfgGroup *cfg);
  146. /* Responsible file: smsc/smsc_cgw.c */
  147. int smsc_cgw_create(SMSCConn *conn, CfgGroup *cfg);
  148. /* Responsible file: smsc/smsc_at2.c. */
  149. int smsc_at2_create(SMSCConn *conn, CfgGroup *cfg);
  150. /* Responsible file: smsc/smsc_smasi.c */
  151. int smsc_smasi_create(SMSCConn *conn, CfgGroup *cfg);
  152. /* ADD NEW CREATE FUNCTIONS HERE
  153.  *
  154.  * int smsc_xxx_create(SMSCConn *conn, CfgGroup *cfg);
  155.  */
  156. #endif