1 /****************************************************************************
2  *
3  * Copyright (C) 2014-2021 Cisco and/or its affiliates. All rights reserved.
4  * Copyright (C) 2005-2013 Sourcefire, Inc.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License Version 2 as
8  * published by the Free Software Foundation.  You may not use, modify or
9  * distribute this program under any other version of the GNU General
10  * Public License.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20  *
21  ****************************************************************************/
22 
23 
24 #ifndef __STR_SEARCH_H__
25 #define __STR_SEARCH_H__
26 
27 #include "mpse_methods.h"
28 
29 /*search pattern case sensitivity */
30 #define STR_SEARCH_CASE_SENSITIVE 0
31 #define STR_SEARCH_CASE_INSENSITIVE 1
32 
33 /* Function prototypes  */
34 typedef int (*MatchFunction)(void *, void *, int, void *, void *);
35 
36 int  SearchInit(unsigned int num);
37 int  SearchGetHandle(void);
38 int  SearchPutHandle(unsigned int id);
39 int  SearchReInit(unsigned int i);
40 void SearchFree(void);
41 void SearchFreeId(unsigned id);
42 void SearchAdd(unsigned int mpse_id, const char *pat, unsigned int pat_len, int id);
43 void SearchPrepPatterns(unsigned int mpse_id);
44 int  SearchFindString(unsigned int mpse_id, const char *str, unsigned int str_len, int confine, MatchFunction);
45 
46 
47 void * SearchInstanceNew( void );
48 void * SearchInstanceNewEx( unsigned method );
49 void   SearchInstanceFree( void * insance );
50 void   SearchInstanceAdd( void * instance, const char *pat, unsigned int pat_len, int id);
51 void   SearchInstanceAddEx( void * instance, const char *pat, unsigned int pat_len, void* id, unsigned nocase);
52 void   SearchInstancePrepPatterns( void * instance );
53 int    SearchInstanceFindString( void * instance, const char *str, unsigned int str_len, int confine, MatchFunction);
54 int    SearchInstanceFindStringAll( void * instance, const char *str, unsigned int str_len, int confine, MatchFunction, void *userData);
55 int    SearchInstanceSFindString( void * instance, const char *str, unsigned int str_len, int confine, MatchFunction, int *state);
56 
57 typedef struct _search_api
58 {
59     int (*search_init)(unsigned int);
60 
61     int (*search_reinit)(unsigned int);
62 
63     void (*search_free)(void);
64 
65     void (*search_add)(unsigned int, const char *, unsigned int, int);
66 
67     void (*search_prep)(unsigned int);
68 
69     int (*search_find)(unsigned int, const char *, unsigned int, int, MatchFunction);
70 
71     /* 6/1/06*/
72     void (*search_free_id)(unsigned id);
73 
74     int (*search_get_handle)(void);
75     int (*search_put_handle)(unsigned int);
76 
77     void * (*search_instance_new)(void);
78     void * (*search_instance_new_ex)(unsigned method);
79     void   (*search_instance_free)(void * instance);
80     void   (*search_instance_add) (void * instance, const char *s, unsigned int s_len, int s_id);
81     void   (*search_instance_add_ex) (void * instance, const char *s, unsigned int s_len, void* s_id, unsigned nocase);
82     void   (*search_instance_prep)(void * instance );
83     int    (*search_instance_find)(void * instance, const char *s, unsigned int s_len, int confine, MatchFunction);
84     int    (*search_instance_find_all)(void * instance, const char *s, unsigned int s_len, int confine, MatchFunction, void *userData);
85     char * (*search_instance_find_end)(char *match_ptr, int buflen, char *search_str, int search_len);
86     int    (*stateful_search_instance_find)(void * instance, const char *s, unsigned int s_len, int confine, MatchFunction, int *state);
87 
88 } SearchAPI;
89 
90 extern SearchAPI *search_api;
91 
92 #endif  /*  __STR_SEARCH_H__  */
93 
94