select_core.h 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. /*
  2. * $Id$
  3. *
  4. * Copyright (C) 2005-2006 iptelorg GmbH
  5. *
  6. * This file is part of ser, a free SIP server.
  7. *
  8. * ser is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation; either version 2 of the License, or
  11. * (at your option) any later version
  12. *
  13. * For a license to use the ser software under conditions
  14. * other than those described here, or to purchase support for this
  15. * software, please contact iptel.org by e-mail at the following addresses:
  16. * [email protected]
  17. *
  18. * ser is distributed in the hope that it will be useful,
  19. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  21. * GNU General Public License for more details.
  22. *
  23. * You should have received a copy of the GNU General Public License
  24. * along with this program; if not, write to the Free Software
  25. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  26. *
  27. * History:
  28. * --------
  29. * 2005-12-19 select framework, basic core functions (mma)
  30. * 2006-01-19 multiple nested calls, IS_ALIAS -> NESTED flag renamed (mma)
  31. * 2007-01-26 date, identity, identity_info support added (gergo)
  32. */
  33. #ifndef _SELECT_CORE_H
  34. #define _SELECT_CORE_H
  35. #include "str.h"
  36. #include "parser/msg_parser.h"
  37. #include "select.h"
  38. enum {
  39. SEL_PARAM_TAG,
  40. SEL_PARAM_Q, SEL_PARAM_EXPIRES, SEL_PARAM_METHODS, SEL_PARAM_RECEIVED, SEL_PARAM_INSTANCE,
  41. SEL_PARAM_BRANCH, SEL_PARAM_RPORT, SEL_PARAM_I, SEL_PARAM_ALIAS
  42. };
  43. enum {
  44. SEL_AUTH_PROXY,
  45. SEL_AUTH_WWW,
  46. SEL_AUTH_USERNAME,
  47. SEL_AUTH_USER,
  48. SEL_AUTH_DOMAIN,
  49. SEL_AUTH_REALM,
  50. SEL_AUTH_NONCE,
  51. SEL_AUTH_URI,
  52. SEL_AUTH_CNONCE,
  53. SEL_AUTH_NC,
  54. SEL_AUTH_RESPONSE,
  55. SEL_AUTH_OPAQUE,
  56. SEL_AUTH_ALG,
  57. SEL_AUTH_QOP
  58. };
  59. enum {
  60. SEL_SRC = 1<<0,
  61. SEL_DST = 1<<1,
  62. SEL_RCV = 1<<2,
  63. SEL_PROTO= 1<<5,
  64. SEL_IP = 1<<6,
  65. SEL_PORT = 1<<7,
  66. SEL_IP_PORT = SEL_IP | SEL_PORT,
  67. };
  68. enum {
  69. SEL_NOW_GMT = 1,
  70. SEL_NOW_LOCAL = 2
  71. };
  72. enum {
  73. SEL_BRANCH_URI = 1<<0,
  74. SEL_BRANCH_Q = 1<<1,
  75. SEL_BRANCH_DST_URI = 1<<2
  76. };
  77. SELECT_F(select_ruri)
  78. SELECT_F(select_dst_uri)
  79. SELECT_F(select_next_hop)
  80. SELECT_F(select_next_hop_src_ip)
  81. SELECT_F(select_from)
  82. SELECT_F(select_from_uri)
  83. SELECT_F(select_from_tag)
  84. SELECT_F(select_from_name)
  85. SELECT_F(select_from_params)
  86. SELECT_F(select_to)
  87. SELECT_F(select_to_uri)
  88. SELECT_F(select_to_tag)
  89. SELECT_F(select_to_name)
  90. SELECT_F(select_to_params)
  91. SELECT_F(select_refer_to)
  92. SELECT_F(select_refer_to_uri)
  93. SELECT_F(select_refer_to_tag)
  94. SELECT_F(select_refer_to_name)
  95. SELECT_F(select_refer_to_params)
  96. SELECT_F(select_rpid)
  97. SELECT_F(select_rpid_uri)
  98. SELECT_F(select_rpid_tag)
  99. SELECT_F(select_rpid_name)
  100. SELECT_F(select_rpid_params)
  101. SELECT_F(select_contact)
  102. SELECT_F(select_contact_uri)
  103. SELECT_F(select_contact_name)
  104. SELECT_F(select_contact_params)
  105. SELECT_F(select_contact_params_spec)
  106. SELECT_F(select_via)
  107. SELECT_F(select_via_name)
  108. SELECT_F(select_via_version)
  109. SELECT_F(select_via_transport)
  110. SELECT_F(select_via_host)
  111. SELECT_F(select_via_port)
  112. SELECT_F(select_via_comment)
  113. SELECT_F(select_via_params)
  114. SELECT_F(select_via_params_spec)
  115. SELECT_F(select_msg)
  116. SELECT_F(select_msg_first_line)
  117. SELECT_F(select_msg_flags)
  118. SELECT_F(select_msg_type)
  119. SELECT_F(select_msg_len)
  120. SELECT_F(select_msg_id)
  121. SELECT_F(select_msg_id_hex)
  122. SELECT_F(select_msg_body)
  123. SELECT_F(select_msg_body_sdp)
  124. SELECT_F(select_sdp_line)
  125. SELECT_F(select_msg_header)
  126. SELECT_F(select_anyheader)
  127. SELECT_F(select_anyheader_params)
  128. SELECT_F(select_msg_request)
  129. SELECT_F(select_msg_request_method)
  130. SELECT_F(select_msg_request_uri)
  131. SELECT_F(select_msg_request_version)
  132. SELECT_F(select_msg_response)
  133. SELECT_F(select_msg_response_version)
  134. SELECT_F(select_msg_response_status)
  135. SELECT_F(select_msg_response_reason)
  136. SELECT_F(select_version)
  137. SELECT_F(select_any_nameaddr)
  138. SELECT_F(select_nameaddr_name)
  139. SELECT_F(select_nameaddr_uri)
  140. SELECT_F(select_nameaddr_params)
  141. SELECT_F(select_any_params)
  142. SELECT_F(select_any_uri)
  143. SELECT_F(select_uri_type)
  144. SELECT_F(select_uri_user)
  145. SELECT_F(select_uri_rn_user)
  146. SELECT_F(select_uri_pwd)
  147. SELECT_F(select_uri_host)
  148. SELECT_F(select_uri_port)
  149. SELECT_F(select_uri_hostport)
  150. SELECT_F(select_uri_params)
  151. SELECT_F(select_uri_proto)
  152. SELECT_F(select_event)
  153. SELECT_F(select_rr)
  154. SELECT_F(select_rr_uri)
  155. SELECT_F(select_rr_name)
  156. SELECT_F(select_rr_params)
  157. SELECT_F(select_cseq)
  158. SELECT_F(select_cseq_method)
  159. SELECT_F(select_cseq_num)
  160. SELECT_F(select_auth)
  161. SELECT_F(select_auth_param)
  162. SELECT_F(select_auth_username)
  163. SELECT_F(select_auth_username_comp)
  164. SELECT_F(select_src)
  165. SELECT_F(select_dst)
  166. SELECT_F(select_rcv)
  167. SELECT_F(select_ip_port)
  168. SELECT_F(select_call_id)
  169. SELECT_F(select_expires)
  170. SELECT_F(select_max_forwards)
  171. SELECT_F(select_content_type)
  172. SELECT_F(select_content_length)
  173. SELECT_F(select_subject)
  174. SELECT_F(select_organization)
  175. SELECT_F(select_priority)
  176. SELECT_F(select_session_expires)
  177. SELECT_F(select_min_se)
  178. SELECT_F(select_user_agent)
  179. SELECT_F(select_sip_if_match)
  180. SELECT_F(select_sys)
  181. SELECT_F(select_sys_pid)
  182. SELECT_F(select_sys_server_id)
  183. SELECT_F(select_sys_unique)
  184. SELECT_F(select_sys_now)
  185. SELECT_F(select_sys_now_fmt)
  186. SELECT_F(select_branch)
  187. SELECT_F(select_branch_count)
  188. SELECT_F(select_branch_uri)
  189. SELECT_F(select_branch_dst_uri)
  190. SELECT_F(select_branch_uriq)
  191. SELECT_F(select_branch_q)
  192. SELECT_F(select_date)
  193. SELECT_F(select_identity)
  194. SELECT_F(select_identity_info)
  195. SELECT_F(select_cfg_var)
  196. SELECT_F(select_cfg_var1)
  197. SELECT_F(cfg_selected_inst)
  198. static select_row_t select_core[] = {
  199. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("ruri"), select_ruri, 0}, /* not the same as request.uri because it is involved by new_uri */
  200. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("request_uri"), select_ruri, 0},
  201. { select_ruri, SEL_PARAM_STR, STR_NULL, select_any_uri, NESTED},
  202. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("dst_uri"), select_dst_uri, 0},
  203. { select_dst_uri, SEL_PARAM_STR, STR_NULL, select_any_uri, NESTED},
  204. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("next_hop"), select_next_hop, 0},
  205. { select_next_hop, SEL_PARAM_STR, STR_STATIC_INIT("src_ip"), select_next_hop_src_ip, 0},
  206. { select_next_hop, SEL_PARAM_STR, STR_NULL, select_any_uri, NESTED},
  207. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("from"), select_from, 0},
  208. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("f"), select_from, 0},
  209. { select_from, SEL_PARAM_STR, STR_STATIC_INIT("uri"), select_from_uri, 0},
  210. { select_from, SEL_PARAM_STR, STR_STATIC_INIT("tag"), select_from_tag, 0},
  211. { select_from, SEL_PARAM_STR, STR_STATIC_INIT("name"), select_from_name, 0},
  212. { select_from, SEL_PARAM_STR, STR_STATIC_INIT("params"), select_from_params, CONSUME_NEXT_STR},
  213. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("to"), select_to, 0},
  214. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("t"), select_to, 0},
  215. { select_to, SEL_PARAM_STR, STR_STATIC_INIT("uri"), select_to_uri, 0},
  216. { select_to, SEL_PARAM_STR, STR_STATIC_INIT("tag"), select_to_tag, 0},
  217. { select_to, SEL_PARAM_STR, STR_STATIC_INIT("name"), select_to_name, 0},
  218. { select_to, SEL_PARAM_STR, STR_STATIC_INIT("params"), select_to_params, CONSUME_NEXT_STR},
  219. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("refer_to"), select_refer_to, 0},
  220. { select_refer_to, SEL_PARAM_STR, STR_STATIC_INIT("uri"), select_refer_to_uri, 0},
  221. { select_refer_to, SEL_PARAM_STR, STR_STATIC_INIT("tag"), select_refer_to_tag, 0},
  222. { select_refer_to, SEL_PARAM_STR, STR_STATIC_INIT("name"), select_refer_to_name, 0},
  223. { select_refer_to, SEL_PARAM_STR, STR_STATIC_INIT("params"), select_refer_to_params, CONSUME_NEXT_STR},
  224. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("remote_party_id"), select_rpid, 0},
  225. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("rpid"), select_rpid, 0},
  226. { select_rpid, SEL_PARAM_STR, STR_STATIC_INIT("uri"), select_rpid_uri, 0},
  227. { select_rpid, SEL_PARAM_STR, STR_STATIC_INIT("tag"), select_rpid_tag, 0},
  228. { select_rpid, SEL_PARAM_STR, STR_STATIC_INIT("name"), select_rpid_name, 0},
  229. { select_rpid, SEL_PARAM_STR, STR_STATIC_INIT("params"), select_rpid_params, CONSUME_NEXT_STR},
  230. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("contact"), select_contact, 0},
  231. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("m"), select_contact, 0},
  232. { select_contact, SEL_PARAM_STR, STR_STATIC_INIT("uri"), select_contact_uri, 0},
  233. { select_contact, SEL_PARAM_STR, STR_STATIC_INIT("name"), select_contact_name, 0},
  234. { select_contact, SEL_PARAM_STR, STR_STATIC_INIT("q"), select_contact_params_spec, DIVERSION | SEL_PARAM_Q},
  235. { select_contact, SEL_PARAM_STR, STR_STATIC_INIT("expires"), select_contact_params_spec, DIVERSION | SEL_PARAM_EXPIRES},
  236. { select_contact, SEL_PARAM_STR, STR_STATIC_INIT("methods"), select_contact_params_spec, DIVERSION | SEL_PARAM_METHODS},
  237. { select_contact, SEL_PARAM_STR, STR_STATIC_INIT("received"), select_contact_params_spec, DIVERSION | SEL_PARAM_RECEIVED},
  238. { select_contact, SEL_PARAM_STR, STR_STATIC_INIT("instance"), select_contact_params_spec, DIVERSION | SEL_PARAM_INSTANCE},
  239. { select_contact, SEL_PARAM_STR, STR_STATIC_INIT("params"), select_contact_params, CONSUME_NEXT_STR},
  240. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("via"), select_via, OPTIONAL | CONSUME_NEXT_INT},
  241. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("v"), select_via, OPTIONAL | CONSUME_NEXT_INT},
  242. { select_via, SEL_PARAM_STR, STR_STATIC_INIT("name"), select_via_name, 0},
  243. { select_via, SEL_PARAM_STR, STR_STATIC_INIT("version"), select_via_version, 0},
  244. { select_via, SEL_PARAM_STR, STR_STATIC_INIT("transport"), select_via_transport, 0},
  245. { select_via, SEL_PARAM_STR, STR_STATIC_INIT("host"), select_via_host, 0},
  246. { select_via, SEL_PARAM_STR, STR_STATIC_INIT("port"), select_via_port, 0},
  247. { select_via, SEL_PARAM_STR, STR_STATIC_INIT("comment"), select_via_comment, 0},
  248. { select_via, SEL_PARAM_STR, STR_STATIC_INIT("branch"), select_via_params_spec, DIVERSION | SEL_PARAM_BRANCH},
  249. { select_via, SEL_PARAM_STR, STR_STATIC_INIT("received"), select_via_params_spec, DIVERSION | SEL_PARAM_RECEIVED},
  250. { select_via, SEL_PARAM_STR, STR_STATIC_INIT("rport"), select_via_params_spec, DIVERSION | SEL_PARAM_RPORT},
  251. { select_via, SEL_PARAM_STR, STR_STATIC_INIT("i"), select_via_params_spec, DIVERSION | SEL_PARAM_I},
  252. { select_via, SEL_PARAM_STR, STR_STATIC_INIT("alias"), select_via_params_spec, DIVERSION | SEL_PARAM_ALIAS},
  253. { select_via, SEL_PARAM_STR, STR_STATIC_INIT("params"), select_via_params, CONSUME_NEXT_STR},
  254. { select_from_uri, SEL_PARAM_INT, STR_NULL, select_any_uri, NESTED},
  255. { select_to_uri, SEL_PARAM_INT, STR_NULL, select_any_uri, NESTED},
  256. { select_refer_to_uri, SEL_PARAM_INT, STR_NULL, select_any_uri, NESTED},
  257. { select_rpid_uri, SEL_PARAM_INT, STR_NULL, select_any_uri, NESTED},
  258. { select_contact_uri, SEL_PARAM_INT, STR_NULL, select_any_uri, NESTED},
  259. { select_rr_uri, SEL_PARAM_INT, STR_NULL, select_any_uri, NESTED},
  260. { select_any_uri, SEL_PARAM_STR, STR_STATIC_INIT("type"), select_uri_type, 0},
  261. { select_any_uri, SEL_PARAM_STR, STR_STATIC_INIT("user"), select_uri_user, 0},
  262. { select_any_uri, SEL_PARAM_STR, STR_STATIC_INIT("rn_user"), select_uri_rn_user, 0},
  263. { select_any_uri, SEL_PARAM_STR, STR_STATIC_INIT("pwd"), select_uri_pwd, 0},
  264. { select_any_uri, SEL_PARAM_STR, STR_STATIC_INIT("host"), select_uri_host, 0},
  265. { select_any_uri, SEL_PARAM_STR, STR_STATIC_INIT("port"), select_uri_port, 0},
  266. { select_any_uri, SEL_PARAM_STR, STR_STATIC_INIT("params"), select_uri_params, CONSUME_NEXT_STR | OPTIONAL | FIXUP_CALL },
  267. { select_any_uri, SEL_PARAM_STR, STR_STATIC_INIT("hostport"), select_uri_hostport, 0},
  268. { select_any_uri, SEL_PARAM_STR, STR_STATIC_INIT("transport"), select_uri_proto, 0},
  269. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("event"), select_event, 0},
  270. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("record_route"), select_rr, 0},
  271. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("rr"), select_rr, 0},
  272. { select_rr, SEL_PARAM_STR, STR_STATIC_INIT("uri"), select_rr_uri, 0},
  273. { select_rr, SEL_PARAM_STR, STR_STATIC_INIT("name"), select_rr_name, 0},
  274. { select_rr, SEL_PARAM_STR, STR_STATIC_INIT("params"), select_rr_params, CONSUME_NEXT_STR},
  275. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("cseq"), select_cseq, 0},
  276. { select_cseq, SEL_PARAM_STR, STR_STATIC_INIT("num"), select_cseq_num, 0},
  277. { select_cseq, SEL_PARAM_STR, STR_STATIC_INIT("method"), select_cseq_method, 0},
  278. { select_any_nameaddr, SEL_PARAM_STR, STR_STATIC_INIT("name"), select_nameaddr_name, 0},
  279. { select_any_nameaddr, SEL_PARAM_STR, STR_STATIC_INIT("uri"), select_nameaddr_uri, 0},
  280. { select_any_nameaddr, SEL_PARAM_STR, STR_STATIC_INIT("params"), select_nameaddr_params, OPTIONAL | CONSUME_NEXT_STR},
  281. { select_nameaddr_uri, SEL_PARAM_INT, STR_NULL, select_any_uri, NESTED},
  282. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("msg"), select_msg, 0},
  283. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("message"), select_msg, 0},
  284. { select_msg, SEL_PARAM_STR, STR_STATIC_INIT("first_line"), select_msg_first_line, 0},
  285. { select_msg, SEL_PARAM_STR, STR_STATIC_INIT("flags"), select_msg_flags, 0},
  286. { select_msg, SEL_PARAM_STR, STR_STATIC_INIT("len"), select_msg_len, 0},
  287. { select_msg, SEL_PARAM_STR, STR_STATIC_INIT("id"), select_msg_id, 0},
  288. { select_msg_id, SEL_PARAM_STR, STR_STATIC_INIT("hex"), select_msg_id_hex, 0},
  289. { select_msg, SEL_PARAM_STR, STR_STATIC_INIT("type"), select_msg_type, 0},
  290. { select_msg, SEL_PARAM_STR, STR_STATIC_INIT("header"), select_msg_header, 0},
  291. { select_msg, SEL_PARAM_STR, STR_STATIC_INIT("h"), select_msg_header, 0},
  292. { select_msg_header, SEL_PARAM_STR, STR_NULL, select_anyheader, OPTIONAL | CONSUME_NEXT_INT | FIXUP_CALL},
  293. { select_anyheader, SEL_PARAM_STR, STR_STATIC_INIT("nameaddr"), select_any_nameaddr, NESTED | CONSUME_NEXT_STR},
  294. { select_anyheader, SEL_PARAM_STR, STR_STATIC_INIT("params"), select_anyheader_params, NESTED},
  295. { select_anyheader_params, SEL_PARAM_STR, STR_STATIC_INIT("params"), select_any_params, CONSUME_NEXT_STR},
  296. { select_msg, SEL_PARAM_STR, STR_STATIC_INIT("body"), select_msg_body, 0},
  297. { select_msg, SEL_PARAM_STR, STR_STATIC_INIT("content"), select_msg_body, 0},
  298. { select_msg_body, SEL_PARAM_STR, STR_STATIC_INIT("sdp"), select_msg_body_sdp, 0},
  299. { select_msg_body_sdp, SEL_PARAM_STR, STR_STATIC_INIT("line"), select_sdp_line, CONSUME_NEXT_STR | FIXUP_CALL},
  300. { select_msg, SEL_PARAM_STR, STR_STATIC_INIT("request"), select_msg_request, 0},
  301. { select_msg, SEL_PARAM_STR, STR_STATIC_INIT("req"), select_msg_request, 0},
  302. { select_msg_request, SEL_PARAM_STR, STR_STATIC_INIT("method"), select_msg_request_method, 0},
  303. { select_msg_request, SEL_PARAM_STR, STR_STATIC_INIT("uri"), select_msg_request_uri, 0},
  304. { select_msg_request_uri, SEL_PARAM_STR, STR_NULL, select_any_uri, NESTED},
  305. { select_msg_request, SEL_PARAM_STR, STR_STATIC_INIT("version"), select_msg_request_version, 0},
  306. { select_msg, SEL_PARAM_STR, STR_STATIC_INIT("response"), select_msg_response, 0},
  307. { select_msg, SEL_PARAM_STR, STR_STATIC_INIT("res"), select_msg_response, 0},
  308. { select_msg_response, SEL_PARAM_STR, STR_STATIC_INIT("version"), select_msg_response_version, 0},
  309. { select_msg_response, SEL_PARAM_STR, STR_STATIC_INIT("status"), select_msg_response_status, 0},
  310. { select_msg_response, SEL_PARAM_STR, STR_STATIC_INIT("code"), select_msg_response_status, 0},
  311. { select_msg_response, SEL_PARAM_STR, STR_STATIC_INIT("reason"), select_msg_response_reason, 0},
  312. /*short aliases*/
  313. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("method"), select_msg_request_method, 0},
  314. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("version"), select_version, 0},
  315. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("status"), select_msg_response_status, 0},
  316. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("code"), select_msg_response_status, 0},
  317. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("reason"), select_msg_response_reason, 0},
  318. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("proxy_authorization"), select_auth, CONSUME_NEXT_STR | DIVERSION | SEL_AUTH_PROXY | FIXUP_CALL},
  319. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("authorization"), select_auth, CONSUME_NEXT_STR | DIVERSION | SEL_AUTH_WWW | FIXUP_CALL},
  320. { select_auth, SEL_PARAM_STR, STR_STATIC_INIT("username"), select_auth_username, DIVERSION | SEL_AUTH_USERNAME},
  321. { select_auth, SEL_PARAM_STR, STR_STATIC_INIT("realm"), select_auth_param, DIVERSION | SEL_AUTH_REALM},
  322. { select_auth, SEL_PARAM_STR, STR_STATIC_INIT("nonce"), select_auth_param, DIVERSION | SEL_AUTH_NONCE},
  323. { select_auth, SEL_PARAM_STR, STR_STATIC_INIT("uri"), select_auth_param, DIVERSION | SEL_AUTH_URI},
  324. { select_auth, SEL_PARAM_STR, STR_STATIC_INIT("cnonce"), select_auth_param, DIVERSION | SEL_AUTH_CNONCE},
  325. { select_auth, SEL_PARAM_STR, STR_STATIC_INIT("nc"), select_auth_param, DIVERSION | SEL_AUTH_NC},
  326. { select_auth, SEL_PARAM_STR, STR_STATIC_INIT("response"), select_auth_param, DIVERSION | SEL_AUTH_RESPONSE},
  327. { select_auth, SEL_PARAM_STR, STR_STATIC_INIT("opaque"), select_auth_param, DIVERSION | SEL_AUTH_OPAQUE},
  328. { select_auth, SEL_PARAM_STR, STR_STATIC_INIT("algorithm"), select_auth_param, DIVERSION | SEL_AUTH_ALG},
  329. { select_auth, SEL_PARAM_STR, STR_STATIC_INIT("qop"), select_auth_param, DIVERSION | SEL_AUTH_QOP},
  330. { select_auth_username, SEL_PARAM_STR, STR_STATIC_INIT("user"), select_auth_username_comp, DIVERSION | SEL_AUTH_USER},
  331. { select_auth_username, SEL_PARAM_STR, STR_STATIC_INIT("domain"), select_auth_username_comp, DIVERSION | SEL_AUTH_DOMAIN},
  332. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("src"), select_src, SEL_PARAM_EXPECTED},
  333. { select_src, SEL_PARAM_STR, STR_STATIC_INIT("ip"), select_ip_port, DIVERSION | SEL_SRC | SEL_IP},
  334. { select_src, SEL_PARAM_STR, STR_STATIC_INIT("port"), select_ip_port, DIVERSION | SEL_SRC | SEL_PORT},
  335. { select_src, SEL_PARAM_STR, STR_STATIC_INIT("ip_port"), select_ip_port, DIVERSION | SEL_SRC | SEL_IP_PORT},
  336. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("dst"), select_dst, SEL_PARAM_EXPECTED},
  337. { select_dst, SEL_PARAM_STR, STR_STATIC_INIT("ip"), select_ip_port, DIVERSION | SEL_DST | SEL_IP},
  338. { select_dst, SEL_PARAM_STR, STR_STATIC_INIT("port"), select_ip_port, DIVERSION | SEL_DST | SEL_PORT},
  339. { select_dst, SEL_PARAM_STR, STR_STATIC_INIT("ip_port"), select_ip_port, DIVERSION | SEL_DST | SEL_IP_PORT},
  340. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("received"), select_rcv, SEL_PARAM_EXPECTED},
  341. { select_rcv, SEL_PARAM_STR, STR_STATIC_INIT("proto"), select_ip_port, DIVERSION | SEL_RCV | SEL_PROTO},
  342. { select_rcv, SEL_PARAM_STR, STR_STATIC_INIT("ip"), select_ip_port, DIVERSION | SEL_RCV | SEL_IP},
  343. { select_rcv, SEL_PARAM_STR, STR_STATIC_INIT("port"), select_ip_port, DIVERSION | SEL_RCV | SEL_PORT},
  344. { select_rcv, SEL_PARAM_STR, STR_STATIC_INIT("ip_port"), select_ip_port, DIVERSION | SEL_RCV | SEL_IP_PORT},
  345. { select_rcv, SEL_PARAM_STR, STR_STATIC_INIT("proto_ip_port"), select_ip_port, DIVERSION | SEL_RCV | SEL_PROTO | SEL_IP_PORT},
  346. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("call_id"), select_call_id, 0},
  347. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("expires"), select_expires, 0},
  348. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("max_forwards"), select_max_forwards, 0},
  349. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("content_type"), select_content_type, 0},
  350. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("content_length"), select_content_length, 0},
  351. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("subject"), select_subject, 0},
  352. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("organization"), select_organization, 0},
  353. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("priority"), select_priority, 0},
  354. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("session_expires"), select_session_expires, 0},
  355. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("min_se"), select_min_se, 0},
  356. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("user_agent"), select_user_agent, 0},
  357. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("sip_if_match"), select_sip_if_match, 0},
  358. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("sys"), select_sys, SEL_PARAM_EXPECTED},
  359. { select_sys, SEL_PARAM_STR, STR_STATIC_INIT("pid"), select_sys_pid, 0},
  360. { select_sys, SEL_PARAM_STR, STR_STATIC_INIT("unique"), select_sys_unique, 0},
  361. { select_sys, SEL_PARAM_STR, STR_STATIC_INIT("now"), select_sys_now, 0},
  362. { select_sys_now, SEL_PARAM_STR, STR_STATIC_INIT("local"), select_sys_now_fmt, OPTIONAL | CONSUME_NEXT_STR | DIVERSION | SEL_NOW_LOCAL},
  363. { select_sys_now, SEL_PARAM_STR, STR_STATIC_INIT("gmt"), select_sys_now_fmt, OPTIONAL | CONSUME_NEXT_STR | DIVERSION | SEL_NOW_GMT},
  364. { select_sys_now, SEL_PARAM_STR, STR_STATIC_INIT("utc"), select_sys_now_fmt, OPTIONAL | CONSUME_NEXT_STR | DIVERSION | SEL_NOW_GMT},
  365. { select_sys, SEL_PARAM_STR, STR_STATIC_INIT("server_id"), select_sys_server_id, 0},
  366. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("branch"), select_branch, SEL_PARAM_EXPECTED},
  367. { select_branch, SEL_PARAM_STR, STR_STATIC_INIT("count"), select_branch_count, 0},
  368. { select_branch, SEL_PARAM_STR, STR_STATIC_INIT("uri"), select_branch_uri, OPTIONAL | CONSUME_NEXT_INT | DIVERSION | SEL_BRANCH_URI },
  369. { select_branch, SEL_PARAM_STR, STR_STATIC_INIT("dst_uri"), select_branch_dst_uri, OPTIONAL | CONSUME_NEXT_INT | DIVERSION | SEL_BRANCH_DST_URI},
  370. { select_branch_uri, SEL_PARAM_STR, STR_NULL, select_any_uri, NESTED},
  371. { select_branch_dst_uri, SEL_PARAM_STR, STR_NULL, select_any_uri, NESTED},
  372. { select_branch, SEL_PARAM_STR, STR_STATIC_INIT("uriq"), select_branch_uriq, OPTIONAL | CONSUME_NEXT_INT | DIVERSION | SEL_BRANCH_URI | SEL_BRANCH_Q},
  373. { select_branch_uriq, SEL_PARAM_STR, STR_NULL, select_any_nameaddr, NESTED},
  374. { select_branch, SEL_PARAM_STR, STR_STATIC_INIT("q"), select_branch_q, OPTIONAL | CONSUME_NEXT_INT | DIVERSION | SEL_BRANCH_Q},
  375. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("date"), select_date, 0},
  376. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("identity"), select_identity, 0},
  377. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("identity_info"), select_identity_info, 0},
  378. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("cfg_get"), select_cfg_var1, SEL_PARAM_EXPECTED | CONSUME_NEXT_STR},
  379. { select_cfg_var1, SEL_PARAM_STR, STR_NULL, select_cfg_var, FIXUP_CALL },
  380. { NULL, SEL_PARAM_STR, STR_STATIC_INIT("cfg_selected"), cfg_selected_inst, CONSUME_NEXT_STR | FIXUP_CALL },
  381. { select_cfg_var, SEL_PARAM_STR, STR_STATIC_INIT("nameaddr"), select_any_nameaddr, NESTED | CONSUME_NEXT_STR},
  382. { select_cfg_var, SEL_PARAM_STR, STR_STATIC_INIT("uri"), select_any_uri, NESTED | CONSUME_NEXT_STR},
  383. { select_cfg_var, SEL_PARAM_STR, STR_STATIC_INIT("params"), select_anyheader_params, NESTED},
  384. { NULL, SEL_PARAM_INT, STR_NULL, NULL, 0}
  385. };
  386. static select_table_t select_core_table = {select_core, NULL};
  387. #endif // _SELECT_CORE_H