/* This file is part of cmpiLinux_FanProvider. * * cmpiLinux_FanProvider 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 3 of the License, or * (at your option) any later version. * * cmpiLinux_FanProvider 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 cmpiLinux_FanProvider. If not, see * . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "cmpiLinux_FanSensor.h" #define UNUSED(x) ((void) (x)) static const CMPIBroker * _broker; #ifdef CMPI_VER_100 #define Linux_FanSensorProviderSetInstance \ Linux_FanSensorProviderModifyInstance #endif /* ---------------------------------------------------------------------------*/ /* Instance Provider Interface */ /* ---------------------------------------------------------------------------*/ CMPIStatus Linux_FanSensorProviderCleanup( CMPIInstanceMI * mi, const CMPIContext * ctx, CMPIBoolean terminate) { UNUSED(mi); UNUSED(ctx); UNUSED(terminate); _OSBASE_TRACE(1,("--- %s CMPI Cleanup() called",_ClassName)); cleanup_linux_fan_module(); _OSBASE_TRACE(1,("--- %s CMPI Cleanup() exited",_ClassName)); CMReturn(CMPI_RC_OK); } CMPIStatus Linux_FanSensorProviderEnumInstanceNames( CMPIInstanceMI * mi, const CMPIContext * ctx, const CMPIResult * rslt, const CMPIObjectPath * ref) { UNUSED(mi); CMPIObjectPath * op = NULL; CMPIStatus rc = {CMPI_RC_OK, NULL}; struct fanlist * lptr = NULL; struct fanlist * rm = NULL; _OSBASE_TRACE(1,("--- %s CMPI EnumInstanceNames() called",_ClassName)); if (enum_all_fans(&lptr) != 0 ) { CMSetStatusWithChars( _broker, &rc, CMPI_RC_ERR_FAILED, "Could not list get fan list." ); _OSBASE_TRACE(1, ("--- %s CMPI EnumInstanceNames() failed : %s", _ClassName,CMGetCharPtr(rc.msg))); return rc; } // iterate fan list for (rm = lptr; lptr && rc.rc == CMPI_RC_OK ; lptr = lptr->next) { // method call to create the CMPIInstance object op = _makePath_FanSensor(_broker, ctx, ref, lptr->f, &rc); if (op == NULL || rc.rc != CMPI_RC_OK) { if (rc.msg != NULL) { _OSBASE_TRACE(1, ("--- %s CMPI EnumInstanceNames() failed" ": %s", _ClassName, CMGetCharPtr(rc.msg))); } CMSetStatusWithChars(_broker, &rc, CMPI_RC_ERR_FAILED, "Transformation from internal structure to CIM" " ObjectPath failed."); if (rm) free_fanlist(rm); _OSBASE_TRACE(1, ("--- %s CMPI EnumInstanceNames() failed" ": %s", _ClassName, CMGetCharPtr(rc.msg))); return rc; }else { CMReturnObjectPath(rslt, op); } } if (rm) free_fanlist(rm); CMReturnDone(rslt); _OSBASE_TRACE(1, ("--- %s CMPI EnumInstanceNames() exited", _ClassName)); return rc; } CMPIStatus Linux_FanSensorProviderEnumInstances( CMPIInstanceMI * mi, const CMPIContext * ctx, const CMPIResult * rslt, const CMPIObjectPath * ref, const char ** properties) { UNUSED(mi); CMPIInstance * ci = NULL; CMPIStatus rc = {CMPI_RC_OK, NULL}; struct fanlist * lptr = NULL; struct fanlist * rm = NULL; _OSBASE_TRACE(1,("--- %s CMPI EnumInstances() called",_ClassName)); if (enum_all_fans(&lptr)) { CMSetStatusWithChars(_broker, &rc, CMPI_RC_ERR_FAILED, "Could not list fans."); _OSBASE_TRACE(1, ("--- %s CMPI EnumInstances() failed : %s", _ClassName,CMGetCharPtr(rc.msg))); return rc; } // iterate fan list for (rm=lptr; lptr && rc.rc == CMPI_RC_OK; lptr = lptr->next) { // method call to create the CMPIInstance object ci = _makeInst_FanSensor(_broker, ctx, ref, properties, lptr->f, &rc); if (ci == NULL || rc.rc != CMPI_RC_OK ) { if (rc.msg != NULL ) { _OSBASE_TRACE(1, ("--- %s CMPI EnumInstances() failed :" " %s",_ClassName,CMGetCharPtr(rc.msg))); } CMSetStatusWithChars( _broker, &rc, CMPI_RC_ERR_FAILED, "Transformation from internal" " structure to CIM Instance failed."); if (rm) free_fanlist(rm); _OSBASE_TRACE(1, ("--- %s CMPI EnumInstances() failed :" " %s", _ClassName,CMGetCharPtr(rc.msg))); return rc; }else { CMReturnInstance(rslt, ci); } } if (rm) free_fanlist(rm); CMReturnDone(rslt); _OSBASE_TRACE(1, ("--- %s CMPI EnumInstances() exited", _ClassName)); return rc; } CMPIStatus Linux_FanSensorProviderGetInstance( CMPIInstanceMI * mi, const CMPIContext * ctx, const CMPIResult * rslt, const CMPIObjectPath * cop, const char **properties) { UNUSED(mi); CMPIInstance * ci = NULL; CMPIStatus rc = {CMPI_RC_OK, NULL}; struct cim_fan * sptr = NULL; CMPIData data; CMPIArray * other_identifying_info = NULL; CMPIString * sys_path = NULL; CMPIString * fan_name = NULL; CMPIString * device_id = NULL; cim_fan_error_t cmdrc; _OSBASE_TRACE(1,("--- %s CMPI GetInstance() called",_ClassName)); data = CMGetKey(cop, "OtherIdentifyingInfo", &rc); if ( !rc.rc && data.type == CMPI_stringA && (other_identifying_info = data.value.array) && !rc.rc && (CMGetArrayCount(other_identifying_info, &rc) > 1) && !rc.rc) { data = CMGetArrayElementAt(other_identifying_info, 0, &rc); if (!rc.rc) sys_path = data.value.string; data = CMGetArrayElementAt(other_identifying_info, 1, &rc); if (!rc.rc) fan_name = data.value.string; } device_id = CMGetKey(cop, "DeviceID", &rc).value.string; if ((sys_path == NULL || fan_name == NULL) && (device_id == NULL)) { CMSetStatusWithChars(_broker, &rc, CMPI_RC_ERR_FAILED, "Could not get fan ID." ); _OSBASE_TRACE(1, ("--- %s CMPI GetInstance() failed : %s", _ClassName, CMGetCharPtr(rc.msg))); return rc; } if (sys_path && fan_name) { cmdrc = get_fan_data(CMGetCharPtr(sys_path), CMGetCharPtr(fan_name), &sptr); } if ((cmdrc || !sptr) && device_id) { cmdrc = get_fan_data_by_id(CMGetCharPtr(device_id), &sptr); } if (cmdrc || !sptr) { CMSetStatusWithChars(_broker, &rc, CMPI_RC_ERR_NOT_FOUND, cim_fan_strerror(cmdrc)); _OSBASE_TRACE(1, ("--- %s CMPI GetInstance() exited : %s", _ClassName,CMGetCharPtr(rc.msg))); return rc; } ci = _makeInst_FanSensor(_broker, ctx, cop, properties, sptr, &rc); if (sptr) free_fan(sptr); if (ci == NULL) { if (rc.msg != NULL) { _OSBASE_TRACE(1, ("--- %s CMPI GetInstance() failed : %s", _ClassName, CMGetCharPtr(rc.msg))); }else { _OSBASE_TRACE(1, ("--- %s CMPI GetInstance() failed", _ClassName)); } return rc; } CMReturnInstance(rslt, ci); CMReturnDone(rslt); _OSBASE_TRACE(1, ("--- %s CMPI GetInstance() exited", _ClassName)); return rc; } CMPIStatus Linux_FanSensorProviderCreateInstance( CMPIInstanceMI * mi, const CMPIContext * ctx, const CMPIResult * rslt, const CMPIObjectPath * cop, const CMPIInstance * ci) { UNUSED(mi); UNUSED(ctx); UNUSED(rslt); UNUSED(cop); UNUSED(ci); CMPIStatus rc = {CMPI_RC_OK, NULL}; _OSBASE_TRACE(1, ("--- %s CMPI CreateInstance() called", _ClassName)); CMSetStatusWithChars(_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED, "CIM_ERR_NOT_SUPPORTED"); _OSBASE_TRACE(1, ("--- %s CMPI CreateInstance() exited", _ClassName)); return rc; } CMPIStatus Linux_FanSensorProviderSetInstance( CMPIInstanceMI * mi, const CMPIContext * ctx, const CMPIResult * rslt, const CMPIObjectPath * cop, const CMPIInstance * ci, const char ** properties) { UNUSED(mi); UNUSED(ctx); UNUSED(rslt); UNUSED(cop); UNUSED(ci); UNUSED(properties); CMPIStatus rc = {CMPI_RC_OK, NULL}; _OSBASE_TRACE(1, ("--- %s CMPI SetInstance() called", _ClassName)); CMSetStatusWithChars(_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED, "CIM_ERR_NOT_SUPPORTED"); _OSBASE_TRACE(1, ("--- %s CMPI SetInstance() exited", _ClassName)); return rc; } CMPIStatus Linux_FanSensorProviderDeleteInstance( CMPIInstanceMI * mi, const CMPIContext * ctx, const CMPIResult * rslt, const CMPIObjectPath * cop) { UNUSED(mi); UNUSED(ctx); UNUSED(rslt); UNUSED(cop); CMPIStatus rc = {CMPI_RC_OK, NULL}; _OSBASE_TRACE(1,("--- %s CMPI DeleteInstance() called",_ClassName)); CMSetStatusWithChars( _broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED, "CIM_ERR_NOT_SUPPORTED" ); _OSBASE_TRACE(1,("--- %s CMPI DeleteInstance() exited",_ClassName)); return rc; } CMPIStatus Linux_FanSensorProviderExecQuery( CMPIInstanceMI * mi, const CMPIContext * ctx, const CMPIResult * rslt, const CMPIObjectPath * ref, const char * lang, const char * query) { UNUSED(mi); UNUSED(ctx); UNUSED(rslt); UNUSED(ref); UNUSED(lang); UNUSED(query); CMPIStatus rc = {CMPI_RC_OK, NULL}; _OSBASE_TRACE(1,("--- %s CMPI ExecQuery() called",_ClassName)); CMSetStatusWithChars( _broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED, "CIM_ERR_NOT_SUPPORTED" ); _OSBASE_TRACE(1,("--- %s CMPI ExecQuery() exited",_ClassName)); return rc; } /* ---------------------------------------------------------------------------*/ /* Provider Factory */ /* ---------------------------------------------------------------------------*/ CMInstanceMIStub( Linux_FanSensorProvider, Linux_FanSensorProvider, _broker, init_linux_fan_module()); /* ---------------------------------------------------------------------------*/ /* end of cmpiLinux_FanSensorProvider */ /* ---------------------------------------------------------------------------*/