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