diff options
Diffstat (limited to 'src/service-dbus/LMI_ServiceProvider.c')
-rw-r--r-- | src/service-dbus/LMI_ServiceProvider.c | 55 |
1 files changed, 40 insertions, 15 deletions
diff --git a/src/service-dbus/LMI_ServiceProvider.c b/src/service-dbus/LMI_ServiceProvider.c index ff61e49..709faa5 100644 --- a/src/service-dbus/LMI_ServiceProvider.c +++ b/src/service-dbus/LMI_ServiceProvider.c @@ -77,24 +77,49 @@ static CMPIStatus LMI_ServiceEnumInstances( const CMPIObjectPath* cop, const char** properties) { - CMPIStatus st; - CMPIEnumeration* e; - if (!(e = _cb->bft->enumerateInstanceNames(_cb, cc, cop, &st))) { - KReturn2(_cb, ERR_FAILED, "Unable to enumerate instances of LMI_Service"); - } - CMPIData cd; - while (CMHasNext(e, &st)) { + AllServices *svcs = NULL; + CMPIStatus status; + char output[1024]; - cd = CMGetNext(e, &st); - if (st.rc || cd.type != CMPI_ref) { - KReturn2(_cb, ERR_FAILED, "Enumerate instances didn't returned list of references"); - } - CMPIInstance *in = _cb->bft->getInstance(_cb, cc, cd.value.ref, properties, &st); - if (st.rc) { - KReturn2(_cb, ERR_FAILED, "Unable to get instance of LMI_Service"); + if ((svcs = service_get_properties_all(output, sizeof(output))) != NULL) { + for(int i = 0; i < svcs->cnt; i++) { + LMI_Service w; + LMI_Service_InitFromObjectPath(&w, _cb, cop); + LMI_Service_Set_CreationClassName(&w, LMI_Service_ClassName); + LMI_Service_Set_SystemCreationClassName(&w, get_system_creation_class_name()); + LMI_Service_Set_SystemName(&w, get_system_name()); + LMI_Service_Set_Name(&w, svcs->svc[i]->svName); + LMI_Service_Set_Status(&w, svcs->svc[i]->svStatus); + LMI_Service_Set_Started(&w, svcs->svc[i]->svStarted); + LMI_Service_Set_Caption(&w, svcs->svc[i]->svCaption); + LMI_Service_Init_OperationalStatus(&w, svcs->svc[i]->svOperationalStatusCnt); + for (int j = 0; j < svcs->svc[i]->svOperationalStatusCnt; j++) { + LMI_Service_Set_OperationalStatus(&w, j, svcs->svc[i]->svOperationalStatus[j]); + } + + switch (svcs->svc[i]->svEnabledDefault) { + case ENABLED: + LMI_Service_Set_EnabledDefault(&w, LMI_Service_EnabledDefault_Enabled); + break; + case DISABLED: + LMI_Service_Set_EnabledDefault(&w, LMI_Service_EnabledDefault_Disabled); + break; + default: + LMI_Service_Set_EnabledDefault(&w, LMI_Service_EnabledDefault_Not_Applicable); + break; + } + + status = __KReturnInstance((cr), &(w).__base); + if (!KOkay(status)) { + service_free_all_services(svcs); + return status; + } } - cr->ft->returnInstance(cr, in); + } else { + KReturn2(_cb, ERR_FAILED, "%s", output); } + + service_free_all_services(svcs); KReturn(OK); } |