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.