GNUnet  0.11.x
Functions
plugin_block_seti_test.c File Reference

set test block, recognizes elements with non-zero first byte as invalid More...

#include "platform.h"
#include "gnunet_block_plugin.h"
#include "gnunet_block_group_lib.h"
Include dependency graph for plugin_block_seti_test.c:

Go to the source code of this file.

Functions

static enum GNUNET_BLOCK_EvaluationResult block_plugin_seti_test_evaluate (void *cls, struct GNUNET_BLOCK_Context *ctx, enum GNUNET_BLOCK_Type type, struct GNUNET_BLOCK_Group *group, enum GNUNET_BLOCK_EvaluationOptions eo, const struct GNUNET_HashCode *query, const void *xquery, size_t xquery_size, const void *reply_block, size_t reply_block_size)
 Function called to validate a reply or a request. More...
 
static enum GNUNET_GenericReturnValue block_plugin_seti_test_check_query (void *cls, enum GNUNET_BLOCK_Type type, const struct GNUNET_HashCode *query, const void *xquery, size_t xquery_size)
 Function called to validate a query. More...
 
static enum GNUNET_GenericReturnValue block_plugin_seti_test_check_block (void *cls, enum GNUNET_BLOCK_Type type, const struct GNUNET_HashCode *query, const void *block, size_t block_size)
 Function called to validate a block for storage. More...
 
static enum GNUNET_BLOCK_ReplyEvaluationResult block_plugin_seti_test_check_reply (void *cls, enum GNUNET_BLOCK_Type type, struct GNUNET_BLOCK_Group *group, const struct GNUNET_HashCode *query, const void *xquery, size_t xquery_size, const void *reply_block, size_t reply_block_size)
 Function called to validate a reply to a request. More...
 
static enum GNUNET_GenericReturnValue block_plugin_seti_test_get_key (void *cls, enum GNUNET_BLOCK_Type type, const void *block, size_t block_size, struct GNUNET_HashCode *key)
 Function called to obtain the key for a block. More...
 
void * libgnunet_plugin_block_seti_test_init (void *cls)
 Entry point for the plugin. More...
 
void * libgnunet_plugin_block_seti_test_done (void *cls)
 Exit point from the plugin. More...
 

Detailed Description

set test block, recognizes elements with non-zero first byte as invalid

Author
Christian Grothoff

Definition in file plugin_block_seti_test.c.

Function Documentation

◆ block_plugin_seti_test_evaluate()

static enum GNUNET_BLOCK_EvaluationResult block_plugin_seti_test_evaluate ( void *  cls,
struct GNUNET_BLOCK_Context ctx,
enum GNUNET_BLOCK_Type  type,
struct GNUNET_BLOCK_Group group,
enum GNUNET_BLOCK_EvaluationOptions  eo,
const struct GNUNET_HashCode query,
const void *  xquery,
size_t  xquery_size,
const void *  reply_block,
size_t  reply_block_size 
)
static

Function called to validate a reply or a request.

For request evaluation, simply pass "NULL" for the reply_block.

Parameters
clsclosure
ctxblock context
typeblock type
groupblock group to use
eocontrol flags
queryoriginal query (hash)
xqueryextrended query data (can be NULL, depending on type)
xquery_sizenumber of bytes in xquery
reply_blockresponse to validate
reply_block_sizenumber of bytes in reply block
Returns
characterization of result

Definition at line 1 of file plugin_block_seti_test.c.

59 {
60  if ((NULL == reply_block) ||
61  (reply_block_size == 0) ||
62  (0 != ((char *) reply_block)[0]))
65 }
@ GNUNET_BLOCK_EVALUATION_RESULT_INVALID
Block does not match query (invalid result)
@ GNUNET_BLOCK_EVALUATION_OK_MORE
Valid result, and there may be more.

Referenced by libgnunet_plugin_block_seti_test_init().

Here is the caller graph for this function:

◆ block_plugin_seti_test_check_query()

static enum GNUNET_GenericReturnValue block_plugin_seti_test_check_query ( void *  cls,
enum GNUNET_BLOCK_Type  type,
const struct GNUNET_HashCode query,
const void *  xquery,
size_t  xquery_size 
)
static

