/* Copyright (C) 2019 Philipp "ph3-der-loewe" Schafft <lion@lion.leolix.org> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef _LIBIGLOO__FILTER_H_ #define _LIBIGLOO__FILTER_H_ /** * @file * Put a good description of this file here */ #ifdef __cplusplus extern "C" { #endif #include "ro.h" #include "interface.h" /* About thread safety: * This set of functions is thread safe. */ igloo_RO_FORWARD_TYPE(igloo_filter_t); /* Result of a test. */ typedef enum { /* The test resulted in an error condition. */ igloo_FILTER_RESULT_ERROR = -1, /* The object did not pass the test and should not be processed. */ igloo_FILTER_RESULT_DROP = 0, /* The object passed the test and should be processed. */ igloo_FILTER_RESULT_PASS = 1 } igloo_filter_result_t; /* Interface description */ typedef struct { igloo_interface_base_ifdesc_t __base; /* Perform the actual test on the object. * This must implement thread-safety itself if necessary. */ igloo_filter_result_t (*test)(igloo_INTERFACE_BASIC_ARGS, igloo_ro_t object); } igloo_filter_ifdesc_t; /* This creates a new filter from a interface description and state. * Parameters: * ifdesc * The interface description to use. * backend_object * A object used by the backend or igloo_RO_NULL. * backend_userdata * A userdata pointer used by the backend or NULL. * name, associated * See refobject_new(). */ igloo_filter_t * igloo_filter_new(const igloo_filter_ifdesc_t *ifdesc, igloo_ro_t backend_object, void *backend_userdata, const char *name, igloo_ro_t associated, igloo_ro_t instance); /* This tests a object according to the filter. * Parameters: * filter * The filter to use. * object * The object to test. * Returns: * Result of the test (error, drop, pass). */ igloo_filter_result_t igloo_filter_test(igloo_filter_t *filter, igloo_ro_t object); #ifdef __cplusplus } #endif #endif /* ! _LIBIGLOO__FILTER_H_ */