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

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * wap.h - public interface to WAP protocol library
  3.  *
  4.  * The WAP protocol library consists of separate layers, which each run
  5.  * in their own thread.  The layers are normally used together and will
  6.  * communicate with each other, but they can be used separately by
  7.  * specialized applications.
  8.  *
  9.  * Communication between layers is done by sending WAPEvent structures.
  10.  * These events are passed to dispatch functions.  Each layer has its
  11.  * own dispatch function which is responsible for queueing the event
  12.  * for that layer.
  13.  * 
  14.  * The application using this library has to provide an application layer
  15.  * and a datagram layer.  These layers do not have to be implemented in
  16.  * any particular way and do not have to run in their own threads, but
  17.  * they do have to provide dispatch functions.
  18.  *
  19.  * In general, if a layer receives an event that it does not know how
  20.  * to handle, it will report this and ignore the event.
  21.  */
  22. #ifndef WAP_H
  23. #define WAP_H
  24. #include "wap_events.h"
  25. #include "wap_addr.h"
  26. typedef void wap_dispatch_func_t(WAPEvent *event);
  27. /*
  28.  * Generic dispatch function that takes T_DUnitdata_Ind events and
  29.  * figures out to which layer they should be sent, by recognizing
  30.  * well-known port numbers and by inspecting the datagram contents.
  31.  * It also unpacks WTP events before dispatching, so that the WTP
  32.  * thread is not burdened by this.
  33.  */
  34. void wap_dispatch_datagram(WAPEvent *event);
  35. /*
  36.  * Generic startup function that initializes all the layers and
  37.  * chains their dispatch functions together.
  38.  */
  39. void wap_init(wap_dispatch_func_t *datagram_dispatch,
  40.               wap_dispatch_func_t *application_dispatch);
  41. /*
  42.  * Undoes what wap_init did.
  43.  */
  44. void wap_shutdown(void);
  45. /*
  46.  * Datagram layer
  47.  *
  48.  * This layer is not provided by libwap itself.  The application is
  49.  * expected to create one, by:
  50.  *  - providing a dispatch function that takes T_DUnitdata_Req
  51.  *    events (outgoing datagrams)
  52.  *  - passing incoming datagrams to the right layer, either by
  53.  *    calling the layer's dispatch function directly or by calling
  54.  *    wap_dispatch_datagram().
  55.  */
  56. /*
  57.  * Transaction layer, responder
  58.  *
  59.  * This layer implements the Responder side of WTP.
  60.  * Its dispatch function takes events of these types:
  61.  *
  62.  *   RcvInvoke, RcvAck, RcvAbort, RcvErrorPDU,
  63.  *   TR_Invoke_Res, TR_Result_Req, TR_Abort_Req,
  64.  *   TimerTO_A, TimerTO_R, TimerTO_W
  65.  *
  66.  * FIXME It also takes T_DUnitdata_Ind events, which it will unpack into one
  67.  * of the Rcv* events and then process.
  68.  *
  69.  * This layer will dispatch T_DUnitdata_Req events to the datagram layer,
  70.  * and these event types to the session layer:
  71.  *
  72.  *   TR_Invoke_Ind, TR_Result_Cnf, TR_Abort_Ind
  73.  */
  74. void wtp_resp_init(wap_dispatch_func_t *datagram_dispatch,
  75.                    wap_dispatch_func_t *session_dispatch,
  76.                    wap_dispatch_func_t *push_dispatch);
  77. void wtp_resp_dispatch_event(WAPEvent *event);
  78. void wtp_resp_shutdown(void);
  79. /*
  80.  * Transaction layer, initiator
  81.  *
  82.  * This layer implements the Initiator side of WTP.
  83.  * FIXME Currently only class 0 and 1 are implemented.
  84.  * Its dispatch function takes events of these types:
  85.  *
  86.  *   RcvAck, RcvAbort, RcvErrorPDU
  87.  *   TR_Invoke_Req, TR_Abort_Req
  88.  *   TimerTO_R
  89.  *
  90.  * FIXME It also takes T_DUnitdata_Ind events, which it will unpack into one
  91.  * of the Rcv* events and then process.
  92.  *
  93.  * This layer will dispatch T_DUnitdata_Req events to the datagram layer,
  94.  * and these event types to the session layer:
  95.  *
  96.  *   TR_Invoke_Cnf, TR_Abort_Ind
  97.  */
  98. void wtp_initiator_init(wap_dispatch_func_t *datagram_dispatch,
  99.                         wap_dispatch_func_t *session_dispatch);
  100. void wtp_initiator_dispatch_event(WAPEvent *event);
  101. void wtp_initiator_shutdown(void);
  102. /*
  103.  * Session layer, connectionless mode
  104.  *
  105.  * This layer implements Connectionless WSP.
  106.  * FIXME Currently only the server side is implemented.
  107.  * Its dispatch function takes events of these types:
  108.  *
  109.  *   T_DUnitdata_Ind
  110.  *   S_Unit_MethodResult_Req
  111.  *
  112.  * This layer will dispatch T_DUnitdata_Req events to the datagram layer,
  113.  * and S_Unit_MethodInvoke_Ind events to the application layer.
  114.  */
  115. void wsp_unit_init(wap_dispatch_func_t *datagram_dispatch,
  116.                    wap_dispatch_func_t *application_dispatch);
  117. void wsp_unit_dispatch_event(WAPEvent *event);
  118. void wsp_unit_shutdown(void);
  119. /*
  120.  * Session layer, connection-oriented mode, server side
  121.  *
  122.  * This layer implements the server side of connection-oriented WSP.
  123.  * FIXME Not all defined service primitives are supported yet.
  124.  * Its dispatch function takes events of these types:
  125.  *
  126.  *   TR_Invoke_Ind, TR_Result_Cnf, TR_Abort_Ind
  127.  *   S_Connect_Res, S_Resume_Res
  128.  *   S_MethodInvoke_Res, S_MethodResult_Res
  129.  *   Disconnect_Event, Suspend_Event  (internal)
  130.  *
  131.  * This layer will dispatch events of these types to the application layer:
  132.  *
  133.  *   S_Connect_Ind, S_Disconnect_Ind,
  134.  *   S_Suspend_Ind, S_Resume_Ind,
  135.  *   S_MethodInvoke_Ind, S_MethodResult_Cnf, S_MethodAbort_Ind
  136.  *
  137.  * and events of these types to the WTP Responder layer:
  138.  *
  139.  *   TR_Invoke_Res, TR_Result_Req, TR_Abort_Req
  140.  *
  141.  * and events of these types to the WTP Initiator layer:
  142.  *
  143.  *   (none yet)
  144.  */
  145. void wsp_session_init(wap_dispatch_func_t *responder_dispatch,
  146.       wap_dispatch_func_t *initiator_dispatch,
  147.                       wap_dispatch_func_t *application_dispatch,
  148.                       wap_dispatch_func_t *ota_dispatch);
  149. void wsp_session_dispatch_event(WAPEvent *event);
  150. void wsp_session_shutdown(void);
  151. /*
  152.  * Session layer, connection-oriented mode, client side
  153.  *
  154.  * FIXME Not implemented yet.
  155.  */
  156. void wsp_push_client_init(wap_dispatch_func_t *dispatch_self, 
  157.                           wap_dispatch_func_t *dispatch_wtp_resp);
  158. void wsp_push_client_shutdown(void);
  159. void wsp_push_client_dispatch_event(WAPEvent *e);
  160. /*
  161.  * Application layer
  162.  *
  163.  * This layer is not provided by libwap itself.  The application is
  164.  * expected to create one, by providing a dispatch function to the
  165.  * session layer that takes events of these types:
  166.  *
  167.  *   S_Connect_Ind, S_Disconnect_Ind,
  168.  *   S_Suspend_Ind, S_Resume_Ind,
  169.  *   S_MethodInvoke_Ind, S_MethodResult_Cnf, S_MethodAbort_Ind
  170.  *   S_Unit_MethodInvoke_Ind   (from wsp_unit)
  171.  *
  172.  * For most of these events the application layer is expected to send
  173.  * a response back to the session layer.
  174.  */
  175. #endif