Function called to validate a query.

Parameters
clsclosure
ctxblock context
typeblock type
queryoriginal query (hash)
xqueryextrended query data (can be NULL, depending on type)
xquery_sizenumber of bytes in xquery
Returns
GNUNET_OK if the query is fine, GNUNET_NO if not

Definition at line 1 of file plugin_block_seti_test.c.

85 {
86  return GNUNET_OK;
87 }
@ GNUNET_OK
Definition: gnunet_common.h:95

Referenced by libgnunet_plugin_block_seti_test_init().

Here is the caller graph for this function:

◆ block_plugin_seti_test_check_block()

static enum GNUNET_GenericReturnValue block_plugin_seti_test_check_block ( void *  cls,
enum GNUNET_BLOCK_Type  type,
const struct GNUNET_HashCode query,
const void *  block,
size_t  block_size 
)
static

Function called to validate a block for storage.

Parameters
clsclosure
typeblock type
querykey for the block (hash), must match exactly
blockblock data to validate
block_sizenumber of bytes in block
Returns
GNUNET_OK if the block is fine, GNUNET_NO if not

Definition at line 1 of file plugin_block_seti_test.c.

106 {
107  if ((NULL == block) ||
108  (0 == block_size) ||
109  (0 != ((char *) block)[0]))
110  return GNUNET_SYSERR;
111  return GNUNET_OK;
112 }
@ GNUNET_SYSERR
Definition: gnunet_common.h:93

References GNUNET_BLOCK_EVALUATION_OK_MORE, and GNUNET_BLOCK_EVALUATION_RESULT_INVALID.

Referenced by libgnunet_plugin_block_seti_test_init().

Here is the caller graph for this function:

◆ block_plugin_seti_test_check_reply()

static enum GNUNET_BLOCK_ReplyEvaluationResult block_plugin_seti_test_check_reply ( void *  cls,
enum GNUNET_BLOCK_Type  type,
struct GNUNET_BLOCK_Group group,
const struct GNUNET_HashCode query,
const void *  xquery,
size_t  xquery_size,
const void *  reply_block,
size_t  reply_block_size 
)
static

Function called to validate a reply to a request.

Note that it is assumed that the reply has already been matched to the key (and signatures checked) as it would be done with the GetKeyFunction and the BlockEvaluationFunction.

Parameters
clsclosure
typeblock type
groupwhich block group to use for evaluation
queryoriginal query (hash)
xqueryextrended query data (can be NULL, depending on type)
xquery_sizenumber of bytes in xquery
reply_blockresponse to validate
reply_block_sizenumber of bytes in reply_block
Returns
characterization of result

Definition at line 1 of file plugin_block_seti_test.c.

140 {
141  if ( (NULL == reply_block) ||
142  (0 == reply_block_size) ||
143  (0 != ((char *) reply_block)[0]) )
146 }
@ GNUNET_BLOCK_REPLY_OK_MORE
Valid result, and there may be more.
@ GNUNET_BLOCK_REPLY_INVALID
Block does not match query (invalid result)

Referenced by libgnunet_plugin_block_seti_test_init().

Here is the caller graph for this function:

◆ block_plugin_seti_test_get_key()

static enum GNUNET_GenericReturnValue block_plugin_seti_test_get_key ( void *  cls,
enum GNUNET_BLOCK_Type  type,
const void *  block,
size_t  block_size,
struct GNUNET_HashCode key 
)
static

Function called to obtain the key for a block.

Parameters
clsclosure
typeblock type
blockblock to get the key for
block_sizenumber of bytes in block
keyset to the key (query) for the given block
Returns
GNUNET_OK on success, GNUNET_SYSERR if type not supported (or if extracting a key from a block of this type does not work)

Definition at line 1 of file plugin_block_seti_test.c.

166 {
167  return GNUNET_SYSERR;
168 }

Referenced by libgnunet_plugin_block_seti_test_init().

Here is the caller graph for this function:

◆ libgnunet_plugin_block_seti_test_init()

void* libgnunet_plugin_block_seti_test_init ( void *  cls)

Entry point for the plugin.

Definition at line 175 of file plugin_block_seti_test.c.

