Annotation of embedaddon/dhcp/includes/omapip/omapip_p.h, revision 1.1
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__ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>