ISC DHCP  4.4.2b1
A reference DHCPv4 and DHCPv6 implementation
support.c
Go to the documentation of this file.
1 /* support.c
2 
3  Subroutines providing general support for objects. */
4 
5 /*
6  * Copyright (c) 2004-2017 by Internet Systems Consortium, Inc. ("ISC")
7  * Copyright (c) 1999-2003 by Internet Software Consortium
8  *
9  * This Source Code Form is subject to the terms of the Mozilla Public
10  * License, v. 2.0. If a copy of the MPL was not distributed with this
11  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
12  *
13  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
14  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
16  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
19  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20  *
21  * Internet Systems Consortium, Inc.
22  * 950 Charter Street
23  * Redwood City, CA 94063
24  * <info@isc.org>
25  * https://www.isc.org/
26  *
27  */
28 
29 #include "dhcpd.h"
30 
31 #include <omapip/omapip_p.h>
32 
44 
47 
48 #if defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
50 {
51  omapi_object_type_t *t, *n;
52 
53  for (t = omapi_object_types; t; t = n) {
54  n = t -> next;
55  dfree (t, MDL);
56  }
58 }
59 #endif
60 
61 isc_result_t omapi_init (void)
62 {
63  isc_result_t status;
64 
65  /* Register all the standard object types... */
67  "connection",
73  0, 0, 0, 0, 0, 0,
74  sizeof
76  RC_MISC);
77  if (status != ISC_R_SUCCESS)
78  return status;
79 
81  "listener",
87  0, 0, 0, 0, 0, 0,
88  sizeof (omapi_listener_object_t),
89  0, RC_MISC);
90  if (status != ISC_R_SUCCESS)
91  return status;
92 
94  "io",
100  0, 0, 0, 0, 0, 0,
101  sizeof (omapi_io_object_t),
102  0, RC_MISC);
103  if (status != ISC_R_SUCCESS)
104  return status;
105 
107  "generic",
113  0, 0, 0, 0, 0, 0,
114  sizeof (omapi_generic_object_t),
115  0, RC_MISC);
116  if (status != ISC_R_SUCCESS)
117  return status;
118 
120  "protocol",
126  0, 0, 0, 0, 0, 0,
127  sizeof (omapi_protocol_object_t),
128  0, RC_MISC);
129  if (status != ISC_R_SUCCESS)
130  return status;
131 
133  (&omapi_type_protocol_listener, "protocol-listener",
139  0, 0, 0, 0, 0, 0,
141  if (status != ISC_R_SUCCESS)
142  return status;
143 
145  "message",
151  0, 0, 0, 0, 0, 0,
152  sizeof (omapi_message_object_t),
153  0, RC_MISC);
154  if (status != ISC_R_SUCCESS)
155  return status;
156 
158  "waiter",
159  0,
160  0,
161  0,
163  0, 0, 0, 0, 0, 0,
164  sizeof (omapi_waiter_object_t),
165  0, RC_MISC);
166  if (status != ISC_R_SUCCESS)
167  return status;
168 
170  "authenticator",
171  0,
174  0,
177  0, 0, 0, 0, 0,
178  sizeof (omapi_auth_key_t), 0,
179  RC_MISC);
180  if (status != ISC_R_SUCCESS)
181  return status;
182 
183 #if defined (TRACING)
187 #endif
188 
189  /* This seems silly, but leave it. */
190  return ISC_R_SUCCESS;
191 }
192 
194  const char *name,
195  isc_result_t (*set_value)
196  (omapi_object_t *,
197  omapi_object_t *,
200  isc_result_t (*get_value)
201  (omapi_object_t *,
202  omapi_object_t *,
204  omapi_value_t **),
205  isc_result_t (*destroy)
206  (omapi_object_t *,
207  const char *, int),
208  isc_result_t (*signal_handler)
209  (omapi_object_t *,
210  const char *, va_list),
211  isc_result_t (*stuff_values)
212  (omapi_object_t *,
213  omapi_object_t *,
214  omapi_object_t *),
215  isc_result_t (*lookup)
216  (omapi_object_t **,
217  omapi_object_t *,
218  omapi_object_t *),
219  isc_result_t (*create)
220  (omapi_object_t **,
221  omapi_object_t *),
222  isc_result_t (*remove)
223  (omapi_object_t *,
224  omapi_object_t *),
225  isc_result_t (*freer)
226  (omapi_object_t *,
227  const char *, int),
228  isc_result_t (*allocator)
229  (omapi_object_t **,
230  const char *, int),
231  isc_result_t (*sizer) (size_t),
232  size_t size,
233  isc_result_t (*initialize)
234  (omapi_object_t *,
235  const char *, int),
236  int rc_flag)
237 {
239 
240  t = dmalloc (sizeof *t, MDL);
241  if (!t)
242  return ISC_R_NOMEMORY;
243  memset (t, 0, sizeof *t);
244 
245  t -> name = name;
246  t -> set_value = set_value;
247  t -> get_value = get_value;
248  t -> destroy = destroy;
249  t -> signal_handler = signal_handler;
250  t -> stuff_values = stuff_values;
251  t -> lookup = lookup;
252  t -> create = create;
253  t -> remove = remove;
254  t -> next = omapi_object_types;
255  t -> sizer = sizer;
256  t -> size = size;
257  t -> freer = freer;
258  t -> allocator = allocator;
259  t -> initialize = initialize;
260  t -> rc_flag = rc_flag;
261  omapi_object_types = t;
262  if (type)
263  *type = t;
264  return ISC_R_SUCCESS;
265 }
266 
267 isc_result_t omapi_signal (omapi_object_t *handle, const char *name, ...)
268 {
269  va_list ap;
270  omapi_object_t *outer;
271  isc_result_t status;
272 
273  va_start (ap, name);
274  for (outer = handle; outer -> outer; outer = outer -> outer)
275  ;
276  if (outer -> type -> signal_handler)
277  status = (*(outer -> type -> signal_handler)) (outer,
278  name, ap);
279  else
280  status = ISC_R_NOTFOUND;
281  va_end (ap);
282  return status;
283 }
284 
285 isc_result_t omapi_signal_in (omapi_object_t *handle, const char *name, ...)
286 {
287  va_list ap;
288  isc_result_t status;
289 
290  if (!handle)
291  return ISC_R_NOTFOUND;
292  va_start (ap, name);
293 
294  if (handle -> type -> signal_handler)
295  status = (*(handle -> type -> signal_handler)) (handle,
296  name, ap);
297  else
298  status = ISC_R_NOTFOUND;
299  va_end (ap);
300  return status;
301 }
302 
304  omapi_object_t *id,
305  omapi_data_string_t *name,
307 {
308  omapi_object_t *outer;
309  isc_result_t status;
310 
311 #if defined (DEBUG)
312  if (!value) {
313  log_info ("omapi_set_value (%.*s, NULL)",
314  (int)name -> len, name -> value);
315  } else if (value -> type == omapi_datatype_int) {
316  log_info ("omapi_set_value (%.*s, %ld)",
317  (int)name -> len, name -> value,
318  (long)value -> u.integer);
319  } else if (value -> type == omapi_datatype_string) {
320  log_info ("omapi_set_value (%.*s, %.*s)",
321  (int)name -> len, name -> value,
322  (int)value -> u.buffer.len, value -> u.buffer.value);
323  } else if (value -> type == omapi_datatype_data) {
324  log_info ("omapi_set_value (%.*s, %ld %lx)",
325  (int)name -> len, name -> value,
326  (long)value -> u.buffer.len,
327  (unsigned long)value -> u.buffer.value);
328  } else if (value -> type == omapi_datatype_object) {
329  log_info ("omapi_set_value (%.*s, %s)",
330  (int)name -> len, name -> value,
331  value -> u.object
332  ? (value -> u.object -> type
333  ? value -> u.object -> type -> name
334  : "(unknown object)")
335  : "(unknown object)");
336  }
337 #endif
338 
339  for (outer = h; outer -> outer; outer = outer -> outer)
340  ;
341  if (outer -> type -> set_value)
342  status = (*(outer -> type -> set_value)) (outer,
343  id, name, value);
344  else
345  status = ISC_R_NOTFOUND;
346 #if defined (DEBUG)
347  log_info (" ==> %s", isc_result_totext (status));
348 #endif
349  return status;
350 }
351 
353  omapi_object_t *id,
354  const char *name,
356 {
357  omapi_data_string_t *nds;
358  isc_result_t status;
359 
360  nds = (omapi_data_string_t *)0;
361  status = omapi_data_string_new (&nds, strlen (name), MDL);
362  if (status != ISC_R_SUCCESS)
363  return status;
364  memcpy (nds -> value, name, strlen (name));
365 
366  status = omapi_set_value (h, id, nds, value);
368  return status;
369 }
370 
372  const char *name, int value)
373 {
374  isc_result_t status;
377 
378  status = omapi_data_string_new (&n, strlen (name), MDL);
379  if (status != ISC_R_SUCCESS)
380  return status;
381  memcpy (n -> value, name, strlen (name));
382 
384  if (status != ISC_R_SUCCESS) {
386  return status;
387  }
388 
389  status = omapi_set_value (h, id, n, tv);
392  return status;
393 }
394 
396  const char *name, int value)
397 {
398  isc_result_t status;
401 
402  status = omapi_data_string_new (&n, strlen (name), MDL);
403  if (status != ISC_R_SUCCESS)
404  return status;
405  memcpy (n -> value, name, strlen (name));
406 
408  if (status != ISC_R_SUCCESS) {
410  return status;
411  }
412 
413  status = omapi_set_value (h, id, n, tv);
416  return status;
417 }
418 
420  const char *name, omapi_object_t *value)
421 {
422  isc_result_t status;
425 
426  status = omapi_data_string_new (&n, strlen (name), MDL);
427  if (status != ISC_R_SUCCESS)
428  return status;
429  memcpy (n -> value, name, strlen (name));
430 
432  if (status != ISC_R_SUCCESS) {
434  return status;
435  }
436 
437  status = omapi_set_value (h, id, n, tv);
440  return status;
441 }
442 
444  const char *name, const char *value)
445 {
446  isc_result_t status;
449 
450  status = omapi_data_string_new (&n, strlen (name), MDL);
451  if (status != ISC_R_SUCCESS)
452  return status;
453  memcpy (n -> value, name, strlen (name));
454 
456  if (status != ISC_R_SUCCESS) {
458  return status;
459  }
460 
461  status = omapi_set_value (h, id, n, tv);
464  return status;
465 }
466 
468  omapi_object_t *id,
469  omapi_data_string_t *name,
471 {
472  omapi_object_t *outer;
473 
474  for (outer = h; outer -> outer; outer = outer -> outer)
475  ;
476  if (outer -> type -> get_value)
477  return (*(outer -> type -> get_value)) (outer,
478  id, name, value);
479  return ISC_R_NOTFOUND;
480 }
481 
483  omapi_object_t *id,
484  const char *name,
486 {
487  omapi_object_t *outer;
488  omapi_data_string_t *nds;
489  isc_result_t status;
490 
491  nds = (omapi_data_string_t *)0;
492  status = omapi_data_string_new (&nds, strlen (name), MDL);
493  if (status != ISC_R_SUCCESS)
494  return status;
495  memcpy (nds -> value, name, strlen (name));
496 
497  for (outer = h; outer -> outer; outer = outer -> outer)
498  ;
499  if (outer -> type -> get_value)
500  status = (*(outer -> type -> get_value)) (outer,
501  id, nds, value);
502  else
503  status = ISC_R_NOTFOUND;
505  return status;
506 }
507 
509  omapi_object_t *id,
510  omapi_object_t *o)
511 {
512  omapi_object_t *outer;
513 
514  for (outer = o; outer -> outer; outer = outer -> outer)
515  ;
516  if (outer -> type -> stuff_values)
517  return (*(outer -> type -> stuff_values)) (c, id, outer);
518  return ISC_R_NOTFOUND;
519 }
520 
522  omapi_object_type_t *type)
523 {
524  if (!type -> create)
525  return ISC_R_NOTIMPLEMENTED;
526  return (*(type -> create)) (obj, id);
527 }
528 
531 {
533  isc_result_t status;
534  int i;
535 
536  if (!src)
537  return DHCP_R_INVALIDARG;
538  if (src -> type != omapi_type_generic)
539  return ISC_R_NOTIMPLEMENTED;
540  gsrc = (omapi_generic_object_t *)src;
541  for (i = 0; i < gsrc -> nvalues; i++) {
542  status = omapi_set_value (obj, id,
543  gsrc -> values [i] -> name,
544  gsrc -> values [i] -> value);
545  if (status != ISC_R_SUCCESS && status != DHCP_R_UNCHANGED)
546  return status;
547  }
548 
549  /*
550  * For now ignore the return value. I'm not sure if we want to
551  * generate an error if we can't set the handle value. If we
552  * do add a check we probably should allow unchanged and notfound
553  */
554  if (handle)
555  (void) omapi_set_int_value (obj, id, "remote-handle", (int)handle);
556  status = omapi_signal (obj, "updated");
557  if (status != ISC_R_NOTFOUND)
558  return status;
559  return ISC_R_SUCCESS;
560 }
561 
563 {
564  unsigned len;
565  int rv;
566 
567  if (s1 -> len > s2 -> len)
568  len = s2 -> len;
569  else
570  len = s1 -> len;
571  rv = memcmp (s1 -> value, s2 -> value, len);
572  if (rv)
573  return rv;
574  if (s1 -> len > s2 -> len)
575  return 1;
576  else if (s1 -> len < s2 -> len)
577  return -1;
578  return 0;
579 }
580 
581 int omapi_ds_strcmp (omapi_data_string_t *s1, const char *s2)
582 {
583  unsigned len, slen;
584  int rv;
585 
586  slen = strlen (s2);
587  if (slen > s1 -> len)
588  len = s1 -> len;
589  else
590  len = slen;
591  rv = memcmp (s1 -> value, s2, len);
592  if (rv)
593  return rv;
594  if (s1 -> len > slen)
595  return 1;
596  else if (s1 -> len < slen)
597  return -1;
598  return 0;
599 }
600 
601 int omapi_td_strcmp (omapi_typed_data_t *s1, const char *s2)
602 {
603  unsigned len, slen;
604  int rv;
605 
606  /* If the data type is not compatible, never equal. */
607  if (s1 -> type != omapi_datatype_data &&
608  s1 -> type != omapi_datatype_string)
609  return -1;
610 
611  slen = strlen (s2);
612  if (slen > s1 -> u.buffer.len)
613  len = s1 -> u.buffer.len;
614  else
615  len = slen;
616  rv = memcmp (s1 -> u.buffer.value, s2, len);
617  if (rv)
618  return rv;
619  if (s1 -> u.buffer.len > slen)
620  return 1;
621  else if (s1 -> u.buffer.len < slen)
622  return -1;
623  return 0;
624 }
625 
626 int omapi_td_strcasecmp (omapi_typed_data_t *s1, const char *s2)
627 {
628  unsigned len, slen;
629  int rv;
630 
631  /* If the data type is not compatible, never equal. */
632  if (s1 -> type != omapi_datatype_data &&
633  s1 -> type != omapi_datatype_string)
634  return -1;
635 
636  slen = strlen (s2);
637  if (slen > s1 -> u.buffer.len)
638  len = s1 -> u.buffer.len;
639  else
640  len = slen;
641  rv = casecmp (s1 -> u.buffer.value, s2, len);
642  if (rv)
643  return rv;
644  if (s1 -> u.buffer.len > slen)
645  return 1;
646  else if (s1 -> u.buffer.len < slen)
647  return -1;
648  return 0;
649 }
650 
651 isc_result_t omapi_make_value (omapi_value_t **vp,
652  omapi_data_string_t *name,
654  const char *file, int line)
655 {
656  isc_result_t status;
657 
658  status = omapi_value_new (vp, file, line);
659  if (status != ISC_R_SUCCESS)
660  return status;
661 
662  status = omapi_data_string_reference (&(*vp) -> name,
663  name, file, line);
664  if (status != ISC_R_SUCCESS) {
666  return status;
667  }
668  if (value) {
669  status = omapi_typed_data_reference (&(*vp) -> value,
670  value, file, line);
671  if (status != ISC_R_SUCCESS) {
673  return status;
674  }
675  }
676  return ISC_R_SUCCESS;
677 }
678 
680  omapi_data_string_t *name,
681  const unsigned char *value,
682  unsigned len,
683  const char *file, int line)
684 {
685  isc_result_t status;
686 
687  status = omapi_value_new (vp, file, line);
688  if (status != ISC_R_SUCCESS)
689  return status;
690 
691  status = omapi_data_string_reference (&(*vp) -> name,
692  name, file, line);
693  if (status != ISC_R_SUCCESS) {
695  return status;
696  }
697  if (value) {
698  status = omapi_typed_data_new (file, line, &(*vp) -> value,
699  omapi_datatype_data, len);
700  if (status != ISC_R_SUCCESS) {
702  return status;
703  }
704  memcpy ((*vp) -> value -> u.buffer.value, value, len);
705  }
706  return ISC_R_SUCCESS;
707 }
708 
710  omapi_data_string_t *name,
711  int value, const char *file, int line)
712 {
713  isc_result_t status;
714 
715  status = omapi_value_new (vp, file, line);
716  if (status != ISC_R_SUCCESS)
717  return status;
718 
719  status = omapi_data_string_reference (&(*vp) -> name,
720  name, file, line);
721  if (status != ISC_R_SUCCESS) {
723  return status;
724  }
725  status = omapi_typed_data_new (file, line, &(*vp) -> value,
727  if (status != ISC_R_SUCCESS) {
729  return status;
730  }
731  return ISC_R_SUCCESS;
732 }
733 
735  omapi_data_string_t *name,
736  unsigned int value,
737  const char *file, int line)
738 {
739  return omapi_make_int_value (vp, name, (int)value, file, line);
740 }
741 
743  omapi_data_string_t *name,
745  const char *file, int line)
746 {
747  isc_result_t status;
748 
749  status = omapi_value_new (vp, file, line);
750  if (status != ISC_R_SUCCESS)
751  return status;
752 
753  status = omapi_data_string_reference (&(*vp) -> name,
754  name, file, line);
755  if (status != ISC_R_SUCCESS) {
757  return status;
758  }
759 
760  if (value) {
761  status = omapi_typed_data_new (file, line, &(*vp) -> value,
763  if (status != ISC_R_SUCCESS) {
765  return status;
766  }
767  }
768 
769  return ISC_R_SUCCESS;
770 }
771 
773  omapi_data_string_t *name,
775  const char *file, int line)
776 {
777  isc_result_t status;
778 
779  status = omapi_value_new (vp, file, line);
780  if (status != ISC_R_SUCCESS)
781  return status;
782 
783  status = omapi_data_string_reference (&(*vp) -> name,
784  name, file, line);
785  if (status != ISC_R_SUCCESS) {
787  return status;
788  }
789  if (value) {
790  status = omapi_typed_data_new (file, line, &(*vp) -> value,
792  if (status != ISC_R_SUCCESS) {
794  return status;
795  }
796  status = (omapi_object_handle
797  ((omapi_handle_t *)&(*vp) -> value -> u.integer,
798  value));
799  if (status != ISC_R_SUCCESS) {
801  return status;
802  }
803  }
804  return ISC_R_SUCCESS;
805 }
806 
808  omapi_data_string_t *name,
809  const char *value,
810  const char *file, int line)
811 {
812  isc_result_t status;
813 
814  status = omapi_value_new (vp, file, line);
815  if (status != ISC_R_SUCCESS)
816  return status;
817 
818  status = omapi_data_string_reference (&(*vp) -> name,
819  name, file, line);
820  if (status != ISC_R_SUCCESS) {
822  return status;
823  }
824  if (value) {
825  status = omapi_typed_data_new (file, line, &(*vp) -> value,
827  if (status != ISC_R_SUCCESS) {
829  return status;
830  }
831  }
832  return ISC_R_SUCCESS;
833 }
834 
835 isc_result_t omapi_get_int_value (unsigned long *v, omapi_typed_data_t *t)
836 {
837  u_int32_t rv;
838 
839  if (t -> type == omapi_datatype_int) {
840  *v = t -> u.integer;
841  return ISC_R_SUCCESS;
842  } else if (t -> type == omapi_datatype_string ||
843  t -> type == omapi_datatype_data) {
844  if (t -> u.buffer.len != sizeof (rv))
845  return DHCP_R_INVALIDARG;
846  memcpy (&rv, t -> u.buffer.value, sizeof rv);
847  *v = ntohl (rv);
848  return ISC_R_SUCCESS;
849  }
850  return DHCP_R_INVALIDARG;
851 }
#define RC_MISC
Definition: alloc.h:56
struct element * create(void)
Definition: data.c:432
const char int line
Definition: dhcpd.h:3793
const char * file
Definition: dhcpd.h:3793
int casecmp(const void *s, const void *t, size_t len)
Definition: hash.c:534
#define ISC_R_NOTIMPLEMENTED
#define ISC_R_SUCCESS
isc_result_t omapi_value_dereference(omapi_value_t **, const char *, int)
Definition: alloc.c:1060
#define MDL
Definition: omapip.h:567
isc_result_t omapi_connection_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: connection.c:891
isc_result_t omapi_generic_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: generic.c:243
isc_result_t omapi_message_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: message.c:254
isc_result_t omapi_typed_data_reference(omapi_typed_data_t **, omapi_typed_data_t *, const char *, int)
Definition: alloc.c:880
isc_result_t omapi_message_destroy(omapi_object_t *, const char *, int)
Definition: message.c:205
isc_result_t omapi_message_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: message.c:165
isc_result_t omapi_data_string_new(omapi_data_string_t **, unsigned, const char *, int)
Definition: alloc.c:950
isc_result_t omapi_protocol_destroy(omapi_object_t *, const char *, int)
Definition: protocol.c:909
isc_result_t omapi_io_destroy(omapi_object_t *, const char *, int)
Definition: dispatch.c:805
isc_result_t omapi_auth_key_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: auth.c:192
isc_result_t omapi_object_handle(omapi_handle_t *, omapi_object_t *)
Definition: handle.c:72
isc_result_t omapi_protocol_listener_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: protocol.c:1088
isc_result_t omapi_connection_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: connection.c:960
isc_result_t omapi_listener_signal_handler(omapi_object_t *, const char *, va_list)
Definition: listener.c:461
isc_result_t omapi_io_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: dispatch.c:769
isc_result_t omapi_listener_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: listener.c:413
isc_result_t omapi_connection_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: connection.c:1074
isc_result_t omapi_auth_key_lookup(omapi_object_t **, omapi_object_t *, omapi_object_t *)
Definition: auth.c:131
isc_result_t omapi_generic_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: generic.c:168
isc_result_t omapi_protocol_listener_destroy(omapi_object_t *, const char *, int)
Definition: protocol.c:1116
@ omapi_datatype_string
Definition: omapip.h:43
@ omapi_datatype_object
Definition: omapip.h:45
@ omapi_datatype_int
Definition: omapip.h:42
@ omapi_datatype_data
Definition: omapip.h:44
isc_result_t omapi_typed_data_dereference(omapi_typed_data_t **, const char *, int)
Definition: alloc.c:901
isc_result_t omapi_protocol_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: protocol.c:884
isc_result_t omapi_connection_destroy(omapi_object_t *, const char *, int)
Definition: connection.c:1034
isc_result_t omapi_protocol_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: protocol.c:846
isc_result_t omapi_connection_signal_handler(omapi_object_t *, const char *, va_list)
Definition: connection.c:1055
void * dmalloc(size_t, const char *, int)
Definition: alloc.c:57
isc_result_t omapi_data_string_dereference(omapi_data_string_t **, const char *, int)
Definition: alloc.c:988
isc_result_t omapi_protocol_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: protocol.c:937
isc_result_t omapi_io_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: dispatch.c:849
isc_result_t omapi_io_signal_handler(omapi_object_t *, const char *, va_list)
Definition: dispatch.c:837
isc_result_t omapi_listener_stuff_values(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: listener.c:476
unsigned int omapi_handle_t
Definition: omapip.h:36
isc_result_t omapi_io_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: dispatch.c:783
void omapi_type_relinquish(void)
isc_result_t omapi_typed_data_new(const char *, int, omapi_typed_data_t **, omapi_datatype_t,...)
Definition: alloc.c:803
isc_result_t omapi_protocol_listener_stuff(omapi_object_t *, omapi_object_t *, omapi_object_t *)
Definition: protocol.c:1127
isc_result_t omapi_protocol_signal_handler(omapi_object_t *, const char *, va_list)
Definition: protocol.c:343
isc_result_t omapi_message_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: message.c:79
isc_result_t omapi_generic_set_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *)
Definition: generic.c:44
isc_result_t omapi_generic_destroy(omapi_object_t *, const char *, int)
Definition: generic.c:202
isc_result_t omapi_data_string_reference(omapi_data_string_t **, omapi_data_string_t *, const char *, int)
Definition: alloc.c:967
isc_result_t omapi_protocol_listener_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: protocol.c:1102
void dfree(void *, const char *, int)
Definition: alloc.c:145
isc_result_t omapi_auth_key_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: auth.c:224
isc_result_t omapi_generic_signal_handler(omapi_object_t *, const char *, va_list)
Definition: generic.c:228
isc_result_t omapi_message_signal_handler(omapi_object_t *, const char *, va_list)
Definition: message.c:228
isc_result_t omapi_auth_key_destroy(omapi_object_t *, const char *, int)
Definition: auth.c:49
isc_result_t omapi_listener_get_value(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **)
Definition: listener.c:427
isc_result_t omapi_waiter_signal_handler(omapi_object_t *, const char *, va_list)
Definition: dispatch.c:862
isc_result_t omapi_listener_destroy(omapi_object_t *, const char *, int)
Definition: listener.c:441
isc_result_t omapi_protocol_listener_signal(omapi_object_t *, const char *, va_list)
Definition: protocol.c:1032
isc_result_t omapi_value_new(omapi_value_t **, const char *, int)
Definition: alloc.c:1026
void omapi_buffer_trace_setup(void)
void omapi_connection_trace_setup(void)
void omapi_listener_trace_setup(void)
int int log_info(const char *,...) __attribute__((__format__(__printf__
#define DHCP_R_UNCHANGED
Definition: result.h:51
#define DHCP_R_INVALIDARG
Definition: result.h:49
Definition: data.h:289
struct omapi_typed_data_t::@3::@4 buffer
isc_result_t omapi_make_object_value(omapi_value_t **vp, omapi_data_string_t *name, omapi_object_t *value, const char *file, int line)
Definition: support.c:742
isc_result_t omapi_get_value(omapi_object_t *h, omapi_object_t *id, omapi_data_string_t *name, omapi_value_t **value)
Definition: support.c:467
isc_result_t omapi_signal_in(omapi_object_t *handle, const char *name,...)
Definition: support.c:285
omapi_object_type_t * omapi_type_io_object
Definition: support.c:35
isc_result_t omapi_set_value_str(omapi_object_t *h, omapi_object_t *id, const char *name, omapi_typed_data_t *value)
Definition: support.c:352
isc_result_t omapi_stuff_values(omapi_object_t *c, omapi_object_t *id, omapi_object_t *o)
Definition: support.c:508
isc_result_t omapi_set_boolean_value(omapi_object_t *h, omapi_object_t *id, const char *name, int value)
Definition: support.c:371
isc_result_t omapi_set_object_value(omapi_object_t *h, omapi_object_t *id, const char *name, omapi_object_t *value)
Definition: support.c:419
int omapi_td_strcmp(omapi_typed_data_t *s1, const char *s2)
Definition: support.c:601
isc_result_t omapi_make_string_value(omapi_value_t **vp, omapi_data_string_t *name, const char *value, const char *file, int line)
Definition: support.c:807
int omapi_data_string_cmp(omapi_data_string_t *s1, omapi_data_string_t *s2)
Definition: support.c:562
isc_result_t omapi_set_string_value(omapi_object_t *h, omapi_object_t *id, const char *name, const char *value)
Definition: support.c:443
isc_result_t omapi_object_update(omapi_object_t *obj, omapi_object_t *id, omapi_object_t *src, omapi_handle_t handle)
Definition: support.c:529
isc_result_t omapi_make_uint_value(omapi_value_t **vp, omapi_data_string_t *name, unsigned int value, const char *file, int line)
Definition: support.c:734
omapi_object_type_t * omapi_type_waiter
Definition: support.c:40
isc_result_t omapi_init(void)
Definition: support.c:61
omapi_object_type_t * omapi_type_auth_key
Definition: support.c:43
omapi_object_type_t * omapi_type_remote
Definition: support.c:41
int omapi_ds_strcmp(omapi_data_string_t *s1, const char *s2)
Definition: support.c:581
isc_result_t omapi_object_create(omapi_object_t **obj, omapi_object_t *id, omapi_object_type_t *type)
Definition: support.c:521
isc_result_t omapi_make_value(omapi_value_t **vp, omapi_data_string_t *name, omapi_typed_data_t *value, const char *file, int line)
Definition: support.c:651
omapi_object_type_t * omapi_type_generic
Definition: support.c:37
isc_result_t omapi_object_type_register(omapi_object_type_t **type, const char *name, isc_result_t(*set_value)(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_typed_data_t *), isc_result_t(*get_value)(omapi_object_t *, omapi_object_t *, omapi_data_string_t *, omapi_value_t **), isc_result_t(*destroy)(omapi_object_t *, const char *, int), isc_result_t(*signal_handler)(omapi_object_t *, const char *, va_list), isc_result_t(*stuff_values)(omapi_object_t *, omapi_object_t *, omapi_object_t *), isc_result_t(*lookup)(omapi_object_t **, omapi_object_t *, omapi_object_t *), isc_result_t(*create)(omapi_object_t **, omapi_object_t *), isc_result_t(*remove)(omapi_object_t *, omapi_object_t *), isc_result_t(*freer)(omapi_object_t *, const char *, int), isc_result_t(*allocator)(omapi_object_t **, const char *, int), isc_result_t(*sizer)(size_t), size_t size, isc_result_t(*initialize)(omapi_object_t *, const char *, int), int rc_flag)
Definition: support.c:193
isc_result_t omapi_get_value_str(omapi_object_t *h, omapi_object_t *id, const char *name, omapi_value_t **value)
Definition: support.c:482
isc_result_t omapi_set_value(omapi_object_t *h, omapi_object_t *id, omapi_data_string_t *name, omapi_typed_data_t *value)
Definition: support.c:303
omapi_object_type_t * omapi_type_protocol
Definition: support.c:38
isc_result_t omapi_make_const_value(omapi_value_t **vp, omapi_data_string_t *name, const unsigned char *value, unsigned len, const char *file, int line)
Definition: support.c:679
int omapi_td_strcasecmp(omapi_typed_data_t *s1, const char *s2)
Definition: support.c:626
isc_result_t omapi_set_int_value(omapi_object_t *h, omapi_object_t *id, const char *name, int value)
Definition: support.c:395
isc_result_t omapi_get_int_value(unsigned long *v, omapi_typed_data_t *t)
Definition: support.c:835
omapi_object_type_t * omapi_type_datagram
Definition: support.c:36
isc_result_t omapi_signal(omapi_object_t *handle, const char *name,...)
Definition: support.c:267
omapi_object_type_t * omapi_type_connection
Definition: support.c:33
int omapi_object_type_count
Definition: support.c:46
omapi_object_type_t * omapi_type_listener
Definition: support.c:34
omapi_object_type_t * omapi_type_protocol_listener
Definition: support.c:39
omapi_object_type_t * omapi_type_message
Definition: support.c:42
omapi_object_type_t * omapi_object_types
Definition: support.c:45
isc_result_t omapi_make_handle_value(omapi_value_t **vp, omapi_data_string_t *name, omapi_object_t *value, const char *file, int line)
Definition: support.c:772
isc_result_t omapi_make_int_value(omapi_value_t **vp, omapi_data_string_t *name, int value, const char *file, int line)
Definition: support.c:709
Definition: data.h:205