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

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * wap_events.def - definitions for wapbox events
  3.  *
  4.  * This file uses a pre-processor trick to define the structure of
  5.  * structures. See the documentation.
  6.  *
  7.  * Fields of type HTTPHEADER, CAPABILITIES, and OPTIONAL_OCTSTR may
  8.  * be NULL.  All other fields must be filled in, unless they are
  9.  * otherwise marked.
  10.  *
  11.  * Fields described in the appropriate spec are listed first.  Fields
  12.  * specific to Kannel are introduced with an empty line.  In some events,
  13.  * we have combined fields to form an "address tuple" (see wap_addr.h).
  14.  *
  15.  * Aarno Syv鋘en
  16.  * Lars Wirzenius
  17.  */
  18. /* WTLS material - make sure the addr_tuple comes first! */
  19. WAPEVENT(T_Unitdata_Ind, "T-Unitdata.ind",
  20.          ADDRTUPLE(addr_tuple)
  21.          WTLSPDUS(pdu_list)
  22.         )
  23. WAPEVENT(SEC_Create_Ind, "SEC-Create.ind",
  24.          ADDRTUPLE(addr_tuple)
  25.         )
  26. WAPEVENT(SEC_Create_Request_Req, "SEC-Create.req",
  27.          ADDRTUPLE(addr_tuple)
  28.         )
  29. WAPEVENT(SEC_Terminate_Req, "SEC-Terminate.req",
  30.          ADDRTUPLE(addr_tuple)
  31.          INTEGER(alert_level)
  32.          INTEGER(alert_desc)
  33.         )
  34. WAPEVENT(SEC_Exception_Req, "SEC-Exception.req",
  35.          ADDRTUPLE(addr_tuple)
  36.          INTEGER(alert_level)
  37.          INTEGER(alert_desc)
  38.         )
  39. WAPEVENT(SEC_Create_Res, "SEC-Create.res",
  40.          ADDRTUPLE(addr_tuple)
  41.          INTEGER(client_key_id)
  42.          INTEGER(bulk_cipher_algo)
  43.          INTEGER(mac_algo)
  44.          INTEGER(snmode)
  45.          INTEGER(krefresh)
  46.         )
  47. WAPEVENT(SEC_Exchange_Req, "SEC-Exchange.req",
  48.          ADDRTUPLE(addr_tuple)
  49.         )
  50. WAPEVENT(SEC_Commit_Req, "SEC-Commit.req",
  51.          ADDRTUPLE(addr_tuple)
  52.         )
  53. WAPEVENT(SEC_Unitdata_Req, "SEC-Unidata.req",
  54.          ADDRTUPLE(addr_tuple)
  55.          OCTSTR(user_data)
  56.         )
  57. /*
  58.  * Transport layer (WDP)
  59.  */
  60. WAPEVENT(T_DUnitdata_Req, "T-DUnitdata.req",
  61. ADDRTUPLE(addr_tuple)
  62. OCTSTR(user_data)
  63.         INTEGER(address_type)
  64. )
  65. WAPEVENT(T_DUnitdata_Ind, "T-DUnitdata.ind",
  66. ADDRTUPLE(addr_tuple)
  67. OCTSTR(user_data)
  68. )
  69. /* 
  70.  * Transaction layer (WTP)
  71.  */
  72. WAPEVENT(TR_Invoke_Req, "TR-Invoke.req",
  73. ADDRTUPLE(addr_tuple)
  74. INTEGER(up_flag)
  75. OCTSTR(user_data)
  76. INTEGER(tcl)
  77. INTEGER(handle)
  78. )
  79. WAPEVENT(TR_Invoke_Ind, "TR-Invoke.ind",
  80.         INTEGER(ack_type)
  81.         OCTSTR(user_data)
  82.         INTEGER(tcl)
  83. ADDRTUPLE(addr_tuple)
  84. INTEGER(handle)
  85. )
  86. WAPEVENT(TR_Invoke_Res, "TR-Invoke.res",
  87. INTEGER(handle)
  88. )
  89. WAPEVENT(TR_Invoke_Cnf, "TR-Invoke.cnf",
  90. INTEGER(handle)
  91.         ADDRTUPLE(addr_tuple)
  92. )
  93. WAPEVENT(TR_Result_Req, "TR-Result.req",
  94. OCTSTR(user_data)
  95. INTEGER(handle)
  96. )
  97. WAPEVENT(TR_Result_Cnf, "TR-Result.cnf",
  98. INTEGER(handle)
  99. ADDRTUPLE(addr_tuple)
  100.         )
  101. WAPEVENT(TR_Abort_Req, "TR-Abort.req",
  102. INTEGER(abort_type)
  103. INTEGER(abort_reason)
  104. INTEGER(handle)
  105. WAPEVENT(TR_Abort_Ind, "TR-Abort.ind",
  106.         INTEGER(abort_code)
  107. INTEGER(handle)
  108. ADDRTUPLE(addr_tuple)
  109.         INTEGER(ir_flag) /* Are we an initiator or a responder */
  110.         )
  111. /*
  112.  * Session layer (WSP), server side
  113.  * These events use the session id as a handle.
  114.  */
  115. WAPEVENT(S_Connect_Ind, "S-Connect.ind",
  116. ADDRTUPLE(addr_tuple)
  117. HTTPHEADER(client_headers)
  118. CAPABILITIES(requested_capabilities)
  119. INTEGER(session_id)
  120. )
  121. WAPEVENT(S_Connect_Res, "S-Connect.res",
  122. HTTPHEADER(server_headers)
  123. CAPABILITIES(negotiated_capabilities)
  124. INTEGER(session_id)
  125. )
  126. WAPEVENT(S_Suspend_Ind, "S-Suspend.ind",
  127. INTEGER(reason)
  128. INTEGER(session_id)
  129. )
  130. WAPEVENT(S_Resume_Ind, "S-Resume.ind",
  131. ADDRTUPLE(addr_tuple)
  132. HTTPHEADER(client_headers)
  133. INTEGER(session_id)
  134. )
  135. WAPEVENT(S_Resume_Res, "S-Resume.res",
  136. HTTPHEADER(server_headers)
  137. INTEGER(session_id)
  138. )
  139. /*
  140.  * Session layer (WSP), client side
  141.  */
  142. WAPEVENT(S_Connect_Req, "S-Connect.req",
  143. ADDRTUPLE(addr_tuple)
  144. HTTPHEADER(client_headers)
  145. CAPABILITIES(requested_capabilities)
  146. INTEGER(session_handle)
  147. )
  148. WAPEVENT(S_Suspend_Req, "S-Suspend.req",
  149. INTEGER(session_handle)
  150. )
  151. WAPEVENT(S_Resume_Req, "S-Resume.req",
  152. ADDRTUPLE(addr_tuple)
  153. HTTPHEADER(client_headers)
  154. INTEGER(session_handle)
  155. )
  156. WAPEVENT(S_Resume_Cnf, "S-Resume.cnf",
  157. HTTPHEADER(server_headers)
  158. INTEGER(session_handle)
  159. )
  160. /*
  161.  * Session layer (WSP), events shared between server and client side
  162.  * On the server side, the "handle" field is always the session id.
  163.  */
  164. WAPEVENT(S_Disconnect_Req, "S-Disconnect.req",
  165. INTEGER(reason_code)
  166. INTEGER(redirect_security) /* Only meaningful if redirecting */
  167. INTEGER(redirect_addresses) /* FIXME: Wrong type, not used */
  168. OPTIONAL_OCTSTR(error_headers)
  169. OPTIONAL_OCTSTR(error_body)
  170. INTEGER(session_handle)
  171. )
  172. WAPEVENT(S_Disconnect_Ind, "S-Disconnect.ind",
  173. INTEGER(reason_code)
  174. INTEGER(redirect_security) /* Only meaningful if redirecting */
  175. INTEGER(redirect_addresses) /* FIXME: Wrong type, not used */
  176. OPTIONAL_OCTSTR(error_headers)
  177. OPTIONAL_OCTSTR(error_body)
  178. INTEGER(session_handle)
  179. )
  180. /*
  181.  * Pseudo-events used by session layer
  182.  */
  183. WAPEVENT(Disconnect_Event, "Disconnect",
  184. INTEGER(session_handle)
  185. )
  186. WAPEVENT(Suspend_Event, "Suspend",
  187. INTEGER(session_handle)
  188. )
  189. WAPEVENT(Release_Event, "Release",
  190. INTEGER(dummy)
  191. )
  192. WAPEVENT(Abort_Event, "Abort",
  193. INTEGER(reason)
  194. )
  195. /*
  196.  * Per-method events for session layer, server side
  197.  */
  198. WAPEVENT(S_MethodInvoke_Ind, "S-MethodInvoke.ind",
  199. INTEGER(server_transaction_id)
  200. OCTSTR(method) /* All caps */
  201. OCTSTR(request_uri)
  202. HTTPHEADER(request_headers)
  203. OPTIONAL_OCTSTR(request_body)
  204. HTTPHEADER(session_headers)
  205. ADDRTUPLE(addr_tuple)
  206. INTEGER(client_SDU_size)
  207. INTEGER(session_id)
  208. )
  209. WAPEVENT(S_MethodInvoke_Res, "S-MethodInvoke.res",
  210. INTEGER(server_transaction_id)
  211. INTEGER(session_id)
  212. )
  213. WAPEVENT(S_MethodResult_Req, "S-MethodResult.req",
  214. INTEGER(server_transaction_id)
  215. INTEGER(status)
  216. HTTPHEADER(response_headers)
  217. OPTIONAL_OCTSTR(response_body)
  218. INTEGER(session_id)
  219. )
  220. WAPEVENT(S_MethodResult_Cnf, "S-MethodResult.cnf",
  221. INTEGER(server_transaction_id)
  222. INTEGER(session_id)
  223. )
  224. /*
  225.  * Per-method events for session layer, client side
  226.  */
  227. WAPEVENT(S_MethodInvoke_Req, "S-MethodInvoke.req",
  228. INTEGER(client_transaction_id)
  229. OCTSTR(method)
  230. OCTSTR(request_uri)
  231. HTTPHEADER(request_headers)
  232. OPTIONAL_OCTSTR(request_body)
  233. INTEGER(session_handle)
  234. )
  235. WAPEVENT(S_MethodInvoke_Cnf, "S-MethodInvoke.cnf",
  236. INTEGER(client_transaction_id)
  237. INTEGER(session_handle)
  238. )
  239. WAPEVENT(S_MethodResult_Ind, "S-MethodResult.ind",
  240. INTEGER(client_transaction_id)
  241. INTEGER(status)
  242. HTTPHEADER(response_headers)
  243. OPTIONAL_OCTSTR(response_body)
  244. INTEGER(session_handle)
  245. )
  246. WAPEVENT(S_MethodResult_Res, "S-MethodResult.res",
  247. INTEGER(client_transaction_id)
  248. INTEGER(session_handle)
  249. )
  250. /*
  251.  * Per-method events used by the session layer
  252.  * These events are used by both client and server side.
  253.  */
  254. WAPEVENT(S_MethodAbort_Req, "S-MethodAbort.req",
  255. INTEGER(transaction_id)
  256. INTEGER(session_handle)
  257. )
  258. WAPEVENT(S_MethodAbort_Ind, "S-MethodAbort.ind",
  259. INTEGER(transaction_id)
  260. INTEGER(reason)
  261. INTEGER(session_handle)
  262. )
  263. /*
  264.  * Per-push events used by the session layer
  265.  */
  266. WAPEVENT(S_Push_Req, "S-Push.req",
  267. HTTPHEADER(push_headers)
  268. OPTIONAL_OCTSTR(push_body)
  269. INTEGER(session_id)
  270. )
  271. WAPEVENT(S_Push_Ind, "S-Push.ind",
  272. HTTPHEADER(push_headers)
  273. OPTIONAL_OCTSTR(push_body)
  274. INTEGER(session_handle)
  275. HTTPHEADER(session_headers)
  276. )
  277. WAPEVENT(S_ConfirmedPush_Req, "S-ConfirmedPush.req",
  278.         INTEGER(server_push_id)
  279.         HTTPHEADER(push_headers)
  280.         OPTIONAL_OCTSTR(push_body)
  281.         INTEGER(session_id)
  282.         )
  283. WAPEVENT(S_ConfirmedPush_Ind, "S-ConfirmedPush.ind",
  284. INTEGER(client_push_id)
  285. HTTPHEADER(push_headers)
  286.         OPTIONAL_OCTSTR(push_body)
  287. INTEGER(session_handle)
  288. )
  289. WAPEVENT(S_ConfirmedPush_Res, "S-ConfirmedPush.res",
  290. INTEGER(client_push_id)
  291. INTEGER(session_handle)
  292. )
  293. WAPEVENT(S_ConfirmedPush_Cnf, "S-ConfirmedPush.cnf",
  294.         INTEGER(server_push_id)
  295. INTEGER(session_id)
  296.         )
  297. WAPEVENT(S_PushAbort_Ind, "S-PushAbort.ind",
  298.         INTEGER(push_id)
  299.         INTEGER(reason)
  300.         INTEGER(session_id)
  301.         )
  302. /*
  303.  * The specification of S-PushAbort seems to assume that only the
  304.  * client can issue an S-PushAbort.req, and only the server can get
  305.  * an S-PushAbort.ind.  This is contradicted by the state tables.
  306.  * That's why the definitions here use just "push_id" instead of
  307.  * server_push_id and client_push_id.
  308.  */
  309. WAPEVENT(S_PushAbort_Req, "S-PushAbort.req",
  310. INTEGER(push_id)
  311.         INTEGER(reason)
  312. INTEGER(session_handle)
  313. )
  314. WAPEVENT(Push_Abort, "Internal abort",
  315.          INTEGER(reason)
  316.         )
  317. /*
  318.  * Events created by unpacking T-DUnitdata.ind events.
  319.  * Used by WTP layer.
  320.  */
  321. WAPEVENT(RcvInvoke, "RcvInvoke",
  322. OCTSTR(user_data)
  323. INTEGER(tcl)
  324. INTEGER(tid)
  325. INTEGER(tid_new)
  326. INTEGER(rid)
  327. INTEGER(up_flag)
  328. INTEGER(no_cache_supported)
  329. INTEGER(version)
  330. INTEGER(gtr)
  331. INTEGER(ttr)
  332. ADDRTUPLE(addr_tuple)
  333. )
  334. WAPEVENT(RcvResult, "RcvResult",
  335. OCTSTR(user_data)
  336. INTEGER(tid)
  337. INTEGER(rid)
  338. INTEGER(gtr)
  339. INTEGER(ttr)
  340. ADDRTUPLE(addr_tuple)
  341. )
  342. WAPEVENT(RcvAbort, "RcvAbort",
  343. INTEGER(tid)
  344. INTEGER(abort_type)
  345. INTEGER(abort_reason)
  346. ADDRTUPLE(addr_tuple)
  347. )
  348. WAPEVENT(RcvAck, "RcvAck",
  349. INTEGER(tid)
  350. INTEGER(tid_ok)
  351. INTEGER(rid)
  352. ADDRTUPLE(addr_tuple)
  353. )
  354. /*
  355.  * Other events used by WTP layer.
  356.  */
  357. WAPEVENT(TimerTO_A, "Timeout-A",
  358. INTEGER(handle)
  359. )
  360. WAPEVENT(TimerTO_R, "Timeout-R",
  361. INTEGER(handle)
  362. )
  363. WAPEVENT(TimerTO_W, "Timeout-W",
  364. INTEGER(handle)
  365. )
  366. WAPEVENT(RcvErrorPDU, "RcvErrorPDU",
  367. INTEGER(tid)
  368. ADDRTUPLE(addr_tuple)
  369. )
  370. /*
  371.  * Events used by connectionless session protocol (WSP)
  372.  */
  373. WAPEVENT(S_Unit_MethodInvoke_Req, "S-Unit-MethodInvoke.req",
  374. ADDRTUPLE(addr_tuple)
  375. INTEGER(transaction_id)
  376. OCTSTR(method)
  377. OCTSTR(request_uri)
  378. HTTPHEADER(request_headers)
  379. OPTIONAL_OCTSTR(request_body)
  380. )
  381. WAPEVENT(S_Unit_MethodInvoke_Ind, "S-Unit_MethodInvoke.ind",
  382. ADDRTUPLE(addr_tuple)
  383. INTEGER(transaction_id)
  384. OCTSTR(method) /* All caps */
  385. OCTSTR(request_uri)
  386. HTTPHEADER(request_headers)
  387. OPTIONAL_OCTSTR(request_body)
  388. )
  389. WAPEVENT(S_Unit_MethodResult_Req, "S-Unit-MethodResult.req",
  390. ADDRTUPLE(addr_tuple)
  391. INTEGER(transaction_id)
  392. INTEGER(status)
  393. HTTPHEADER(response_headers)
  394. OPTIONAL_OCTSTR(response_body)
  395. )
  396. WAPEVENT(S_Unit_MethodResult_Ind, "S-Unit-MethodResult.ind",
  397. ADDRTUPLE(addr_tuple)
  398. INTEGER(transaction_id)
  399. INTEGER(status)
  400. HTTPHEADER(response_headers)
  401. OPTIONAL_OCTSTR(response_body)
  402. )
  403. WAPEVENT(S_Unit_Push_Req, "S-Unit-Push.req",
  404. ADDRTUPLE(addr_tuple)
  405. INTEGER(push_id)
  406. HTTPHEADER(push_headers)
  407. OPTIONAL_OCTSTR(push_body)
  408.         INTEGER(address_type)
  409. )
  410. WAPEVENT(S_Unit_Push_Ind, "S-Unit-Push.ind",
  411. ADDRTUPLE(addr_tuple)
  412. INTEGER(push_id)
  413. HTTPHEADER(push_headers)
  414. OPTIONAL_OCTSTR(push_body)
  415. )
  416. /*
  417.  * Events used by push OTA protocol, server side
  418.  */
  419. WAPEVENT(Pom_SessionRequest_Req, "Pom-SessionRequest.req",
  420.         ADDRTUPLE(addr_tuple)
  421.         HTTPHEADER(push_headers)
  422.         
  423.         INTEGER(push_id)
  424.         INTEGER(address_type)
  425.         )
  426. WAPEVENT(Pom_Connect_Ind, "Pom-Connect.ind",
  427.          ADDRTUPLE(addr_tuple)
  428.          HTTPHEADER(push_headers)
  429.          CAPABILITIES(requested_capabilities)
  430.          HTTPHEADER(accept_application)
  431.          HTTPHEADER(bearer_indication)
  432.          INTEGER(session_id)
  433.          INTEGER(push_id)
  434.         )
  435. WAPEVENT(Pom_Connect_Res, "Pom-Connect.res",
  436.          CAPABILITIES(negotiated_capabilities)
  437.          INTEGER(session_id)
  438.         )
  439. WAPEVENT(Pom_Disconnect_Ind, "Pom-Disconnect.ind",
  440.          INTEGER(reason_code)
  441.  INTEGER(redirect_security) /* Only meaningful if redirecting */
  442.  INTEGER(redirect_addresses) /* FIXME: Wrong type, not used */
  443.  OPTIONAL_OCTSTR(error_headers)
  444.  OPTIONAL_OCTSTR(error_body)
  445.  INTEGER(session_handle)
  446.         )
  447. WAPEVENT(Pom_Suspend_Ind, "Pom-Suspend.ind",
  448.          INTEGER(reason)
  449.  INTEGER(session_id) 
  450.         )
  451. WAPEVENT(Pom_Resume_Ind, "Pom-Resume.ind",
  452.          ADDRTUPLE(addr_tuple)
  453.  HTTPHEADER(client_headers)
  454.          HTTPHEADER(bearer_indication)
  455.  INTEGER(session_id)
  456.         )
  457. WAPEVENT(Po_Push_Req, "Po-Push.req",
  458.          HTTPHEADER(push_headers)
  459.          INTEGER(authenticated)
  460.          INTEGER(trusted)
  461.          INTEGER(last)
  462.          OPTIONAL_OCTSTR(push_body)
  463.          INTEGER(session_handle)
  464.         )
  465. WAPEVENT(Po_ConfirmedPush_Req, "Po-ConfirmedPush.req",
  466.          INTEGER(server_push_id)
  467.          HTTPHEADER(push_headers)
  468.          INTEGER(authenticated)
  469.          INTEGER(trusted)
  470.          INTEGER(last)
  471.          OPTIONAL_OCTSTR(push_body)
  472.          INTEGER(session_handle)
  473.         )
  474. WAPEVENT(Po_ConfirmedPush_Cnf, "Po-ConfirmedPush.Cnf",
  475.          INTEGER(server_push_id)
  476.          INTEGER(session_handle)
  477.         )
  478. WAPEVENT(Po_Unit_Push_Req, "Po-Unit-Push.req",
  479.          ADDRTUPLE(addr_tuple)
  480.          INTEGER(push_id)
  481.          HTTPHEADER(push_headers)
  482.          INTEGER(authenticated)
  483.          INTEGER(trusted)
  484.          INTEGER(last)
  485.          OPTIONAL_OCTSTR(push_body)
  486.          INTEGER(address_type)
  487.         )
  488. WAPEVENT(Po_PushAbort_Req, "Po-PushAbort.req",
  489.          INTEGER(push_id)
  490.          INTEGER(reason)
  491.          INTEGER(session_id)
  492.         )
  493. WAPEVENT(Po_PushAbort_Ind, "Po-PushAbort.ind",
  494.          INTEGER(push_id)
  495.  INTEGER(reason)
  496.  INTEGER(session_handle)
  497.         )
  498. /*
  499.  * Following events are used communicating between PPG main module (implement-
  500.  * ing main logic of PPG) and PAP module. These are defined in Push Access 
  501.  * Protocol, chapter 9.
  502.  * Note here is one address, one group of push headers, one push body and one
  503.  * group of capabilities. We should use list of address_values  for multiple 
  504.  * addresses (optional) and Lists of push headers, push data and capabilities 
  505.  * for multipart (non-nested mandatory). 
  506.  * Note, too, that we do not yet support multiple addresses.
  507.  * Optional fields, if PAP control message originally does not contain one, 
  508.  * should be set NULL, and mandatory fields non-NULL.
  509.  */
  510. WAPEVENT(Push_Message, "push-message",
  511.          OCTSTR(pi_push_id)
  512.          OPTIONAL_OCTSTR(deliver_before_timestamp)   /* using PAP format */
  513.          OPTIONAL_OCTSTR(deliver_after_timestamp)    /* ditto */
  514.          OPTIONAL_OCTSTR(source_reference)
  515.          OPTIONAL_OCTSTR(ppg_notify_requested_to)
  516.          INTEGER(progress_notes_requested)
  517.          OCTSTR(address_value)                       /* as parsed PAP */
  518.          INTEGER(address_type)
  519.          INTEGER(priority)
  520.          INTEGER(delivery_method)
  521.          OPTIONAL_OCTSTR(network)
  522.          INTEGER(network_required)
  523.          OPTIONAL_OCTSTR(bearer)
  524.          INTEGER(bearer_required)
  525.          HTTPHEADER(push_headers)
  526.          OPTIONAL_OCTSTR(push_data)
  527.          CAPABILITIES(pi_capabilities)
  528. )
  529. /*
  530.  * Push response element indicates that there will be no more progress notes,
  531.  * see Push Access Protocol, 9.3.2.
  532.  */
  533. WAPEVENT(Push_Response, "push-response",
  534.          OCTSTR(pi_push_id)
  535.          OPTIONAL_OCTSTR(sender_name)
  536.          OPTIONAL_OCTSTR(reply_time)
  537.          OPTIONAL_OCTSTR(sender_address)
  538.          INTEGER(code)
  539.          OPTIONAL_OCTSTR(desc)
  540.         )
  541. /*
  542.  * This is for debugging PIs. One note per stage. See Push Access Protocol,
  543.  * 9.3.1.PPG main module sends these separately to PAP. 
  544.  */
  545. WAPEVENT(Progress_Note, "progress-note",
  546.          INTEGER(stage)
  547.          OPTIONAL_OCTSTR(note)
  548.          OPTIONAL_OCTSTR(time)
  549. )
  550. /*
  551.  * Element bad-message-response is defined in PAP, Implementation Note, 
  552.  * chapter 5. 
  553.  */
  554. WAPEVENT(Bad_Message_Response, "badmessage-response",
  555.          INTEGER(code)
  556.          OPTIONAL_OCTSTR(desc)
  557.          OPTIONAL_OCTSTR(bad_message_fragment)
  558. )
  559. #undef WAPEVENT
  560. #undef OCTSTR
  561. #undef OPTIONAL_OCTSTR
  562. #undef INTEGER
  563. #undef WTLSPDUS
  564. #undef HTTPHEADER
  565. #undef ADDRTUPLE
  566. #undef CAPABILITIES