in misc/experimental/bundles/config_admin/service/private/src/managed_service_tracker.c [504:570]
celix_status_t managedServiceTracker_notifyUpdated(managed_service_tracker_pt tracker, configuration_pt configuration) {
char *pid;
service_reference_pt reference = NULL;
bundle_pt bundle = NULL;
properties_pt properties = NULL;
managed_service_service_pt service = NULL;
// (1) config.checkLocked
if (configuration_checkLocked(configuration->handle) != CELIX_SUCCESS) { //TODO not yet implemented
return CELIX_ILLEGAL_ARGUMENT;
}
// (2) config.getPid
if (configuration_getPid(configuration->handle, &pid) != CELIX_SUCCESS) {
return CELIX_ILLEGAL_ARGUMENT;
}
// (3) reference = getManagedServiceReference(pid)
if (managedServiceTracker_getManagedServiceReference(tracker, pid, &reference) != CELIX_SUCCESS || reference == NULL) {
printf("[ ERROR ]: Tracker - Notify (NULL Reference Service{PID=%s}) \n", pid);
return CELIX_ILLEGAL_ARGUMENT; // Eclipse ignores, but according to Specs, callback is delayed
}
// (4.1) reference.getBundle
if (serviceReference_getBundle(reference, &bundle) != CELIX_SUCCESS || bundle == NULL) {
printf("[ ERROR ]: Tracker - Notify (NULL Bundle Service{PID=%s}) \n", pid);
return CELIX_ILLEGAL_ARGUMENT;
}
// (4.2) config.bind(reference.getBundle)
bool isBind;
if (configuration_bind(configuration->handle, bundle, &isBind) != CELIX_SUCCESS || isBind == false) {
printf("[ ERROR ]: Tracker - Notify (Service{PID=%s} Permission Error) \n", pid);
return CELIX_ILLEGAL_STATE;
}
// (5) if (reference != null && config.bind(reference.getBundle()))
// (5.1) properties = config.getProperties
if (configuration_getProperties(configuration->handle, &properties) != CELIX_SUCCESS) {
printf("[ ERROR ]: Tracker - Notify (Service{PID=%s} Wrong Properties) \n", pid);
return CELIX_ILLEGAL_ARGUMENT;
}
// (5.2) modifyConfiguration
if (configurationAdminFactory_modifyConfiguration(tracker->configurationAdminfactory, reference, properties) != CELIX_SUCCESS) {
return CELIX_ILLEGAL_ARGUMENT; //TODO no yet implemented modifyConfiguration
}
// (5.3) service = getManagedService(pid)
if (managedServiceTracker_getManagedService(tracker, pid, &service) != CELIX_SUCCESS) {
printf("[ ERROR ]: Tracker - Notify (NULL Service{PID=%s}) \n", pid);
return CELIX_ILLEGAL_ARGUMENT;
}
// (5.4) asynchUpdate(service,properties)
if ((properties == NULL) || (properties != NULL && hashMap_size(properties) == 0)) {
return managedServiceTracker_asynchUpdated(tracker, service, NULL);
} else {
return managedServiceTracker_asynchUpdated(tracker, service, properties);
}
return CELIX_ILLEGAL_ARGUMENT;
}