09c9a4e18d7b828cbe7da3a173ac58263ea73ca7
[sip-router] / modules_k / rr / api.h
1 /*
2  * $Id$
3  *
4  * Copyright (C) 2005 Voice Sistem 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
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (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
23 /*!
24  * \file
25  * \brief Kamailio RR module (record-routing) API
26  *
27  * Kamailio RR module (record-routing) API.
28  * The RR module provides an internal API to be used by other
29  * Kamailio modules. The API offers support for SIP dialog based
30  * functionalities.
31
32  * For internal(non-script) usage, the RR module offers to other
33  * module the possibility to register callback functions to be
34  * executed each time a local Route header is processed. The
35  * callback function will receive as parameter the register
36  * parameter and the Route header parameter string.
37  * \ingroup rr
38  */
39
40
41 #ifndef RR_API_H_
42 #define RR_API_H_
43
44 #include "../../str.h"
45 #include "../../sr_module.h"
46 #include "loose.h"
47 #include "rr_cb.h"
48
49 typedef  int (*add_rr_param_t)(struct sip_msg*, str*);
50 typedef  int (*check_route_param_t)(struct sip_msg*, regex_t*);
51 typedef  int (*is_direction_t)(struct sip_msg*, int);
52 typedef  int (*get_route_param_t)(struct sip_msg*, str*, str*);
53 typedef  int (*record_route_f)(struct sip_msg*, str*);
54 typedef  int (*loose_route_f)(struct sip_msg*);
55
56 /*! record-route API export binding */
57 typedef struct rr_binds {
58         record_route_f       record_route;
59         loose_route_f        loose_route;
60         add_rr_param_t       add_rr_param;
61         check_route_param_t  check_route_param;
62         is_direction_t       is_direction;
63         get_route_param_t    get_route_param;
64         register_rrcb_t      register_rrcb;
65         int                  append_fromtag;
66 } rr_api_t;
67
68 typedef  int (*load_rr_f)( struct rr_binds* );
69
70 /*!
71 * \brief API bind function exported by the module - it will load the other functions
72  * \param rr_binds record-route API export binding
73  * \return 1
74  */
75 int load_rr( struct rr_binds * );
76
77
78 /*!
79  * \brief Function to be called directly from other modules to load the RR API
80  * \param rrb record-route API export binding
81  * \return 0 on success, -1 if the API loader could not imported
82  */
83 inline static int load_rr_api( struct rr_binds *rrb )
84 {
85         load_rr_f load_rr_v;
86
87         /* import the RR auto-loading function */
88         if ( !(load_rr_v=(load_rr_f)find_export("load_rr", 0, 0))) {
89                 LM_ERR("failed to import load_rr\n");
90                 return -1;
91         }
92         /* let the auto-loading function load all RR stuff */
93         load_rr_v( rrb );
94
95         return 0;
96 }
97
98 /**
99  *
100  */
101 inline static int rr_load_api( rr_api_t *rrb )
102 {
103         return load_rr_api(rrb);
104 }
105
106 #endif