Remove building with NOCRYPTO option
[minix.git] / external / bsd / dhcp / dist / includes / omapip / omapip_p.h
bloba4e44e8b163121de79576dd451fc1a8e385b1926
1 /* $NetBSD: omapip_p.h,v 1.1.1.4 2014/07/12 11:57:57 spz Exp $ */
2 /* omapip_p.h
4 Private master include file for the OMAPI library. */
6 /*
7 * Copyright (c) 2009-2010,2014 by Internet Systems Consortium, Inc. ("ISC")
8 * Copyright (c) 2004,2007 by Internet Systems Consortium, Inc. ("ISC")
9 * Copyright (c) 1996-2003 by Internet Software Consortium
11 * Permission to use, copy, modify, and distribute this software for any
12 * purpose with or without fee is hereby granted, provided that the above
13 * copyright notice and this permission notice appear in all copies.
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.
23 * Internet Systems Consortium, Inc.
24 * 950 Charter Street
25 * Redwood City, CA 94063
26 * <info@isc.org>
27 * https://www.isc.org/
31 #ifndef __OMAPIP_OMAPIP_P_H__
32 #define __OMAPIP_OMAPIP_P_H__
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>
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>
57 * XXX: I'm not sure why these were here.
58 #include "cdefs.h"
59 #include "osdep.h"
62 #include <dst/dst.h>
63 #include "result.h"
65 #include <omapip/convert.h>
66 #include <omapip/hash.h>
67 #include <omapip/omapip.h>
68 #include <omapip/trace.h>
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)
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;
88 #define OMAPI_PROTOCOL_VERSION 100
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
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;
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;
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;
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;
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;
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. */
154 isc_boolean_t insecure; /* Set to allow unauthenticated
155 messages. */
157 isc_result_t (*verify_auth) (omapi_object_t *, omapi_auth_key_t *);
158 } omapi_protocol_object_t;
160 typedef struct {
161 OMAPI_OBJECT_PREAMBLE;
163 isc_boolean_t insecure; /* Set to allow unauthenticated
164 messages. */
166 isc_result_t (*verify_auth) (omapi_object_t *, omapi_auth_key_t *);
167 } omapi_protocol_listener_object_t;
169 #include <omapip/buffer.h>
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;
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;
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;
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;
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;
230 #define OMAPI_HANDLE_TABLE_SIZE 120
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;
242 #include <omapip/alloc.h>
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)
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);
280 isc_result_t omapi_handle_clear(omapi_handle_t);
282 extern int log_priority;
283 extern int log_perror;
284 extern void (*log_cleanup) (void);
286 void log_fatal (const char *, ...)
287 __attribute__((__format__(__printf__,1,2))) ISC_DHCP_NORETURN;
288 int log_error (const char *, ...)
289 __attribute__((__format__(__printf__,1,2)));
290 int log_info (const char *, ...)
291 __attribute__((__format__(__printf__,1,2)));
292 int log_debug (const char *, ...)
293 __attribute__((__format__(__printf__,1,2)));
294 void do_percentm (char *obuf, const char *ibuf);
296 isc_result_t uerr2isc (int);
297 isc_result_t ns_rcode_to_isc (int);
299 extern omapi_message_object_t *omapi_registered_messages;
301 #endif /* __OMAPIP_OMAPIP_P_H__ */