wap.pp 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. {
  2. This file is part of the Free Pascal run time library.
  3. Copyright (c) 2008 Free Pascal development team.
  4. See the file COPYING.FPC, included in this distribution,
  5. for details about the copyright.
  6. This program is distributed in the hope that it will be useful,
  7. but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  9. ********************************************************************** }
  10. unit wap;
  11. interface
  12. uses
  13. Windows;
  14. {$calling cdecl}
  15. //*********************************************************
  16. //
  17. // Constants
  18. //
  19. //*********************************************************
  20. const
  21. wapdll = 'wap.dll';
  22. //*******************************************************
  23. FACILITY_WAP = $500;
  24. //WTLS errors
  25. WAP_E_WTLS = (SEVERITY_ERROR shl 31) or (FACILITY_WAP shl 16) or $0001;
  26. WAP_E_WTLS_CERTIFICATE = (SEVERITY_ERROR shl 31) or (FACILITY_WAP shl 16) or $0002;
  27. WAP_E_WTLS_HANDSHAKE = (SEVERITY_ERROR shl 31) or (FACILITY_WAP shl 16) or $0003;
  28. WAP_E_WTLS_CRYPTERROR = (SEVERITY_ERROR shl 31) or (FACILITY_WAP shl 16) or $0004;
  29. WAP_E_WTLS_BADMAC = (SEVERITY_ERROR shl 31) or (FACILITY_WAP shl 16) or $0005;
  30. WAP_E_NO_UDP_ACCESS = (SEVERITY_ERROR shl 31) or (FACILITY_WAP shl 16) or $00100;
  31. //Maximum sizes
  32. const
  33. MAX_WAP_ADDRESS_LENGTH = 64;
  34. //WDP field identifiers
  35. WDP_FIELD_NONE = $00000000;
  36. WDP_FIELD_SOURCEADDRESS = $00000001;
  37. WDP_FIELD_SOURCEPORT = $00000002;
  38. WDP_FIELD_DESTINATIONADDRESS = $00000004;
  39. WDP_FIELD_DESTINATIONPORT = $00000008;
  40. WDP_FIELD_USERDATA = $00000010;
  41. WDP_FIELD_ERRORCODE = $00000020;
  42. //WTP field identifiers
  43. WTP_FIELD_NONE = $00000000;
  44. WTP_FIELD_SOURCEADDRESS = $00000001;
  45. WTP_FIELD_SOURCEPORT = $00000002;
  46. WTP_FIELD_DESTINATIONADDRESS = $00000004;
  47. WTP_FIELD_DESTINATIONPORT = $00000008;
  48. WTP_FIELD_USERACKNOWLEDGEMENT = $00000010;
  49. WTP_FIELD_WANTSECURETRANSACTION = $00000020;
  50. WTP_FIELD_USERDATA = $00000040;
  51. WTP_FIELD_CLASSTYPE = $00000080;
  52. WTP_FIELD_EXITINFO = $00000100;
  53. WTP_FIELD_HANDLE = $00000200;
  54. WTP_FIELD_ABORTCODE = $00000400;
  55. WTP_FIELD_TRANSACTIONSECURITYLEVEL = $00000800;
  56. INVALID_WTP_TRANSACTION_HANDLE = 0;
  57. //****************************************************************
  58. //
  59. // Types
  60. //
  61. //****************************************************************
  62. type
  63. WAP_LAYER = (
  64. WAP_LAYER_WDP = 1,
  65. WAP_LAYER_WTLS,
  66. WAP_LAYER_WTP,
  67. WAP_LAYER_WSP,
  68. WAP_LAYER_WAE);
  69. PWAP_LAYER = ^WAP_LAYER;
  70. //WAP primitives
  71. WAP_PRIMITIVE_ID = (
  72. WAP_PRIMITIVE_ID_T_DUNITDATA = 1);
  73. PWAP_PRIMITIVE_ID = ^WAP_PRIMITIVE_ID;
  74. //WAP primitive type
  75. WAP_PRIMITIVE_TYPE = (
  76. WAP_PRIMITIVE_TYPE_REQUEST = 1,
  77. WAP_PRIMITIVE_TYPE_INDICATION,
  78. WAP_PRIMITIVE_TYPE_RESPONSE,
  79. WAP_PRIMITIVE_TYPE_CONFIRM);
  80. PWAP_PRIMITIVE_TYPE = ^WAP_PRIMITIVE_TYPE;
  81. //WAP address types
  82. WAP_ADDRESS_TYPE = (
  83. WAP_ADDRESS_TYPE_UDP = 1,
  84. WAP_ADDRESS_TYPE_GSM_SMS);
  85. PWAP_ADDRESS_TYPE = ^WAP_ADDRESS_TYPE;
  86. //WAP address structure
  87. WAP_ADDRESS_tag = record
  88. watAddressType: WAP_ADDRESS_TYPE;
  89. ptsAddress : Array[0..MAX_WAP_ADDRESS_LENGTH-1] of TCHAR;
  90. end {WAP_ADDRESS_tag};
  91. WAP_ADDRESS = WAP_ADDRESS_tag;
  92. PWAP_ADDRESS = ^WAP_ADDRESS_tag;
  93. WAP_HANDLE = LongInt;
  94. PWAP_HANDLE = ^WAP_HANDLE;
  95. //WTP transaction class types
  96. WTP_TRANSACTION_CLASS_TYPE = (
  97. WTP_TRANSACTION_CLASS_TYPE_0 = 1,
  98. WTP_TRANSACTION_CLASS_TYPE_1,
  99. WTP_TRANSACTION_CLASS_TYPE_2);
  100. PWTP_TRANSACTION_CLASS_TYPE = ^WTP_TRANSACTION_CLASS_TYPE;
  101. //WTP secure transaction (WTLS) security levels
  102. WTP_TRANSACTION_SECURITY_LEVEL = (
  103. WTP_TRANSACTION_SECURITY_LEVEL_NOTSECURE = 1,
  104. WTP_TRANSACTION_SECURITY_LEVEL_SECURENOAUTH,
  105. WTP_TRANSACTION_SECURITY_LEVEL_GATEWAYAUTH);
  106. PWTP_TRANSACTION_SECURITY_LEVEL = ^WTP_TRANSACTION_SECURITY_LEVEL;
  107. WTP_TRANSACTION_HANDLE = LongInt;
  108. //WAP primitives
  109. //Base primitive type - all other primitive types derive from this one
  110. wap_primitive_base_tag = record
  111. wpiPrimitiveID : WAP_PRIMITIVE_ID;
  112. wptPrimitiveType: WAP_PRIMITIVE_TYPE;
  113. dwValidFields : LongInt;
  114. end {wap_primitive_base_tag};
  115. WAP_PRIMITIVE_BASE = wap_primitive_base_tag;
  116. PWAP_PRIMITIVE_BASE = ^wap_primitive_base_tag;
  117. //T-DUnitdata primitive (WDP)
  118. wdp_unitdata_tag = record
  119. wpiPrimitiveID : WAP_PRIMITIVE_ID;
  120. wptPrimitiveType : WAP_PRIMITIVE_TYPE;
  121. dwValidFields : LongInt;
  122. waSourceAddress : WAP_ADDRESS;
  123. dwSourcePort : LongInt;
  124. waDestinationAddress: WAP_ADDRESS;
  125. dwDestinationPort : LongInt;
  126. pbUserData : PBYTE;
  127. dwUserDataSize : LongInt;
  128. end {wdp_unitdata_tag};
  129. WDP_INITDATA = wdp_unitdata_tag;
  130. PWDP_INITDATA = ^wdp_unitdata_tag;
  131. //T-DError primitive (WDP)
  132. //typedef struct wap_primitive_t_derror_tag
  133. //WAP_PRIMITIVE_ID wpiPrimitiveID;
  134. //WAP_PRIMITIVE_TYPE wptPrimitiveType;
  135. //DWORD dwValidFields;
  136. //WAP_ADDRESS waSourceAddress;
  137. //DWORD dwSourcePort;
  138. //WAP_ADDRESS waDestinationAddress;
  139. //DWORD dwDestinationPort;
  140. //HRESULT hrErrorCode;
  141. //WAP_PRIMITIVE_T_DERROR;
  142. //TR-Invoke primitive (WTP)
  143. wtp_invoke_tag = record
  144. wpiPrimitiveID : WAP_PRIMITIVE_ID;
  145. wptPrimitiveType : WAP_PRIMITIVE_TYPE;
  146. dwValidFields : LongInt;
  147. waSourceAddress : WAP_ADDRESS;
  148. dwSourcePort : LongInt;
  149. waDestinationAddress : WAP_ADDRESS;
  150. dwDestinationPort : LongInt;
  151. bUserAcknowledgement : Bool;
  152. bWantSecureTransaction: Bool;
  153. pbUserData : PBYTE;
  154. dwUserDataSize : LongInt;
  155. wtctClassType : WTP_TRANSACTION_CLASS_TYPE;
  156. pbExitInfo : PBYTE;
  157. dwExitInfoSize : LongInt;
  158. wthTransactionHandle : WTP_TRANSACTION_HANDLE;
  159. end {wtp_invoke_tag};
  160. WTP_INVOKE = wtp_invoke_tag;
  161. PWTP_INVOKE = ^wtp_invoke_tag;
  162. //TR-Result primitive (WTP)
  163. wtp_result_tag = record
  164. wpiPrimitiveID : WAP_PRIMITIVE_ID;
  165. wptPrimitiveType : WAP_PRIMITIVE_TYPE;
  166. dwValidFields : LongInt;
  167. pbUserData : PBYTE;
  168. dwUserDataSize : LongInt;
  169. pbExitInfo : PBYTE;
  170. dwExitInfoSize : LongInt;
  171. wthTransactionHandle : WTP_TRANSACTION_HANDLE ;
  172. wtslTransactionSecurityLevel: WTP_TRANSACTION_SECURITY_LEVEL;
  173. end {wtp_result_tag};
  174. WTP_RESULT = wtp_result_tag;
  175. PWTP_RESULT = ^wtp_result_tag;
  176. //TR-Abort primitive (WTP)
  177. wtp_abort_tag = record
  178. wpiPrimitiveID : WAP_PRIMITIVE_ID;
  179. wptPrimitiveType : WAP_PRIMITIVE_TYPE;
  180. dwValidFields : LongInt;
  181. bAbortCode : BYTE;
  182. wthTransactionHandle: WTP_TRANSACTION_HANDLE ;
  183. end {wtp_abort_tag};
  184. WTP_ABORT = wtp_abort_tag;
  185. PWTP_ABORT = ^wtp_abort_tag;
  186. //************************************************************
  187. //
  188. // WinAPI functions
  189. //
  190. //************************************************************
  191. function WapOpen(const wlLayer: WAP_LAYER;
  192. const dwLocalPort: LongInt;
  193. const pwhHandle: PWAP_HANDLE;
  194. const phMessageAvailableEvent: PHandle): HRESULT; external wapdll name 'WapOpen';
  195. function WapClose(const whHandle: WAP_HANDLE): HRESULT; external wapdll name 'WapClose';
  196. function WapSend(const whHandle: WAP_HANDLE;
  197. const pwpbPrimitive: PWAP_PRIMITIVE_BASE): HRESULT; external wapdll name 'WapSend';
  198. function WapGetNextPrimitiveSize(const whHandle: WAP_HANDLE;
  199. const pdwNextPrimitiveSize: PLongInt): HRESULT; external wapdll name 'WapGetNextPrimitiveSize';
  200. function WapRead(const whHandle: WAP_HANDLE;
  201. const pwpbPrimitiveBuffer: WAP_PRIMITIVE_BASE;
  202. const dwPrimitiveBufferSize: LongInt): HRESULT; external wapdll name 'WapRead';
  203. function WapPing(const pwaAddress: PWAP_ADDRESS;
  204. const wIdentifier: Word;
  205. const dwSendDataSize: LongInt;
  206. const pdwReceiveDataSize: PLongInt;
  207. const dwTimeout: LongInt): HRESULT; external wapdll name 'WapPing';
  208. implementation
  209. end.