* @param block block to test
* @param size number of bytes in block
* @return GNUNET_YES if the block is accepting, GNUNET_NO if not
- */
+ */
int
GNUNET_BLOCK_is_accepting (const struct RegexBlock *block,
size_t size)
* @param token Token that follows to next state.
* @param len Lenght of token.
* @param key Hash of next state.
- *
+ *
* @return GNUNET_YES, to keep iterating
*/
static int
{
struct CheckEdgeContext *ctx = cls;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"edge %.*s [%u]: %s->%s\n",
(int) len, token, len, GNUNET_h2s(key));
if (NULL == ctx->xquery)
struct CheckEdgeContext ctx;
int res;
- if (GNUNET_OK !=
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "Block check\n");
+ if (GNUNET_OK !=
REGEX_BLOCK_get_key (block, size,
&key))
{
GNUNET_break_op (0);
return GNUNET_SYSERR;
}
- if (0 != memcmp (&key,
- query,
- sizeof (struct GNUNET_HashCode)))
+ if (NULL != query &&
+ 0 != memcmp (&key,
+ query,
+ sizeof (struct GNUNET_HashCode)))
{
GNUNET_break_op (0);
return GNUNET_SYSERR;
}
if ( (GNUNET_YES == ntohs (block->is_accepting)) &&
( (NULL == xquery) || ('\0' == xquery[0]) ) )
+ {
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ " out! Is accepting: %u, xquery %p\n",
+ ntohs(block->is_accepting), xquery);
return GNUNET_OK;
+ }
ctx.xquery = xquery;
ctx.found = GNUNET_NO;
res = REGEX_BLOCK_iterate (block, size, &check_edge, &ctx);
return GNUNET_SYSERR;
if (NULL == xquery)
return GNUNET_YES;
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "Result %d\n", ctx.found);
return ctx.found;
}
*/
int
REGEX_BLOCK_get_key (const struct RegexBlock *block,
- size_t block_len,
- struct GNUNET_HashCode *key)
+ size_t block_len,
+ struct GNUNET_HashCode *key)
{
uint16_t len;
const struct GNUNET_HashCode *destinations;
uint16_t num_edges;
size_t total;
- if (block_len < sizeof (struct RegexBlock))
+ if (block_len < sizeof (struct RegexBlock))
{
GNUNET_break_op (0);
return GNUNET_SYSERR;
- }
+ }
num_destinations = ntohs (block->num_destinations);
num_edges = ntohs (block->num_edges);
len = ntohs (block->proof_len);
destinations = (const struct GNUNET_HashCode *) &block[1];
edges = (const struct EdgeInfo *) &destinations[num_destinations];
- total = sizeof (struct RegexBlock) + num_destinations * sizeof (struct GNUNET_HashCode) + num_edges + sizeof (struct EdgeInfo) + len;
+ total = sizeof (struct RegexBlock) + num_destinations * sizeof (struct GNUNET_HashCode) + num_edges + sizeof (struct EdgeInfo) + len;
if (block_len < total)
{
GNUNET_break_op (0);
unsigned int n;
size_t off;
- if (size < sizeof (struct RegexBlock))
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "Block iterate\n");
+ if (size < sizeof (struct RegexBlock))
{
GNUNET_break_op (0);
return GNUNET_SYSERR;
edges = (const struct EdgeInfo *) &destinations[num_destinations];
aux = (const char *) &edges[num_edges];
total = sizeof (struct RegexBlock) + num_destinations * sizeof (struct GNUNET_HashCode) + num_edges * sizeof (struct EdgeInfo) + len;
- if (size < total)
+ if (size < total)
{
GNUNET_break_op (0);
return GNUNET_SYSERR;
}
for (n=0;n<num_edges;n++)
- total += ntohs (edges[n].token_length);
- if (size != total)
+ total += ntohs (edges[n].token_length);
+ if (size != total)
{
fprintf (stderr, "Expected %u, got %u\n",
(unsigned int) size,
for (n=0;n<num_edges;n++)
{
LOG (GNUNET_ERROR_TYPE_DEBUG,
- "Edge %u, off %u tokenlen %u\n", n, off,
- ntohs (edges[n].token_length));
+ " Edge %u/%u, off %u tokenlen %u (%.*s)\n", n+1, num_edges, off,
+ ntohs (edges[n].token_length), ntohs (edges[n].token_length),
+ &aux[off]);
if (NULL != iterator)
- if (GNUNET_NO == iterator (iter_cls,
- &aux[off],
+ if (GNUNET_NO == iterator (iter_cls,
+ &aux[off],
ntohs (edges[n].token_length),
&destinations[ntohs (edges[n].destination_index)]))
return GNUNET_OK;
char *aux;
len = strlen (proof);
- if (len > UINT16_MAX)
+ if (len > UINT16_MAX)
{
GNUNET_break (0);
return NULL;
for (i=0;i<num_edges;i++)
{
slen = strlen (edges[i].label);
- if (slen > UINT16_MAX)
+ if (slen > UINT16_MAX)
{
GNUNET_break (0);
return NULL;
edgeinfos = (struct EdgeInfo *) &dests[unique_destinations];
aux = (char *) &edgeinfos[num_edges];
off = len;
- memcpy (aux, proof, len);
+ memcpy (aux, proof, len);
for (i=0;i<num_edges;i++)
{
slen = strlen (edges[i].label);