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