From commits-return-4556-archive-asf-public=cust-asf.ponee.io@celix.apache.org Tue Jan 30 20:29:50 2018 Return-Path: X-Original-To: archive-asf-public@eu.ponee.io Delivered-To: archive-asf-public@eu.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by mx-eu-01.ponee.io (Postfix) with ESMTP id 77A0C18077D for ; Tue, 30 Jan 2018 20:29:49 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 66883160C53; Tue, 30 Jan 2018 19:29:49 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 3777F160C5B for ; Tue, 30 Jan 2018 20:29:47 +0100 (CET) Received: (qmail 61095 invoked by uid 500); 30 Jan 2018 19:29:46 -0000 Mailing-List: contact commits-help@celix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@celix.apache.org Delivered-To: mailing list commits@celix.apache.org Received: (qmail 60701 invoked by uid 99); 30 Jan 2018 19:29:46 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 30 Jan 2018 19:29:46 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id DEFBCE07F0; Tue, 30 Jan 2018 19:29:45 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: pnoltes@apache.org To: commits@celix.apache.org Date: Tue, 30 Jan 2018 19:29:52 -0000 Message-Id: In-Reply-To: <738f396660a54807b3c4b2699574eae1@git.apache.org> References: <738f396660a54807b3c4b2699574eae1@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [08/54] [abbrv] celix git commit: CELIX-417: Refactor for CMake usage in RSA, PSA and Docker. mostly trying to identify the api and common libraries http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin/private/src/export_registration_impl.c ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin/private/src/export_registration_impl.c b/remote_services/remote_service_admin/private/src/export_registration_impl.c deleted file mode 100644 index 1c684e7..0000000 --- a/remote_services/remote_service_admin/private/src/export_registration_impl.c +++ /dev/null @@ -1,257 +0,0 @@ -/** - *Licensed to the Apache Software Foundation (ASF) under one - *or more contributor license agreements. See the NOTICE file - *distributed with this work for additional information - *regarding copyright ownership. The ASF licenses this file - *to you under the Apache License, Version 2.0 (the - *"License"); you may not use this file except in compliance - *with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - *Unless required by applicable law or agreed to in writing, - *software distributed under the License is distributed on an - *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - *specific language governing permissions and limitations - *under the License. - */ -/* - * export_registration_impl.c - * - * \date Oct 6, 2011 - * \author Apache Celix Project Team - * \copyright Apache License, Version 2.0 - */ -#include - -#include "constants.h" - -#include "celix_errno.h" - -#include "export_registration_impl.h" -#include "remote_service_admin_impl.h" - - -struct export_reference { - endpoint_description_pt endpoint; - service_reference_pt reference; -}; - -celix_status_t exportRegistration_endpointAdding(void * handle, service_reference_pt reference, void **service); -celix_status_t exportRegistration_endpointAdded(void * handle, service_reference_pt reference, void *service); -celix_status_t exportRegistration_endpointModified(void * handle, service_reference_pt reference, void *service); -celix_status_t exportRegistration_endpointRemoved(void * handle, service_reference_pt reference, void *service); - -celix_status_t exportRegistration_createEndpointTracker(export_registration_pt registration, service_tracker_pt *tracker); - -celix_status_t exportRegistration_create(log_helper_pt helper, service_reference_pt reference, endpoint_description_pt endpoint, remote_service_admin_pt rsa, bundle_context_pt context, export_registration_pt *registration) { - celix_status_t status = CELIX_SUCCESS; - - *registration = calloc(1, sizeof(**registration)); - if (!*registration) { - status = CELIX_ENOMEM; - } else { - (*registration)->context = context; - (*registration)->closed = false; - (*registration)->endpointDescription = endpoint; - (*registration)->reference = reference; - (*registration)->rsa = rsa; - (*registration)->tracker = NULL; - (*registration)->endpoint = NULL; - (*registration)->endpointTracker = NULL; - (*registration)->exportReference = NULL; - (*registration)->bundle = NULL; - (*registration)->loghelper = helper; - } - - return status; -} - -celix_status_t exportRegistration_destroy(export_registration_pt *registration) { - celix_status_t status = CELIX_SUCCESS; - - remoteServiceAdmin_destroyEndpointDescription(&(*registration)->endpointDescription); - free(*registration); - - return status; -} - -celix_status_t exportRegistration_startTracking(export_registration_pt registration) { - celix_status_t status = CELIX_SUCCESS; - - if (registration->endpointTracker == NULL) { - status = exportRegistration_createEndpointTracker(registration, ®istration->endpointTracker); - if (status == CELIX_SUCCESS) { - status = serviceTracker_open(registration->endpointTracker); - } - } - - return status; -} - -celix_status_t exportRegistration_stopTracking(export_registration_pt registration) { - celix_status_t status = CELIX_SUCCESS; - - if (registration->endpointTracker != NULL) { - status = serviceTracker_close(registration->endpointTracker); - if (status != CELIX_SUCCESS) { - logHelper_log(registration->loghelper, OSGI_LOGSERVICE_ERROR, "EXPORT_REGISTRATION: Could not close endpoint tracker"); - } - else { - status = serviceTracker_destroy(registration->endpointTracker); - } - } - if (registration->tracker != NULL) { - status = serviceTracker_close(registration->tracker); - if (status != CELIX_SUCCESS) { - logHelper_log(registration->loghelper, OSGI_LOGSERVICE_ERROR, "EXPORT_REGISTRATION: Could not close service tracker"); - } - else { - status = serviceTracker_destroy(registration->tracker); - } - } - - return status; -} - -celix_status_t exportRegistration_createEndpointTracker(export_registration_pt registration, service_tracker_pt *tracker) { - celix_status_t status; - - service_tracker_customizer_pt customizer = NULL; - - status = serviceTrackerCustomizer_create(registration, exportRegistration_endpointAdding, - exportRegistration_endpointAdded, exportRegistration_endpointModified, exportRegistration_endpointRemoved, &customizer); - - if (status == CELIX_SUCCESS) { - char filter[512]; - - snprintf(filter, 512, "(&(%s=%s)(remote.interface=%s))", (char*) OSGI_FRAMEWORK_OBJECTCLASS, (char*) OSGI_RSA_REMOTE_ENDPOINT, registration->endpointDescription->service); - status = serviceTracker_createWithFilter(registration->context, filter, customizer, tracker); - } - - return status; -} - -celix_status_t exportRegistration_endpointAdding(void * handle, service_reference_pt reference, void **service) { - celix_status_t status; - export_registration_pt registration = handle; - - status = bundleContext_getService(registration->context, reference, service); - - return status; -} - -celix_status_t exportRegistration_endpointAdded(void * handle, service_reference_pt reference, void *endpoint_service) { - celix_status_t status = CELIX_SUCCESS; - export_registration_pt registration = handle; - - remote_endpoint_service_pt endpoint = endpoint_service; - if (registration->endpoint == NULL) { - registration->endpoint = endpoint; - void *service = NULL; - status = bundleContext_getService(registration->context, registration->reference, &service); - if (status == CELIX_SUCCESS) { - endpoint->setService(endpoint->endpoint, service); - } - } - - return status; -} - -celix_status_t exportRegistration_endpointModified(void * handle, service_reference_pt reference, void *service) { - celix_status_t status = CELIX_SUCCESS; - - return status; -} - -celix_status_t exportRegistration_endpointRemoved(void * handle, service_reference_pt reference, void *service) { - celix_status_t status = CELIX_SUCCESS; - export_registration_pt registration = handle; - - remote_endpoint_service_pt endpoint = service; - if (registration->endpoint != NULL) { - endpoint->setService(endpoint->endpoint, NULL); - } - - return status; -} - -celix_status_t exportRegistration_open(export_registration_pt registration) { - celix_status_t status = CELIX_SUCCESS; - const char *bundleStore = NULL; - - bundleContext_getProperty(registration->context, BUNDLE_STORE_PROPERTY_NAME, &bundleStore); - - if (bundleStore == NULL) { - bundleStore = DEFAULT_BUNDLE_STORE; - } - char name[256]; - - snprintf(name, 256, "%s/%s_endpoint.zip", bundleStore, registration->endpointDescription->service); - - status = bundleContext_installBundle(registration->context, name, ®istration->bundle); - if (status == CELIX_SUCCESS) { - status = bundle_start(registration->bundle); - if (status == CELIX_SUCCESS) { - } - } - - return status; -} - -celix_status_t exportRegistration_close(export_registration_pt registration) { - celix_status_t status = CELIX_SUCCESS; - - exportRegistration_stopTracking(registration); - - bundle_uninstall(registration->bundle); - - - return status; -} - -celix_status_t exportRegistration_getException(export_registration_pt registration) { - celix_status_t status = CELIX_SUCCESS; - return status; -} - -celix_status_t exportRegistration_getExportReference(export_registration_pt registration, export_reference_pt *reference) { - celix_status_t status = CELIX_SUCCESS; - - registration->exportReference = calloc(1, sizeof(*registration->exportReference)); - - if (registration->exportReference == NULL) { - status = CELIX_ENOMEM; - } else { - registration->exportReference->endpoint = registration->endpointDescription; - registration->exportReference->reference = registration->reference; - } - - *reference = registration->exportReference; - - return status; -} - -celix_status_t exportRegistration_setEndpointDescription(export_registration_pt registration, endpoint_description_pt endpointDescription) { - celix_status_t status = CELIX_SUCCESS; - - registration->endpointDescription = endpointDescription; - - return status; -} - -celix_status_t exportReference_getExportedEndpoint(export_reference_pt reference, endpoint_description_pt *endpoint) { - celix_status_t status = CELIX_SUCCESS; - - *endpoint = reference->endpoint; - - return status; -} - -celix_status_t exportReference_getExportedService(export_reference_pt reference, service_reference_pt *service) { - celix_status_t status = CELIX_SUCCESS; - *service = reference->reference; - return status; -} - http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin/private/src/import_registration_impl.c ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin/private/src/import_registration_impl.c b/remote_services/remote_service_admin/private/src/import_registration_impl.c deleted file mode 100644 index 9a84327..0000000 --- a/remote_services/remote_service_admin/private/src/import_registration_impl.c +++ /dev/null @@ -1,274 +0,0 @@ -/** - *Licensed to the Apache Software Foundation (ASF) under one - *or more contributor license agreements. See the NOTICE file - *distributed with this work for additional information - *regarding copyright ownership. The ASF licenses this file - *to you under the Apache License, Version 2.0 (the - *"License"); you may not use this file except in compliance - *with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - *Unless required by applicable law or agreed to in writing, - *software distributed under the License is distributed on an - *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - *specific language governing permissions and limitations - *under the License. - */ -/* - * import_registration_impl.c - * - * \date Oct 14, 2011 - * \author Apache Celix Project Team - * \copyright Apache License, Version 2.0 - */ - -#include -#include - -#include - -#include "celix_errno.h" - -#include "import_registration_impl.h" -#include "remote_service_admin_impl.h" - -struct import_reference { - endpoint_description_pt endpoint; - service_reference_pt reference; -}; - - - -celix_status_t importRegistration_proxyFactoryAdding(void * handle, service_reference_pt reference, void **service); -celix_status_t importRegistration_proxyFactoryAdded(void * handle, service_reference_pt reference, void *service); -celix_status_t importRegistration_proxyFactoryModified(void * handle, service_reference_pt reference, void *service); -celix_status_t importRegistration_proxyFactoryRemoved(void * handle, service_reference_pt reference, void *service); - -celix_status_t importRegistration_create(endpoint_description_pt endpoint, remote_service_admin_pt rsa, sendToHandle sendToCallback, bundle_context_pt context, import_registration_pt *registration) { - celix_status_t status = CELIX_SUCCESS; - - *registration = calloc(1, sizeof(**registration)); - if (!*registration) { - status = CELIX_ENOMEM; - } else { - (*registration)->context = context; - (*registration)->closed = false; - (*registration)->endpointDescription = endpoint; - (*registration)->rsa = rsa; - (*registration)->sendToCallback = sendToCallback; - (*registration)->reference = NULL; - (*registration)->importReference = NULL; - } - - return status; -} - -celix_status_t importRegistration_destroy(import_registration_pt registration) -{ - free(registration); - - return CELIX_SUCCESS; -} - - -celix_status_t importRegistrationFactory_create(log_helper_pt helper, char* serviceName, bundle_context_pt context, import_registration_factory_pt *registration_factory) { - celix_status_t status = CELIX_SUCCESS; - - *registration_factory = calloc(1, sizeof(**registration_factory)); - if (!*registration_factory) { - status = CELIX_ENOMEM; - } else { - (*registration_factory)->serviceName = strdup(serviceName); - (*registration_factory)->context = context; - (*registration_factory)->bundle = NULL; - (*registration_factory)->loghelper = helper; - - arrayList_create(&(*registration_factory)->registrations); - } - - return status; -} - - - -celix_status_t importRegistrationFactory_destroy(import_registration_factory_pt* registration_factory) { - celix_status_t status = CELIX_SUCCESS; - - if (*registration_factory != NULL) - { - free((*registration_factory)->serviceName); - arrayList_destroy((*registration_factory)->registrations); - - serviceTracker_destroy((*registration_factory)->proxyFactoryTracker); - free(*registration_factory); - - *registration_factory = NULL; - } - - - return status; -} - - -celix_status_t importRegistrationFactory_open(import_registration_factory_pt registration_factory) -{ - celix_status_t status; - - const char *bundleStore = NULL; - bundleContext_getProperty(registration_factory->context, BUNDLE_STORE_PROPERTY_NAME, &bundleStore); - - if (bundleStore == NULL) { - bundleStore = DEFAULT_BUNDLE_STORE; - } - - char name[256]; - snprintf(name, 256, "%s/%s_proxy.zip", bundleStore, registration_factory->serviceName); - - status = bundleContext_installBundle(registration_factory->context, name, ®istration_factory->bundle); - - if (status == CELIX_SUCCESS) { - status = bundle_start(registration_factory->bundle); - if (status == CELIX_SUCCESS) { - logHelper_log(registration_factory->loghelper, OSGI_LOGSERVICE_INFO, "%s successfully started.", name); - } - } - else { - logHelper_log(registration_factory->loghelper, OSGI_LOGSERVICE_ERROR, "%s could not be installed.", name); - } - - return status; -} - -celix_status_t importRegistrationFactory_close(import_registration_factory_pt registration_factory) -{ - celix_status_t status = CELIX_SUCCESS; - - - if (registration_factory->proxyFactoryTracker != NULL) { - serviceTracker_close(registration_factory->proxyFactoryTracker); - } - - if (registration_factory->bundle != NULL) { - bundle_uninstall(registration_factory->bundle); - } - - return status; -} - - -celix_status_t importRegistration_createProxyFactoryTracker(import_registration_factory_pt registration_factory, service_tracker_pt *tracker) { - celix_status_t status; - service_tracker_customizer_pt customizer = NULL; - - status = serviceTrackerCustomizer_create(registration_factory, importRegistration_proxyFactoryAdding, importRegistration_proxyFactoryAdded, importRegistration_proxyFactoryModified, importRegistration_proxyFactoryRemoved, &customizer); - - if (status == CELIX_SUCCESS) { - char filter[512]; - - snprintf(filter, 512, "(&(%s=%s)(proxy.interface=%s))", (char*) OSGI_FRAMEWORK_OBJECTCLASS, (char*) OSGI_RSA_REMOTE_PROXY_FACTORY, registration_factory->serviceName); - status = serviceTracker_createWithFilter(registration_factory->context, filter, customizer, tracker); - - if (status == CELIX_SUCCESS) - { - serviceTracker_open(*tracker); - } - } - - return status; -} - -celix_status_t importRegistration_proxyFactoryAdding(void * handle, service_reference_pt reference, void **service) { - celix_status_t status = CELIX_SUCCESS; - import_registration_factory_pt registration_factory = (import_registration_factory_pt) handle; - - bundleContext_getService(registration_factory->context, reference, service); - - return status; -} - -celix_status_t importRegistration_proxyFactoryAdded(void * handle, service_reference_pt reference, void *service) { - celix_status_t status = CELIX_SUCCESS; - - import_registration_factory_pt registration_factory = (import_registration_factory_pt) handle; - registration_factory->trackedFactory = (remote_proxy_factory_service_pt) service; - - return status; -} - -celix_status_t importRegistration_proxyFactoryModified(void * handle, service_reference_pt reference, void *service) { - celix_status_t status = CELIX_SUCCESS; - - return status; -} - -celix_status_t importRegistration_proxyFactoryRemoved(void * handle, service_reference_pt reference, void *service) { - celix_status_t status = CELIX_SUCCESS; - - import_registration_factory_pt registration_factory = (import_registration_factory_pt) handle; - registration_factory->trackedFactory = NULL; - - return status; -} - - - -celix_status_t importRegistrationFactory_install(log_helper_pt helper, char* serviceName, bundle_context_pt context, import_registration_factory_pt *registration_factory) -{ - celix_status_t status; - - if ( (status = importRegistrationFactory_create(helper, serviceName, context, registration_factory)) == CELIX_SUCCESS) { - // starting the proxy tracker first allows us to pick up already available proxy factories - importRegistration_createProxyFactoryTracker(*registration_factory, &((*registration_factory)->proxyFactoryTracker)); - logHelper_log((*registration_factory)->loghelper, OSGI_LOGSERVICE_INFO, "remoteServiceAdmin_importService: new registration_factory added for %s at %p", serviceName, (*registration_factory)->proxyFactoryTracker); - - // check whether factory is available - if (((*registration_factory)->trackedFactory == NULL) && ((status = importRegistrationFactory_open(*registration_factory)) != CELIX_SUCCESS)) { - logHelper_log((*registration_factory)->loghelper, OSGI_LOGSERVICE_ERROR, "remoteServiceAdmin_importService: cannot open registration_factory for %s.", serviceName); - - importRegistrationFactory_close(*registration_factory); - importRegistrationFactory_destroy(registration_factory); - } - } - - return status; -} - - - - -celix_status_t importRegistration_getException(import_registration_pt registration) { - celix_status_t status = CELIX_SUCCESS; - return status; -} - - -celix_status_t importRegistration_getImportReference(import_registration_pt registration, import_reference_pt *reference) { - celix_status_t status = CELIX_SUCCESS; - - if (registration->importReference == NULL) { - registration->importReference = calloc(1, sizeof(*registration->importReference)); - if (registration->importReference == NULL) { - status = CELIX_ENOMEM; - } else { - registration->importReference->endpoint = registration->endpointDescription; - registration->importReference->reference = registration->reference; - } - } - - *reference = registration->importReference; - - return status; -} - - -celix_status_t importReference_getImportedEndpoint(import_reference_pt reference) { - celix_status_t status = CELIX_SUCCESS; - return status; -} - -celix_status_t importReference_getImportedService(import_reference_pt reference) { - celix_status_t status = CELIX_SUCCESS; - return status; -} http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin/private/src/remote_proxy_factory_impl.c ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin/private/src/remote_proxy_factory_impl.c b/remote_services/remote_service_admin/private/src/remote_proxy_factory_impl.c deleted file mode 100644 index 9f996d6..0000000 --- a/remote_services/remote_service_admin/private/src/remote_proxy_factory_impl.c +++ /dev/null @@ -1,252 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* - * remote_proxy_factory_impl.c - * - * \date 22 Dec 2014 - * \author Apache Celix Project Team - * \copyright Apache License, Version 2.0 - */ - -#include -#include - -#include "remote_proxy.h" - -typedef struct proxy_instance { - service_registration_pt registration_ptr; - void *service; - properties_pt properties; -} *proxy_instance_pt; - -static celix_status_t remoteProxyFactory_registerProxyService(remote_proxy_factory_pt remote_proxy_factory_ptr, endpoint_description_pt endpointDescription, remote_service_admin_pt rsa, sendToHandle sendToCallback); -static celix_status_t remoteProxyFactory_unregisterProxyService(remote_proxy_factory_pt remote_proxy_factory_ptr, endpoint_description_pt endpointDescription); - -celix_status_t remoteProxyFactory_create(bundle_context_pt context, char *service, void *handle, - createProxyService create, destroyProxyService destroy, - remote_proxy_factory_pt *remote_proxy_factory_ptr) { - celix_status_t status = CELIX_SUCCESS; - - *remote_proxy_factory_ptr = calloc(1, sizeof(**remote_proxy_factory_ptr)); - if (!*remote_proxy_factory_ptr) { - status = CELIX_ENOMEM; - } - - if (status == CELIX_SUCCESS) { - (*remote_proxy_factory_ptr)->context_ptr = context; - (*remote_proxy_factory_ptr)->service = strdup(service); - - (*remote_proxy_factory_ptr)->remote_proxy_factory_service_ptr = NULL; - (*remote_proxy_factory_ptr)->properties = NULL; - (*remote_proxy_factory_ptr)->registration = NULL; - - (*remote_proxy_factory_ptr)->proxy_instances = hashMap_create(NULL, NULL, NULL, NULL); - - (*remote_proxy_factory_ptr)->handle = handle; - - (*remote_proxy_factory_ptr)->create_proxy_service_ptr = create; - (*remote_proxy_factory_ptr)->destroy_proxy_service_ptr = destroy; - } - - return status; -} - -celix_status_t remoteProxyFactory_destroy(remote_proxy_factory_pt *remote_proxy_factory_ptr) { - celix_status_t status = CELIX_SUCCESS; - - if (!*remote_proxy_factory_ptr) { - status = CELIX_ILLEGAL_ARGUMENT; - } - - if (status == CELIX_SUCCESS) { - if ((*remote_proxy_factory_ptr)->proxy_instances) { - hashMap_destroy((*remote_proxy_factory_ptr)->proxy_instances, false, false); - (*remote_proxy_factory_ptr)->proxy_instances = NULL; - } - if ((*remote_proxy_factory_ptr)->service) { - free((*remote_proxy_factory_ptr)->service); - (*remote_proxy_factory_ptr)->service = NULL; - } - free(*remote_proxy_factory_ptr); - *remote_proxy_factory_ptr = NULL; - } - - return status; -} - -celix_status_t remoteProxyFactory_register(remote_proxy_factory_pt remote_proxy_factory_ptr) { - celix_status_t status = CELIX_SUCCESS; - - remote_proxy_factory_ptr->remote_proxy_factory_service_ptr = calloc(1, sizeof(*remote_proxy_factory_ptr->remote_proxy_factory_service_ptr)); - if (!remote_proxy_factory_ptr->remote_proxy_factory_service_ptr) { - status = CELIX_ENOMEM; - } - - if (status == CELIX_SUCCESS) { - remote_proxy_factory_ptr->remote_proxy_factory_service_ptr->factory = remote_proxy_factory_ptr; - remote_proxy_factory_ptr->remote_proxy_factory_service_ptr->registerProxyService = remoteProxyFactory_registerProxyService; - remote_proxy_factory_ptr->remote_proxy_factory_service_ptr->unregisterProxyService = remoteProxyFactory_unregisterProxyService; - - remote_proxy_factory_ptr->properties = properties_create(); - if (!remote_proxy_factory_ptr->properties) { - status = CELIX_BUNDLE_EXCEPTION; - } else { - properties_set(remote_proxy_factory_ptr->properties, "proxy.interface", remote_proxy_factory_ptr->service); - } - } - - if (status == CELIX_SUCCESS) { - status = bundleContext_registerService(remote_proxy_factory_ptr->context_ptr, OSGI_RSA_REMOTE_PROXY_FACTORY, - remote_proxy_factory_ptr->remote_proxy_factory_service_ptr, remote_proxy_factory_ptr->properties, &remote_proxy_factory_ptr->registration); - } - - return status; -} - -celix_status_t remoteProxyFactory_unregister(remote_proxy_factory_pt remote_proxy_factory_ptr) { - celix_status_t status = CELIX_SUCCESS; - - if (!remote_proxy_factory_ptr) { - status = CELIX_ILLEGAL_ARGUMENT; - } - - // #TODO Remove proxy registrations - if (status == CELIX_SUCCESS) { - - hash_map_iterator_pt iter = hashMapIterator_create(remote_proxy_factory_ptr->proxy_instances); - while(hashMapIterator_hasNext(iter)){ - proxy_instance_pt proxy_instance_ptr = (proxy_instance_pt)hashMapIterator_nextValue(iter); - - if (proxy_instance_ptr->service) { - remote_proxy_factory_ptr->destroy_proxy_service_ptr(remote_proxy_factory_ptr->handle, proxy_instance_ptr->service); - } - free(proxy_instance_ptr); - } - hashMapIterator_destroy(iter); - - if (remote_proxy_factory_ptr->registration) { - status = serviceRegistration_unregister(remote_proxy_factory_ptr->registration); - remote_proxy_factory_ptr->properties = NULL; - } - if (remote_proxy_factory_ptr->properties) { - properties_destroy(remote_proxy_factory_ptr->properties); - } - if (remote_proxy_factory_ptr->remote_proxy_factory_service_ptr) { - free(remote_proxy_factory_ptr->remote_proxy_factory_service_ptr); - } - } - - return status; -} - - -static celix_status_t remoteProxyFactory_registerProxyService(remote_proxy_factory_pt remote_proxy_factory_ptr, endpoint_description_pt endpointDescription, remote_service_admin_pt rsa, sendToHandle sendToCallback) { - celix_status_t status = CELIX_SUCCESS; - proxy_instance_pt proxy_instance_ptr = NULL; - - if (!remote_proxy_factory_ptr || !remote_proxy_factory_ptr->create_proxy_service_ptr) { - status = CELIX_ILLEGAL_ARGUMENT; - } - - if (status == CELIX_SUCCESS) { - proxy_instance_ptr = calloc(1, sizeof(*proxy_instance_ptr)); - if (!proxy_instance_ptr) { - status = CELIX_ENOMEM; - } - } - - if (status == CELIX_SUCCESS) { - proxy_instance_ptr->properties = properties_create(); - if (!proxy_instance_ptr->properties) { - status = CELIX_ENOMEM; - } - } - - if (status == CELIX_SUCCESS) { - status = remote_proxy_factory_ptr->create_proxy_service_ptr(remote_proxy_factory_ptr->handle, endpointDescription, rsa, sendToCallback, proxy_instance_ptr->properties, &proxy_instance_ptr->service); - } - - if (status == CELIX_SUCCESS) { - properties_set(proxy_instance_ptr->properties, "proxy.interface", remote_proxy_factory_ptr->service); - - hash_map_iterator_pt iter = hashMapIterator_create(endpointDescription->properties); - while (hashMapIterator_hasNext(iter)) { - hash_map_entry_pt entry = hashMapIterator_nextEntry(iter); - char *key = hashMapEntry_getKey(entry); - char *value = hashMapEntry_getValue(entry); - - properties_set(proxy_instance_ptr->properties, key, value); - } - hashMapIterator_destroy(iter); - } - - if (status == CELIX_SUCCESS) { - status = bundleContext_registerService(remote_proxy_factory_ptr->context_ptr, remote_proxy_factory_ptr->service, proxy_instance_ptr->service, proxy_instance_ptr->properties, &proxy_instance_ptr->registration_ptr); - } - - if (status == CELIX_SUCCESS) { - hashMap_put(remote_proxy_factory_ptr->proxy_instances, endpointDescription, proxy_instance_ptr); - } - - if(status!=CELIX_SUCCESS){ - if(proxy_instance_ptr != NULL){ - if(proxy_instance_ptr->properties != NULL){ - properties_destroy(proxy_instance_ptr->properties); - } - free(proxy_instance_ptr); - } - } - - return status; -} - -static celix_status_t remoteProxyFactory_unregisterProxyService(remote_proxy_factory_pt remote_proxy_factory_ptr, endpoint_description_pt endpointDescription) { - celix_status_t status = CELIX_SUCCESS; - proxy_instance_pt proxy_instance_ptr = NULL; - - if (!remote_proxy_factory_ptr || !endpointDescription || !remote_proxy_factory_ptr->proxy_instances || !remote_proxy_factory_ptr->handle) { - status = CELIX_ILLEGAL_ARGUMENT; - } - - if (status == CELIX_SUCCESS) { - proxy_instance_ptr = hashMap_remove(remote_proxy_factory_ptr->proxy_instances, endpointDescription); - if (proxy_instance_ptr == NULL) { - status = CELIX_BUNDLE_EXCEPTION; - } - } - - if (status == CELIX_SUCCESS) { - if (proxy_instance_ptr->registration_ptr) { - status = serviceRegistration_unregister(proxy_instance_ptr->registration_ptr); - proxy_instance_ptr->properties = NULL; - } - if (proxy_instance_ptr->service) { - status = remote_proxy_factory_ptr->destroy_proxy_service_ptr(remote_proxy_factory_ptr->handle, proxy_instance_ptr->service); - } - if (proxy_instance_ptr->properties) { - properties_destroy(proxy_instance_ptr->properties); - } - free(proxy_instance_ptr); - } - - return status; -} - - http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin/public/include/endpoint_description.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin/public/include/endpoint_description.h b/remote_services/remote_service_admin/public/include/endpoint_description.h deleted file mode 100644 index de27d2e..0000000 --- a/remote_services/remote_service_admin/public/include/endpoint_description.h +++ /dev/null @@ -1,50 +0,0 @@ -/** - *Licensed to the Apache Software Foundation (ASF) under one - *or more contributor license agreements. See the NOTICE file - *distributed with this work for additional information - *regarding copyright ownership. The ASF licenses this file - *to you under the Apache License, Version 2.0 (the - *"License"); you may not use this file except in compliance - *with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - *Unless required by applicable law or agreed to in writing, - *software distributed under the License is distributed on an - *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - *specific language governing permissions and limitations - *under the License. - */ -/* - * endpoint_description.h - * - * \date 25 Jul 2014 - * \author Apache Celix Project Team - * \copyright Apache License, Version 2.0 - */ - -#ifndef ENDPOINT_DESCRIPTION_H_ -#define ENDPOINT_DESCRIPTION_H_ - -#include "properties.h" -#include "array_list.h" - -struct endpoint_description { - char *frameworkUUID; - char *id; - // array_list_pt intents; - char *service; - // HASH_MAP packageVersions; - properties_pt properties; - unsigned long serviceId; -}; - -typedef struct endpoint_description endpoint_description_t; -typedef endpoint_description_t* endpoint_description_pt; - -celix_status_t endpointDescription_create(properties_pt properties, endpoint_description_pt *endpointDescription); -celix_status_t endpointDescription_destroy(endpoint_description_pt description); - - -#endif /* ENDPOINT_DESCRIPTION_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin/public/include/endpoint_listener.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin/public/include/endpoint_listener.h b/remote_services/remote_service_admin/public/include/endpoint_listener.h deleted file mode 100644 index 2e6359f..0000000 --- a/remote_services/remote_service_admin/public/include/endpoint_listener.h +++ /dev/null @@ -1,49 +0,0 @@ -/** - *Licensed to the Apache Software Foundation (ASF) under one - *or more contributor license agreements. See the NOTICE file - *distributed with this work for additional information - *regarding copyright ownership. The ASF licenses this file - *to you under the Apache License, Version 2.0 (the - *"License"); you may not use this file except in compliance - *with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - *Unless required by applicable law or agreed to in writing, - *software distributed under the License is distributed on an - *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - *specific language governing permissions and limitations - *under the License. - */ -/* - * endpoint_listener.h - * - * \date Sep 29, 2011 - * \author Apache Celix Project Team - * \copyright Apache License, Version 2.0 - */ - -#ifndef ENDPOINT_LISTENER_H_ -#define ENDPOINT_LISTENER_H_ - -#include "array_list.h" -#include "properties.h" - -#include "endpoint_description.h" - -static const char * const OSGI_ENDPOINT_LISTENER_SERVICE = "endpoint_listener"; - -static const char * const OSGI_ENDPOINT_LISTENER_SCOPE = "endpoint.listener.scope"; - -struct endpoint_listener { - void *handle; - celix_status_t (*endpointAdded)(void *handle, endpoint_description_pt endpoint, char *machtedFilter); - celix_status_t (*endpointRemoved)(void *handle, endpoint_description_pt endpoint, char *machtedFilter); -}; - -typedef struct endpoint_listener endpoint_listener_t; -typedef endpoint_listener_t *endpoint_listener_pt; - - -#endif /* ENDPOINT_LISTENER_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin/public/include/export_registration.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin/public/include/export_registration.h b/remote_services/remote_service_admin/public/include/export_registration.h deleted file mode 100644 index dc3882b..0000000 --- a/remote_services/remote_service_admin/public/include/export_registration.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Licensed under Apache License v2. See LICENSE for more information. - */ -#ifndef CELIX_EXPORT_REGISTRATION_H -#define CELIX_EXPORT_REGISTRATION_H - -#include "celix_errno.h" -#include "endpoint_description.h" -#include "service_reference.h" - -typedef struct export_registration *export_registration_pt; - -typedef struct export_reference *export_reference_pt; - -celix_status_t exportRegistration_close(export_registration_pt registration); -celix_status_t exportRegistration_getException(export_registration_pt registration); -celix_status_t exportRegistration_getExportReference(export_registration_pt registration, export_reference_pt *reference); - -celix_status_t exportReference_getExportedEndpoint(export_reference_pt reference, endpoint_description_pt *endpoint); -celix_status_t exportReference_getExportedService(export_reference_pt reference, service_reference_pt *service); - -#endif //CELIX_EXPORT_REGISTRATION_H http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin/public/include/import_registration.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin/public/include/import_registration.h b/remote_services/remote_service_admin/public/include/import_registration.h deleted file mode 100644 index ef8193f..0000000 --- a/remote_services/remote_service_admin/public/include/import_registration.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Licensed under Apache License v2. See LICENSE for more information. - */ -#ifndef CELIX_IMPORT_REGISTRATION_H -#define CELIX_IMPORT_REGISTRATION_H - -#include "celix_errno.h" -#include "endpoint_description.h" -#include "service_reference.h" - -typedef struct import_registration *import_registration_pt; - -typedef struct import_reference *import_reference_pt; - -celix_status_t importRegistration_close(import_registration_pt registration); -celix_status_t importRegistration_getException(import_registration_pt registration); -celix_status_t importRegistration_getImportReference(import_registration_pt registration, import_reference_pt *reference); - -celix_status_t importReference_getImportedEndpoint(import_reference_pt reference); -celix_status_t importReference_getImportedService(import_reference_pt reference); - -#endif //CELIX_IMPORT_REGISTRATION_H http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin/public/include/remote_constants.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin/public/include/remote_constants.h b/remote_services/remote_service_admin/public/include/remote_constants.h deleted file mode 100644 index 0736685..0000000 --- a/remote_services/remote_service_admin/public/include/remote_constants.h +++ /dev/null @@ -1,38 +0,0 @@ -/** - *Licensed to the Apache Software Foundation (ASF) under one - *or more contributor license agreements. See the NOTICE file - *distributed with this work for additional information - *regarding copyright ownership. The ASF licenses this file - *to you under the Apache License, Version 2.0 (the - *"License"); you may not use this file except in compliance - *with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - *Unless required by applicable law or agreed to in writing, - *software distributed under the License is distributed on an - *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - *specific language governing permissions and limitations - *under the License. - */ -/* - * remote_constants.h - * - * \date Sep 30, 2011 - * \author Apache Celix Project Team - * \copyright Apache License, Version 2.0 - */ - -#ifndef REMOTE_CONSTANTS_H_ -#define REMOTE_CONSTANTS_H_ - -static const char * const OSGI_RSA_SERVICE_EXPORTED_INTERFACES = "service.exported.interfaces"; -static const char * const OSGI_RSA_ENDPOINT_FRAMEWORK_UUID = "endpoint.framework.uuid"; -static const char * const OSGI_RSA_ENDPOINT_SERVICE_ID = "endpoint.service.id"; -static const char * const OSGI_RSA_ENDPOINT_ID = "endpoint.id"; -static const char * const OSGI_RSA_SERVICE_IMPORTED = "service.imported"; -static const char * const OSGI_RSA_SERVICE_IMPORTED_CONFIGS = "service.imported.configs"; -static const char * const OSGI_RSA_SERVICE_LOCATION = "service.location"; - -#endif /* REMOTE_CONSTANTS_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin/public/include/remote_endpoint.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin/public/include/remote_endpoint.h b/remote_services/remote_service_admin/public/include/remote_endpoint.h deleted file mode 100644 index ab80abb..0000000 --- a/remote_services/remote_service_admin/public/include/remote_endpoint.h +++ /dev/null @@ -1,44 +0,0 @@ -/** - *Licensed to the Apache Software Foundation (ASF) under one - *or more contributor license agreements. See the NOTICE file - *distributed with this work for additional information - *regarding copyright ownership. The ASF licenses this file - *to you under the Apache License, Version 2.0 (the - *"License"); you may not use this file except in compliance - *with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - *Unless required by applicable law or agreed to in writing, - *software distributed under the License is distributed on an - *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - *specific language governing permissions and limitations - *under the License. - */ -/* - * remote_endpoint.h - * - * \date Oct 7, 2011 - * \author Apache Celix Project Team - * \copyright Apache License, Version 2.0 - */ - -#ifndef REMOTE_ENDPOINT_H_ -#define REMOTE_ENDPOINT_H_ - -#define OSGI_RSA_REMOTE_ENDPOINT "remote_endpoint" - -typedef struct remote_endpoint remote_endpoint_t; -typedef remote_endpoint_t* remote_endpoint_pt; - -struct remote_endpoint_service { - remote_endpoint_pt endpoint; - celix_status_t (*setService)(remote_endpoint_pt endpoint, void *service); - celix_status_t (*handleRequest)(remote_endpoint_pt endpoint, char *data, char **reply); -}; - -typedef struct remote_endpoint_service *remote_endpoint_service_pt; - - -#endif /* REMOTE_ENDPOINT_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin/public/include/remote_endpoint_impl.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin/public/include/remote_endpoint_impl.h b/remote_services/remote_service_admin/public/include/remote_endpoint_impl.h deleted file mode 100644 index 3782d62..0000000 --- a/remote_services/remote_service_admin/public/include/remote_endpoint_impl.h +++ /dev/null @@ -1,38 +0,0 @@ -/** - *Licensed to the Apache Software Foundation (ASF) under one - *or more contributor license agreements. See the NOTICE file - *distributed with this work for additional information - *regarding copyright ownership. The ASF licenses this file - *to you under the Apache License, Version 2.0 (the - *"License"); you may not use this file except in compliance - *with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - *Unless required by applicable law or agreed to in writing, - *software distributed under the License is distributed on an - *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - *specific language governing permissions and limitations - *under the License. - */ -/* - * remote_endpoint_impl.h - * - * \date Oct 11, 2011 - * \author Apache Celix Project Team - * \copyright Apache License, Version 2.0 - */ - -#ifndef REMOTE_ENDPOINT_IMPL_H_ -#define REMOTE_ENDPOINT_IMPL_H_ - -#include "remote_endpoint.h" -#include "celix_threads.h" - -struct remote_endpoint { - celix_thread_mutex_t serviceLock; - void *service; -}; - -#endif /* REMOTE_ENDPOINT_IMPL_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin/public/include/remote_proxy.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin/public/include/remote_proxy.h b/remote_services/remote_service_admin/public/include/remote_proxy.h deleted file mode 100644 index 4c3f5c3..0000000 --- a/remote_services/remote_service_admin/public/include/remote_proxy.h +++ /dev/null @@ -1,76 +0,0 @@ -/** - *Licensed to the Apache Software Foundation (ASF) under one - *or more contributor license agreements. See the NOTICE file - *distributed with this work for additional information - *regarding copyright ownership. The ASF licenses this file - *to you under the Apache License, Version 2.0 (the - *"License"); you may not use this file except in compliance - *with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - *Unless required by applicable law or agreed to in writing, - *software distributed under the License is distributed on an - *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - *specific language governing permissions and limitations - *under the License. - */ -/* - * remote_proxy.h - * - * \date Oct 13, 2011 - * \author Apache Celix Project Team - * \copyright Apache License, Version 2.0 - */ - -#ifndef REMOTE_PROXY_H_ -#define REMOTE_PROXY_H_ - -#include "endpoint_listener.h" -#include "remote_service_admin.h" - -#define OSGI_RSA_REMOTE_PROXY_FACTORY "remote_proxy_factory" -#define OSGI_RSA_REMOTE_PROXY_TIMEOUT "remote_proxy_timeout" - -typedef celix_status_t (*sendToHandle)(remote_service_admin_pt remote_service_admin_ptr, endpoint_description_pt endpointDescription, char *request, char **reply, int* replyStatus); -typedef celix_status_t (*createProxyService)(void *handle, endpoint_description_pt endpointDescription, remote_service_admin_pt rsa, sendToHandle sendToCallback, properties_pt properties, void **service); -typedef celix_status_t (*destroyProxyService)(void *handle, void *service); - -typedef struct remote_proxy_factory *remote_proxy_factory_pt; -typedef struct remote_proxy_factory_service *remote_proxy_factory_service_pt; - -struct remote_proxy_factory { - bundle_context_pt context_ptr; - char *service; - - remote_proxy_factory_service_pt remote_proxy_factory_service_ptr; - properties_pt properties; - service_registration_pt registration; - - hash_map_pt proxy_instances; - - void *handle; - - createProxyService create_proxy_service_ptr; - destroyProxyService destroy_proxy_service_ptr; -}; - -struct remote_proxy_factory_service { - remote_proxy_factory_pt factory; - celix_status_t (*registerProxyService)(remote_proxy_factory_pt proxyFactoryService, endpoint_description_pt endpoint, remote_service_admin_pt remote_service_admin_ptr, sendToHandle callback); - celix_status_t (*unregisterProxyService)(remote_proxy_factory_pt proxyFactoryService, endpoint_description_pt endpoint); -}; - -celix_status_t remoteProxyFactory_create(bundle_context_pt context, char *service, void *handle, - createProxyService create, destroyProxyService destroy, - remote_proxy_factory_pt *remote_proxy_factory_ptr); -celix_status_t remoteProxyFactory_destroy(remote_proxy_factory_pt *remote_proxy_factory_ptr); - -celix_status_t remoteProxyFactory_register(remote_proxy_factory_pt remote_proxy_factory_ptr); -celix_status_t remoteProxyFactory_unregister(remote_proxy_factory_pt remote_proxy_factory_ptr); - - - - -#endif /* REMOTE_PROXY_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin/public/include/remote_service_admin.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin/public/include/remote_service_admin.h b/remote_services/remote_service_admin/public/include/remote_service_admin.h deleted file mode 100644 index cc7fd98..0000000 --- a/remote_services/remote_service_admin/public/include/remote_service_admin.h +++ /dev/null @@ -1,73 +0,0 @@ -/** - *Licensed to the Apache Software Foundation (ASF) under one - *or more contributor license agreements. See the NOTICE file - *distributed with this work for additional information - *regarding copyright ownership. The ASF licenses this file - *to you under the Apache License, Version 2.0 (the - *"License"); you may not use this file except in compliance - *with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - *Unless required by applicable law or agreed to in writing, - *software distributed under the License is distributed on an - *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - *specific language governing permissions and limitations - *under the License. - */ -/* - * remote_service_admin.h - * - * \date Sep 30, 2011 - * \author Apache Celix Project Team - * \copyright Apache License, Version 2.0 - */ - -#ifndef REMOTE_SERVICE_ADMIN_H_ -#define REMOTE_SERVICE_ADMIN_H_ - -#include "endpoint_listener.h" -#include "service_reference.h" -#include "export_registration.h" -#include "import_registration.h" - -#define OSGI_RSA_REMOTE_SERVICE_ADMIN "remote_service_admin" - -typedef struct import_registration_factory import_registration_factory_t; -typedef import_registration_factory_t* import_registration_factory_pt; - -typedef struct remote_service_admin remote_service_admin_t; -typedef remote_service_admin_t* remote_service_admin_pt; - -struct remote_service_admin_service { - remote_service_admin_pt admin; - celix_status_t (*exportService)(remote_service_admin_pt admin, char *serviceId, properties_pt properties, array_list_pt *registrations); - celix_status_t (*removeExportedService)(remote_service_admin_pt admin, export_registration_pt registration); - celix_status_t (*getExportedServices)(remote_service_admin_pt admin, array_list_pt *services); - celix_status_t (*getImportedEndpoints)(remote_service_admin_pt admin, array_list_pt *services); - celix_status_t (*importService)(remote_service_admin_pt admin, endpoint_description_pt endpoint, import_registration_pt *registration); - - celix_status_t (*exportReference_getExportedEndpoint)(export_reference_pt reference, endpoint_description_pt *endpoint); - celix_status_t (*exportReference_getExportedService)(export_reference_pt reference, service_reference_pt *service); - - celix_status_t (*exportRegistration_close)(remote_service_admin_pt admin, export_registration_pt registration); - celix_status_t (*exportRegistration_getException)(export_registration_pt registration); - celix_status_t (*exportRegistration_getExportReference)(export_registration_pt registration, export_reference_pt *reference); - celix_status_t (*exportRegistration_freeExportReference)(export_reference_pt *reference); - celix_status_t (*exportRegistration_getEndpointDescription)(export_registration_pt registration, endpoint_description_pt endpointDescription); - - celix_status_t (*importReference_getImportedEndpoint)(import_reference_pt reference); - celix_status_t (*importReference_getImportedService)(import_reference_pt reference); - - celix_status_t (*importRegistration_close)(remote_service_admin_pt admin, import_registration_pt registration); - celix_status_t (*importRegistration_getException)(import_registration_pt registration); - celix_status_t (*importRegistration_getImportReference)(import_registration_pt registration, import_reference_pt *reference); - -}; - -typedef struct remote_service_admin_service remote_service_admin_service_t; -typedef remote_service_admin_service_t* remote_service_admin_service_pt; - - -#endif /* REMOTE_SERVICE_ADMIN_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin_api/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_api/CMakeLists.txt b/remote_services/remote_service_admin_api/CMakeLists.txt new file mode 100644 index 0000000..a7d0640 --- /dev/null +++ b/remote_services/remote_service_admin_api/CMakeLists.txt @@ -0,0 +1,45 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +add_library(remote_service_admin_api INTERFACE) +target_include_directories(remote_service_admin_api INTERFACE include) + +install (FILES + include/remote_endpoint_impl.h + include/remote_endpoint.h + include/remote_proxy.h + include/remote_service_admin.h + include/export_registration.h + include/import_registration.h + include/endpoint_description.h + include/endpoint_listener.h + include/remote_constants.h + DESTINATION + include/celix/remote_service_admin + COMPONENT + remote_service_admin +) +install (FILES + public/include/endpoint_listener.h + DESTINATION + include/celix/endpoint_listener + COMPONENT + remote_service_admin +) + +#Setup target aliases to match external usage +add_library(Celix::remote_service_admin_api ALIAS remote_service_admin_api) http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin_api/README.md ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_api/README.md b/remote_services/remote_service_admin_api/README.md new file mode 100644 index 0000000..2e3d268 --- /dev/null +++ b/remote_services/remote_service_admin_api/README.md @@ -0,0 +1,11 @@ +# Remote Service Admin + +The Remote Service Admin (RSA) provides the mechanisms to import and export services when instructed to do so by the Topology Manager. + +To delegate method calls to the actual service implementation, the RSA_SHM and the RSA_HTTP are using "endpoint/proxy" bundles, which has all the knowledge about the marshalling and unmarshalling of data for the service. The RSA_DFI implementation combines a [foreign function interface](https://en.wikipedia.org/wiki/Foreign_function_interface) technique together with manualy created descriptors. + +Note that this folder contains code commonly used by the RSA implementations and therefore does not include any CMAKE configuration. + +## Properties + ENDPOINTS defines the relative directory where endpoints and proxys can be found (default: endpoints) + CELIX_FRAMEWORK_EXTENDER_PATH Used in RSA_DFI only. Can be used to define a path to use as an extender path point for the framework bundle. For normal bundles the bundle cache is used. http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin_api/include/endpoint_description.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_api/include/endpoint_description.h b/remote_services/remote_service_admin_api/include/endpoint_description.h new file mode 100644 index 0000000..de27d2e --- /dev/null +++ b/remote_services/remote_service_admin_api/include/endpoint_description.h @@ -0,0 +1,50 @@ +/** + *Licensed to the Apache Software Foundation (ASF) under one + *or more contributor license agreements. See the NOTICE file + *distributed with this work for additional information + *regarding copyright ownership. The ASF licenses this file + *to you under the Apache License, Version 2.0 (the + *"License"); you may not use this file except in compliance + *with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + *Unless required by applicable law or agreed to in writing, + *software distributed under the License is distributed on an + *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + *specific language governing permissions and limitations + *under the License. + */ +/* + * endpoint_description.h + * + * \date 25 Jul 2014 + * \author Apache Celix Project Team + * \copyright Apache License, Version 2.0 + */ + +#ifndef ENDPOINT_DESCRIPTION_H_ +#define ENDPOINT_DESCRIPTION_H_ + +#include "properties.h" +#include "array_list.h" + +struct endpoint_description { + char *frameworkUUID; + char *id; + // array_list_pt intents; + char *service; + // HASH_MAP packageVersions; + properties_pt properties; + unsigned long serviceId; +}; + +typedef struct endpoint_description endpoint_description_t; +typedef endpoint_description_t* endpoint_description_pt; + +celix_status_t endpointDescription_create(properties_pt properties, endpoint_description_pt *endpointDescription); +celix_status_t endpointDescription_destroy(endpoint_description_pt description); + + +#endif /* ENDPOINT_DESCRIPTION_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin_api/include/endpoint_listener.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_api/include/endpoint_listener.h b/remote_services/remote_service_admin_api/include/endpoint_listener.h new file mode 100644 index 0000000..2e6359f --- /dev/null +++ b/remote_services/remote_service_admin_api/include/endpoint_listener.h @@ -0,0 +1,49 @@ +/** + *Licensed to the Apache Software Foundation (ASF) under one + *or more contributor license agreements. See the NOTICE file + *distributed with this work for additional information + *regarding copyright ownership. The ASF licenses this file + *to you under the Apache License, Version 2.0 (the + *"License"); you may not use this file except in compliance + *with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + *Unless required by applicable law or agreed to in writing, + *software distributed under the License is distributed on an + *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + *specific language governing permissions and limitations + *under the License. + */ +/* + * endpoint_listener.h + * + * \date Sep 29, 2011 + * \author Apache Celix Project Team + * \copyright Apache License, Version 2.0 + */ + +#ifndef ENDPOINT_LISTENER_H_ +#define ENDPOINT_LISTENER_H_ + +#include "array_list.h" +#include "properties.h" + +#include "endpoint_description.h" + +static const char * const OSGI_ENDPOINT_LISTENER_SERVICE = "endpoint_listener"; + +static const char * const OSGI_ENDPOINT_LISTENER_SCOPE = "endpoint.listener.scope"; + +struct endpoint_listener { + void *handle; + celix_status_t (*endpointAdded)(void *handle, endpoint_description_pt endpoint, char *machtedFilter); + celix_status_t (*endpointRemoved)(void *handle, endpoint_description_pt endpoint, char *machtedFilter); +}; + +typedef struct endpoint_listener endpoint_listener_t; +typedef endpoint_listener_t *endpoint_listener_pt; + + +#endif /* ENDPOINT_LISTENER_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin_api/include/export_registration.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_api/include/export_registration.h b/remote_services/remote_service_admin_api/include/export_registration.h new file mode 100644 index 0000000..dc3882b --- /dev/null +++ b/remote_services/remote_service_admin_api/include/export_registration.h @@ -0,0 +1,22 @@ +/* + * Licensed under Apache License v2. See LICENSE for more information. + */ +#ifndef CELIX_EXPORT_REGISTRATION_H +#define CELIX_EXPORT_REGISTRATION_H + +#include "celix_errno.h" +#include "endpoint_description.h" +#include "service_reference.h" + +typedef struct export_registration *export_registration_pt; + +typedef struct export_reference *export_reference_pt; + +celix_status_t exportRegistration_close(export_registration_pt registration); +celix_status_t exportRegistration_getException(export_registration_pt registration); +celix_status_t exportRegistration_getExportReference(export_registration_pt registration, export_reference_pt *reference); + +celix_status_t exportReference_getExportedEndpoint(export_reference_pt reference, endpoint_description_pt *endpoint); +celix_status_t exportReference_getExportedService(export_reference_pt reference, service_reference_pt *service); + +#endif //CELIX_EXPORT_REGISTRATION_H http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin_api/include/import_registration.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_api/include/import_registration.h b/remote_services/remote_service_admin_api/include/import_registration.h new file mode 100644 index 0000000..ef8193f --- /dev/null +++ b/remote_services/remote_service_admin_api/include/import_registration.h @@ -0,0 +1,22 @@ +/* + * Licensed under Apache License v2. See LICENSE for more information. + */ +#ifndef CELIX_IMPORT_REGISTRATION_H +#define CELIX_IMPORT_REGISTRATION_H + +#include "celix_errno.h" +#include "endpoint_description.h" +#include "service_reference.h" + +typedef struct import_registration *import_registration_pt; + +typedef struct import_reference *import_reference_pt; + +celix_status_t importRegistration_close(import_registration_pt registration); +celix_status_t importRegistration_getException(import_registration_pt registration); +celix_status_t importRegistration_getImportReference(import_registration_pt registration, import_reference_pt *reference); + +celix_status_t importReference_getImportedEndpoint(import_reference_pt reference); +celix_status_t importReference_getImportedService(import_reference_pt reference); + +#endif //CELIX_IMPORT_REGISTRATION_H http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin_api/include/remote_constants.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_api/include/remote_constants.h b/remote_services/remote_service_admin_api/include/remote_constants.h new file mode 100644 index 0000000..0736685 --- /dev/null +++ b/remote_services/remote_service_admin_api/include/remote_constants.h @@ -0,0 +1,38 @@ +/** + *Licensed to the Apache Software Foundation (ASF) under one + *or more contributor license agreements. See the NOTICE file + *distributed with this work for additional information + *regarding copyright ownership. The ASF licenses this file + *to you under the Apache License, Version 2.0 (the + *"License"); you may not use this file except in compliance + *with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + *Unless required by applicable law or agreed to in writing, + *software distributed under the License is distributed on an + *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + *specific language governing permissions and limitations + *under the License. + */ +/* + * remote_constants.h + * + * \date Sep 30, 2011 + * \author Apache Celix Project Team + * \copyright Apache License, Version 2.0 + */ + +#ifndef REMOTE_CONSTANTS_H_ +#define REMOTE_CONSTANTS_H_ + +static const char * const OSGI_RSA_SERVICE_EXPORTED_INTERFACES = "service.exported.interfaces"; +static const char * const OSGI_RSA_ENDPOINT_FRAMEWORK_UUID = "endpoint.framework.uuid"; +static const char * const OSGI_RSA_ENDPOINT_SERVICE_ID = "endpoint.service.id"; +static const char * const OSGI_RSA_ENDPOINT_ID = "endpoint.id"; +static const char * const OSGI_RSA_SERVICE_IMPORTED = "service.imported"; +static const char * const OSGI_RSA_SERVICE_IMPORTED_CONFIGS = "service.imported.configs"; +static const char * const OSGI_RSA_SERVICE_LOCATION = "service.location"; + +#endif /* REMOTE_CONSTANTS_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin_api/include/remote_endpoint.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_api/include/remote_endpoint.h b/remote_services/remote_service_admin_api/include/remote_endpoint.h new file mode 100644 index 0000000..ab80abb --- /dev/null +++ b/remote_services/remote_service_admin_api/include/remote_endpoint.h @@ -0,0 +1,44 @@ +/** + *Licensed to the Apache Software Foundation (ASF) under one + *or more contributor license agreements. See the NOTICE file + *distributed with this work for additional information + *regarding copyright ownership. The ASF licenses this file + *to you under the Apache License, Version 2.0 (the + *"License"); you may not use this file except in compliance + *with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + *Unless required by applicable law or agreed to in writing, + *software distributed under the License is distributed on an + *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + *specific language governing permissions and limitations + *under the License. + */ +/* + * remote_endpoint.h + * + * \date Oct 7, 2011 + * \author Apache Celix Project Team + * \copyright Apache License, Version 2.0 + */ + +#ifndef REMOTE_ENDPOINT_H_ +#define REMOTE_ENDPOINT_H_ + +#define OSGI_RSA_REMOTE_ENDPOINT "remote_endpoint" + +typedef struct remote_endpoint remote_endpoint_t; +typedef remote_endpoint_t* remote_endpoint_pt; + +struct remote_endpoint_service { + remote_endpoint_pt endpoint; + celix_status_t (*setService)(remote_endpoint_pt endpoint, void *service); + celix_status_t (*handleRequest)(remote_endpoint_pt endpoint, char *data, char **reply); +}; + +typedef struct remote_endpoint_service *remote_endpoint_service_pt; + + +#endif /* REMOTE_ENDPOINT_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin_api/include/remote_endpoint_impl.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_api/include/remote_endpoint_impl.h b/remote_services/remote_service_admin_api/include/remote_endpoint_impl.h new file mode 100644 index 0000000..3782d62 --- /dev/null +++ b/remote_services/remote_service_admin_api/include/remote_endpoint_impl.h @@ -0,0 +1,38 @@ +/** + *Licensed to the Apache Software Foundation (ASF) under one + *or more contributor license agreements. See the NOTICE file + *distributed with this work for additional information + *regarding copyright ownership. The ASF licenses this file + *to you under the Apache License, Version 2.0 (the + *"License"); you may not use this file except in compliance + *with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + *Unless required by applicable law or agreed to in writing, + *software distributed under the License is distributed on an + *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + *specific language governing permissions and limitations + *under the License. + */ +/* + * remote_endpoint_impl.h + * + * \date Oct 11, 2011 + * \author Apache Celix Project Team + * \copyright Apache License, Version 2.0 + */ + +#ifndef REMOTE_ENDPOINT_IMPL_H_ +#define REMOTE_ENDPOINT_IMPL_H_ + +#include "remote_endpoint.h" +#include "celix_threads.h" + +struct remote_endpoint { + celix_thread_mutex_t serviceLock; + void *service; +}; + +#endif /* REMOTE_ENDPOINT_IMPL_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin_api/include/remote_proxy.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_api/include/remote_proxy.h b/remote_services/remote_service_admin_api/include/remote_proxy.h new file mode 100644 index 0000000..4c3f5c3 --- /dev/null +++ b/remote_services/remote_service_admin_api/include/remote_proxy.h @@ -0,0 +1,76 @@ +/** + *Licensed to the Apache Software Foundation (ASF) under one + *or more contributor license agreements. See the NOTICE file + *distributed with this work for additional information + *regarding copyright ownership. The ASF licenses this file + *to you under the Apache License, Version 2.0 (the + *"License"); you may not use this file except in compliance + *with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + *Unless required by applicable law or agreed to in writing, + *software distributed under the License is distributed on an + *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + *specific language governing permissions and limitations + *under the License. + */ +/* + * remote_proxy.h + * + * \date Oct 13, 2011 + * \author Apache Celix Project Team + * \copyright Apache License, Version 2.0 + */ + +#ifndef REMOTE_PROXY_H_ +#define REMOTE_PROXY_H_ + +#include "endpoint_listener.h" +#include "remote_service_admin.h" + +#define OSGI_RSA_REMOTE_PROXY_FACTORY "remote_proxy_factory" +#define OSGI_RSA_REMOTE_PROXY_TIMEOUT "remote_proxy_timeout" + +typedef celix_status_t (*sendToHandle)(remote_service_admin_pt remote_service_admin_ptr, endpoint_description_pt endpointDescription, char *request, char **reply, int* replyStatus); +typedef celix_status_t (*createProxyService)(void *handle, endpoint_description_pt endpointDescription, remote_service_admin_pt rsa, sendToHandle sendToCallback, properties_pt properties, void **service); +typedef celix_status_t (*destroyProxyService)(void *handle, void *service); + +typedef struct remote_proxy_factory *remote_proxy_factory_pt; +typedef struct remote_proxy_factory_service *remote_proxy_factory_service_pt; + +struct remote_proxy_factory { + bundle_context_pt context_ptr; + char *service; + + remote_proxy_factory_service_pt remote_proxy_factory_service_ptr; + properties_pt properties; + service_registration_pt registration; + + hash_map_pt proxy_instances; + + void *handle; + + createProxyService create_proxy_service_ptr; + destroyProxyService destroy_proxy_service_ptr; +}; + +struct remote_proxy_factory_service { + remote_proxy_factory_pt factory; + celix_status_t (*registerProxyService)(remote_proxy_factory_pt proxyFactoryService, endpoint_description_pt endpoint, remote_service_admin_pt remote_service_admin_ptr, sendToHandle callback); + celix_status_t (*unregisterProxyService)(remote_proxy_factory_pt proxyFactoryService, endpoint_description_pt endpoint); +}; + +celix_status_t remoteProxyFactory_create(bundle_context_pt context, char *service, void *handle, + createProxyService create, destroyProxyService destroy, + remote_proxy_factory_pt *remote_proxy_factory_ptr); +celix_status_t remoteProxyFactory_destroy(remote_proxy_factory_pt *remote_proxy_factory_ptr); + +celix_status_t remoteProxyFactory_register(remote_proxy_factory_pt remote_proxy_factory_ptr); +celix_status_t remoteProxyFactory_unregister(remote_proxy_factory_pt remote_proxy_factory_ptr); + + + + +#endif /* REMOTE_PROXY_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin_api/include/remote_service_admin.h ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_api/include/remote_service_admin.h b/remote_services/remote_service_admin_api/include/remote_service_admin.h new file mode 100644 index 0000000..cc7fd98 --- /dev/null +++ b/remote_services/remote_service_admin_api/include/remote_service_admin.h @@ -0,0 +1,73 @@ +/** + *Licensed to the Apache Software Foundation (ASF) under one + *or more contributor license agreements. See the NOTICE file + *distributed with this work for additional information + *regarding copyright ownership. The ASF licenses this file + *to you under the Apache License, Version 2.0 (the + *"License"); you may not use this file except in compliance + *with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + *Unless required by applicable law or agreed to in writing, + *software distributed under the License is distributed on an + *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + *specific language governing permissions and limitations + *under the License. + */ +/* + * remote_service_admin.h + * + * \date Sep 30, 2011 + * \author Apache Celix Project Team + * \copyright Apache License, Version 2.0 + */ + +#ifndef REMOTE_SERVICE_ADMIN_H_ +#define REMOTE_SERVICE_ADMIN_H_ + +#include "endpoint_listener.h" +#include "service_reference.h" +#include "export_registration.h" +#include "import_registration.h" + +#define OSGI_RSA_REMOTE_SERVICE_ADMIN "remote_service_admin" + +typedef struct import_registration_factory import_registration_factory_t; +typedef import_registration_factory_t* import_registration_factory_pt; + +typedef struct remote_service_admin remote_service_admin_t; +typedef remote_service_admin_t* remote_service_admin_pt; + +struct remote_service_admin_service { + remote_service_admin_pt admin; + celix_status_t (*exportService)(remote_service_admin_pt admin, char *serviceId, properties_pt properties, array_list_pt *registrations); + celix_status_t (*removeExportedService)(remote_service_admin_pt admin, export_registration_pt registration); + celix_status_t (*getExportedServices)(remote_service_admin_pt admin, array_list_pt *services); + celix_status_t (*getImportedEndpoints)(remote_service_admin_pt admin, array_list_pt *services); + celix_status_t (*importService)(remote_service_admin_pt admin, endpoint_description_pt endpoint, import_registration_pt *registration); + + celix_status_t (*exportReference_getExportedEndpoint)(export_reference_pt reference, endpoint_description_pt *endpoint); + celix_status_t (*exportReference_getExportedService)(export_reference_pt reference, service_reference_pt *service); + + celix_status_t (*exportRegistration_close)(remote_service_admin_pt admin, export_registration_pt registration); + celix_status_t (*exportRegistration_getException)(export_registration_pt registration); + celix_status_t (*exportRegistration_getExportReference)(export_registration_pt registration, export_reference_pt *reference); + celix_status_t (*exportRegistration_freeExportReference)(export_reference_pt *reference); + celix_status_t (*exportRegistration_getEndpointDescription)(export_registration_pt registration, endpoint_description_pt endpointDescription); + + celix_status_t (*importReference_getImportedEndpoint)(import_reference_pt reference); + celix_status_t (*importReference_getImportedService)(import_reference_pt reference); + + celix_status_t (*importRegistration_close)(remote_service_admin_pt admin, import_registration_pt registration); + celix_status_t (*importRegistration_getException)(import_registration_pt registration); + celix_status_t (*importRegistration_getImportReference)(import_registration_pt registration, import_reference_pt *reference); + +}; + +typedef struct remote_service_admin_service remote_service_admin_service_t; +typedef remote_service_admin_service_t* remote_service_admin_service_pt; + + +#endif /* REMOTE_SERVICE_ADMIN_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin_common/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_common/CMakeLists.txt b/remote_services/remote_service_admin_common/CMakeLists.txt new file mode 100644 index 0000000..1813211 --- /dev/null +++ b/remote_services/remote_service_admin_common/CMakeLists.txt @@ -0,0 +1,24 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +add_library(remote_service_admin_common STATIC + src/endpoint_description.c + src/export_registration_impl.c + src/import_registration_impl.c +) +target_include_directories(remote_service_admin_common PRIVATE src) +target_link_libraries(remote_service_admin_common PUBLIC Celix::framework Celix::remote_service_admin_api Celix::log_helper) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/celix/blob/2a670f26/remote_services/remote_service_admin_common/src/endpoint_description.c ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_common/src/endpoint_description.c b/remote_services/remote_service_admin_common/src/endpoint_description.c new file mode 100644 index 0000000..0d8b684 --- /dev/null +++ b/remote_services/remote_service_admin_common/src/endpoint_description.c @@ -0,0 +1,89 @@ +/** + *Licensed to the Apache Software Foundation (ASF) under one + *or more contributor license agreements. See the NOTICE file + *distributed with this work for additional information + *regarding copyright ownership. The ASF licenses this file + *to you under the Apache License, Version 2.0 (the + *"License"); you may not use this file except in compliance + *with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + *Unless required by applicable law or agreed to in writing, + *software distributed under the License is distributed on an + *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + *specific language governing permissions and limitations + *under the License. + */ +/* + * endpoint_description.c + * + * \date 25 Jul 2014 + * \author Apache Celix Project Team + * \copyright Apache License, Version 2.0 + */ +#include +#include + +#include "celix_errno.h" +#include "celix_log.h" + +#include "endpoint_description.h" +#include "remote_constants.h" +#include "constants.h" + +static celix_status_t endpointDescription_verifyLongProperty(properties_pt properties, char *propertyName, unsigned long *longProperty); + +celix_status_t endpointDescription_create(properties_pt properties, endpoint_description_pt *endpointDescription) { + celix_status_t status = CELIX_SUCCESS; + + unsigned long serviceId = 0UL; + status = endpointDescription_verifyLongProperty(properties, (char *) OSGI_RSA_ENDPOINT_SERVICE_ID, &serviceId); + if (status != CELIX_SUCCESS) { + return status; + } + + endpoint_description_pt ep = calloc(1,sizeof(*ep)); + + ep->properties = properties; + ep->frameworkUUID = (char*)properties_get(properties, OSGI_RSA_ENDPOINT_FRAMEWORK_UUID); + ep->id = (char*)properties_get(properties, OSGI_RSA_ENDPOINT_ID); + ep->service = strndup(properties_get(properties, OSGI_FRAMEWORK_OBJECTCLASS), 1024*10); + ep->serviceId = serviceId; + + if (!(ep->frameworkUUID) || !(ep->id) || !(ep->service) ) { + fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "ENDPOINT_DESCRIPTION: incomplete description!."); + status = CELIX_BUNDLE_EXCEPTION; + } + + if(status == CELIX_SUCCESS){ + *endpointDescription = ep; + } + else{ + *endpointDescription = NULL; + free(ep); + } + + return status; +} + +celix_status_t endpointDescription_destroy(endpoint_description_pt description) { + properties_destroy(description->properties); + free(description->service); + free(description); + return CELIX_SUCCESS; +} + +static celix_status_t endpointDescription_verifyLongProperty(properties_pt properties, char *propertyName, unsigned long *longProperty) { + celix_status_t status = CELIX_SUCCESS; + + const char *value = properties_get(properties, propertyName); + if (value == NULL) { + *longProperty = 0UL; + } else { + *longProperty = strtoul(value,NULL,10); + } + + return status; +}