7.5. The discover_resources function
prototype:
static int *discover_resources(*hnd);
The discover_resources function is the function which reports the plug-in's findings of resources, sensors, controls, etc. to the infrastructure.
In most existing plug-ins, the code would retrieve RPT entries from the rptcache and format them into oh_event(s) structures and append them into the eventq. The infrastructure would retrieve these events from each plug-in defined in the config file and store them in the main RPT table of the infrastructure.
7.5.1. The oh_handler_state structure
So now is a good time to talk about the oh_handler_state
The oh_handler_state structure contains:
struct oh_handler_state {
RPTable *rptcache;
GSList *eventq;
GHashTable *config;
void *data;
};
The oh_handler_state happens to be the state structure of a plug-in. Meaning it holds the rptcache, eventq and config data of a plug-in as well as a pointer to private data which the plug-in owner may decide to hold private to the plug-in.
Part of the discover_resources function is to invoke routines which talk to the hardware and gather resource information and format them into HPI RPT (entries). Further, the discover_resources function formats the entries into an openhpi "event" union provided by (look at oh_plugin.h):
struct oh_event {
enum {
OH_ET_RESOURCE,
OH_ET_RESOURCE_DEL,
OH_ET_RDR,
OH_ET_RDR_DEL,
OH_ET_HPI
}type;
union {
struct oh_resource_event res_event;
struct oh_resource_del_event res_del_event;
struct oh_rdr_event rdr_event;
struct oh_rdr_del_event rdr_del_event;
struct oh_hpi_event hpi_event;
} u;
};
and pushes these events into the oh_handler_stats's eventq (GSList)
for later retrieval by the get_event() function.