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