e0804ba37de0c1f758ffef3638d07af96e9b1710
[sip-router] / modules_k / dialog / dlg_handlers.h
1 /*
2  * $Id$
3  *
4  * Copyright (C) 2006 Voice System SRL
5  *
6  * This file is part of Kamailio, a free SIP server.
7  *
8  * Kamailio 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  * Kamailio is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License 
19  * along with this program; if not, write to the Free Software 
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  *
22  * History:
23  * --------
24  * 2006-04-14  initial version (bogdan)
25  * 2007-03-06  syncronized state machine added for dialog state. New tranzition
26  *             design based on events; removed num_1xx and num_2xx (bogdan)
27  */
28
29
30 /*!
31  * \file
32  * \brief Functions related to dialog handling
33  * \ingroup dialog
34  * Module: \ref dialog
35  */
36
37 #ifndef _DIALOG_DLG_HANDLERS_H_
38 #define _DIALOG_DLG_HANDLERS_H_
39
40 #include "../../parser/msg_parser.h"
41 #include "../../str.h"
42 #include "../../pvar.h"
43 #include "../../modules/tm/t_hooks.h"
44 #include "dlg_timer.h"
45
46 #define MAX_DLG_RR_PARAM_NAME 32
47
48 /* values for the sequential match mode */
49 #define SEQ_MATCH_STRICT_ID  0
50 #define SEQ_MATCH_FALLBACK   1
51 #define SEQ_MATCH_NO_ID      2
52
53
54 /*!
55  * \brief Initialize the dialog handlers
56  * \param rr_param_p added record-route parameter
57  * \param dlg_flag_p dialog flag
58  * \param timeout_avp_p AVP for timeout setting
59  * \param default_timeout_p default timeout
60  * \param seq_match_mode_p matching mode
61  */
62 void init_dlg_handlers(char *rr_param, int dlg_flag,
63                 pv_spec_t *timeout_avp, int default_timeout,
64                 int seq_match_mode);
65
66
67 /*!
68  * \brief Shutdown operation of the module
69  */
70 void destroy_dlg_handlers(void);
71
72
73 /*!
74  * \brief Function that is registered as TM callback and called on requests
75  * \param t transaction, used to created the dialog
76  * \param type type of the entered callback
77  * \param param saved dialog structure in the callback
78  */
79 void dlg_onreq(struct cell* t, int type, struct tmcb_params *param);
80
81
82 /*!
83  * \brief Function that is registered as RR callback for dialog tracking
84  * 
85  * Function that is registered as RR callback for dialog tracking. It
86  * sets the appropriate events after the SIP method and run the state
87  * machine to update the dialog state. It updates then the saved
88  * dialogs and also the statistics.
89  * \param req SIP request
90  * \param route_params record-route parameter
91  * \param param unused
92  */
93 void dlg_onroute(struct sip_msg* req, str *rr_param, void *param);
94
95
96 /*!
97  * \brief Timer function that removes expired dialogs, run timeout route
98  * \param tl dialog timer list
99  */
100 void dlg_ontimeout( struct dlg_tl *tl);
101
102
103 /*!
104  * \brief Create a new dialog from a sip message
105  *
106  * Create a new dialog from a SIP message, register a callback
107  * to keep track of the dialog with help of the tm module.
108  * This function is either called from the request callback, or
109  * from the dlg_manage function in the configuration script.
110  * \see dlg_onreq
111  * \see w_dlg_manage
112  * \param msg SIP message
113  * \param t transaction
114  * \return 0 on success, -1 on failure
115  */ 
116 int dlg_new_dialog(struct sip_msg *msg, struct cell *t);
117
118
119 /*!
120  * \brief Function that returns the dialog lifetime as pseudo-variable
121  * \param msg SIP message
122  * \param param pseudo-variable parameter
123  * \param res pseudo-variable result
124  * \return 0 on success, -1 on failure
125  */
126 int pv_get_dlg_lifetime(struct sip_msg *msg, pv_param_t *param,
127                 pv_value_t *res);
128
129
130 /*!
131  * \brief Function that returns the dialog state as pseudo-variable
132  * \param msg SIP message
133  * \param param pseudo-variable parameter
134  * \param res pseudo-variable result
135  * \return 0 on success, -1 on failure
136  */
137 int pv_get_dlg_status(struct sip_msg *msg, pv_param_t *param,
138                 pv_value_t *res);
139
140
141 /*!
142  * \brief Dummy callback just to keep the compiler happy
143  * \param t unused
144  * \param type unused
145  * \param param unused
146  */
147 void dlg_tmcb_dummy(struct cell* t, int type, struct tmcb_params *param);
148
149 #endif