protocol.h revision 158115
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: head/usr.sbin/nscd/protocol.h 158115 2006-04-28 12:03:38Z ume $ 27158115Sume */ 28158115Sume 29158115Sume#ifndef __CACHED_PROTOCOL_H__ 30158115Sume#define __CACHED_PROTOCOL_H__ 31158115Sume 32158115Sume#include <stdlib.h> 33158115Sume 34158115Sume/* maximum buffer size to receive - larger buffers are not allowed */ 35158115Sume#define MAX_BUFFER_SIZE (1 << 20) 36158115Sume 37158115Sume/* buffer size correctness checking routine */ 38158115Sume#define BUFSIZE_CORRECT(x) (((x) > 0) && ((x) < MAX_BUFFER_SIZE)) 39158115Sume#define BUFSIZE_INVALID(x) (!BUFSIZE_CORRECT(x)) 40158115Sume 41158115Sume/* structures below represent the data that are sent/received by the daemon */ 42158115Sumestruct cache_write_request 43158115Sume{ 44158115Sume char *entry; 45158115Sume char *cache_key; 46158115Sume char *data; 47158115Sume 48158115Sume size_t entry_length; 49158115Sume size_t cache_key_size; 50158115Sume size_t data_size; 51158115Sume}; 52158115Sume 53158115Sumestruct cache_write_response 54158115Sume{ 55158115Sume int error_code; 56158115Sume}; 57158115Sume 58158115Sumestruct cache_read_request 59158115Sume{ 60158115Sume char *entry; 61158115Sume char *cache_key; 62158115Sume 63158115Sume size_t entry_length; 64158115Sume size_t cache_key_size; 65158115Sume}; 66158115Sume 67158115Sumestruct cache_read_response 68158115Sume{ 69158115Sume char *data; // ignored if error_code is not 0 70158115Sume size_t data_size; // ignored if error_code is not 0 71158115Sume 72158115Sume int error_code; 73158115Sume}; 74158115Sume 75158115Sumeenum transformation_type { 76158115Sume TT_USER = 0, // tranform only the entries of the caller 77158115Sume TT_ALL = 1 // transform all entries 78158115Sume}; 79158115Sume 80158115Sumestruct cache_transform_request 81158115Sume{ 82158115Sume char *entry; // ignored if entry_length is 0 83158115Sume size_t entry_length; 84158115Sume 85158115Sume int transformation_type; 86158115Sume}; 87158115Sume 88158115Sumestruct cache_transform_response 89158115Sume{ 90158115Sume int error_code; 91158115Sume}; 92158115Sume 93158115Sumestruct cache_mp_write_session_request { 94158115Sume char *entry; 95158115Sume size_t entry_length; 96158115Sume}; 97158115Sume 98158115Sumestruct cache_mp_write_session_response { 99158115Sume int error_code; 100158115Sume}; 101158115Sume 102158115Sumestruct cache_mp_write_session_write_request { 103158115Sume char *data; 104158115Sume size_t data_size; 105158115Sume}; 106158115Sume 107158115Sumestruct cache_mp_write_session_write_response { 108158115Sume int error_code; 109158115Sume}; 110158115Sume 111158115Sumestruct cache_mp_read_session_request { 112158115Sume char *entry; 113158115Sume size_t entry_length; 114158115Sume}; 115158115Sume 116158115Sumestruct cache_mp_read_session_response { 117158115Sume int error_code; 118158115Sume}; 119158115Sume 120158115Sumestruct cache_mp_read_session_read_response { 121158115Sume char *data; 122158115Sume size_t data_size; 123158115Sume 124158115Sume int error_code; 125158115Sume}; 126158115Sume 127158115Sume 128158115Sumeenum comm_element_t { 129158115Sume CET_UNDEFINED = 0, 130158115Sume CET_WRITE_REQUEST = 1, 131158115Sume CET_WRITE_RESPONSE = 2, 132158115Sume CET_READ_REQUEST = 3, 133158115Sume CET_READ_RESPONSE = 4, 134158115Sume CET_TRANSFORM_REQUEST = 5, 135158115Sume CET_TRANSFORM_RESPONSE = 6, 136158115Sume CET_MP_WRITE_SESSION_REQUEST = 7, 137158115Sume CET_MP_WRITE_SESSION_RESPONSE = 8, 138158115Sume CET_MP_WRITE_SESSION_WRITE_REQUEST = 9, 139158115Sume CET_MP_WRITE_SESSION_WRITE_RESPONSE = 10, 140158115Sume CET_MP_WRITE_SESSION_CLOSE_NOTIFICATION = 11, 141158115Sume CET_MP_WRITE_SESSION_ABANDON_NOTIFICATION = 12, 142158115Sume CET_MP_READ_SESSION_REQUEST = 13, 143158115Sume CET_MP_READ_SESSION_RESPONSE = 14, 144158115Sume CET_MP_READ_SESSION_READ_REQUEST = 15, 145158115Sume CET_MP_READ_SESSION_READ_RESPONSE = 16, 146158115Sume CET_MP_READ_SESSION_CLOSE_NOTIFICATION = 17, 147158115Sume CET_MAX = 18 148158115Sume}; 149158115Sume 150158115Sume/* 151158115Sume * The comm_element is used as the holder of any known (defined above) data 152158115Sume * type that is to be sent/received. 153158115Sume */ 154158115Sumestruct comm_element 155158115Sume{ 156158115Sume union { 157158115Sume struct cache_write_request c_write_request; 158158115Sume struct cache_write_response c_write_response; 159158115Sume struct cache_read_request c_read_request; 160158115Sume struct cache_read_response c_read_response; 161158115Sume struct cache_transform_request c_transform_request; 162158115Sume struct cache_transform_response c_transform_response; 163158115Sume 164158115Sume struct cache_mp_write_session_request c_mp_ws_request; 165158115Sume struct cache_mp_write_session_response c_mp_ws_response; 166158115Sume struct cache_mp_write_session_write_request c_mp_ws_write_request; 167158115Sume struct cache_mp_write_session_write_response c_mp_ws_write_response; 168158115Sume 169158115Sume struct cache_mp_read_session_request c_mp_rs_request; 170158115Sume struct cache_mp_read_session_response c_mp_rs_response; 171158115Sume struct cache_mp_read_session_read_response c_mp_rs_read_response; 172158115Sume }; 173158115Sume enum comm_element_t type; 174158115Sume}; 175158115Sume 176158115Sumeextern void init_comm_element(struct comm_element *, enum comm_element_t type); 177158115Sumeextern void finalize_comm_element(struct comm_element *); 178158115Sume 179158115Sume/* 180158115Sume * For each type of data, there is three functions (init/finalize/get), that 181158115Sume * used with comm_element structure 182158115Sume */ 183158115Sumeextern void init_cache_write_request(struct cache_write_request *); 184158115Sumeextern void finalize_cache_write_request(struct cache_write_request *); 185158115Sumeextern struct cache_write_request *get_cache_write_request( 186158115Sume struct comm_element *); 187158115Sume 188158115Sumeextern void init_cache_write_response(struct cache_write_response *); 189158115Sumeextern void finalize_cache_write_response(struct cache_write_response *); 190158115Sumeextern struct cache_write_response *get_cache_write_response( 191158115Sume struct comm_element *); 192158115Sume 193158115Sumeextern void init_cache_read_request(struct cache_read_request *); 194158115Sumeextern void finalize_cache_read_request(struct cache_read_request *); 195158115Sumeextern struct cache_read_request *get_cache_read_request( 196158115Sume struct comm_element *); 197158115Sume 198158115Sumeextern void init_cache_read_response(struct cache_read_response *); 199158115Sumeextern void finalize_cache_read_response(struct cache_read_response *); 200158115Sumeextern struct cache_read_response *get_cache_read_response( 201158115Sume struct comm_element *); 202158115Sume 203158115Sumeextern void init_cache_transform_request(struct cache_transform_request *); 204158115Sumeextern void finalize_cache_transform_request(struct cache_transform_request *); 205158115Sumeextern struct cache_transform_request *get_cache_transform_request( 206158115Sume struct comm_element *); 207158115Sume 208158115Sumeextern void init_cache_transform_response(struct cache_transform_response *); 209158115Sumeextern void finalize_cache_transform_response( 210158115Sume struct cache_transform_response *); 211158115Sumeextern struct cache_transform_response *get_cache_transform_response( 212158115Sume struct comm_element *); 213158115Sume 214158115Sumeextern void init_cache_mp_write_session_request( 215158115Sume struct cache_mp_write_session_request *); 216158115Sumeextern void finalize_cache_mp_write_session_request( 217158115Sume struct cache_mp_write_session_request *); 218158115Sumeextern struct cache_mp_write_session_request * 219158115Sume get_cache_mp_write_session_request( 220158115Sume struct comm_element *); 221158115Sume 222158115Sumeextern void init_cache_mp_write_session_response( 223158115Sume struct cache_mp_write_session_response *); 224158115Sumeextern void finalize_cache_mp_write_session_response( 225158115Sume struct cache_mp_write_session_response *); 226158115Sumeextern struct cache_mp_write_session_response * 227158115Sume get_cache_mp_write_session_response(struct comm_element *); 228158115Sume 229158115Sumeextern void init_cache_mp_write_session_write_request( 230158115Sume struct cache_mp_write_session_write_request *); 231158115Sumeextern void finalize_cache_mp_write_session_write_request( 232158115Sume struct cache_mp_write_session_write_request *); 233158115Sumeextern struct cache_mp_write_session_write_request * 234158115Sume get_cache_mp_write_session_write_request(struct comm_element *); 235158115Sume 236158115Sumeextern void init_cache_mp_write_session_write_response( 237158115Sume struct cache_mp_write_session_write_response *); 238158115Sumeextern void finalize_cache_mp_write_session_write_response( 239158115Sume struct cache_mp_write_session_write_response *); 240158115Sumeextern struct cache_mp_write_session_write_response * 241158115Sume get_cache_mp_write_session_write_response(struct comm_element *); 242158115Sume 243158115Sumeextern void init_cache_mp_read_session_request( 244158115Sume struct cache_mp_read_session_request *); 245158115Sumeextern void finalize_cache_mp_read_session_request( 246158115Sume struct cache_mp_read_session_request *); 247158115Sumeextern struct cache_mp_read_session_request *get_cache_mp_read_session_request( 248158115Sume struct comm_element *); 249158115Sume 250158115Sumeextern void init_cache_mp_read_session_response( 251158115Sume struct cache_mp_read_session_response *); 252158115Sumeextern void finalize_cache_mp_read_session_response( 253158115Sume struct cache_mp_read_session_response *); 254158115Sumeextern struct cache_mp_read_session_response * 255158115Sume get_cache_mp_read_session_response( 256158115Sume struct comm_element *); 257158115Sume 258158115Sumeextern void init_cache_mp_read_session_read_response( 259158115Sume struct cache_mp_read_session_read_response *); 260158115Sumeextern void finalize_cache_mp_read_session_read_response( 261158115Sume struct cache_mp_read_session_read_response *); 262158115Sumeextern struct cache_mp_read_session_read_response * 263158115Sume get_cache_mp_read_session_read_response(struct comm_element *); 264158115Sume 265158115Sume#endif 266