xref: /freebsd-src/usr.sbin/nscd/agent.h (revision b3e7694832e81d7a904a10f525f8797b753bf0d3)
106a99fe3SHajimu UMEMOTO /*-
206a99fe3SHajimu UMEMOTO  * Copyright (c) 2005 Michael Bushkov <bushman@rsu.ru>
306a99fe3SHajimu UMEMOTO  * All rights reserved.
406a99fe3SHajimu UMEMOTO  *
506a99fe3SHajimu UMEMOTO  * Redistribution and use in source and binary forms, with or without
606a99fe3SHajimu UMEMOTO  * modification, are permitted provided that the following conditions
706a99fe3SHajimu UMEMOTO  * are met:
806a99fe3SHajimu UMEMOTO  * 1. Redistributions of source code must retain the above copyright
906a99fe3SHajimu UMEMOTO  *    notice, this list of conditions and the following disclaimer.
1006a99fe3SHajimu UMEMOTO  * 2. Redistributions in binary form must reproduce the above copyright
1106a99fe3SHajimu UMEMOTO  *    notice, this list of conditions and the following disclaimer in the
1206a99fe3SHajimu UMEMOTO  *    documentation and/or other materials provided with the distribution.
1306a99fe3SHajimu UMEMOTO  *
1406a99fe3SHajimu UMEMOTO  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1506a99fe3SHajimu UMEMOTO  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1606a99fe3SHajimu UMEMOTO  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1706a99fe3SHajimu UMEMOTO  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1806a99fe3SHajimu UMEMOTO  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1906a99fe3SHajimu UMEMOTO  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2006a99fe3SHajimu UMEMOTO  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2106a99fe3SHajimu UMEMOTO  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2206a99fe3SHajimu UMEMOTO  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2306a99fe3SHajimu UMEMOTO  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2406a99fe3SHajimu UMEMOTO  * SUCH DAMAGE.
2506a99fe3SHajimu UMEMOTO  */
2606a99fe3SHajimu UMEMOTO 
27db1bdf2bSMichael Bushkov #ifndef __NSCD_AGENT_H__
28db1bdf2bSMichael Bushkov #define __NSCD_AGENT_H__
2906a99fe3SHajimu UMEMOTO 
3006a99fe3SHajimu UMEMOTO /*
3106a99fe3SHajimu UMEMOTO  * Agents are used to perform the actual lookups from the caching daemon.
3206a99fe3SHajimu UMEMOTO  * There are two types of daemons: for common requests and for multipart
3306a99fe3SHajimu UMEMOTO  * requests.
3406a99fe3SHajimu UMEMOTO  * All agents are stored in the agents table, which is the singleton.
3506a99fe3SHajimu UMEMOTO  */
3606a99fe3SHajimu UMEMOTO 
3706a99fe3SHajimu UMEMOTO enum agent_type {
3806a99fe3SHajimu UMEMOTO     COMMON_AGENT = 0,
3906a99fe3SHajimu UMEMOTO     MULTIPART_AGENT = 1
4006a99fe3SHajimu UMEMOTO };
4106a99fe3SHajimu UMEMOTO 
4206a99fe3SHajimu UMEMOTO struct agent {
4306a99fe3SHajimu UMEMOTO    	char	*name;
4406a99fe3SHajimu UMEMOTO     	enum agent_type type;
4506a99fe3SHajimu UMEMOTO };
4606a99fe3SHajimu UMEMOTO 
4706a99fe3SHajimu UMEMOTO struct common_agent {
4806a99fe3SHajimu UMEMOTO     	struct agent	parent;
4906a99fe3SHajimu UMEMOTO 	int (*lookup_func)(const char *, size_t, char **, size_t *);
5006a99fe3SHajimu UMEMOTO };
5106a99fe3SHajimu UMEMOTO 
5206a99fe3SHajimu UMEMOTO struct multipart_agent {
5306a99fe3SHajimu UMEMOTO     	struct agent	parent;
5434ecf97aSDag-Erling Smørgrav 	void *(*mp_init_func)(void);
5506a99fe3SHajimu UMEMOTO     	int (*mp_lookup_func)(char **, size_t *, void *);
5606a99fe3SHajimu UMEMOTO 	void (*mp_destroy_func)(void *);
5706a99fe3SHajimu UMEMOTO };
5806a99fe3SHajimu UMEMOTO 
5906a99fe3SHajimu UMEMOTO struct agent_table {
6006a99fe3SHajimu UMEMOTO    	struct agent	**agents;
6106a99fe3SHajimu UMEMOTO 	size_t		agents_num;
6206a99fe3SHajimu UMEMOTO };
6306a99fe3SHajimu UMEMOTO 
64*d2432adbSDag-Erling Smørgrav struct agent_table *init_agent_table(void);
65*d2432adbSDag-Erling Smørgrav void register_agent(struct agent_table *, struct agent *);
66*d2432adbSDag-Erling Smørgrav struct agent *find_agent(struct agent_table *, const char *, enum agent_type);
67*d2432adbSDag-Erling Smørgrav void destroy_agent_table(struct agent_table *);
6806a99fe3SHajimu UMEMOTO 
6906a99fe3SHajimu UMEMOTO #endif
70