176 {
177  static enum GNUNET_BLOCK_Type types[] = {
179  GNUNET_BLOCK_TYPE_ANY /* end of list */
180  };
181  struct GNUNET_BLOCK_PluginFunctions *api;
182 
189  api->types = types;
190  return api;
191 }
GNUNET_BLOCK_Type
Blocks in the datastore and the datacache must have a unique type.
@ GNUNET_BLOCK_TYPE_ANY
Any type of block, used as a wildcard when searching.
@ GNUNET_BLOCK_TYPE_SETI_TEST
Block for testing set intersection.
#define GNUNET_new(type)
Allocate a struct or union of the given type.
static enum GNUNET_GenericReturnValue block_plugin_seti_test_check_query(void *cls, enum GNUNET_BLOCK_Type type, const struct GNUNET_HashCode *query, const void *xquery, size_t xquery_size)
Function called to validate a query.
static enum GNUNET_BLOCK_EvaluationResult block_plugin_seti_test_evaluate(void *cls, struct GNUNET_BLOCK_Context *ctx, enum GNUNET_BLOCK_Type type, struct GNUNET_BLOCK_Group *group, enum GNUNET_BLOCK_EvaluationOptions eo, const struct GNUNET_HashCode *query, const void *xquery, size_t xquery_size, const void *reply_block, size_t reply_block_size)
Function called to validate a reply or a request.
static enum GNUNET_GenericReturnValue block_plugin_seti_test_check_block(void *cls, enum GNUNET_BLOCK_Type type, const struct GNUNET_HashCode *query, const void *block, size_t block_size)
Function called to validate a block for storage.
static enum GNUNET_GenericReturnValue block_plugin_seti_test_get_key(void *cls, enum GNUNET_BLOCK_Type type, const void *block, size_t block_size, struct GNUNET_HashCode *key)
Function called to obtain the key for a block.
static enum GNUNET_BLOCK_ReplyEvaluationResult block_plugin_seti_test_check_reply(void *cls, enum GNUNET_BLOCK_Type type, struct GNUNET_BLOCK_Group *group, const struct GNUNET_HashCode *query, const void *xquery, size_t xquery_size, const void *reply_block, size_t reply_block_size)
Function called to validate a reply to a request.
Each plugin is required to return a pointer to a struct of this type as the return value from its ent...
enum GNUNET_BLOCK_Type * types
0-terminated array of block types supported by this plugin.
GNUNET_BLOCK_QueryEvaluationFunction check_query
Check that a query is well-formed.
GNUNET_BLOCK_BlockEvaluationFunction check_block
Check that a block is well-formed.
GNUNET_BLOCK_GetKeyFunction get_key
Obtain the key for a given block (if possible).
GNUNET_BLOCK_ReplyEvaluationFunction check_reply
Check that a reply block matches a query.
GNUNET_BLOCK_EvaluationFunction evaluate
Main function of a block plugin.

References block_plugin_seti_test_check_block(), block_plugin_seti_test_check_query(), block_plugin_seti_test_check_reply(), block_plugin_seti_test_evaluate(), block_plugin_seti_test_get_key(), GNUNET_BLOCK_PluginFunctions::check_block, GNUNET_BLOCK_PluginFunctions::check_query, GNUNET_BLOCK_PluginFunctions::check_reply, GNUNET_BLOCK_PluginFunctions::evaluate, GNUNET_BLOCK_PluginFunctions::get_key, GNUNET_BLOCK_TYPE_ANY, GNUNET_BLOCK_TYPE_SETI_TEST, GNUNET_new, and GNUNET_BLOCK_PluginFunctions::types.

Here is the call graph for this function:

◆ libgnunet_plugin_block_seti_test_done()

void* libgnunet_plugin_block_seti_test_done ( void *  cls)

Exit point from the plugin.

Definition at line 198 of file plugin_block_seti_test.c.

199 {
200  struct GNUNET_BLOCK_PluginFunctions *api = cls;
201 
202  GNUNET_free (api);
203  return NULL;
204 }
#define GNUNET_free(ptr)
Wrapper around free.
void * cls
Closure for all of the callbacks.

References GNUNET_BLOCK_PluginFunctions::cls, and GNUNET_free.