call_obj: software license.
[sip-router] / src / modules / call_obj / cobj.h
1 /*
2  * CALL_OBJ module
3  *
4  * Copyright (C) 2017-2019 - Sonoc
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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
21  *
22  */
23
24 /**
25  * Header for functionality of Call Object module.
26  */
27
28 #ifndef _CALL_OBJ_H_
29 #define _CALL_OBJ_H_
30
31 #include <stdint.h>
32
33 #include "../../core/str.h"
34
35 /**
36  * Initialize call object module.
37  *
38  * /return 0 on success.
39  */
40 int cobj_init(int c_start, int c_end);
41
42 /**
43  * Close call object module.
44  */
45 void cobj_destroy(void);
46
47 /**
48  * Get a free object.
49  *
50  * /param timestamp assign this timestamp to the object we get.
51  * /param callid pointer to callid str.
52  * /return -1 if an error happens.
53  * /return number of a free object on success.
54  */
55 int cobj_get(uint64_t timestamp, str *callid);
56
57 /**
58  * Free an Object
59  *
60  * /param num number of object to free
61  * /return 0 on success
62  */
63 int cobj_free(int num);
64
65 /**
66  * Structure to store module statistics.
67  */
68 typedef struct {
69         int start;
70         int end;
71         int assigned;
72 } cobj_stats_t;
73
74 /**
75  * Fill data in cobj_stats_t structure passed as pointer.
76  *
77  * /param stats pointer to cobj_stats_t structure.
78  * /return 0 on success
79  */
80 int cobj_stats_get(cobj_stats_t *stats);
81
82 /**
83  * Free all objects at once.
84  */
85 void cobj_free_all(void);
86
87 /**
88  * Element of a returned object list.
89  */
90 typedef struct _cobj_elem {
91         int number;
92         uint64_t timestamp;     
93         str callid;
94         /* TODO */
95         struct _cobj_elem *next;
96 } cobj_elem_t;
97
98 /**
99  * Free an object list.
100  *
101  * /param elem pointer to first element in the list.
102  */
103 void cobj_free_list(cobj_elem_t *elem);
104
105 /**
106  * Get current timestamp in milliseconds.
107  *
108  * /param ts pointer to timestamp integer.
109  * /return 0 on success.
110  */
111 int get_timestamp(uint64_t *ts);
112
113 /**
114  * Get all objects which timestamp is less than or equals some value.
115  *
116  * User shall free returned list when not used any more.
117  *
118  * /param ts timestamp to compare.
119  * /param elem returned list. NULL on error of if zero elements.
120  * /param limit maximum number of objects to return. 0 means unlimited.
121  *
122  * /return number of returned objects on success.
123  * /return -1 on error
124  */
125 int cobj_get_timestamp(uint64_t ts, cobj_elem_t **elem, int limit);
126
127 #endif // _CALL_OBJ_H_