GPLization banner introduced to *.[hc] files
[sip-router] / modules / tm / t_funcs.h
1 /*
2  * $Id$
3  *
4  * Copyright (C) 2001-2003 Fhg Fokus
5  *
6  * This file is part of ser, a free SIP server.
7  *
8  * ser 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  * For a license to use the ser software under conditions
14  * other than those described here, or to purchase support for this
15  * software, please contact iptel.org by e-mail at the following addresses:
16  *    info@iptel.org
17  *
18  * ser is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License 
24  * along with this program; if not, write to the Free Software 
25  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
26  */
27
28
29
30 #ifndef _T_FUNCS_H
31 #define _T_FUNCS_H
32
33 #include <errno.h>
34 #include <netinet/in.h>
35 #include <netdb.h>
36
37 #include "../../mem/shm_mem.h"
38 #include "../../parser/msg_parser.h"
39 #include "../../globals.h"
40 #include "../../udp_server.h"
41 #include "../../msg_translator.h"
42 #include "../../timer.h"
43 #include "../../forward.h"
44 #include "../../mem/mem.h"
45 #include "../../md5utils.h"
46 #include "../../ip_addr.h"
47 #include "../../parser/parse_uri.h"
48
49 #include "config.h"
50 #include "lock.h"
51 #include "timer.h"
52 #include "sip_msg.h"
53 #include "h_table.h"
54 #include "ut.h"
55
56
57 struct s_table;
58 struct timer;
59 struct entry;
60 struct cell;
61
62 extern int noisy_ctimer;
63
64
65 /* send a private buffer: utilize a retransmission structure
66    but take a separate buffer not refered by it; healthy
67    for reducing time spend in REPLIES locks
68 */
69
70 int send_pr_buffer( struct retr_buf *rb,
71         void *buf, int len, char *function, int line );
72
73 /* send a buffer -- 'PR' means private, i.e., it is assumed noone
74    else can affect the buffer during sending time
75 */
76 #define SEND_PR_BUFFER(_rb,_bf,_le ) \
77         send_pr_buffer( (_rb), (_bf), (_le),  __FUNCTION__, __LINE__ )
78
79 #define SEND_BUFFER( _rb ) \
80         SEND_PR_BUFFER( (_rb) , (_rb)->buffer , (_rb)->buffer_len )
81
82
83 #define UNREF_UNSAFE(_T_cell) ({  (_T_cell)->ref_count--; })
84 #define UNREF(_T_cell) ({ \
85         LOCK_HASH( (_T_cell)->hash_index ); \
86         UNREF_UNSAFE(_T_cell); \
87         UNLOCK_HASH( (_T_cell)->hash_index ); })
88 #define REF_UNSAFE(_T_cell) ({  (_T_cell)->ref_count++; })
89 #define REF(_T_cell) ({ \
90         LOCK_HASH( (_T_cell)->hash_index ); \
91         REF_UNSAFE(_T_cell); \
92         UNLOCK_HASH( (_T_cell)->hash_index ); })
93 #define INIT_REF_UNSAFE(_T_cell) (_T_cell)->ref_count=1
94 #define IS_REFFED_UNSAFE(_T_cell) ((_T_cell)->ref_count!=0)
95
96
97 int   tm_startup();
98 void tm_shutdown();
99
100
101 /* function returns:
102  *       1 - a new transaction was created
103  *      -1 - error, including retransmission
104  */
105 int  t_add_transaction( struct sip_msg* p_msg  );
106
107
108 /* returns 1 if everything was OK or -1 for error
109  */
110 int t_release_transaction( struct cell *trans );
111
112
113 /* int forward_serial_branch(struct cell* Trans,int branch); */
114 int t_put_on_wait(  struct cell  *Trans  );
115 int get_ip_and_port_from_uri( str* uri , unsigned int *param_ip,
116         unsigned int *param_port);
117
118
119 int t_newtran( struct sip_msg* p_msg );
120
121 void put_on_wait(  struct cell  *Trans  );
122
123 void start_retr( struct retr_buf *rb );
124
125 void cleanup_localcancel_timers( struct cell *t );
126
127 int t_relay_to( struct sip_msg  *p_msg ,
128         struct proxy_l *proxy, int replicate ) ;
129
130
131 #endif
132