xref: /freebsd-src/lib/libc/include/nscachedcli.h (revision b3e7694832e81d7a904a10f525f8797b753bf0d3)
106a99fe3SHajimu UMEMOTO /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3d915a14eSPedro F. Giffuni  *
406a99fe3SHajimu UMEMOTO  * Copyright (c) 2004 Michael Bushkov <bushman@rsu.ru>
506a99fe3SHajimu UMEMOTO  * All rights reserved.
606a99fe3SHajimu UMEMOTO  *
706a99fe3SHajimu UMEMOTO  * Redistribution and use in source and binary forms, with or without
806a99fe3SHajimu UMEMOTO  * modification, are permitted provided that the following conditions
906a99fe3SHajimu UMEMOTO  * are met:
1006a99fe3SHajimu UMEMOTO  * 1. Redistributions of source code must retain the above copyright
1106a99fe3SHajimu UMEMOTO  *    notice, this list of conditions and the following disclaimer.
1206a99fe3SHajimu UMEMOTO  * 2. Redistributions in binary form must reproduce the above copyright
1306a99fe3SHajimu UMEMOTO  *    notice, this list of conditions and the following disclaimer in the
1406a99fe3SHajimu UMEMOTO  *    documentation and/or other materials provided with the distribution.
1506a99fe3SHajimu UMEMOTO  *
1606a99fe3SHajimu UMEMOTO  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1706a99fe3SHajimu UMEMOTO  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1806a99fe3SHajimu UMEMOTO  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1906a99fe3SHajimu UMEMOTO  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
2006a99fe3SHajimu UMEMOTO  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2106a99fe3SHajimu UMEMOTO  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2206a99fe3SHajimu UMEMOTO  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2306a99fe3SHajimu UMEMOTO  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2406a99fe3SHajimu UMEMOTO  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2506a99fe3SHajimu UMEMOTO  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2606a99fe3SHajimu UMEMOTO  * SUCH DAMAGE.
2706a99fe3SHajimu UMEMOTO  */
2806a99fe3SHajimu UMEMOTO 
2906a99fe3SHajimu UMEMOTO #ifndef __NS_CACHED_CLI_H__
3006a99fe3SHajimu UMEMOTO #define __NS_CACHED_CLI_H__
3106a99fe3SHajimu UMEMOTO 
3206a99fe3SHajimu UMEMOTO /*
3306a99fe3SHajimu UMEMOTO  * This file contains API for working with caching daemon
3406a99fe3SHajimu UMEMOTO  */
3506a99fe3SHajimu UMEMOTO 
3606a99fe3SHajimu UMEMOTO enum comm_element_t {
3706a99fe3SHajimu UMEMOTO 	CET_UNDEFINED = 0,
3806a99fe3SHajimu UMEMOTO 	CET_WRITE_REQUEST = 1,
3906a99fe3SHajimu UMEMOTO 	CET_WRITE_RESPONSE = 2,
4006a99fe3SHajimu UMEMOTO 	CET_READ_REQUEST = 3,
4106a99fe3SHajimu UMEMOTO 	CET_READ_RESPONSE = 4,
4206a99fe3SHajimu UMEMOTO 	CET_TRANSFORM_REQUEST = 5,
4306a99fe3SHajimu UMEMOTO 	CET_TRANSFORM_RESPONSE = 6,
4406a99fe3SHajimu UMEMOTO 	CET_MP_WRITE_SESSION_REQUEST = 7,
4506a99fe3SHajimu UMEMOTO 	CET_MP_WRITE_SESSION_RESPONSE = 8,
4606a99fe3SHajimu UMEMOTO 	CET_MP_WRITE_SESSION_WRITE_REQUEST = 9,
4706a99fe3SHajimu UMEMOTO 	CET_MP_WRITE_SESSION_WRITE_RESPONSE = 10,
4806a99fe3SHajimu UMEMOTO 	CET_MP_WRITE_SESSION_CLOSE_NOTIFICATION = 11,
4906a99fe3SHajimu UMEMOTO 	CET_MP_WRITE_SESSION_ABANDON_NOTIFICATION = 12,
5006a99fe3SHajimu UMEMOTO 	CET_MP_READ_SESSION_REQUEST = 13,
5106a99fe3SHajimu UMEMOTO 	CET_MP_READ_SESSION_RESPONSE = 14,
5206a99fe3SHajimu UMEMOTO 	CET_MP_READ_SESSION_READ_REQUEST = 15,
5306a99fe3SHajimu UMEMOTO 	CET_MP_READ_SESSION_READ_RESPONSE = 16,
5406a99fe3SHajimu UMEMOTO 	CET_MP_READ_SESSION_CLOSE_NOTIFICATION = 17
5506a99fe3SHajimu UMEMOTO };
5606a99fe3SHajimu UMEMOTO 
5706a99fe3SHajimu UMEMOTO struct cached_connection_params {
5806a99fe3SHajimu UMEMOTO 	char	*socket_path;
5906a99fe3SHajimu UMEMOTO 	struct	timeval	timeout;
6006a99fe3SHajimu UMEMOTO };
6106a99fe3SHajimu UMEMOTO 
6206a99fe3SHajimu UMEMOTO struct cached_connection_ {
6306a99fe3SHajimu UMEMOTO 	int	sockfd;
6406a99fe3SHajimu UMEMOTO 	int	read_queue;
6506a99fe3SHajimu UMEMOTO 	int	write_queue;
6606a99fe3SHajimu UMEMOTO 
6706a99fe3SHajimu UMEMOTO 	int	mp_flag;	/* shows if the connection is used for
6806a99fe3SHajimu UMEMOTO 				 * multipart operations */
6906a99fe3SHajimu UMEMOTO };
7006a99fe3SHajimu UMEMOTO 
7106a99fe3SHajimu UMEMOTO /* simple abstractions for not to write "struct" every time */
7206a99fe3SHajimu UMEMOTO typedef struct cached_connection_	*cached_connection;
7306a99fe3SHajimu UMEMOTO typedef struct cached_connection_	*cached_mp_write_session;
7406a99fe3SHajimu UMEMOTO typedef struct cached_connection_	*cached_mp_read_session;
7506a99fe3SHajimu UMEMOTO 
7606a99fe3SHajimu UMEMOTO #define	INVALID_CACHED_CONNECTION	(NULL)
7706a99fe3SHajimu UMEMOTO #define	INVALID_CACHED_MP_WRITE_SESSION	(NULL)
7806a99fe3SHajimu UMEMOTO #define	INVALID_CACHED_MP_READ_SESSION	(NULL)
7906a99fe3SHajimu UMEMOTO 
8006a99fe3SHajimu UMEMOTO __BEGIN_DECLS
8106a99fe3SHajimu UMEMOTO 
8206a99fe3SHajimu UMEMOTO /* initialization/destruction routines */
8306a99fe3SHajimu UMEMOTO extern	cached_connection __open_cached_connection(
8406a99fe3SHajimu UMEMOTO 	struct cached_connection_params const *);
8506a99fe3SHajimu UMEMOTO extern	void __close_cached_connection(cached_connection);
8606a99fe3SHajimu UMEMOTO 
8706a99fe3SHajimu UMEMOTO /* simple read/write operations */
8806a99fe3SHajimu UMEMOTO extern	int __cached_write(cached_connection, const char *, const char *,
8906a99fe3SHajimu UMEMOTO 	size_t, const char *, size_t);
9006a99fe3SHajimu UMEMOTO extern	int __cached_read(cached_connection, const char *, const char *,
9106a99fe3SHajimu UMEMOTO 	size_t, char *, size_t *);
9206a99fe3SHajimu UMEMOTO 
9306a99fe3SHajimu UMEMOTO /* multipart read/write operations */
9406a99fe3SHajimu UMEMOTO extern	cached_mp_write_session __open_cached_mp_write_session(
9506a99fe3SHajimu UMEMOTO 	struct cached_connection_params const *, const char *);
9606a99fe3SHajimu UMEMOTO extern	int __cached_mp_write(cached_mp_write_session, const char *, size_t);
9706a99fe3SHajimu UMEMOTO extern	int __abandon_cached_mp_write_session(cached_mp_write_session);
9806a99fe3SHajimu UMEMOTO extern	int __close_cached_mp_write_session(cached_mp_write_session);
9906a99fe3SHajimu UMEMOTO 
10006a99fe3SHajimu UMEMOTO extern	cached_mp_read_session __open_cached_mp_read_session(
10106a99fe3SHajimu UMEMOTO 	struct cached_connection_params const *, const char *);
10206a99fe3SHajimu UMEMOTO extern	int __cached_mp_read(cached_mp_read_session, char *, size_t *);
10306a99fe3SHajimu UMEMOTO extern	int __close_cached_mp_read_session(cached_mp_read_session);
10406a99fe3SHajimu UMEMOTO 
10506a99fe3SHajimu UMEMOTO __END_DECLS
10606a99fe3SHajimu UMEMOTO 
10706a99fe3SHajimu UMEMOTO #endif
108