mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-09-03 07:45:20 +00:00
Add delete method and notify_object.
This commit is contained in:
@@ -135,6 +135,7 @@ typedef struct __omapi_object_type_t {
|
|||||||
isc_result_t (*lookup) (omapi_object_t **, omapi_object_t *,
|
isc_result_t (*lookup) (omapi_object_t **, omapi_object_t *,
|
||||||
omapi_object_t *);
|
omapi_object_t *);
|
||||||
isc_result_t (*create) (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;
|
} omapi_object_type_t;
|
||||||
|
|
||||||
#define OMAPI_OBJECT_PREAMBLE \
|
#define OMAPI_OBJECT_PREAMBLE \
|
||||||
@@ -156,6 +157,7 @@ struct __omapi_object {
|
|||||||
#define OMAPI_OP_UPDATE 3
|
#define OMAPI_OP_UPDATE 3
|
||||||
#define OMAPI_OP_NOTIFY 4
|
#define OMAPI_OP_NOTIFY 4
|
||||||
#define OMAPI_OP_STATUS 5
|
#define OMAPI_OP_STATUS 5
|
||||||
|
#define OMAPI_OP_DELETE 6
|
||||||
|
|
||||||
#include <omapip/buffer.h>
|
#include <omapip/buffer.h>
|
||||||
|
|
||||||
@@ -181,6 +183,7 @@ typedef struct __omapi_message_object {
|
|||||||
OMAPI_OBJECT_PREAMBLE;
|
OMAPI_OBJECT_PREAMBLE;
|
||||||
struct __omapi_message_object *next, *prev;
|
struct __omapi_message_object *next, *prev;
|
||||||
omapi_object_t *object;
|
omapi_object_t *object;
|
||||||
|
omapi_object_t *notify_object;
|
||||||
int authlen;
|
int authlen;
|
||||||
omapi_typed_data_t *authenticator;
|
omapi_typed_data_t *authenticator;
|
||||||
int authid;
|
int authid;
|
||||||
@@ -437,6 +440,8 @@ isc_result_t omapi_object_type_register (omapi_object_type_t **,
|
|||||||
omapi_object_t *,
|
omapi_object_t *,
|
||||||
omapi_object_t *),
|
omapi_object_t *),
|
||||||
isc_result_t (*) (omapi_object_t **,
|
isc_result_t (*) (omapi_object_t **,
|
||||||
|
omapi_object_t *),
|
||||||
|
isc_result_t (*) (omapi_object_t *,
|
||||||
omapi_object_t *));
|
omapi_object_t *));
|
||||||
isc_result_t omapi_signal (omapi_object_t *, char *, ...);
|
isc_result_t omapi_signal (omapi_object_t *, char *, ...);
|
||||||
isc_result_t omapi_signal_in (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 *,
|
isc_result_t omapi_object_create (omapi_object_t **, omapi_object_t *,
|
||||||
omapi_object_type_t *);
|
omapi_object_type_t *);
|
||||||
isc_result_t omapi_object_update (omapi_object_t *, omapi_object_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_data_string_cmp (omapi_data_string_t *, omapi_data_string_t *);
|
||||||
int omapi_ds_strcmp (omapi_data_string_t *, char *);
|
int omapi_ds_strcmp (omapi_data_string_t *, char *);
|
||||||
int omapi_td_strcmp (omapi_typed_data_t *, char *);
|
int omapi_td_strcmp (omapi_typed_data_t *, char *);
|
||||||
|
@@ -104,6 +104,18 @@ isc_result_t omapi_message_set_value (omapi_object_t *h,
|
|||||||
"omapi_message_set_value");
|
"omapi_message_set_value");
|
||||||
return ISC_R_SUCCESS;
|
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. */
|
/* Can set authid, but it has to be an integer. */
|
||||||
} else if (!omapi_ds_strcmp (name, "authid")) {
|
} else if (!omapi_ds_strcmp (name, "authid")) {
|
||||||
if (value -> type != omapi_datatype_int)
|
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;
|
return ISC_R_INVALIDARG;
|
||||||
m = (omapi_message_object_t *)h;
|
m = (omapi_message_object_t *)h;
|
||||||
|
|
||||||
if (!strcmp (name, "status") && m -> object) {
|
if (!strcmp (name, "status") &&
|
||||||
return ((m -> object -> type -> signal_handler)) (m -> object,
|
(m -> object || m -> notify_object)) {
|
||||||
name, ap);
|
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)
|
if (h -> inner && h -> inner -> type -> signal_handler)
|
||||||
return (*(h -> inner -> type -> signal_handler)) (h -> inner,
|
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) {
|
if (create || update) {
|
||||||
status = omapi_object_update (object,
|
status = omapi_object_update (object,
|
||||||
(omapi_object_t *)0,
|
(omapi_object_t *)0,
|
||||||
message -> object);
|
message -> object,
|
||||||
|
message -> handle);
|
||||||
if (status != ISC_R_SUCCESS) {
|
if (status != ISC_R_SUCCESS) {
|
||||||
omapi_object_dereference
|
omapi_object_dereference
|
||||||
(&object, "omapi_message_process");
|
(&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,
|
status = omapi_object_update (object, (omapi_object_t *)0,
|
||||||
message -> object);
|
message -> object,
|
||||||
|
message -> handle);
|
||||||
if (status != ISC_R_SUCCESS) {
|
if (status != ISC_R_SUCCESS) {
|
||||||
omapi_object_dereference
|
omapi_object_dereference
|
||||||
(&object, "omapi_message_process");
|
(&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)
|
if (status == ISC_R_SUCCESS)
|
||||||
omapi_value_dereference (&tv, "omapi_message_process");
|
omapi_value_dereference (&tv, "omapi_message_process");
|
||||||
return ISC_R_SUCCESS;
|
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;
|
return ISC_R_NOTIMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user