summaryrefslogtreecommitdiffstats
path: root/src/service-dbus/LMI_ServiceProvider.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/service-dbus/LMI_ServiceProvider.c')
-rw-r--r--src/service-dbus/LMI_ServiceProvider.c55
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);
}