c21faddb4611e55d613e4915ef0f623065f1f461
[sip-router] / re.h
1 /*
2  * $Id$
3  *
4  * regexp and regexp substitutions implementations
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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
28  *
29  *
30  * History:
31  * --------
32  *   2003-08-04  created by andrei
33  */
34
35 #ifndef _re_h
36 #define _re_h
37
38 #include "str.h"
39 #include "parser/msg_parser.h"
40 #include <sys/types.h> /* for regex */
41 #include <regex.h>
42
43 enum replace_special { REPLACE_NMATCH, REPLACE_CHAR, REPLACE_URI };
44
45 struct replace_with{
46         int offset; /* offset in string */
47         int size;   /* size of replace "anchor" in string */
48         enum replace_special type;
49         union{
50                 int nmatch;
51                 char c;
52         }u;
53 };
54
55 struct subst_expr{
56         regex_t* re;
57         str replacement;
58         int replace_all; 
59         int n_escapes; /* escapes number (replace[] size) */
60         int max_pmatch ; /* highest () referenced */
61         struct replace_with replace[1]; /* 0 does not work on all compilers */
62 };
63
64 struct replace_lst{
65         int offset;
66         int size;   /* at offset, delete size bytes and replace them with rpl */
67         str rpl;
68         struct replace_lst *next;
69 };
70
71
72
73 void subst_expr_free(struct subst_expr* se);
74 void replace_lst_free(struct replace_lst* l);
75 struct subst_expr*  subst_parser(str* subst);
76 struct replace_lst* subst_run( struct subst_expr* se, char* input, 
77                                        struct sip_msg* msg);
78 str* subst_str(char* input, struct sip_msg* msg, struct subst_expr* se);
79
80
81
82 #endif
83