all: updated FSF address in GPL text
[sip-router] / modules / mangler / sdp_mangler.h
1 /*
2  * mangler module
3  *
4  * $Id$
5  *
6  * Copyright (C) 2001-2003 FhG Fokus
7  *
8  * This file is part of ser, a free SIP server.
9  *
10  * ser is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version
14  *
15  * For a license to use the ser software under conditions
16  * other than those described here, or to purchase support for this
17  * software, please contact iptel.org by e-mail at the following addresses:
18  *    info@iptel.org
19  *
20  * ser is distributed in the hope that it will be useful,
21  * but WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23  * GNU General Public License for more details.
24  *
25  * You should have received a copy of the GNU General Public License 
26  * along with this program; if not, write to the Free Software 
27  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
28  */
29 /* History:
30  * --------
31  *  2003-04-07 first version.  
32  */
33
34 /* TO DO: precompiled expresions */
35
36 #ifndef SDP_MANGLER_H
37 #define SDP_MANGLER_H
38
39
40 #include "../../parser/msg_parser.h"    /* struct sip_msg */
41 #include "common.h"
42 #include <regex.h>
43
44
45 /* With STRICT_CHECK off:
46 If you define a port like 41231311 and BEST_EFFORT is defined it will 
47 consider a port the first 5 digits
48 Similarly an ip like 12.31.12.313131132131 will be mangled with only 3 digits
49 from the last group 
50 */
51
52 #ifdef STRICT_CHECK
53         #define PORT_REGEX "(m=[a-z]+ [0-9]{1,5} )"
54         #define IP_REGEX "(c=IN IP4 [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}( |\n|\r))"
55 #endif
56
57
58 #ifndef STRICT_CHECK
59         #define PORT_REGEX "m=[a-z]+ [0-9]{1,5}"
60         #define IP_REGEX "(c=IN IP4 [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})"
61 #endif
62
63
64 #define MIN_ORIGINAL_PORT 1
65 #define MAX_ORIGINAL_PORT 65535
66 #define MIN_MANGLED_PORT  1
67 #define MAX_MANGLED_PORT  65535
68 #define MIN_OFFSET_VALUE -65535
69 #define MAX_OFFSET_VALUE  65535
70
71
72
73 extern regex_t *portExpression;
74 extern regex_t *ipExpression;
75
76
77
78 /* replaces all appearances of a port in lines like m=audio port with
79         a new value for port which is oldvalue+offset 
80         @param msg a pointer to a sip message
81         @param offset value of an offset.Must be a numeric format like "-12345"
82         @param unused unused parameter
83         @return negative in case of error or number of replacements - 1
84 */
85 int sdp_mangle_port (struct sip_msg *msg, char *offset, char *unused);
86
87 /* may replace all appearances of an ip in lines like c=IN IP4 ip with
88         a new value for ip if the found ip matches the filter
89         @param msg a pointer to a sip message
90         @param oldip an filter for ip's in form ip/mask.Example
91         of oldip "10.0.0.0/255.0.0.0" or "10.0.0.0/8"
92         @param newip the ip replacing old ip
93         @return negative in case of error or number of replacements - 1
94 */
95
96 int sdp_mangle_ip (struct sip_msg *msg, char *oldip, char *newip);
97
98 int compile_expresions(char *port,char *ip);
99 int free_compiled_expresions();
100
101 #endif