voicemail specific code added (see #define VOICE_MAIL and module vm)
[sip-router] / modules / tm / t_reply.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_REPLY_H
31 #define _T_REPLY_H
32
33 #include "defs.h"
34
35
36 #include "h_table.h"
37
38 /* reply processing status */
39 enum rps {
40         /* something bad happened */
41         RPS_ERROR=0,    
42         /* transaction completed but we still accept the reply */
43         RPS_PUSHED_AFTER_COMPLETION,
44         /* reply dscarded */
45         RPS_DISCARDED,
46         /* reply stored for later processing */
47         RPS_STORE,
48         /* transaction completed */
49         RPS_COMPLETED,
50         /* provisional reply not affecting transaction state */
51         RPS_PROVISIONAL
52 };
53
54 enum route_mode { MODE_REQUEST=1, MODE_ONREPLY_REQUEST };
55 extern enum route_mode rmode;
56
57 /* branch bitmap type */
58 typedef unsigned int branch_bm_t;
59
60 /* reply export types */
61 typedef int (*treply_f)( struct sip_msg* p_msg,
62         unsigned int code, char * text );
63 #ifdef VOICE_MAIL
64 typedef int (*treply_wb_f)( struct sip_msg* p_msg,
65         unsigned int code, char * text, char * body, 
66         char * new_header, char * to_tag);
67 #endif
68
69 #define LOCK_REPLIES(_t) lock(&(_t)->reply_mutex )
70 #define UNLOCK_REPLIES(_t) unlock(&(_t)->reply_mutex )
71
72 /* This function is called whenever a reply for our module is received;
73  * we need to register this function on module initialization;
74  * Returns :   0 - core router stops
75  *             1 - core router relay statelessly
76  */
77 int t_on_reply( struct sip_msg  *p_msg ) ;
78
79
80 /* Retransmits the last sent inbound reply.
81  * Returns  -1 - error
82  *           1 - OK
83  */
84 int t_retransmit_reply( /* struct sip_msg * */  );
85
86
87 /* send a UAS reply
88  * Warning: 'buf' and 'len' should already have been build.
89  * returns 1 if everything was OK or -1 for erro
90  */
91 #ifdef VOICE_MAIL
92
93 int t_reply_light( struct cell *trans, char* buf, unsigned int len,
94                    unsigned int code, char * text,
95                    char *to_tag, unsigned int to_tag_len);
96
97 int t_reply_with_body( struct sip_msg* p_msg, unsigned int code, 
98                        char * text, char * body, char * new_header, char * to_tag );
99
100 #endif
101
102 /* send a UAS reply
103  * returns 1 if everything was OK or -1 for erro
104  */
105 int t_reply( struct cell *t, struct sip_msg * , unsigned int , char * );
106 /* the same as t_reply, except it does not claim
107    REPLY_LOCK -- useful to be called within reply
108    processing
109 */
110 int t_reply_unsafe( struct cell *t, struct sip_msg * , unsigned int , char * );
111
112 #ifdef _OBSOLETED
113 void cleanup_after_final( struct s_table *h_table, struct cell *t,
114         unsigned int status );
115 #endif
116
117 enum rps relay_reply( struct cell *t, struct sip_msg *p_msg, int branch, 
118         unsigned int msg_status, branch_bm_t *cancel_bitmap );
119
120 enum rps local_reply( struct cell *t, struct sip_msg *p_msg, int branch,
121     unsigned int msg_status, branch_bm_t *cancel_bitmap );
122
123 void set_final_timer( /* struct s_table *h_table,*/ struct cell *t );
124
125 void cleanup_uac_timers( struct cell *t );
126
127 void on_negative_reply( struct cell* t, struct sip_msg* msg,
128         int code, void *param  );
129
130 /* set which 'reply' structure to take if only negative
131    replies arrive 
132 */
133 int t_on_negative( unsigned int go_to );
134 unsigned int get_on_negative();
135
136 int t_retransmit_reply( struct cell *t );
137
138 void tm_init_tags();
139
140 #endif
141