9ac93cd3a8e2d5143f89c7e1abadd87aeddecd14
[sip-router] / modules / tm / t_funcs.h
1 /*
2  * $Id$
3  */
4
5
6 #ifndef _T_FUNCS_H
7 #define _T_FUNCS_H
8
9 #include <errno.h>
10 #include <netinet/in.h>
11 #include <netdb.h>
12
13 #include "../../mem/shm_mem.h"
14 #include "../../parser/msg_parser.h"
15 #include "../../globals.h"
16 #include "../../udp_server.h"
17 #include "../../msg_translator.h"
18 #include "../../timer.h"
19 #include "../../forward.h"
20 #include "../../mem/mem.h"
21 #include "../../md5utils.h"
22 #include "../../ip_addr.h"
23 #include "../../parser/parse_uri.h"
24
25 #include "config.h"
26 #include "lock.h"
27 #include "timer.h"
28 #include "sip_msg.h"
29 #include "h_table.h"
30 #include "ut.h"
31
32
33 struct s_table;
34 struct timer;
35 struct entry;
36 struct cell;
37
38 extern int noisy_ctimer;
39
40
41 /* send a private buffer: utilize a retransmission structure
42    but take a separate buffer not refered by it; healthy
43    for reducing time spend in REPLIES locks
44 */
45
46 int send_pr_buffer( struct retr_buf *rb,
47         void *buf, int len, char *function, int line );
48
49 /* send a buffer -- 'PR' means private, i.e., it is assumed noone
50    else can affect the buffer during sending time
51 */
52 #define SEND_PR_BUFFER(_rb,_bf,_le ) \
53         send_pr_buffer( (_rb), (_bf), (_le),  __FUNCTION__, __LINE__ )
54
55 #define SEND_BUFFER( _rb ) \
56         SEND_PR_BUFFER( (_rb) , (_rb)->buffer , (_rb)->buffer_len )
57
58
59 #define UNREF_UNSAFE(_T_cell) ({  (_T_cell)->ref_count--; })
60 #define UNREF(_T_cell) ({ \
61         LOCK_HASH( (_T_cell)->hash_index ); \
62         UNREF_UNSAFE(_T_cell); \
63         UNLOCK_HASH( (_T_cell)->hash_index ); })
64 #define REF_UNSAFE(_T_cell) ({  (_T_cell)->ref_count++; })
65 #define REF(_T_cell) ({ \
66         LOCK_HASH( (_T_cell)->hash_index ); \
67         REF_UNSAFE(_T_cell); \
68         UNLOCK_HASH( (_T_cell)->hash_index ); })
69 #define INIT_REF_UNSAFE(_T_cell) (_T_cell)->ref_count=1
70 #define IS_REFFED_UNSAFE(_T_cell) ((_T_cell)->ref_count!=0)
71
72
73 int   tm_startup();
74 void tm_shutdown();
75
76
77 /* function returns:
78  *       1 - a new transaction was created
79  *      -1 - error, including retransmission
80  */
81 int  t_add_transaction( struct sip_msg* p_msg  );
82
83
84 /* returns 1 if everything was OK or -1 for error
85  */
86 int t_release_transaction( struct cell *trans );
87
88
89 /* int forward_serial_branch(struct cell* Trans,int branch); */
90 int t_put_on_wait(  struct cell  *Trans  );
91 int get_ip_and_port_from_uri( str* uri , unsigned int *param_ip,
92         unsigned int *param_port);
93
94
95 int t_newtran( struct sip_msg* p_msg );
96
97 void put_on_wait(  struct cell  *Trans  );
98
99 void start_retr( struct retr_buf *rb );
100
101 void cleanup_localcancel_timers( struct cell *t );
102
103 int t_relay_to( struct sip_msg  *p_msg ,
104         struct proxy_l *proxy, int replicate ) ;
105
106
107 #endif
108