mirror of https://github.com/sipwise/heartbeat.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
381 lines
19 KiB
381 lines
19 KiB
/*
|
|
* cmpi_utils.h: CMPI utilities header
|
|
*
|
|
* Author: Jia Ming Pan <jmltc@cn.ibm.com>
|
|
* Copyright (c) 2005 International Business Machines
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*
|
|
*/
|
|
|
|
#ifndef _CMPI_UTILS_H
|
|
#define _CMPI_UTILS_H
|
|
|
|
#include <cmpidt.h>
|
|
#include <cmpift.h>
|
|
#include <cmpimacs.h>
|
|
#include <glib.h>
|
|
#include "utils.h"
|
|
#include "mof_map.h"
|
|
|
|
/* for compatibility */
|
|
#ifndef CMPIVersion090
|
|
#define CMPIConst
|
|
|
|
#undef CMGetCharPtr
|
|
#define CMGetCharPtr(x) ((char *)(x)->hdl)
|
|
|
|
#define CMIndicationMIStubExtensions(x)
|
|
|
|
#else /* CMPIVersion090 */
|
|
#define CMPIConst const
|
|
|
|
#endif /* CMPIVersion090 */
|
|
|
|
#define CMGetKeyString(op,key,rc) ({ \
|
|
CMPIString * s = CMGetKey(op,key,rc).value.string;\
|
|
char *v = NULL; \
|
|
if ( s == NULL ) { \
|
|
cl_log(LOG_ERR, "key %s is missing.", key);\
|
|
}else { \
|
|
v = CMGetCharPtr(s); \
|
|
} \
|
|
v; \
|
|
})
|
|
|
|
#define CMGetPropertyString(op,prop,rc) ({ \
|
|
CMPIString * s = CMGetProperty(op,prop,rc).value.string;\
|
|
char *v = NULL; \
|
|
if ( s == NULL ) { \
|
|
cl_log(LOG_ERR, "Property %s is missing.", prop);\
|
|
}else { \
|
|
v = CMGetCharPtr(s); \
|
|
} \
|
|
v; \
|
|
})
|
|
|
|
|
|
int cmpi_msg2inst(CMPIBroker * broker, CMPIInstance * inst, int mapid,
|
|
struct ha_msg *msg, CMPIStatus * rc);
|
|
int cmpi_inst2msg(CMPIInstance *inst, int mapid,
|
|
struct ha_msg *msg, CMPIStatus *rc);
|
|
|
|
|
|
/***********************************************************
|
|
* assocation functions
|
|
**********************************************************/
|
|
|
|
typedef int
|
|
(* assoc_pred_func_t)(CMPIBroker * broker, char * classname, CMPIContext * ctx,
|
|
CMPIObjectPath * left, CMPIObjectPath * right, CMPIStatus * rc);
|
|
|
|
struct assoc_env {
|
|
GPtrArray * left_op_tbl;
|
|
GPtrArray * right_op_tbl;
|
|
int (*done)(struct assoc_env * env);
|
|
};
|
|
|
|
|
|
/* target_name: which should be enumerated
|
|
source_op : generate enumeration according to this object path */
|
|
|
|
typedef CMPIArray *
|
|
(* assoc_enum_func_t) (CMPIBroker * broker, char * classname, CMPIContext * ctx,
|
|
char * namespace, char * target_name, char * target_role,
|
|
CMPIObjectPath * source_op, /*void * user_data,*/
|
|
CMPIStatus * rc);
|
|
|
|
CMPIArray *
|
|
cmpi_instance_names(CMPIBroker * broker, char * namespace, char * classname,
|
|
CMPIContext * ctx, CMPIStatus *rc);
|
|
/* get instance */
|
|
int
|
|
assoc_get_inst(CMPIBroker * broker, char * classname, CMPIContext * ctx,
|
|
CMPIResult * rslt, CMPIObjectPath * cop,
|
|
char * left, char * right, CMPIStatus * rc);
|
|
|
|
/* enumerate cop's associators */
|
|
int
|
|
assoc_enum_associators(CMPIBroker * broker, char * classname,
|
|
CMPIContext * ctx, CMPIResult * rslt, CMPIObjectPath * cop,
|
|
char * left, char * right, char * lclass, char * rclass,
|
|
const char * assoc_class, const char * result_class,
|
|
const char * role, const char * result_role,
|
|
assoc_pred_func_t func, assoc_enum_func_t enum_func,
|
|
int inst, CMPIStatus * rc);
|
|
|
|
/* enum cop's references */
|
|
int
|
|
assoc_enum_references(CMPIBroker * broker, char * classname,
|
|
CMPIContext * ctx, CMPIResult * rslt, CMPIObjectPath * cop,
|
|
char * left, char * right, char * lclass, char * rclass,
|
|
const char * result_class, const char * role,
|
|
assoc_pred_func_t func, assoc_enum_func_t enum_func,
|
|
int inst, CMPIStatus * rc);
|
|
|
|
/* enum association's instances */
|
|
int
|
|
assoc_enum_insts(CMPIBroker * broker, char * classname,
|
|
CMPIContext * ctx, CMPIResult * rslt, CMPIObjectPath * cop,
|
|
char * left, char * right, char * lclass, char * rclass,
|
|
assoc_pred_func_t func, assoc_enum_func_t enum_func,
|
|
int inst, CMPIStatus * rc);
|
|
|
|
|
|
|
|
|
|
/* return ret if obj is a NULL CMPI Object */
|
|
#define RETURN_IFNULL_OBJ(obj, ret, n) do { \
|
|
if ( CMIsNullObject(obj) ) { \
|
|
cl_log(LOG_ERR, "%s:%s:%d: CMPI Object: %s is NULL",\
|
|
__FUNCTION__, __FILE__, __LINE__, n);\
|
|
return ret; \
|
|
} \
|
|
} while (0)
|
|
|
|
/* return HA_FAIL if obj is a NULL CMPI Object */
|
|
#define RETURN_FAIL_IFNULL_OBJ(obj, n) RETURN_IFNULL_OBJ(obj, HA_FAIL, n)
|
|
#define RETURN_NULL_IFNULL_OBJ(obj, n) RETURN_IFNULL_OBJ(obj, NULL, n)
|
|
|
|
|
|
|
|
#define DeclareInstanceCleanup(pfx) \
|
|
CMPIStatus pfx##Cleanup(CMPIInstanceMI * mi, CMPIContext * ctx)
|
|
|
|
#define DeclareInstanceEnumInstanceNames(pfx) \
|
|
CMPIStatus pfx##EnumInstanceNames(CMPIInstanceMI * mi, CMPIContext * ctx, \
|
|
CMPIResult * rslt, CMPIObjectPath * ref)
|
|
|
|
#define DeclareInstanceEnumInstances(pfx) \
|
|
CMPIStatus pfx##EnumInstances(CMPIInstanceMI * mi, CMPIContext* ctx, \
|
|
CMPIResult * rslt, CMPIObjectPath * ref, \
|
|
char ** properties)
|
|
|
|
#define DeclareInstanceGetInstance(pfx) \
|
|
CMPIStatus pfx##GetInstance(CMPIInstanceMI * mi, CMPIContext * ctx, \
|
|
CMPIResult * rslt, CMPIObjectPath * cop, \
|
|
char ** properties)
|
|
|
|
#define DeclareInstanceCreateInstance(pfx) \
|
|
CMPIStatus pfx##CreateInstance(CMPIInstanceMI * mi, CMPIContext * ctx, \
|
|
CMPIResult * rslt, CMPIObjectPath * cop, \
|
|
CMPIInstance * ci)
|
|
|
|
#define DeclareInstanceSetInstance(pfx) \
|
|
CMPIStatus pfx##SetInstance(CMPIInstanceMI * mi, CMPIContext * ctx, \
|
|
CMPIResult * rslt, CMPIObjectPath * cop, \
|
|
CMPIInstance * ci, char ** properties)
|
|
|
|
#define DeclareInstanceDeleteInstance(pfx) \
|
|
CMPIStatus pfx##DeleteInstance(CMPIInstanceMI * mi, CMPIContext * ctx, \
|
|
CMPIResult * rslt, CMPIObjectPath * cop)
|
|
|
|
#define DeclareInstanceExecQuery(pfx) \
|
|
CMPIStatus pfx##ExecQuery(CMPIInstanceMI * mi, CMPIContext * ctx, \
|
|
CMPIResult * rslt, CMPIObjectPath * ref, \
|
|
char * lang, char * query)
|
|
|
|
#define DeclareInstanceFunctions(pfx) \
|
|
static DeclareInstanceCleanup(pfx); \
|
|
static DeclareInstanceEnumInstanceNames(pfx); \
|
|
static DeclareInstanceEnumInstances(pfx); \
|
|
static DeclareInstanceGetInstance(pfx); \
|
|
static DeclareInstanceCreateInstance(pfx); \
|
|
static DeclareInstanceSetInstance(pfx); \
|
|
static DeclareInstanceDeleteInstance(pfx); \
|
|
static DeclareInstanceExecQuery(pfx)
|
|
|
|
#define DeclareMethodInvokeMethod(pfx) \
|
|
CMPIStatus pfx##InvokeMethod(CMPIMethodMI * mi, CMPIContext * ctx, \
|
|
CMPIResult * rslt, CMPIObjectPath * ref, \
|
|
const char * method, CMPIArgs * in, CMPIArgs * out)
|
|
|
|
#define DeclareMethodCleanup(pfx) \
|
|
CMPIStatus pfx##MethodCleanup(CMPIMethodMI * mi, CMPIContext * ctx)
|
|
|
|
#define DeclareMethodFunctions(pfx) \
|
|
static DeclareMethodInvokeMethod(pfx); \
|
|
static DeclareMethodCleanup(pfx)
|
|
|
|
#define DeclareAssociationCleanup(pfx) \
|
|
CMPIStatus pfx##AssociationCleanup(CMPIAssociationMI * mi, CMPIContext * ctx)
|
|
|
|
#define DeclareAssociationAssociators(pfx) \
|
|
CMPIStatus pfx##Associators(CMPIAssociationMI * mi, CMPIContext * ctx, \
|
|
CMPIResult * rslt, CMPIObjectPath * op, \
|
|
const char * asscClass, const char * resultClass, \
|
|
const char * role, const char * resultRole, \
|
|
char ** properties)
|
|
#define DeclareAssociationAssociatorNames(pfx) \
|
|
CMPIStatus pfx##AssociatorNames(CMPIAssociationMI * mi, CMPIContext * ctx, \
|
|
CMPIResult * rslt, CMPIObjectPath * op, \
|
|
const char * asscClass, const char * resultClass, \
|
|
const char * role, const char * resultRole)
|
|
|
|
#define DeclareAssociationReferences(pfx) \
|
|
CMPIStatus pfx##References(CMPIAssociationMI * mi, \
|
|
CMPIContext * ctx, CMPIResult * rslt, \
|
|
CMPIObjectPath * op, const char * resultClass, \
|
|
const char * role, char ** properties)
|
|
|
|
#define DeclareAssociationReferenceNames(pfx) \
|
|
CMPIStatus pfx##ReferenceNames(CMPIAssociationMI * mi, \
|
|
CMPIContext * ctx, CMPIResult * rslt, CMPIObjectPath * cop, \
|
|
const char * resultClass, const char * role)
|
|
|
|
#define DeclareAssociationFunctions(pfx) \
|
|
static DeclareAssociationCleanup(pfx); \
|
|
static DeclareAssociationAssociators(pfx); \
|
|
static DeclareAssociationAssociatorNames(pfx); \
|
|
static DeclareAssociationReferences(pfx); \
|
|
static DeclareAssociationReferenceNames(pfx)
|
|
|
|
|
|
#define DeclareIndicationCleanup(pfx) \
|
|
CMPIStatus pfx##IndicationCleanup(CMPIIndicationMI * mi, CMPIContext * ctx)
|
|
|
|
#define DeclareIndicationAuthorizeFilter(pfx) \
|
|
CMPIStatus pfx##AuthorizeFilter(CMPIIndicationMI * mi, CMPIContext * ctx, \
|
|
CMPIResult * rslt, \
|
|
CMPISelectExp * filter, const char * type, \
|
|
CMPIObjectPath * classPath, const char * owner)
|
|
|
|
#define DeclareIndicationMustPoll(pfx) \
|
|
CMPIStatus pfx##MustPoll(CMPIIndicationMI * mi, \
|
|
CMPIContext * ctx, CMPIResult * rslt, CMPISelectExp * filter,\
|
|
const char * indType, CMPIObjectPath * classPath)
|
|
|
|
#define DeclareIndicationActivateFilter(pfx) \
|
|
CMPIStatus pfx##ActivateFilter(CMPIIndicationMI * mi, \
|
|
CMPIContext * ctx, CMPIResult * rslt, \
|
|
CMPISelectExp * filter, const char * type, \
|
|
CMPIObjectPath * classPath, CMPIBoolean firstActivation)
|
|
|
|
#define DeclareIndicationDeActivateFilter(pfx) \
|
|
CMPIStatus pfx##DeActivateFilter(CMPIIndicationMI * mi, \
|
|
CMPIContext * ctx, CMPIResult * rslt, \
|
|
CMPISelectExp * filter, const char * type, \
|
|
CMPIObjectPath * classPath, CMPIBoolean lastActivation)
|
|
|
|
#define DeclareIndicationFunctions(pfx) \
|
|
static DeclareIndicationCleanup(pfx); \
|
|
static DeclareIndicationAuthorizeFilter(pfx); \
|
|
static DeclareIndicationMustPoll(pfx); \
|
|
static DeclareIndicationActivateFilter(pfx); \
|
|
static DeclareIndicationDeActivateFilter(pfx)
|
|
|
|
#define DeclareInstanceMI(pfx, pn, broker) \
|
|
static char inst_provider_name [] = "instance"#pn; \
|
|
static CMPIInstanceMIFT instMIFT = { \
|
|
CMPICurrentVersion, \
|
|
CMPICurrentVersion, \
|
|
inst_provider_name, \
|
|
pfx##Cleanup, \
|
|
pfx##EnumInstanceNames, \
|
|
pfx##EnumInstances, \
|
|
pfx##GetInstance, \
|
|
pfx##CreateInstance, \
|
|
pfx##SetInstance, \
|
|
pfx##DeleteInstance, \
|
|
pfx##ExecQuery \
|
|
}; \
|
|
CMPIInstanceMI * \
|
|
pn##_Create_InstanceMI(CMPIBroker * brkr, CMPIContext * ctx); \
|
|
CMPIInstanceMI * \
|
|
pn##_Create_InstanceMI(CMPIBroker * brkr, CMPIContext * ctx) \
|
|
{ \
|
|
static CMPIInstanceMI mi = { \
|
|
NULL, \
|
|
&instMIFT \
|
|
}; \
|
|
broker = brkr; \
|
|
return &mi; \
|
|
}
|
|
|
|
#define DeclareMethodMI(pfx, pn, broker) \
|
|
static char method_provider_name [] = "method"#pn; \
|
|
static CMPIMethodMIFT methMIFT = { \
|
|
CMPICurrentVersion, \
|
|
CMPICurrentVersion, \
|
|
method_provider_name, \
|
|
pfx##MethodCleanup, \
|
|
pfx##InvokeMethod \
|
|
}; \
|
|
CMPIMethodMI * \
|
|
pn##_Create_MethodMI(CMPIBroker * brkr, CMPIContext * ctx); \
|
|
CMPIMethodMI * \
|
|
pn##_Create_MethodMI(CMPIBroker * brkr, CMPIContext * ctx) { \
|
|
static CMPIMethodMI mi = { \
|
|
NULL, \
|
|
&methMIFT, \
|
|
}; \
|
|
broker=brkr; \
|
|
return &mi; \
|
|
}
|
|
|
|
|
|
#define DeclareAssociationMI(pfx, pn, broker) \
|
|
static char assoc_provider_name [] = "association"#pn; \
|
|
static CMPIAssociationMIFT assocMIFT = { \
|
|
CMPICurrentVersion, \
|
|
CMPICurrentVersion, \
|
|
assoc_provider_name, \
|
|
pfx##AssociationCleanup, \
|
|
pfx##Associators, \
|
|
pfx##AssociatorNames, \
|
|
pfx##References, \
|
|
pfx##ReferenceNames \
|
|
}; \
|
|
CMPIAssociationMI * \
|
|
pn##_Create_AssociationMI(CMPIBroker * brkr, CMPIContext *ctx); \
|
|
CMPIAssociationMI * \
|
|
pn##_Create_AssociationMI(CMPIBroker * brkr, CMPIContext *ctx) \
|
|
{ \
|
|
static CMPIAssociationMI mi = { \
|
|
NULL, \
|
|
&assocMIFT \
|
|
}; \
|
|
broker = brkr; \
|
|
return &mi; \
|
|
}
|
|
|
|
|
|
|
|
#define DeclareIndicationMI(pfx, pn, broker) \
|
|
static char ind_provider_name [] = "Indication"#pn; \
|
|
static CMPIIndicationMIFT indMIFT = { \
|
|
CMPICurrentVersion, \
|
|
CMPICurrentVersion, \
|
|
ind_provider_name, \
|
|
pfx##IndicationCleanup, \
|
|
pfx##AuthorizeFilter, \
|
|
pfx##MustPoll, \
|
|
pfx##ActivateFilter, \
|
|
pfx##DeActivateFilter, \
|
|
CMIndicationMIStubExtensions(pfx) \
|
|
}; \
|
|
CMPIIndicationMI * \
|
|
pn##_Create_IndicationMI(CMPIBroker * brkr, CMPIContext * ctx); \
|
|
CMPIIndicationMI * \
|
|
pn##_Create_IndicationMI(CMPIBroker * brkr, CMPIContext * ctx) { \
|
|
static CMPIIndicationMI mi = { \
|
|
NULL, \
|
|
&indMIFT, \
|
|
}; \
|
|
return &mi; \
|
|
}
|
|
|
|
#endif /* _CMPI_UTILS_H */
|