From: Ted Lemon Date: Thu, 9 Sep 1999 23:30:51 +0000 (+0000) Subject: Add delete method and notify_object. X-Git-Tag: V3-BETA-1-PATCH-2~5^2~85 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=47e746b7f98827be08d70e7993948af624ae68d5;p=thirdparty%2Fdhcp.git Add delete method and notify_object. --- diff --git a/includes/omapip/omapip.h b/includes/omapip/omapip.h index 03674a4ab..1425c5e92 100644 --- a/includes/omapip/omapip.h +++ b/includes/omapip/omapip.h @@ -135,6 +135,7 @@ typedef struct __omapi_object_type_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 (*delete) (omapi_object_t *, omapi_object_t *); } omapi_object_type_t; #define OMAPI_OBJECT_PREAMBLE \ @@ -156,6 +157,7 @@ struct __omapi_object { #define OMAPI_OP_UPDATE 3 #define OMAPI_OP_NOTIFY 4 #define OMAPI_OP_STATUS 5 +#define OMAPI_OP_DELETE 6 #include @@ -181,6 +183,7 @@ typedef struct __omapi_message_object { OMAPI_OBJECT_PREAMBLE; struct __omapi_message_object *next, *prev; omapi_object_t *object; + omapi_object_t *notify_object; int authlen; omapi_typed_data_t *authenticator; int authid; @@ -437,6 +440,8 @@ isc_result_t omapi_object_type_register (omapi_object_type_t **, omapi_object_t *, omapi_object_t *), isc_result_t (*) (omapi_object_t **, + omapi_object_t *), + isc_result_t (*) (omapi_object_t *, omapi_object_t *)); isc_result_t omapi_signal (omapi_object_t *, char *, ...); isc_result_t omapi_signal_in (omapi_object_t *, char *, ...); @@ -464,7 +469,7 @@ isc_result_t omapi_stuff_values (omapi_object_t *, isc_result_t omapi_object_create (omapi_object_t **, omapi_object_t *, omapi_object_type_t *); isc_result_t omapi_object_update (omapi_object_t *, omapi_object_t *, - omapi_object_t *); + omapi_object_t *, omapi_handle_t); int omapi_data_string_cmp (omapi_data_string_t *, omapi_data_string_t *); int omapi_ds_strcmp (omapi_data_string_t *, char *); int omapi_td_strcmp (omapi_typed_data_t *, char *); diff --git a/omapip/message.c b/omapip/message.c index 4ebeceb92..94489b67a 100644 --- a/omapip/message.c +++ b/omapip/message.c @@ -104,6 +104,18 @@ isc_result_t omapi_message_set_value (omapi_object_t *h, "omapi_message_set_value"); return ISC_R_SUCCESS; + } else if (!omapi_ds_strcmp (name, "notify-object")) { + if (value -> type != omapi_datatype_object) + return ISC_R_INVALIDARG; + if (m -> notify_object) + omapi_object_dereference + (&m -> notify_object, + "omapi_message_set_value"); + omapi_object_reference (&m -> notify_object, + value -> u.object, + "omapi_message_set_value"); + return ISC_R_SUCCESS; + /* Can set authid, but it has to be an integer. */ } else if (!omapi_ds_strcmp (name, "authid")) { if (value -> type != omapi_datatype_int) @@ -229,9 +241,14 @@ isc_result_t omapi_message_signal_handler (omapi_object_t *h, return ISC_R_INVALIDARG; m = (omapi_message_object_t *)h; - if (!strcmp (name, "status") && m -> object) { - return ((m -> object -> type -> signal_handler)) (m -> object, - name, ap); + if (!strcmp (name, "status") && + (m -> object || m -> notify_object)) { + if (m -> object) + return ((m -> object -> type -> signal_handler)) + (m -> object, name, ap); + else + return ((m -> notify_object -> type -> signal_handler)) + (m -> notify_object, name, ap); } if (h -> inner && h -> inner -> type -> signal_handler) return (*(h -> inner -> type -> signal_handler)) (h -> inner, @@ -515,7 +532,8 @@ isc_result_t omapi_message_process (omapi_object_t *mo, omapi_object_t *po) if (create || update) { status = omapi_object_update (object, (omapi_object_t *)0, - message -> object); + message -> object, + message -> handle); if (status != ISC_R_SUCCESS) { omapi_object_dereference (&object, "omapi_message_process"); @@ -564,7 +582,8 @@ isc_result_t omapi_message_process (omapi_object_t *mo, omapi_object_t *po) } status = omapi_object_update (object, (omapi_object_t *)0, - message -> object); + message -> object, + message -> handle); if (status != ISC_R_SUCCESS) { omapi_object_dereference (&object, "omapi_message_process"); @@ -620,6 +639,31 @@ isc_result_t omapi_message_process (omapi_object_t *mo, omapi_object_t *po) if (status == ISC_R_SUCCESS) omapi_value_dereference (&tv, "omapi_message_process"); return ISC_R_SUCCESS; + + case OMAPI_OP_DELETE: + status = omapi_handle_lookup (&object, + message -> handle); + if (status != ISC_R_SUCCESS) { + return omapi_protocol_send_status + (po, (omapi_object_t *)0, + status, message -> id, + "no matching handle"); + } + + if (!object -> type -> delete) + return omapi_protocol_send_status + (po, (omapi_object_t *)0, + ISC_R_NOTIMPLEMENTED, message -> id, + "no delete method for object"); + + status = (*(object -> type -> delete)) (object, + (omapi_object_t *)0); + omapi_object_dereference (&object, + "omapi_message_process"); + + return omapi_protocol_send_status (po, (omapi_object_t *)0, + status, message -> id, + (char *)0); } return ISC_R_NOTIMPLEMENTED; }