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

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * wtp.h - WTP implementation general header, common things for the iniator 
  3.  * and the responder.
  4.  */
  5. #ifndef WTP_H
  6. #define WTP_H
  7. #include <errno.h>
  8. #include <sys/types.h>
  9. #include <netinet/in.h>
  10. #include <stdlib.h>
  11. #include "gwlib/gwlib.h"
  12. #include "wap_addr.h"
  13. #include "wap_events.h"
  14. /* 
  15.  * Use this structure for storing segments to be reassembled
  16.  */
  17. typedef struct WTPSegment WTPSegment;
  18. /*
  19.  * For removing the magic
  20.  */
  21. enum {
  22.     NUMBER_OF_ABORT_TYPES = 2,
  23.     NUMBER_OF_ABORT_REASONS  = 9,
  24.     NUMBER_OF_TRANSACTION_CLASSES = 3
  25. };
  26. /*
  27.  * For now, timers are defined. They will depend on bearer information fetched
  28.  * from address (or from a header field of the protocol speaking with the
  29.  * bearerbox). For suggested timers, see WTP, Appendix A.
  30.  */
  31. enum {
  32.     L_A_WITH_USER_ACK = 4,
  33.     L_R_WITH_USER_ACK = 7,
  34.     S_R_WITHOUT_USER_ACK = 3,
  35.     S_R_WITH_USER_ACK = 4,
  36.     G_R_WITHOUT_USER_ACK = 3,
  37.     G_R_WITH_USER_ACK = 3,
  38.     W_WITH_USER_ACK = 30
  39. };
  40. /*
  41.  * Maximum values for counters (for retransmissions and acknowledgement waiting
  42.  * periods)
  43.  */
  44. enum {
  45.     AEC_MAX = 6,
  46.     MAX_RCR = 8
  47. };
  48. /*
  49.  * Types of acknowledgement PDU (normal acknowledgement or tid verification)
  50.  */
  51. enum {
  52.     ACKNOWLEDGEMENT = 0,
  53.     TID_VERIFICATION = 1
  54. };
  55. /*
  56.  * Who is aborting (WTP or WTP user)
  57.  */
  58. enum {
  59.     PROVIDER = 0x00,
  60.     USER = 0x01
  61. };
  62. /*
  63.  * WTP abort types (i.e., provider abort codes defined by WAP)
  64.  */
  65. enum {
  66.     UNKNOWN = 0x00,
  67.     PROTOERR = 0x01,
  68.     INVALIDTID = 0x02,
  69.     NOTIMPLEMENTEDCL2 = 0x03,
  70.     NOTIMPLEMENTEDSAR = 0x04,
  71.     NOTIMPLEMENTEDUACK = 0x05,
  72.     WTPVERSIONZERO = 0x06,
  73.     CAPTEMPEXCEEDED = 0x07,
  74.     NORESPONSE = 0x08,
  75.     MESSAGETOOLARGE = 0x09
  76. };    
  77. /*
  78.  * Transaction classes
  79.  */
  80. enum {
  81.     TRANSACTION_CLASS_0 = 0,
  82.     TRANSACTION_CLASS_1 = 1,
  83.     TRANSACTION_CLASS_2 = 2
  84. };
  85. /*
  86.  * Types of acknowledgement
  87.  */
  88. enum {
  89.     PROVIDER_ACKNOWLEDGEMENT = 0,
  90.     USER_ACKNOWLEDGEMENT = 1
  91. };
  92. /*
  93.  * Who is indicating, wtp initiator or responder.
  94.  */
  95. enum {
  96.     INITIATOR_INDICATION = 0,
  97.     RESPONDER_INDICATION = 1 
  98. };
  99. /*
  100.  * Responder set first tid, initiator not. So all tids send by initiator are 
  101.  * greater than 2**15.
  102.  */
  103. #define INITIATOR_TID_LIMIT (1 << 15)
  104. /*
  105.  *  Transaction is identified by the address four-tuple and tid.
  106.  */
  107. struct machine_pattern {
  108.     WAPAddrTuple *tuple;
  109.     long tid;
  110.     long mid;
  111. };
  112. typedef struct machine_pattern machine_pattern;
  113. /*
  114.  * Handles possible concatenated messages. Returns a list of wap events, 
  115.  * consisting of these events. 
  116.  */
  117. List *wtp_unpack_wdp_datagram(WAPEvent *datagram);
  118. /*
  119.  * Responder set the first bit of the tid field. If we get a packet from the 
  120.  * responder, we are the initiator. 
  121.  *
  122.  * Returns 1 for responder, 0 for iniator and -1 for error.
  123.  */
  124. int wtp_event_is_for_responder(WAPEvent *event);
  125. #endif