Return to omapip_p.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / dhcp / includes / omapip |
1.1 ! misho 1: /* omapip_p.h ! 2: ! 3: Private master include file for the OMAPI library. */ ! 4: ! 5: /* ! 6: * Copyright (c) 2009-2010 by Internet Systems Consortium, Inc. ("ISC") ! 7: * Copyright (c) 2004,2007 by Internet Systems Consortium, Inc. ("ISC") ! 8: * Copyright (c) 1996-2003 by Internet Software Consortium ! 9: * ! 10: * Permission to use, copy, modify, and distribute this software for any ! 11: * purpose with or without fee is hereby granted, provided that the above ! 12: * copyright notice and this permission notice appear in all copies. ! 13: * ! 14: * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES ! 15: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ! 16: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ! 17: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ! 18: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ! 19: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT ! 20: * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ! 21: * ! 22: * Internet Systems Consortium, Inc. ! 23: * 950 Charter Street ! 24: * Redwood City, CA 94063 ! 25: * <info@isc.org> ! 26: * https://www.isc.org/ ! 27: * ! 28: * This software has been written for Internet Systems Consortium ! 29: * by Ted Lemon in cooperation with Vixie Enterprises and Nominum, Inc. ! 30: * To learn more about Internet Systems Consortium, see ! 31: * ``https://www.isc.org/''. To learn more about Vixie Enterprises, ! 32: * see ``http://www.vix.com''. To learn more about Nominum, Inc., see ! 33: * ``http://www.nominum.com''. ! 34: */ ! 35: ! 36: #ifndef __OMAPIP_OMAPIP_P_H__ ! 37: #define __OMAPIP_OMAPIP_P_H__ ! 38: ! 39: #ifndef __CYGWIN32__ ! 40: #include <sys/types.h> ! 41: #include <netinet/in.h> ! 42: #include <sys/socket.h> ! 43: #include <sys/un.h> ! 44: #include <arpa/inet.h> ! 45: ! 46: #include <netdb.h> ! 47: #else ! 48: #define fd_set cygwin_fd_set ! 49: #include <sys/types.h> ! 50: #endif ! 51: #include <fcntl.h> ! 52: #include <stdio.h> ! 53: #include <unistd.h> ! 54: #include <string.h> ! 55: #include <memory.h> ! 56: #include <stdlib.h> ! 57: #include <sys/stat.h> ! 58: #include <ctype.h> ! 59: #include <time.h> ! 60: ! 61: /* ! 62: * XXX: I'm not sure why these were here. ! 63: #include "cdefs.h" ! 64: #include "osdep.h" ! 65: */ ! 66: ! 67: #include <isc-dhcp/dst.h> ! 68: #include <isc-dhcp/result.h> ! 69: ! 70: #include <omapip/convert.h> ! 71: #include <omapip/hash.h> ! 72: #include <omapip/omapip.h> ! 73: #include <omapip/trace.h> ! 74: ! 75: /* OMAPI protocol header, version 1.00 */ ! 76: typedef struct { ! 77: u_int32_t authlen; /* Length of authenticator. */ ! 78: u_int32_t authid; /* Authenticator object ID. */ ! 79: u_int32_t op; /* Opcode. */ ! 80: omapi_handle_t handle; /* Handle of object being operated on, ! 81: or zero. */ ! 82: u_int32_t id; /* Transaction ID. */ ! 83: u_int32_t rid; /* ID of transaction to which this is a response. */ ! 84: } omapi_protocol_header_t; ! 85: ! 86: #define OMAPI_PROTOCOL_VERSION 100 ! 87: ! 88: #define OMAPI_OP_OPEN 1 ! 89: #define OMAPI_OP_REFRESH 2 ! 90: #define OMAPI_OP_UPDATE 3 ! 91: #define OMAPI_OP_NOTIFY 4 ! 92: #define OMAPI_OP_STATUS 5 ! 93: #define OMAPI_OP_DELETE 6 ! 94: ! 95: typedef enum { ! 96: omapi_connection_unconnected, ! 97: omapi_connection_connecting, ! 98: omapi_connection_connected, ! 99: omapi_connection_disconnecting, ! 100: omapi_connection_closed ! 101: } omapi_connection_state_t; ! 102: ! 103: typedef enum { ! 104: omapi_protocol_intro_wait, ! 105: omapi_protocol_header_wait, ! 106: omapi_protocol_signature_wait, ! 107: omapi_protocol_name_wait, ! 108: omapi_protocol_name_length_wait, ! 109: omapi_protocol_value_wait, ! 110: omapi_protocol_value_length_wait ! 111: } omapi_protocol_state_t; ! 112: ! 113: typedef struct __omapi_message_object { ! 114: OMAPI_OBJECT_PREAMBLE; ! 115: struct __omapi_message_object *next, *prev; ! 116: omapi_object_t *object; ! 117: omapi_object_t *notify_object; ! 118: struct __omapi_protocol_object *protocol_object; ! 119: u_int32_t authlen; ! 120: omapi_typed_data_t *authenticator; ! 121: u_int32_t authid; ! 122: omapi_object_t *id_object; ! 123: u_int32_t op; ! 124: u_int32_t h; ! 125: u_int32_t id; ! 126: u_int32_t rid; ! 127: } omapi_message_object_t; ! 128: ! 129: typedef struct __omapi_remote_auth { ! 130: struct __omapi_remote_auth *next; ! 131: omapi_handle_t remote_handle; ! 132: omapi_object_t *a; ! 133: } omapi_remote_auth_t; ! 134: ! 135: typedef struct __omapi_protocol_object { ! 136: OMAPI_OBJECT_PREAMBLE; ! 137: u_int32_t header_size; ! 138: u_int32_t protocol_version; ! 139: u_int32_t next_xid; ! 140: ! 141: omapi_protocol_state_t state; /* Input state. */ ! 142: int reading_message_values; /* True if reading message-specific ! 143: values. */ ! 144: omapi_message_object_t *message; /* Incoming message. */ ! 145: omapi_data_string_t *name; /* Incoming name. */ ! 146: omapi_typed_data_t *value; /* Incoming value. */ ! 147: isc_result_t verify_result; ! 148: omapi_remote_auth_t *default_auth; /* Default authinfo to use. */ ! 149: omapi_remote_auth_t *remote_auth_list; /* Authenticators active on ! 150: this connection. */ ! 151: ! 152: isc_boolean_t insecure; /* Set to allow unauthenticated ! 153: messages. */ ! 154: ! 155: isc_result_t (*verify_auth) (omapi_object_t *, omapi_auth_key_t *); ! 156: } omapi_protocol_object_t; ! 157: ! 158: typedef struct { ! 159: OMAPI_OBJECT_PREAMBLE; ! 160: ! 161: isc_boolean_t insecure; /* Set to allow unauthenticated ! 162: messages. */ ! 163: ! 164: isc_result_t (*verify_auth) (omapi_object_t *, omapi_auth_key_t *); ! 165: } omapi_protocol_listener_object_t; ! 166: ! 167: #include <omapip/buffer.h> ! 168: ! 169: typedef struct __omapi_listener_object { ! 170: OMAPI_OBJECT_PREAMBLE; ! 171: int socket; /* Connection socket. */ ! 172: int index; ! 173: struct sockaddr_in address; ! 174: isc_result_t (*verify_addr) (omapi_object_t *, omapi_addr_t *); ! 175: } omapi_listener_object_t; ! 176: ! 177: typedef struct __omapi_connection_object { ! 178: OMAPI_OBJECT_PREAMBLE; ! 179: int socket; /* Connection socket. */ ! 180: int32_t index; ! 181: omapi_connection_state_t state; ! 182: struct sockaddr_in remote_addr; ! 183: struct sockaddr_in local_addr; ! 184: omapi_addr_list_t *connect_list; /* List of addresses to which ! 185: to connect. */ ! 186: int cptr; /* Current element we are connecting to. */ ! 187: u_int32_t bytes_needed; /* Bytes of input needed before wakeup. */ ! 188: u_int32_t in_bytes; /* Bytes of input already buffered. */ ! 189: omapi_buffer_t *inbufs; ! 190: u_int32_t out_bytes; /* Bytes of output in buffers. */ ! 191: omapi_buffer_t *outbufs; ! 192: omapi_listener_object_t *listener; /* Listener that accepted this ! 193: connection, if any. */ ! 194: DST_KEY *in_key; /* Authenticator signing incoming ! 195: data. */ ! 196: void *in_context; /* Input hash context. */ ! 197: DST_KEY *out_key; /* Authenticator signing outgoing ! 198: data. */ ! 199: void *out_context; /* Output hash context. */ ! 200: } omapi_connection_object_t; ! 201: ! 202: typedef struct __omapi_io_object { ! 203: OMAPI_OBJECT_PREAMBLE; ! 204: struct __omapi_io_object *next; ! 205: int (*readfd) (omapi_object_t *); ! 206: int (*writefd) (omapi_object_t *); ! 207: isc_result_t (*reader) (omapi_object_t *); ! 208: isc_result_t (*writer) (omapi_object_t *); ! 209: isc_result_t (*reaper) (omapi_object_t *); ! 210: } omapi_io_object_t; ! 211: ! 212: typedef struct __omapi_generic_object { ! 213: OMAPI_OBJECT_PREAMBLE; ! 214: omapi_value_t **values; ! 215: u_int8_t *changed; ! 216: int nvalues, va_max; ! 217: } omapi_generic_object_t; ! 218: ! 219: typedef struct __omapi_waiter_object { ! 220: OMAPI_OBJECT_PREAMBLE; ! 221: int ready; ! 222: isc_result_t waitstatus; ! 223: struct __omapi_waiter_object *next; ! 224: } omapi_waiter_object_t; ! 225: ! 226: #define OMAPI_HANDLE_TABLE_SIZE 120 ! 227: ! 228: typedef struct __omapi_handle_table { ! 229: omapi_handle_t first, limit; ! 230: omapi_handle_t next; ! 231: int leafp; ! 232: union { ! 233: omapi_object_t *object; ! 234: struct __omapi_handle_table *table; ! 235: } children [OMAPI_HANDLE_TABLE_SIZE]; ! 236: } omapi_handle_table_t; ! 237: ! 238: #include <omapip/alloc.h> ! 239: ! 240: OMAPI_OBJECT_ALLOC_DECL (omapi_protocol, omapi_protocol_object_t, ! 241: omapi_type_protocol) ! 242: OMAPI_OBJECT_ALLOC_DECL (omapi_protocol_listener, ! 243: omapi_protocol_listener_object_t, ! 244: omapi_type_protocol_listener) ! 245: OMAPI_OBJECT_ALLOC_DECL (omapi_connection, ! 246: omapi_connection_object_t, omapi_type_connection) ! 247: OMAPI_OBJECT_ALLOC_DECL (omapi_listener, ! 248: omapi_listener_object_t, omapi_type_listener) ! 249: OMAPI_OBJECT_ALLOC_DECL (omapi_io, ! 250: omapi_io_object_t, omapi_type_io_object) ! 251: OMAPI_OBJECT_ALLOC_DECL (omapi_waiter, ! 252: omapi_waiter_object_t, omapi_type_waiter) ! 253: OMAPI_OBJECT_ALLOC_DECL (omapi_generic, ! 254: omapi_generic_object_t, omapi_type_generic) ! 255: OMAPI_OBJECT_ALLOC_DECL (omapi_message, ! 256: omapi_message_object_t, omapi_type_message) ! 257: ! 258: isc_result_t omapi_connection_sign_data (int mode, ! 259: DST_KEY *key, ! 260: void **context, ! 261: const unsigned char *data, ! 262: const unsigned len, ! 263: omapi_typed_data_t **result); ! 264: isc_result_t omapi_listener_connect (omapi_connection_object_t **obj, ! 265: omapi_listener_object_t *listener, ! 266: int socket, ! 267: struct sockaddr_in *remote_addr); ! 268: void omapi_listener_trace_setup (void); ! 269: void omapi_connection_trace_setup (void); ! 270: void omapi_buffer_trace_setup (void); ! 271: void omapi_connection_register (omapi_connection_object_t *, ! 272: const char *, int); ! 273: void trace_mr_init (void); ! 274: ! 275: OMAPI_ARRAY_TYPE_DECL(omapi_listener, omapi_listener_object_t); ! 276: OMAPI_ARRAY_TYPE_DECL(omapi_connection, omapi_connection_object_t); ! 277: ! 278: isc_result_t omapi_handle_clear(omapi_handle_t); ! 279: ! 280: extern int log_priority; ! 281: extern int log_perror; ! 282: extern void (*log_cleanup) (void); ! 283: ! 284: void log_fatal (const char *, ...) ! 285: __attribute__((__format__(__printf__,1,2))); ! 286: int log_error (const char *, ...) ! 287: __attribute__((__format__(__printf__,1,2))); ! 288: int log_info (const char *, ...) ! 289: __attribute__((__format__(__printf__,1,2))); ! 290: int log_debug (const char *, ...) ! 291: __attribute__((__format__(__printf__,1,2))); ! 292: void do_percentm (char *obuf, const char *ibuf); ! 293: ! 294: isc_result_t uerr2isc (int); ! 295: isc_result_t ns_rcode_to_isc (int); ! 296: ! 297: extern omapi_message_object_t *omapi_registered_messages; ! 298: ! 299: #endif /* __OMAPIP_OMAPIP_P_H__ */