Core Update of doxygen, removal of history, changing "ser" to "kamailio"
[sip-router] / lvalue.h
1 /* 
2  * 
3  * Copyright (C) 2008 iptelorg GmbH
4  *
5  * Permission to use, copy, modify, and distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17 /**
18  * @file 
19  * @brief lvalues (assignment)
20  * @author andrei
21  */
22
23 #ifndef __lvalue_h_
24 #define __lvalue_h_
25
26 #include "rvalue.h"
27 #include "usr_avp.h"
28 #include "pvar.h"
29 #include "parser/msg_parser.h"
30 #include "action.h"
31
32 union lval_u{
33         pv_spec_t *pvs;
34         avp_spec_t avps;
35 };
36
37 enum lval_type{
38         LV_NONE, LV_AVP, LV_PVAR
39 };
40
41 struct lvalue{
42         enum lval_type type;
43         union lval_u lv;
44 };
45
46 /* lval operators */
47 #define EQ_T 254 /* k compatibility */
48
49 typedef int (*log_assign_action_f)(struct sip_msg* msg, struct lvalue *lv);
50 void set_log_assign_action_cb(log_assign_action_f f);
51
52 /** eval rve and assign the result to lv
53  * lv=eval(rve)
54  *
55  * @param h  - script context
56  * @param msg - sip msg
57  * @param lv - lvalue
58  * @param rve - rvalue expression
59  * @return >= 0 on success (expr. bool value), -1 on error
60  */
61 int lval_assign(struct run_act_ctx* h, struct sip_msg* msg, 
62                                 struct lvalue* lv, struct rval_expr* rve);
63 #endif /* __lvalue_h_*/