-
Notifications
You must be signed in to change notification settings - Fork 3
/
cnxcc_mod.h
156 lines (121 loc) · 3.01 KB
/
cnxcc_mod.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/*
* $Id$
*
* Copyright (C) 2012 Carlos Ruiz Díaz (caruizdiaz.com),
* ConexionGroup (www.conexiongroup.com)
*
* This file is part of Kamailio, a free SIP server.
*
* Kamailio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version
*
* Kamailio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#ifndef _CNXCC_MOD_H
#define _CNXCC_MOD_H
#include "../../locking.h"
#include "../../str_hash.h"
#include "../../parser/parse_rr.h"
#define str_shm_free_if_not_null(_var_) if (_var_.s != NULL) { shm_free(_var_.s); _var_.s = NULL; _var_.len = 0; }
typedef struct stats
{
unsigned int total;
unsigned int active;
unsigned int dropped;
} stats_t;
typedef enum cnxpvtypes
{
CNX_PV_ACTIVE = 1,
CNX_PV_TOTAL,
CNX_PV_DROPPED
} cnxpvtypes_t;
typedef enum credit_type
{
CREDIT_TIME,
CREDIT_MONEY,
CREDIT_CHANNEL
} credit_type_t;
typedef struct hash_tables
{
struct str_hash_table *credit_data_by_client;
struct str_hash_table *call_data_by_cid;
gen_lock_t lock;
} hash_tables_t;
typedef struct data
{
gen_lock_t lock;
hash_tables_t time;
hash_tables_t money;
hash_tables_t channel;
/*struct str_hash_table *credit_data_by_client;
struct str_hash_table *call_data_by_cid;*/
stats_t *stats;
/*
* Call Shutdown Route Number
*/
int cs_route_number;
/*
* Dialog flag used to track the call
*/
flag_t ctrl_flag;
int check_period;
} data_t;
typedef struct sip_data
{
str callid;
str to_tag;
str from_tag;
} sip_data_t;
typedef struct money_spec_data
{
double cost_per_second;
int initial_pulse;
int final_pulse;
} money_spec_data_t;
struct call;
typedef struct call
{
struct call *prev;
struct call *next;
gen_lock_t lock;
char confirmed;
double max_amount;
money_spec_data_t money_based;
unsigned int start_timestamp;
double consumed_amount;
unsigned int dlg_h_entry;
unsigned int dlg_h_id;
str client_id;
sip_data_t sip_data;
} call_t;
typedef struct call_array
{
call_t *array;
int length;
} call_array_t;
typedef struct credit_data
{
gen_lock_t lock;
double max_amount;
double consumed_amount;
double ended_calls_consumed_amount;
int number_of_calls;
int concurrent_calls;
credit_type_t type;
call_t *call_list;
} credit_data_t;
int try_get_call_entry(str *callid, call_t **call, hash_tables_t **hts);
int try_get_credit_data_entry(str *client_id, credit_data_t **credit_data);
int terminate_call(call_t *call);
void terminate_all_calls(credit_data_t *credit_data);
#endif /* _CNXCC_MOD_H */