1158115Sume/*- 2158115Sume * Copyright (c) 2005 Michael Bushkov <bushman@rsu.ru> 3158115Sume * All rights reserved. 4158115Sume * 5158115Sume * Redistribution and use in source and binary forms, with or without 6158115Sume * modification, are permitted provided that the following conditions 7158115Sume * are met: 8158115Sume * 1. Redistributions of source code must retain the above copyright 9158115Sume * notice, this list of conditions and the following disclaimer. 10158115Sume * 2. Redistributions in binary form must reproduce the above copyright 11158115Sume * notice, this list of conditions and the following disclaimer in the 12158115Sume * documentation and/or other materials provided with the distribution. 13158115Sume * 14158115Sume * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15158115Sume * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16158115Sume * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17158115Sume * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18158115Sume * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19158115Sume * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20158115Sume * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21158115Sume * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22158115Sume * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23158115Sume * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24158115Sume * SUCH DAMAGE. 25158115Sume * 26158115Sume * $FreeBSD$ 27158115Sume */ 28158115Sume 29171795Sbushman#ifndef __NSCD_PROTOCOL_H__ 30171795Sbushman#define __NSCD_PROTOCOL_H__ 31158115Sume 32158115Sume/* maximum buffer size to receive - larger buffers are not allowed */ 33158115Sume#define MAX_BUFFER_SIZE (1 << 20) 34158115Sume 35158115Sume/* buffer size correctness checking routine */ 36158115Sume#define BUFSIZE_CORRECT(x) (((x) > 0) && ((x) < MAX_BUFFER_SIZE)) 37158115Sume#define BUFSIZE_INVALID(x) (!BUFSIZE_CORRECT(x)) 38158115Sume 39158115Sume/* structures below represent the data that are sent/received by the daemon */ 40194112Sdesstruct cache_write_request { 41158115Sume char *entry; 42158115Sume char *cache_key; 43158115Sume char *data; 44158115Sume 45158115Sume size_t entry_length; 46158115Sume size_t cache_key_size; 47158115Sume size_t data_size; 48158115Sume}; 49158115Sume 50194112Sdesstruct cache_write_response { 51158115Sume int error_code; 52158115Sume}; 53158115Sume 54194112Sdesstruct cache_read_request { 55158115Sume char *entry; 56158115Sume char *cache_key; 57158115Sume 58158115Sume size_t entry_length; 59158115Sume size_t cache_key_size; 60158115Sume}; 61158115Sume 62194112Sdesstruct cache_read_response { 63158115Sume char *data; // ignored if error_code is not 0 64158115Sume size_t data_size; // ignored if error_code is not 0 65158115Sume 66158115Sume int error_code; 67158115Sume}; 68158115Sume 69158115Sumeenum transformation_type { 70228990Suqs TT_USER = 0, // transform only the entries of the caller 71158115Sume TT_ALL = 1 // transform all entries 72158115Sume}; 73158115Sume 74194112Sdesstruct cache_transform_request { 75158115Sume char *entry; // ignored if entry_length is 0 76158115Sume size_t entry_length; 77158115Sume 78158115Sume int transformation_type; 79158115Sume}; 80158115Sume 81194112Sdesstruct cache_transform_response { 82158115Sume int error_code; 83158115Sume}; 84158115Sume 85158115Sumestruct cache_mp_write_session_request { 86158115Sume char *entry; 87158115Sume size_t entry_length; 88158115Sume}; 89158115Sume 90158115Sumestruct cache_mp_write_session_response { 91158115Sume int error_code; 92158115Sume}; 93158115Sume 94158115Sumestruct cache_mp_write_session_write_request { 95158115Sume char *data; 96158115Sume size_t data_size; 97158115Sume}; 98158115Sume 99158115Sumestruct cache_mp_write_session_write_response { 100158115Sume int error_code; 101158115Sume}; 102158115Sume 103158115Sumestruct cache_mp_read_session_request { 104158115Sume char *entry; 105158115Sume size_t entry_length; 106158115Sume}; 107158115Sume 108158115Sumestruct cache_mp_read_session_response { 109158115Sume int error_code; 110158115Sume}; 111158115Sume 112158115Sumestruct cache_mp_read_session_read_response { 113158115Sume char *data; 114158115Sume size_t data_size; 115158115Sume 116158115Sume int error_code; 117158115Sume}; 118158115Sume 119158115Sume 120158115Sumeenum comm_element_t { 121158115Sume CET_UNDEFINED = 0, 122158115Sume CET_WRITE_REQUEST = 1, 123158115Sume CET_WRITE_RESPONSE = 2, 124158115Sume CET_READ_REQUEST = 3, 125158115Sume CET_READ_RESPONSE = 4, 126158115Sume CET_TRANSFORM_REQUEST = 5, 127158115Sume CET_TRANSFORM_RESPONSE = 6, 128158115Sume CET_MP_WRITE_SESSION_REQUEST = 7, 129158115Sume CET_MP_WRITE_SESSION_RESPONSE = 8, 130158115Sume CET_MP_WRITE_SESSION_WRITE_REQUEST = 9, 131158115Sume CET_MP_WRITE_SESSION_WRITE_RESPONSE = 10, 132158115Sume CET_MP_WRITE_SESSION_CLOSE_NOTIFICATION = 11, 133158115Sume CET_MP_WRITE_SESSION_ABANDON_NOTIFICATION = 12, 134158115Sume CET_MP_READ_SESSION_REQUEST = 13, 135158115Sume CET_MP_READ_SESSION_RESPONSE = 14, 136158115Sume CET_MP_READ_SESSION_READ_REQUEST = 15, 137158115Sume CET_MP_READ_SESSION_READ_RESPONSE = 16, 138158115Sume CET_MP_READ_SESSION_CLOSE_NOTIFICATION = 17, 139158115Sume CET_MAX = 18 140158115Sume}; 141158115Sume 142158115Sume/* 143158115Sume * The comm_element is used as the holder of any known (defined above) data 144158115Sume * type that is to be sent/received. 145158115Sume */ 146194112Sdesstruct comm_element { 147158115Sume union { 148158115Sume struct cache_write_request c_write_request; 149158115Sume struct cache_write_response c_write_response; 150158115Sume struct cache_read_request c_read_request; 151158115Sume struct cache_read_response c_read_response; 152158115Sume struct cache_transform_request c_transform_request; 153158115Sume struct cache_transform_response c_transform_response; 154158115Sume 155158115Sume struct cache_mp_write_session_request c_mp_ws_request; 156158115Sume struct cache_mp_write_session_response c_mp_ws_response; 157158115Sume struct cache_mp_write_session_write_request c_mp_ws_write_request; 158158115Sume struct cache_mp_write_session_write_response c_mp_ws_write_response; 159158115Sume 160158115Sume struct cache_mp_read_session_request c_mp_rs_request; 161158115Sume struct cache_mp_read_session_response c_mp_rs_response; 162158115Sume struct cache_mp_read_session_read_response c_mp_rs_read_response; 163194112Sdes } /* anonymous */; 164158115Sume enum comm_element_t type; 165158115Sume}; 166158115Sume 167194112Sdesvoid init_comm_element(struct comm_element *, enum comm_element_t type); 168194112Sdesvoid finalize_comm_element(struct comm_element *); 169158115Sume 170158115Sume/* 171158115Sume * For each type of data, there is three functions (init/finalize/get), that 172158115Sume * used with comm_element structure 173158115Sume */ 174194112Sdesvoid init_cache_write_request(struct cache_write_request *); 175194112Sdesvoid finalize_cache_write_request(struct cache_write_request *); 176194112Sdesstruct cache_write_request *get_cache_write_request(struct comm_element *); 177158115Sume 178194112Sdesvoid init_cache_write_response(struct cache_write_response *); 179194112Sdesvoid finalize_cache_write_response(struct cache_write_response *); 180194112Sdesstruct cache_write_response *get_cache_write_response(struct comm_element *); 181158115Sume 182194112Sdesvoid init_cache_read_request(struct cache_read_request *); 183194112Sdesvoid finalize_cache_read_request(struct cache_read_request *); 184194112Sdesstruct cache_read_request *get_cache_read_request(struct comm_element *); 185158115Sume 186194112Sdesvoid init_cache_read_response(struct cache_read_response *); 187194112Sdesvoid finalize_cache_read_response(struct cache_read_response *); 188194112Sdesstruct cache_read_response *get_cache_read_response(struct comm_element *); 189158115Sume 190194112Sdesvoid init_cache_transform_request(struct cache_transform_request *); 191194112Sdesvoid finalize_cache_transform_request(struct cache_transform_request *); 192194112Sdesstruct cache_transform_request *get_cache_transform_request( 193158115Sume struct comm_element *); 194158115Sume 195194112Sdesvoid init_cache_transform_response(struct cache_transform_response *); 196194112Sdesvoid finalize_cache_transform_response(struct cache_transform_response *); 197194112Sdesstruct cache_transform_response *get_cache_transform_response( 198158115Sume struct comm_element *); 199158115Sume 200194112Sdesvoid init_cache_mp_write_session_request( 201158115Sume struct cache_mp_write_session_request *); 202194112Sdesvoid finalize_cache_mp_write_session_request( 203158115Sume struct cache_mp_write_session_request *); 204194112Sdesstruct cache_mp_write_session_request * 205194112Sdes get_cache_mp_write_session_request(struct comm_element *); 206158115Sume 207194112Sdesvoid init_cache_mp_write_session_response( 208158115Sume struct cache_mp_write_session_response *); 209194112Sdesvoid finalize_cache_mp_write_session_response( 210158115Sume struct cache_mp_write_session_response *); 211194112Sdesstruct cache_mp_write_session_response * 212158115Sume get_cache_mp_write_session_response(struct comm_element *); 213158115Sume 214194112Sdesvoid init_cache_mp_write_session_write_request( 215158115Sume struct cache_mp_write_session_write_request *); 216194112Sdesvoid finalize_cache_mp_write_session_write_request( 217158115Sume struct cache_mp_write_session_write_request *); 218194112Sdesstruct cache_mp_write_session_write_request * 219158115Sume get_cache_mp_write_session_write_request(struct comm_element *); 220158115Sume 221194112Sdesvoid init_cache_mp_write_session_write_response( 222158115Sume struct cache_mp_write_session_write_response *); 223194112Sdesvoid finalize_cache_mp_write_session_write_response( 224158115Sume struct cache_mp_write_session_write_response *); 225194112Sdesstruct cache_mp_write_session_write_response * 226158115Sume get_cache_mp_write_session_write_response(struct comm_element *); 227158115Sume 228194112Sdesvoid init_cache_mp_read_session_request( 229158115Sume struct cache_mp_read_session_request *); 230194112Sdesvoid finalize_cache_mp_read_session_request( 231158115Sume struct cache_mp_read_session_request *); 232194112Sdesstruct cache_mp_read_session_request *get_cache_mp_read_session_request( 233158115Sume struct comm_element *); 234158115Sume 235194112Sdesvoid init_cache_mp_read_session_response( 236158115Sume struct cache_mp_read_session_response *); 237194112Sdesvoid finalize_cache_mp_read_session_response( 238158115Sume struct cache_mp_read_session_response *); 239194112Sdesstruct cache_mp_read_session_response * 240194112Sdes get_cache_mp_read_session_response(struct comm_element *); 241158115Sume 242194112Sdesvoid init_cache_mp_read_session_read_response( 243158115Sume struct cache_mp_read_session_read_response *); 244194112Sdesvoid finalize_cache_mp_read_session_read_response( 245158115Sume struct cache_mp_read_session_read_response *); 246194112Sdesstruct cache_mp_read_session_read_response * 247158115Sume get_cache_mp_read_session_read_response(struct comm_element *); 248158115Sume 249158115Sume#endif 250