GNUnet  0.19.5
regex_block_lib.h
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet.
3  Copyright (C) 2012,2013 GNUnet e.V.
4 
5  GNUnet is free software: you can redistribute it and/or modify it
6  under the terms of the GNU Affero General Public License as published
7  by the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  GNUnet is distributed in the hope that it will be useful, but
11  WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Affero General Public License for more details.
14 
15  You should have received a copy of the GNU Affero General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17 
18  SPDX-License-Identifier: AGPL3.0-or-later
19  */
20 
27 #ifndef REGEX_BLOCK_LIB_H_
28 #define REGEX_BLOCK_LIB_H_
29 
30 #ifdef __cplusplus
31 extern "C"
32 {
33 #if 0
34 /* keep Emacsens' auto-indent happy */
35 }
36 #endif
37 #endif
38 
39 #include "platform.h"
40 #include "block_regex.h"
41 
42 
46 struct RegexBlock;
47 
48 
53 {
58  const char *label;
59 
64 };
65 
66 
75 int
76 REGEX_BLOCK_check_proof (const char *proof,
77  size_t proof_len,
78  const struct GNUNET_HashCode *key);
79 
80 
93 int
94 REGEX_BLOCK_check (const struct RegexBlock *block,
95  size_t size,
96  const struct GNUNET_HashCode *query,
97  const char *xquery);
98 
99 
100 /* FIXME: might want to use 'struct REGEX_BLOCK_Edge' here instead of 3 arguments! */
101 
111 typedef int
112 (*REGEX_INTERNAL_EgdeIterator)(void *cls,
113  const char *token,
114  size_t len,
115  const struct GNUNET_HashCode *key);
116 
117 
133 int
134 REGEX_BLOCK_iterate (const struct RegexBlock *block,
135  size_t size,
137  void *iter_cls);
138 
139 
148 int
149 REGEX_BLOCK_get_key (const struct RegexBlock *block,
150  size_t block_len,
151  struct GNUNET_HashCode *key);
152 
153 
161 int
162 GNUNET_BLOCK_is_accepting (const struct RegexBlock *block,
163  size_t block_len);
164 
165 
176 struct RegexBlock *
177 REGEX_BLOCK_create (const char *proof,
178  unsigned int num_edges,
179  const struct REGEX_BLOCK_Edge *edges,
180  int accepting,
181  size_t *rsize);
182 
183 
184 #if 0 /* keep Emacsens' auto-indent happy */
185 {
186 #endif
187 #ifdef __cplusplus
188 }
189 #endif
190 
191 /* ifndef REGEX_BLOCK_LIB_H */
192 #endif
193 /* end of regex_block_lib.h */
regex block formats
struct GNUNET_HashCode key
The key used in the DHT.
uint16_t len
length of data (which is always a uint32_t, but presumably this can be used to specify that fewer byt...
static uint64_t proof
Definition: gnunet-scrypt.c:49
static int iterator(void *cls, const struct GNUNET_PeerIdentity *key, void *value)
Iterator over hash map entries.
static unsigned int size
Size of the "table".
Definition: peer.c:68
struct RegexBlock * REGEX_BLOCK_create(const char *proof, unsigned int num_edges, const struct REGEX_BLOCK_Edge *edges, int accepting, size_t *rsize)
Construct a regex block to be stored in the DHT.
int GNUNET_BLOCK_is_accepting(const struct RegexBlock *block, size_t block_len)
Test if this block is marked as being an accept state.
int REGEX_BLOCK_iterate(const struct RegexBlock *block, size_t size, REGEX_INTERNAL_EgdeIterator iterator, void *iter_cls)
Iterate over all edges of a block of a regex state.
int REGEX_BLOCK_get_key(const struct RegexBlock *block, size_t block_len, struct GNUNET_HashCode *key)
Obtain the key that a particular block is to be stored under.
int REGEX_BLOCK_check_proof(const char *proof, size_t proof_len, const struct GNUNET_HashCode *key)
Check if the given 'proof' matches the given 'key'.
int(* REGEX_INTERNAL_EgdeIterator)(void *cls, const char *token, size_t len, const struct GNUNET_HashCode *key)
Iterator over edges in a block.
int REGEX_BLOCK_check(const struct RegexBlock *block, size_t size, const struct GNUNET_HashCode *query, const char *xquery)
Check if the regex block is well formed, including all edges.
A 512-bit hashcode.
Edge representation.
const char * label
Label of the edge.
struct GNUNET_HashCode destination
Destination of the edge.
Block to announce a regex state.
uint16_t num_edges
Number of edges parting from this state.