http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/pubsub/deploy/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/pubsub/deploy/CMakeLists.txt b/pubsub/deploy/CMakeLists.txt
index 5039aea..6f9234d 100644
--- a/pubsub/deploy/CMakeLists.txt
+++ b/pubsub/deploy/CMakeLists.txt
@@ -22,53 +22,53 @@ find_program(XTERM_CMD NAMES xterm)
 add_deploy(pubsub_publisher_udp_mc
        GROUP pubsub
        BUNDLES
-          shell
-          shell_tui
-          org.apache.celix.pubsub_serializer.PubSubSerializerJson
-          org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
-          org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
-          org.apache.celix.pubsub_admin.PubSubAdminUdpMc
-          org.apache.celix.pubsub_publisher.PoiPublisher
-          org.apache.celix.pubsub_publisher.PoiPublisher2
+               Celix::shell
+               Celix::shell_tui
+               org.apache.celix.pubsub_serializer.PubSubSerializerJson
+               org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
+               org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
+               org.apache.celix.pubsub_admin.PubSubAdminUdpMc
+               org.apache.celix.pubsub_publisher.PoiPublisher
+               org.apache.celix.pubsub_publisher.PoiPublisher2
 )
 
 add_deploy("pubsub_subscriber_udp_mc"
        GROUP "pubsub"
        BUNDLES
-          shell
-          shell_tui
-          org.apache.celix.pubsub_serializer.PubSubSerializerJson
-          org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
-          org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
-          org.apache.celix.pubsub_admin.PubSubAdminUdpMc
-          org.apache.celix.pubsub_subscriber.PoiSubscriber
+               Celix::shell
+               Celix::shell_tui
+               org.apache.celix.pubsub_serializer.PubSubSerializerJson
+               org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
+               org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
+               org.apache.celix.pubsub_admin.PubSubAdminUdpMc
+               org.apache.celix.pubsub_subscriber.PoiSubscriber
 )
 
 add_deploy("pubsub_subscriber2_udp_mc"
        GROUP "pubsub"
        BUNDLES
-          shell
-          shell_tui
-          org.apache.celix.pubsub_serializer.PubSubSerializerJson
-          org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
-          org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
-          org.apache.celix.pubsub_admin.PubSubAdminUdpMc
-          org.apache.celix.pubsub_subscriber.PoiSubscriber
+               Celix::shell
+               Celix::shell_tui
+               org.apache.celix.pubsub_serializer.PubSubSerializerJson
+               org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
+               org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
+               org.apache.celix.pubsub_admin.PubSubAdminUdpMc
+               org.apache.celix.pubsub_subscriber.PoiSubscriber
 )
 
 if (ETCD_CMD AND XTERM_CMD)
        #Runtime starting a publish and subscriber for udp mc
        add_runtime(pubsub_rt_upd_mc
-                       NAME udp_mc
-                       GROUP pubsub
-                       DEPLOYMENTS
+               NAME udp_mc
+               GROUP pubsub
+               DEPLOYMENTS
                        pubsub_publisher_udp_mc
                        pubsub_subscriber_udp_mc
                        pubsub_subscriber2_udp_mc
-                       COMMANDS
+               COMMANDS
                        etcd
-                       USE_TERM
-                       )
+               USE_TERM
+       )
 endif ()
 
 if (BUILD_PUBSUB_PSA_ZMQ)
@@ -77,61 +77,61 @@ if (BUILD_PUBSUB_PSA_ZMQ)
        add_deploy("pubsub_publisher"
            GROUP "pubsub"
            BUNDLES
-              shell
-              shell_tui
-              org.apache.celix.pubsub_serializer.PubSubSerializerJson
-              org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
-              org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
-              org.apache.celix.pubsub_admin.PubSubAdminZmq
-              org.apache.celix.pubsub_admin.PubSubAdminUdpMc
-              org.apache.celix.pubsub_publisher.PoiPublisher
-              org.apache.celix.pubsub_publisher.PoiPublisher2
+                       Celix::shell
+                       Celix::shell_tui
+               org.apache.celix.pubsub_serializer.PubSubSerializerJson
+               org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
+               org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
+               org.apache.celix.pubsub_admin.PubSubAdminZmq
+               org.apache.celix.pubsub_admin.PubSubAdminUdpMc
+               org.apache.celix.pubsub_publisher.PoiPublisher
+               org.apache.celix.pubsub_publisher.PoiPublisher2
            PROPERTIES
-              poi1.psa=zmq
-              poi2.psa=udp
+               poi1.psa=zmq
+               poi2.psa=udp
        )
 
        add_deploy("pubsub_subscriber"
            GROUP "pubsub"
            BUNDLES
-              shell
-              shell_tui
-              org.apache.celix.pubsub_serializer.PubSubSerializerJson
-              org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
-              org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
-              org.apache.celix.pubsub_admin.PubSubAdminZmq
-              org.apache.celix.pubsub_admin.PubSubAdminUdpMc
-              org.apache.celix.pubsub_subscriber.PoiSubscriber
+                       Celix::shell
+                       Celix::shell_tui
+               org.apache.celix.pubsub_serializer.PubSubSerializerJson
+               org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
+               org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
+               org.apache.celix.pubsub_admin.PubSubAdminZmq
+               org.apache.celix.pubsub_admin.PubSubAdminUdpMc
+               org.apache.celix.pubsub_subscriber.PoiSubscriber
            PROPERTIES
-              poi1.psa=zmq
-              poi2.psa=udp
+               poi1.psa=zmq
+               poi2.psa=udp
        )
 
        # ZMQ
        add_deploy("pubsub_zmq"
            GROUP "pubsub"
            BUNDLES
-              shell
-              shell_tui
-              org.apache.celix.pubsub_serializer.PubSubSerializerJson
-              org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
-              org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
-              org.apache.celix.pubsub_admin.PubSubAdminZmq
-              org.apache.celix.pubsub_publisher.PoiPublisher
-              org.apache.celix.pubsub_subscriber.PoiSubscriber
+                       Celix::shell
+                       Celix::shell_tui
+               org.apache.celix.pubsub_serializer.PubSubSerializerJson
+               org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
+               org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
+               org.apache.celix.pubsub_admin.PubSubAdminZmq
+               org.apache.celix.pubsub_publisher.PoiPublisher
+               org.apache.celix.pubsub_subscriber.PoiSubscriber
        )
 
        add_deploy("pubsub_publisher_zmq"
            GROUP "pubsub"
            BUNDLES
-              shell
-              shell_tui
-              org.apache.celix.pubsub_serializer.PubSubSerializerJson
-              org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
-              org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
-              org.apache.celix.pubsub_admin.PubSubAdminZmq
-              org.apache.celix.pubsub_publisher.PoiPublisher
-              org.apache.celix.pubsub_publisher.PoiPublisher2
+                       Celix::shell
+                       Celix::shell_tui
+               org.apache.celix.pubsub_serializer.PubSubSerializerJson
+               org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
+               org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
+               org.apache.celix.pubsub_admin.PubSubAdminZmq
+               org.apache.celix.pubsub_publisher.PoiPublisher
+               org.apache.celix.pubsub_publisher.PoiPublisher2
                PROPERTIES
                    pubsub.scope=my_small_scope
        )
@@ -139,25 +139,25 @@ if (BUILD_PUBSUB_PSA_ZMQ)
        add_deploy("pubsub_subscriber_zmq"
            GROUP "pubsub"
            BUNDLES
-              shell
-              shell_tui
-              org.apache.celix.pubsub_serializer.PubSubSerializerJson
-              org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
-              org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
-              org.apache.celix.pubsub_admin.PubSubAdminZmq
-              org.apache.celix.pubsub_subscriber.PoiSubscriber
+                       Celix::shell
+                       Celix::shell_tui
+               org.apache.celix.pubsub_serializer.PubSubSerializerJson
+               org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
+               org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
+               org.apache.celix.pubsub_admin.PubSubAdminZmq
+               org.apache.celix.pubsub_subscriber.PoiSubscriber
        )
 
        add_deploy("pubsub_subscriber2_zmq"
            GROUP "pubsub"
            BUNDLES
-              shell
-              shell_tui
-              org.apache.celix.pubsub_serializer.PubSubSerializerJson
-              org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
-              org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
-              org.apache.celix.pubsub_admin.PubSubAdminZmq
-              org.apache.celix.pubsub_subscriber.PoiSubscriber
+                       Celix::shell
+                       Celix::shell_tui
+               org.apache.celix.pubsub_serializer.PubSubSerializerJson
+               org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
+               org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
+               org.apache.celix.pubsub_admin.PubSubAdminZmq
+               org.apache.celix.pubsub_subscriber.PoiSubscriber
 
        )
 
@@ -165,20 +165,20 @@ if (BUILD_PUBSUB_PSA_ZMQ)
        add_deploy("pubsub_mp_subscriber_zmq"
            GROUP "pubsub"
            BUNDLES
-              shell
-              shell_tui
-              org.apache.celix.pubsub_serializer.PubSubSerializerJson
-              org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
-              org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
-              org.apache.celix.pubsub_admin.PubSubAdminZmq
-              org.apache.celix.pubsub_subscriber.MpSubscriber
+                       Celix::hell
+                       Celix::shell_tui
+               org.apache.celix.pubsub_serializer.PubSubSerializerJson
+               org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
+               org.apache.celix.pubsub_topology_manager.PubSubTopologyManager
+               org.apache.celix.pubsub_admin.PubSubAdminZmq
+               org.apache.celix.pubsub_subscriber.MpSubscriber
        )
 
        add_deploy("pubsub_mp_publisher_zmq"
            GROUP "pubsub"
            BUNDLES
-                       shell
-                       shell_tui
+                       Celix::shell
+                       Celix::shell_tui
                        org.apache.celix.pubsub_serializer.PubSubSerializerJson
                        org.apache.celix.pubsub_discovery.etcd.PubsubDiscovery
                        
org.apache.celix.pubsub_topology_manager.PubSubTopologyManager

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/remote_services/CMakeLists.txt b/remote_services/CMakeLists.txt
index d5d07a3..767ece7 100644
--- a/remote_services/CMakeLists.txt
+++ b/remote_services/CMakeLists.txt
@@ -17,17 +17,6 @@
 
 celix_subproject(REMOTE_SERVICE_ADMIN "Option to enable building the Remote 
Service Admin Service bundles" OFF)
 if (REMOTE_SERVICE_ADMIN)
-    # Add -fPIC for x86_64 Unix platforms; this lib will be linked to a shared 
lib
-    if(UNIX AND NOT WIN32)
-      find_program(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin )
-      if(CMAKE_UNAME)
-        exec_program(uname ARGS -m OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR)
-        set(CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR} CACHE INTERNAL 
"processor type (i386 and x86_64)")
-         if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
-          add_definitions(-fPIC)
-        endif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
-      endif(CMAKE_UNAME)
-    endif(UNIX AND NOT WIN32)
 
     add_subdirectory(examples)
 
@@ -37,8 +26,8 @@ if (REMOTE_SERVICE_ADMIN)
     add_subdirectory(discovery_etcd)
     add_subdirectory(discovery_shm)
 
-    add_subdirectory(remote_service_admin_http)
-    add_subdirectory(remote_service_admin_shm)
+    #TODO refactor shm rsa to use dfi
+    #add_subdirectory(remote_service_admin_shm)
     add_subdirectory(remote_service_admin)
     add_subdirectory(remote_service_admin_dfi)
 

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/discovery_configured/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/remote_services/discovery_configured/CMakeLists.txt 
b/remote_services/discovery_configured/CMakeLists.txt
index edbbc13..b9f849d 100644
--- a/remote_services/discovery_configured/CMakeLists.txt
+++ b/remote_services/discovery_configured/CMakeLists.txt
@@ -46,13 +46,12 @@ if (RSA_DISCOVERY_CONFIGURED)
        
${PROJECT_SOURCE_DIR}/remote_services/discovery/private/src/endpoint_discovery_server.c
        
${PROJECT_SOURCE_DIR}/remote_services/remote_service_admin/private/src/endpoint_description.c
        ${PROJECT_SOURCE_DIR}/remote_services/utils/private/src/civetweb.c
-
-       ${PROJECT_SOURCE_DIR}/log_service/public/src/log_helper.c
     )
+    target_link_libraries(discovery_configured PRIVATE Celix::log_helper)
 
     install_bundle(discovery_configured)
 
-    target_link_libraries(discovery_configured celix_framework 
${CURL_LIBRARIES} ${LIBXML2_LIBRARIES})
+    target_link_libraries(discovery_configured PRIVATE ${CURL_LIBRARIES} 
${LIBXML2_LIBRARIES})
 
     if (RSA_ENDPOINT_TEST_READER)
         add_executable(descparser

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/discovery_etcd/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/remote_services/discovery_etcd/CMakeLists.txt 
b/remote_services/discovery_etcd/CMakeLists.txt
index 442d486..b8955de 100644
--- a/remote_services/discovery_etcd/CMakeLists.txt
+++ b/remote_services/discovery_etcd/CMakeLists.txt
@@ -40,8 +40,8 @@ if (RSA_DISCOVERY_ETCD)
         SYMBOLIC_NAME "apache_celix_rsa_discovery_etcd"
         NAME "Apache Celix RSA Discovery ETCD"
         SOURCES
-               private/src/discovery_impl.c
-           private/src/etcd_watcher.c
+               src/discovery_impl.c
+           src/etcd_watcher.c
                
${PROJECT_SOURCE_DIR}/remote_services/discovery/private/src/discovery_activator.c
                
${PROJECT_SOURCE_DIR}/remote_services/discovery/private/src/discovery.c
                
${PROJECT_SOURCE_DIR}/remote_services/discovery/private/src/endpoint_descriptor_reader.c
@@ -50,12 +50,12 @@ if (RSA_DISCOVERY_ETCD)
                
${PROJECT_SOURCE_DIR}/remote_services/discovery/private/src/endpoint_discovery_server.c
            
${PROJECT_SOURCE_DIR}/remote_services/remote_service_admin/private/src/endpoint_description.c
            ${PROJECT_SOURCE_DIR}/remote_services/utils/private/src/civetweb.c
-           
-           ${PROJECT_SOURCE_DIR}/log_service/public/src/log_helper.c
        )
+       target_link_libraries(discovery_etcd PRIVATE Celix::log_helper)
+       target_include_directories(discovery_etcd PRIVATE src 
../discovery/private/include)
 
        install_bundle(discovery_etcd)
                
-       target_link_libraries(discovery_etcd celix_framework etcdlib 
${CURL_LIBRARIES} ${LIBXML2_LIBRARIES} ${JANSSON_LIBRARIES})
+       target_link_libraries(discovery_etcd PRIVATE Celix::etcdlib 
${CURL_LIBRARIES} ${LIBXML2_LIBRARIES} ${JANSSON_LIBRARIES})
 
 endif (RSA_DISCOVERY_ETCD)

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/discovery_etcd/private/include/discovery_impl.h
----------------------------------------------------------------------
diff --git a/remote_services/discovery_etcd/private/include/discovery_impl.h 
b/remote_services/discovery_etcd/private/include/discovery_impl.h
deleted file mode 100644
index a19b145..0000000
--- a/remote_services/discovery_etcd/private/include/discovery_impl.h
+++ /dev/null
@@ -1,66 +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.
- */
-/*
- * discovery_impl.h
- *
- *  \date       Sep 29, 2011
- *  \author            <a href="mailto:[email protected]";>Apache Celix 
Project Team</a>
- *  \copyright Apache License, Version 2.0
- */
-
-#ifndef DISCOVERY_IMPL_H_
-#define DISCOVERY_IMPL_H_
-
-#include "bundle_context.h"
-#include "service_reference.h"
-
-#include "endpoint_description.h"
-#include "endpoint_listener.h"
-
-#include "endpoint_discovery_poller.h"
-#include "endpoint_discovery_server.h"
-#include "etcd_watcher.h"
-
-#include "log_helper.h"
-
-#define DEFAULT_SERVER_IP      "127.0.0.1"
-#define DEFAULT_SERVER_PORT "9999"
-#define DEFAULT_SERVER_PATH "/org.apache.celix.discovery.etcd"
-
-#define DEFAULT_POLL_ENDPOINTS ""
-
-#define FREE_MEM(ptr) if(ptr) {free(ptr); ptr = NULL;}
-
-struct discovery {
-       bundle_context_pt context;
-
-       celix_thread_mutex_t listenerReferencesMutex;
-       celix_thread_mutex_t discoveredServicesMutex;
-
-       hash_map_pt listenerReferences; //key=serviceReference, value=nop
-       hash_map_pt discoveredServices; //key=endpointId (string), 
value=endpoint_description_pt
-
-       etcd_watcher_pt watcher;
-       endpoint_discovery_poller_pt poller;
-       endpoint_discovery_server_pt server;
-
-       log_helper_pt loghelper;
-};
-
-#endif /* DISCOVERY_H_ */

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/discovery_etcd/private/include/etcd_watcher.h
----------------------------------------------------------------------
diff --git a/remote_services/discovery_etcd/private/include/etcd_watcher.h 
b/remote_services/discovery_etcd/private/include/etcd_watcher.h
deleted file mode 100644
index b4dbf40..0000000
--- a/remote_services/discovery_etcd/private/include/etcd_watcher.h
+++ /dev/null
@@ -1,40 +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.
- */
-/*
- * etcd_watcher.h
- *
- * \date       17 Sep 2014
- * \author     <a href="mailto:[email protected]";>Apache Celix Project 
Team</a>
- * \copyright  Apache License, Version 2.0
- */
-
-#ifndef ETCD_WATCHER_H_
-#define ETCD_WATCHER_H_
-
-#include "celix_errno.h"
-#include "discovery.h"
-#include "endpoint_discovery_poller.h"
-
-typedef struct etcd_watcher *etcd_watcher_pt;
-
-celix_status_t etcdWatcher_create(discovery_pt discovery,  bundle_context_pt 
context, etcd_watcher_pt *watcher);
-celix_status_t etcdWatcher_destroy(etcd_watcher_pt watcher);
-
-
-#endif /* ETCD_WATCHER_H_ */

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/discovery_etcd/private/src/discovery_impl.c
----------------------------------------------------------------------
diff --git a/remote_services/discovery_etcd/private/src/discovery_impl.c 
b/remote_services/discovery_etcd/private/src/discovery_impl.c
deleted file mode 100644
index 8087d95..0000000
--- a/remote_services/discovery_etcd/private/src/discovery_impl.c
+++ /dev/null
@@ -1,183 +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.
- */
-/*
- * discovery_impl.c
- *
- * \date        Aug 8, 2014
- * \author     <a href="mailto:[email protected]";>Apache Celix Project 
Team</a>
- * \copyright  Apache License, Version 2.0
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdbool.h>
-#include <netdb.h>
-#include <netinet/in.h>
-
-#include "constants.h"
-#include "celix_threads.h"
-#include "bundle_context.h"
-#include "array_list.h"
-#include "utils.h"
-#include "celix_errno.h"
-#include "filter.h"
-#include "service_reference.h"
-#include "service_registration.h"
-#include "remote_constants.h"
-
-
-#include "discovery.h"
-#include "discovery_impl.h"
-#include "etcd_watcher.h"
-#include "endpoint_discovery_poller.h"
-#include "endpoint_discovery_server.h"
-
-
-
-celix_status_t discovery_create(bundle_context_pt context, discovery_pt 
*discovery) {
-       celix_status_t status = CELIX_SUCCESS;
-
-       *discovery = malloc(sizeof(struct discovery));
-       if (!*discovery) {
-               return CELIX_ENOMEM;
-       }
-
-       (*discovery)->context = context;
-       (*discovery)->poller = NULL;
-       (*discovery)->server = NULL;
-
-       (*discovery)->listenerReferences = 
hashMap_create(serviceReference_hashCode, NULL, serviceReference_equals2, NULL);
-       (*discovery)->discoveredServices = hashMap_create(utils_stringHash, 
NULL, utils_stringEquals, NULL);
-
-       status = 
celixThreadMutex_create(&(*discovery)->listenerReferencesMutex, NULL);
-       status = 
celixThreadMutex_create(&(*discovery)->discoveredServicesMutex, NULL);
-
-       logHelper_create(context, &(*discovery)->loghelper);
-
-       return status;
-}
-
-
-
-celix_status_t discovery_destroy(discovery_pt discovery) {
-       celix_status_t status = CELIX_SUCCESS;
-
-       discovery->context = NULL;
-       discovery->poller = NULL;
-       discovery->server = NULL;
-
-       celixThreadMutex_lock(&discovery->discoveredServicesMutex);
-
-       hashMap_destroy(discovery->discoveredServices, false, false);
-       discovery->discoveredServices = NULL;
-
-       celixThreadMutex_unlock(&discovery->discoveredServicesMutex);
-
-       celixThreadMutex_destroy(&discovery->discoveredServicesMutex);
-
-       celixThreadMutex_lock(&discovery->listenerReferencesMutex);
-
-       hashMap_destroy(discovery->listenerReferences, false, false);
-       discovery->listenerReferences = NULL;
-
-       celixThreadMutex_unlock(&discovery->listenerReferencesMutex);
-
-       celixThreadMutex_destroy(&discovery->listenerReferencesMutex);
-
-       logHelper_destroy(&discovery->loghelper);
-
-       free(discovery);
-
-       return status;
-}
-
-celix_status_t discovery_start(discovery_pt discovery) {
-    celix_status_t status = CELIX_SUCCESS;
-       const char *port = NULL;
-       const char *path = NULL;
-
-       logHelper_start(discovery->loghelper);
-
-       bundleContext_getProperty(discovery->context, DISCOVERY_SERVER_PORT, 
&port);
-       if (port == NULL) {
-               port = DEFAULT_SERVER_PORT;
-       }
-
-       bundleContext_getProperty(discovery->context, DISCOVERY_SERVER_PATH, 
&path);
-       if (path == NULL) {
-               path = DEFAULT_SERVER_PATH;
-       }
-
-    status = endpointDiscoveryPoller_create(discovery, discovery->context, 
&discovery->poller);
-    if (status != CELIX_SUCCESS) {
-       return CELIX_BUNDLE_EXCEPTION;
-    }
-
-    status = endpointDiscoveryServer_create(discovery, discovery->context, 
&discovery->server);
-    if (status != CELIX_SUCCESS) {
-               return CELIX_BUNDLE_EXCEPTION;
-    }
-
-    status = etcdWatcher_create(discovery, discovery->context, 
&discovery->watcher);
-    if (status != CELIX_SUCCESS) {
-       return CELIX_BUNDLE_EXCEPTION;
-    }
-    return status;
-}
-
-celix_status_t discovery_stop(discovery_pt discovery) {
-       celix_status_t status;
-
-       status = etcdWatcher_destroy(discovery->watcher);
-       if (status != CELIX_SUCCESS) {
-               return CELIX_BUNDLE_EXCEPTION;
-       }
-
-       status = endpointDiscoveryServer_destroy(discovery->server);
-       if (status != CELIX_SUCCESS) {
-               return CELIX_BUNDLE_EXCEPTION;
-       }
-
-       status = endpointDiscoveryPoller_destroy(discovery->poller);
-       if (status != CELIX_SUCCESS) {
-               return CELIX_BUNDLE_EXCEPTION;
-       }
-       hash_map_iterator_pt iter;
-
-       celixThreadMutex_lock(&discovery->discoveredServicesMutex);
-
-       iter = hashMapIterator_create(discovery->discoveredServices);
-       while (hashMapIterator_hasNext(iter)) {
-               hash_map_entry_pt entry = hashMapIterator_nextEntry(iter);
-               endpoint_description_pt endpoint = hashMapEntry_getValue(entry);
-
-               discovery_informEndpointListeners(discovery, endpoint, false);
-       }
-       hashMapIterator_destroy(iter);
-
-       celixThreadMutex_unlock(&discovery->discoveredServicesMutex);
-
-
-       logHelper_stop(discovery->loghelper);
-
-       return status;
-}
-
-
-

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/discovery_etcd/private/src/etcd_watcher.c
----------------------------------------------------------------------
diff --git a/remote_services/discovery_etcd/private/src/etcd_watcher.c 
b/remote_services/discovery_etcd/private/src/etcd_watcher.c
deleted file mode 100644
index ebeac4f..0000000
--- a/remote_services/discovery_etcd/private/src/etcd_watcher.c
+++ /dev/null
@@ -1,397 +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.
- */
-/*
- * etcd_watcher.c
- *
- * \date       16 Sep 2014
- * \author     <a href="mailto:[email protected]";>Apache Celix Project 
Team</a>
- * \copyright  Apache License, Version 2.0
- */
-
-#include <stdbool.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-
-#include "log_helper.h"
-#include "log_service.h"
-#include "constants.h"
-#include "utils.h"
-#include "discovery.h"
-#include "discovery_impl.h"
-
-#include <curl/curl.h>
-#include "etcd.h"
-#include "etcd_watcher.h"
-
-#include "endpoint_discovery_poller.h"
-
-struct etcd_watcher {
-    discovery_pt discovery;
-    log_helper_pt* loghelper;
-    hash_map_pt entries;
-
-       celix_thread_mutex_t watcherLock;
-       celix_thread_t watcherThread;
-
-       volatile bool running;
-};
-
-
-#define MAX_ROOTNODE_LENGTH                    128
-#define MAX_LOCALNODE_LENGTH           4096
-#define MAX_VALUE_LENGTH                       256
-
-#define CFG_ETCD_ROOT_PATH                     "DISCOVERY_ETCD_ROOT_PATH"
-#define DEFAULT_ETCD_ROOTPATH          "discovery"
-
-#define CFG_ETCD_SERVER_IP                     "DISCOVERY_ETCD_SERVER_IP"
-#define DEFAULT_ETCD_SERVER_IP         "127.0.0.1"
-
-#define CFG_ETCD_SERVER_PORT           "DISCOVERY_ETCD_SERVER_PORT"
-#define DEFAULT_ETCD_SERVER_PORT       2379
-
-// be careful - this should be higher than the curl timeout
-#define CFG_ETCD_TTL                                   "DISCOVERY_ETCD_TTL"
-#define DEFAULT_ETCD_TTL                       30
-
-
-// note that the rootNode shouldn't have a leading slash
-static celix_status_t etcdWatcher_getRootPath(bundle_context_pt context, char* 
rootNode) {
-       celix_status_t status = CELIX_SUCCESS;
-       const char* rootPath = NULL;
-
-       if (((bundleContext_getProperty(context, CFG_ETCD_ROOT_PATH, 
&rootPath)) != CELIX_SUCCESS) || (!rootPath)) {
-               strncpy(rootNode, DEFAULT_ETCD_ROOTPATH, MAX_ROOTNODE_LENGTH);
-       }
-       else {
-               strncpy(rootNode, rootPath, MAX_ROOTNODE_LENGTH);
-       }
-
-       return status;
-}
-
-static celix_status_t etcdWatcher_getLocalNodePath(bundle_context_pt context, 
char* localNodePath) {
-       celix_status_t status = CELIX_SUCCESS;
-       char rootPath[MAX_ROOTNODE_LENGTH];
-    const char* uuid = NULL;
-
-    if ((etcdWatcher_getRootPath(context, rootPath) != CELIX_SUCCESS)) {
-               status = CELIX_ILLEGAL_STATE;
-    }
-       else if (((bundleContext_getProperty(context, 
OSGI_FRAMEWORK_FRAMEWORK_UUID, &uuid)) != CELIX_SUCCESS) || (!uuid)) {
-               status = CELIX_ILLEGAL_STATE;
-       }
-       else if (rootPath[strlen(rootPath) - 1] == '/') {
-       snprintf(localNodePath, MAX_LOCALNODE_LENGTH, "%s%s", rootPath, uuid);
-    }
-    else {
-       snprintf(localNodePath, MAX_LOCALNODE_LENGTH, "%s/%s", rootPath, uuid);
-    }
-
-    return status;
-}
-
-static void add_node(const char *key, const char *value, void* arg) {
-       discovery_pt discovery = (discovery_pt) arg;
-       endpointDiscoveryPoller_addDiscoveryEndpoint(discovery->poller, (char 
*) value);
-}
-
-/*
- * retrieves all already existing discovery endpoints
- * from etcd and adds them to the poller.
- *
- * returns the modifiedIndex of the last modified
- * discovery endpoint (see etcd documentation).
- */
-static celix_status_t etcdWatcher_addAlreadyExistingWatchpoints(discovery_pt 
discovery, long long* highestModified) {
-       celix_status_t status = CELIX_SUCCESS;
-
-       char rootPath[MAX_ROOTNODE_LENGTH];
-       status = etcdWatcher_getRootPath(discovery->context, rootPath);
-
-       if (status == CELIX_SUCCESS) {
-               if(etcd_get_directory(rootPath, add_node, discovery, 
highestModified)) {
-                           status = CELIX_ILLEGAL_ARGUMENT;
-               }
-       }
-
-       return status;
-}
-
-
-static celix_status_t etcdWatcher_addOwnFramework(etcd_watcher_pt watcher)
-{
-    celix_status_t status = CELIX_BUNDLE_EXCEPTION;
-    char localNodePath[MAX_LOCALNODE_LENGTH];
-    char *value;
-       char url[MAX_VALUE_LENGTH];
-    int modIndex;
-    char* endpoints = NULL;
-    const char* ttlStr = NULL;
-    int ttl;
-
-       bundle_context_pt context = watcher->discovery->context;
-       endpoint_discovery_server_pt server = watcher->discovery->server;
-
-    // register own framework
-    if ((status = etcdWatcher_getLocalNodePath(context, localNodePath)) != 
CELIX_SUCCESS) {
-        return status;
-    }
-
-       if (endpointDiscoveryServer_getUrl(server, url) != CELIX_SUCCESS) {
-               snprintf(url, MAX_VALUE_LENGTH, "http://%s:%s/%s";, 
DEFAULT_SERVER_IP, DEFAULT_SERVER_PORT, DEFAULT_SERVER_PATH);
-       }
-
-       endpoints = url;
-
-    if ((bundleContext_getProperty(context, CFG_ETCD_TTL, &ttlStr) != 
CELIX_SUCCESS) || !ttlStr) {
-        ttl = DEFAULT_ETCD_TTL;
-    }
-    else
-    {
-        char* endptr = (char *) ttlStr;
-        errno = 0;
-        ttl = strtol(ttlStr, &endptr, 10);
-        if (*endptr || errno != 0) {
-            ttl = DEFAULT_ETCD_TTL;
-        }
-    }
-
-       if (etcd_get(localNodePath, &value, &modIndex) != true) {
-               etcd_set(localNodePath, endpoints, ttl, false);
-       }
-       else if (etcd_set(localNodePath, endpoints, ttl, true) == false)  {
-               logHelper_log(*watcher->loghelper, OSGI_LOGSERVICE_WARNING, 
"Cannot register local discovery");
-    }
-    else {
-        status = CELIX_SUCCESS;
-    }
-
-       FREE_MEM(value);
-
-    return status;
-}
-
-
-
-
-static celix_status_t etcdWatcher_addEntry(etcd_watcher_pt watcher, char* key, 
char* value) {
-       celix_status_t status = CELIX_BUNDLE_EXCEPTION;
-       endpoint_discovery_poller_pt poller = watcher->discovery->poller;
-
-       if (!hashMap_containsKey(watcher->entries, key)) {
-               status = endpointDiscoveryPoller_addDiscoveryEndpoint(poller, 
value);
-
-               if (status == CELIX_SUCCESS) {
-                       hashMap_put(watcher->entries, strdup(key), 
strdup(value));
-               }
-       }
-
-       return status;
-}
-
-static celix_status_t etcdWatcher_removeEntry(etcd_watcher_pt watcher, char* 
key, char* value) {
-       celix_status_t status = CELIX_BUNDLE_EXCEPTION;
-       endpoint_discovery_poller_pt poller = watcher->discovery->poller;
-
-       hash_map_entry_pt entry = hashMap_getEntry(watcher->entries, key);
-
-       if (entry != NULL) {
-               void* origKey = hashMapEntry_getKey(entry);
-               void* value = hashMap_remove(watcher->entries, key);
-
-               free(origKey);
-
-               // check if there is another entry with the same value
-               hash_map_iterator_pt iter = 
hashMapIterator_create(watcher->entries);
-               unsigned int valueFound = 0;
-
-               while (hashMapIterator_hasNext(iter) && valueFound <= 1) {
-                       if (strcmp(value, hashMapIterator_nextValue(iter)) == 0)
-                               valueFound++;
-               }
-
-               hashMapIterator_destroy(iter);
-
-               if (valueFound == 0)
-                       status = 
endpointDiscoveryPoller_removeDiscoveryEndpoint(poller, value);
-
-               free(value);
-
-       }
-
-       return status;
-
-}
-
-
-/*
- * performs (blocking) etcd_watch calls to check for
- * changing discovery endpoint information within etcd.
- */
-static void* etcdWatcher_run(void* data) {
-       etcd_watcher_pt watcher = (etcd_watcher_pt) data;
-       time_t timeBeforeWatch = time(NULL);
-       char rootPath[MAX_ROOTNODE_LENGTH];
-       long long highestModified = 0;
-
-       bundle_context_pt context = watcher->discovery->context;
-
-       etcdWatcher_addAlreadyExistingWatchpoints(watcher->discovery, 
&highestModified);
-       etcdWatcher_getRootPath(context, rootPath);
-
-       while (watcher->running) {
-
-               char *rkey = NULL;
-               char *value = NULL;
-               char *preValue = NULL;
-               char *action = NULL;
-               long long modIndex;
-
-        if (etcd_watch(rootPath, highestModified + 1, &action, &preValue, 
&value, &rkey, &modIndex) == 0 && action != NULL) {
-                       if (strcmp(action, "set") == 0) {
-                               etcdWatcher_addEntry(watcher, rkey, value);
-                       } else if (strcmp(action, "delete") == 0) {
-                               etcdWatcher_removeEntry(watcher, rkey, value);
-                       } else if (strcmp(action, "expire") == 0) {
-                               etcdWatcher_removeEntry(watcher, rkey, value);
-                       } else if (strcmp(action, "update") == 0) {
-                               etcdWatcher_addEntry(watcher, rkey, value);
-                       } else {
-                               logHelper_log(*watcher->loghelper, 
OSGI_LOGSERVICE_INFO, "Unexpected action: %s", action);
-                       }
-
-                       highestModified = modIndex;
-        } else if (time(NULL) - timeBeforeWatch <= (DEFAULT_ETCD_TTL / 4)) {
-                       sleep(DEFAULT_ETCD_TTL / 4);
-        }
-
-        FREE_MEM(action);
-        FREE_MEM(value);
-        FREE_MEM(preValue);
-        FREE_MEM(rkey);
-
-               // update own framework uuid
-               if (time(NULL) - timeBeforeWatch > (DEFAULT_ETCD_TTL / 4)) {
-                       etcdWatcher_addOwnFramework(watcher);
-                       timeBeforeWatch = time(NULL);
-               }
-       }
-
-       return NULL;
-}
-
-/*
- * the ectdWatcher needs to have access to the endpoint_discovery_poller and 
therefore is only
- * allowed to be created after the endpoint_discovery_poller
- */
-celix_status_t etcdWatcher_create(discovery_pt discovery, bundle_context_pt 
context,
-               etcd_watcher_pt *watcher)
-{
-       celix_status_t status = CELIX_SUCCESS;
-
-       const char* etcd_server = NULL;
-       const char* etcd_port_string = NULL;
-       int etcd_port = 0;
-
-       if (discovery == NULL) {
-               return CELIX_BUNDLE_EXCEPTION;
-       }
-
-       (*watcher) = calloc(1, sizeof(struct etcd_watcher));
-       if (!*watcher) {
-               return CELIX_ENOMEM;
-       }
-       else
-       {
-               (*watcher)->discovery = discovery;
-               (*watcher)->loghelper = &discovery->loghelper;
-               (*watcher)->entries = hashMap_create(utils_stringHash, NULL, 
utils_stringEquals, NULL);
-       }
-
-       if ((bundleContext_getProperty(context, CFG_ETCD_SERVER_IP, 
&etcd_server) != CELIX_SUCCESS) || !etcd_server) {
-               etcd_server = DEFAULT_ETCD_SERVER_IP;
-       }
-
-       if ((bundleContext_getProperty(context, CFG_ETCD_SERVER_PORT, 
&etcd_port_string) != CELIX_SUCCESS) || !etcd_port_string) {
-               etcd_port = DEFAULT_ETCD_SERVER_PORT;
-       }
-       else
-       {
-               char* endptr = (char*)etcd_port_string;
-               errno = 0;
-               etcd_port =  strtol(etcd_port_string, &endptr, 10);
-               if (*endptr || errno != 0) {
-                       etcd_port = DEFAULT_ETCD_SERVER_PORT;
-               }
-       }
-
-       if (etcd_init((char*) etcd_server, etcd_port, CURL_GLOBAL_DEFAULT) != 
0) {
-               status = CELIX_BUNDLE_EXCEPTION;
-       } else {
-               status = CELIX_SUCCESS;
-       }
-
-    if (status == CELIX_SUCCESS) {
-        etcdWatcher_addOwnFramework(*watcher);
-        status = celixThreadMutex_create(&(*watcher)->watcherLock, NULL);
-    }
-
-    if (status == CELIX_SUCCESS) {
-        if (celixThreadMutex_lock(&(*watcher)->watcherLock) == CELIX_SUCCESS) {
-            status = celixThread_create(&(*watcher)->watcherThread, NULL, 
etcdWatcher_run, *watcher);
-            if (status == CELIX_SUCCESS) {
-                (*watcher)->running = true;
-            }
-            celixThreadMutex_unlock(&(*watcher)->watcherLock);
-        }
-    }
-
-    return status;
-}
-
-
-celix_status_t etcdWatcher_destroy(etcd_watcher_pt watcher) {
-       celix_status_t status = CELIX_SUCCESS;
-       char localNodePath[MAX_LOCALNODE_LENGTH];
-
-       celixThreadMutex_lock(&watcher->watcherLock);
-       watcher->running = false;
-       celixThreadMutex_unlock(&watcher->watcherLock);
-
-       celixThread_join(watcher->watcherThread, NULL);
-
-       // register own framework
-       status = etcdWatcher_getLocalNodePath(watcher->discovery->context, 
localNodePath);
-
-       if (status != CELIX_SUCCESS || etcd_del(localNodePath) == false)
-       {
-               logHelper_log(*watcher->loghelper, OSGI_LOGSERVICE_WARNING, 
"Cannot remove local discovery registration.");
-       }
-
-       watcher->loghelper = NULL;
-
-       hashMap_destroy(watcher->entries, true, true);
-
-       free(watcher);
-
-       return status;
-}
-

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/discovery_etcd/src/discovery_impl.c
----------------------------------------------------------------------
diff --git a/remote_services/discovery_etcd/src/discovery_impl.c 
b/remote_services/discovery_etcd/src/discovery_impl.c
new file mode 100644
index 0000000..8087d95
--- /dev/null
+++ b/remote_services/discovery_etcd/src/discovery_impl.c
@@ -0,0 +1,183 @@
+/**
+ * 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.
+ */
+/*
+ * discovery_impl.c
+ *
+ * \date        Aug 8, 2014
+ * \author     <a href="mailto:[email protected]";>Apache Celix Project 
Team</a>
+ * \copyright  Apache License, Version 2.0
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdbool.h>
+#include <netdb.h>
+#include <netinet/in.h>
+
+#include "constants.h"
+#include "celix_threads.h"
+#include "bundle_context.h"
+#include "array_list.h"
+#include "utils.h"
+#include "celix_errno.h"
+#include "filter.h"
+#include "service_reference.h"
+#include "service_registration.h"
+#include "remote_constants.h"
+
+
+#include "discovery.h"
+#include "discovery_impl.h"
+#include "etcd_watcher.h"
+#include "endpoint_discovery_poller.h"
+#include "endpoint_discovery_server.h"
+
+
+
+celix_status_t discovery_create(bundle_context_pt context, discovery_pt 
*discovery) {
+       celix_status_t status = CELIX_SUCCESS;
+
+       *discovery = malloc(sizeof(struct discovery));
+       if (!*discovery) {
+               return CELIX_ENOMEM;
+       }
+
+       (*discovery)->context = context;
+       (*discovery)->poller = NULL;
+       (*discovery)->server = NULL;
+
+       (*discovery)->listenerReferences = 
hashMap_create(serviceReference_hashCode, NULL, serviceReference_equals2, NULL);
+       (*discovery)->discoveredServices = hashMap_create(utils_stringHash, 
NULL, utils_stringEquals, NULL);
+
+       status = 
celixThreadMutex_create(&(*discovery)->listenerReferencesMutex, NULL);
+       status = 
celixThreadMutex_create(&(*discovery)->discoveredServicesMutex, NULL);
+
+       logHelper_create(context, &(*discovery)->loghelper);
+
+       return status;
+}
+
+
+
+celix_status_t discovery_destroy(discovery_pt discovery) {
+       celix_status_t status = CELIX_SUCCESS;
+
+       discovery->context = NULL;
+       discovery->poller = NULL;
+       discovery->server = NULL;
+
+       celixThreadMutex_lock(&discovery->discoveredServicesMutex);
+
+       hashMap_destroy(discovery->discoveredServices, false, false);
+       discovery->discoveredServices = NULL;
+
+       celixThreadMutex_unlock(&discovery->discoveredServicesMutex);
+
+       celixThreadMutex_destroy(&discovery->discoveredServicesMutex);
+
+       celixThreadMutex_lock(&discovery->listenerReferencesMutex);
+
+       hashMap_destroy(discovery->listenerReferences, false, false);
+       discovery->listenerReferences = NULL;
+
+       celixThreadMutex_unlock(&discovery->listenerReferencesMutex);
+
+       celixThreadMutex_destroy(&discovery->listenerReferencesMutex);
+
+       logHelper_destroy(&discovery->loghelper);
+
+       free(discovery);
+
+       return status;
+}
+
+celix_status_t discovery_start(discovery_pt discovery) {
+    celix_status_t status = CELIX_SUCCESS;
+       const char *port = NULL;
+       const char *path = NULL;
+
+       logHelper_start(discovery->loghelper);
+
+       bundleContext_getProperty(discovery->context, DISCOVERY_SERVER_PORT, 
&port);
+       if (port == NULL) {
+               port = DEFAULT_SERVER_PORT;
+       }
+
+       bundleContext_getProperty(discovery->context, DISCOVERY_SERVER_PATH, 
&path);
+       if (path == NULL) {
+               path = DEFAULT_SERVER_PATH;
+       }
+
+    status = endpointDiscoveryPoller_create(discovery, discovery->context, 
&discovery->poller);
+    if (status != CELIX_SUCCESS) {
+       return CELIX_BUNDLE_EXCEPTION;
+    }
+
+    status = endpointDiscoveryServer_create(discovery, discovery->context, 
&discovery->server);
+    if (status != CELIX_SUCCESS) {
+               return CELIX_BUNDLE_EXCEPTION;
+    }
+
+    status = etcdWatcher_create(discovery, discovery->context, 
&discovery->watcher);
+    if (status != CELIX_SUCCESS) {
+       return CELIX_BUNDLE_EXCEPTION;
+    }
+    return status;
+}
+
+celix_status_t discovery_stop(discovery_pt discovery) {
+       celix_status_t status;
+
+       status = etcdWatcher_destroy(discovery->watcher);
+       if (status != CELIX_SUCCESS) {
+               return CELIX_BUNDLE_EXCEPTION;
+       }
+
+       status = endpointDiscoveryServer_destroy(discovery->server);
+       if (status != CELIX_SUCCESS) {
+               return CELIX_BUNDLE_EXCEPTION;
+       }
+
+       status = endpointDiscoveryPoller_destroy(discovery->poller);
+       if (status != CELIX_SUCCESS) {
+               return CELIX_BUNDLE_EXCEPTION;
+       }
+       hash_map_iterator_pt iter;
+
+       celixThreadMutex_lock(&discovery->discoveredServicesMutex);
+
+       iter = hashMapIterator_create(discovery->discoveredServices);
+       while (hashMapIterator_hasNext(iter)) {
+               hash_map_entry_pt entry = hashMapIterator_nextEntry(iter);
+               endpoint_description_pt endpoint = hashMapEntry_getValue(entry);
+
+               discovery_informEndpointListeners(discovery, endpoint, false);
+       }
+       hashMapIterator_destroy(iter);
+
+       celixThreadMutex_unlock(&discovery->discoveredServicesMutex);
+
+
+       logHelper_stop(discovery->loghelper);
+
+       return status;
+}
+
+
+

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/discovery_etcd/src/discovery_impl.h
----------------------------------------------------------------------
diff --git a/remote_services/discovery_etcd/src/discovery_impl.h 
b/remote_services/discovery_etcd/src/discovery_impl.h
new file mode 100644
index 0000000..a19b145
--- /dev/null
+++ b/remote_services/discovery_etcd/src/discovery_impl.h
@@ -0,0 +1,66 @@
+/**
+ *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.
+ */
+/*
+ * discovery_impl.h
+ *
+ *  \date       Sep 29, 2011
+ *  \author            <a href="mailto:[email protected]";>Apache Celix 
Project Team</a>
+ *  \copyright Apache License, Version 2.0
+ */
+
+#ifndef DISCOVERY_IMPL_H_
+#define DISCOVERY_IMPL_H_
+
+#include "bundle_context.h"
+#include "service_reference.h"
+
+#include "endpoint_description.h"
+#include "endpoint_listener.h"
+
+#include "endpoint_discovery_poller.h"
+#include "endpoint_discovery_server.h"
+#include "etcd_watcher.h"
+
+#include "log_helper.h"
+
+#define DEFAULT_SERVER_IP      "127.0.0.1"
+#define DEFAULT_SERVER_PORT "9999"
+#define DEFAULT_SERVER_PATH "/org.apache.celix.discovery.etcd"
+
+#define DEFAULT_POLL_ENDPOINTS ""
+
+#define FREE_MEM(ptr) if(ptr) {free(ptr); ptr = NULL;}
+
+struct discovery {
+       bundle_context_pt context;
+
+       celix_thread_mutex_t listenerReferencesMutex;
+       celix_thread_mutex_t discoveredServicesMutex;
+
+       hash_map_pt listenerReferences; //key=serviceReference, value=nop
+       hash_map_pt discoveredServices; //key=endpointId (string), 
value=endpoint_description_pt
+
+       etcd_watcher_pt watcher;
+       endpoint_discovery_poller_pt poller;
+       endpoint_discovery_server_pt server;
+
+       log_helper_pt loghelper;
+};
+
+#endif /* DISCOVERY_H_ */

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/discovery_etcd/src/etcd_watcher.c
----------------------------------------------------------------------
diff --git a/remote_services/discovery_etcd/src/etcd_watcher.c 
b/remote_services/discovery_etcd/src/etcd_watcher.c
new file mode 100644
index 0000000..ebeac4f
--- /dev/null
+++ b/remote_services/discovery_etcd/src/etcd_watcher.c
@@ -0,0 +1,397 @@
+/**
+ * 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.
+ */
+/*
+ * etcd_watcher.c
+ *
+ * \date       16 Sep 2014
+ * \author     <a href="mailto:[email protected]";>Apache Celix Project 
Team</a>
+ * \copyright  Apache License, Version 2.0
+ */
+
+#include <stdbool.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#include "log_helper.h"
+#include "log_service.h"
+#include "constants.h"
+#include "utils.h"
+#include "discovery.h"
+#include "discovery_impl.h"
+
+#include <curl/curl.h>
+#include "etcd.h"
+#include "etcd_watcher.h"
+
+#include "endpoint_discovery_poller.h"
+
+struct etcd_watcher {
+    discovery_pt discovery;
+    log_helper_pt* loghelper;
+    hash_map_pt entries;
+
+       celix_thread_mutex_t watcherLock;
+       celix_thread_t watcherThread;
+
+       volatile bool running;
+};
+
+
+#define MAX_ROOTNODE_LENGTH                    128
+#define MAX_LOCALNODE_LENGTH           4096
+#define MAX_VALUE_LENGTH                       256
+
+#define CFG_ETCD_ROOT_PATH                     "DISCOVERY_ETCD_ROOT_PATH"
+#define DEFAULT_ETCD_ROOTPATH          "discovery"
+
+#define CFG_ETCD_SERVER_IP                     "DISCOVERY_ETCD_SERVER_IP"
+#define DEFAULT_ETCD_SERVER_IP         "127.0.0.1"
+
+#define CFG_ETCD_SERVER_PORT           "DISCOVERY_ETCD_SERVER_PORT"
+#define DEFAULT_ETCD_SERVER_PORT       2379
+
+// be careful - this should be higher than the curl timeout
+#define CFG_ETCD_TTL                                   "DISCOVERY_ETCD_TTL"
+#define DEFAULT_ETCD_TTL                       30
+
+
+// note that the rootNode shouldn't have a leading slash
+static celix_status_t etcdWatcher_getRootPath(bundle_context_pt context, char* 
rootNode) {
+       celix_status_t status = CELIX_SUCCESS;
+       const char* rootPath = NULL;
+
+       if (((bundleContext_getProperty(context, CFG_ETCD_ROOT_PATH, 
&rootPath)) != CELIX_SUCCESS) || (!rootPath)) {
+               strncpy(rootNode, DEFAULT_ETCD_ROOTPATH, MAX_ROOTNODE_LENGTH);
+       }
+       else {
+               strncpy(rootNode, rootPath, MAX_ROOTNODE_LENGTH);
+       }
+
+       return status;
+}
+
+static celix_status_t etcdWatcher_getLocalNodePath(bundle_context_pt context, 
char* localNodePath) {
+       celix_status_t status = CELIX_SUCCESS;
+       char rootPath[MAX_ROOTNODE_LENGTH];
+    const char* uuid = NULL;
+
+    if ((etcdWatcher_getRootPath(context, rootPath) != CELIX_SUCCESS)) {
+               status = CELIX_ILLEGAL_STATE;
+    }
+       else if (((bundleContext_getProperty(context, 
OSGI_FRAMEWORK_FRAMEWORK_UUID, &uuid)) != CELIX_SUCCESS) || (!uuid)) {
+               status = CELIX_ILLEGAL_STATE;
+       }
+       else if (rootPath[strlen(rootPath) - 1] == '/') {
+       snprintf(localNodePath, MAX_LOCALNODE_LENGTH, "%s%s", rootPath, uuid);
+    }
+    else {
+       snprintf(localNodePath, MAX_LOCALNODE_LENGTH, "%s/%s", rootPath, uuid);
+    }
+
+    return status;
+}
+
+static void add_node(const char *key, const char *value, void* arg) {
+       discovery_pt discovery = (discovery_pt) arg;
+       endpointDiscoveryPoller_addDiscoveryEndpoint(discovery->poller, (char 
*) value);
+}
+
+/*
+ * retrieves all already existing discovery endpoints
+ * from etcd and adds them to the poller.
+ *
+ * returns the modifiedIndex of the last modified
+ * discovery endpoint (see etcd documentation).
+ */
+static celix_status_t etcdWatcher_addAlreadyExistingWatchpoints(discovery_pt 
discovery, long long* highestModified) {
+       celix_status_t status = CELIX_SUCCESS;
+
+       char rootPath[MAX_ROOTNODE_LENGTH];
+       status = etcdWatcher_getRootPath(discovery->context, rootPath);
+
+       if (status == CELIX_SUCCESS) {
+               if(etcd_get_directory(rootPath, add_node, discovery, 
highestModified)) {
+                           status = CELIX_ILLEGAL_ARGUMENT;
+               }
+       }
+
+       return status;
+}
+
+
+static celix_status_t etcdWatcher_addOwnFramework(etcd_watcher_pt watcher)
+{
+    celix_status_t status = CELIX_BUNDLE_EXCEPTION;
+    char localNodePath[MAX_LOCALNODE_LENGTH];
+    char *value;
+       char url[MAX_VALUE_LENGTH];
+    int modIndex;
+    char* endpoints = NULL;
+    const char* ttlStr = NULL;
+    int ttl;
+
+       bundle_context_pt context = watcher->discovery->context;
+       endpoint_discovery_server_pt server = watcher->discovery->server;
+
+    // register own framework
+    if ((status = etcdWatcher_getLocalNodePath(context, localNodePath)) != 
CELIX_SUCCESS) {
+        return status;
+    }
+
+       if (endpointDiscoveryServer_getUrl(server, url) != CELIX_SUCCESS) {
+               snprintf(url, MAX_VALUE_LENGTH, "http://%s:%s/%s";, 
DEFAULT_SERVER_IP, DEFAULT_SERVER_PORT, DEFAULT_SERVER_PATH);
+       }
+
+       endpoints = url;
+
+    if ((bundleContext_getProperty(context, CFG_ETCD_TTL, &ttlStr) != 
CELIX_SUCCESS) || !ttlStr) {
+        ttl = DEFAULT_ETCD_TTL;
+    }
+    else
+    {
+        char* endptr = (char *) ttlStr;
+        errno = 0;
+        ttl = strtol(ttlStr, &endptr, 10);
+        if (*endptr || errno != 0) {
+            ttl = DEFAULT_ETCD_TTL;
+        }
+    }
+
+       if (etcd_get(localNodePath, &value, &modIndex) != true) {
+               etcd_set(localNodePath, endpoints, ttl, false);
+       }
+       else if (etcd_set(localNodePath, endpoints, ttl, true) == false)  {
+               logHelper_log(*watcher->loghelper, OSGI_LOGSERVICE_WARNING, 
"Cannot register local discovery");
+    }
+    else {
+        status = CELIX_SUCCESS;
+    }
+
+       FREE_MEM(value);
+
+    return status;
+}
+
+
+
+
+static celix_status_t etcdWatcher_addEntry(etcd_watcher_pt watcher, char* key, 
char* value) {
+       celix_status_t status = CELIX_BUNDLE_EXCEPTION;
+       endpoint_discovery_poller_pt poller = watcher->discovery->poller;
+
+       if (!hashMap_containsKey(watcher->entries, key)) {
+               status = endpointDiscoveryPoller_addDiscoveryEndpoint(poller, 
value);
+
+               if (status == CELIX_SUCCESS) {
+                       hashMap_put(watcher->entries, strdup(key), 
strdup(value));
+               }
+       }
+
+       return status;
+}
+
+static celix_status_t etcdWatcher_removeEntry(etcd_watcher_pt watcher, char* 
key, char* value) {
+       celix_status_t status = CELIX_BUNDLE_EXCEPTION;
+       endpoint_discovery_poller_pt poller = watcher->discovery->poller;
+
+       hash_map_entry_pt entry = hashMap_getEntry(watcher->entries, key);
+
+       if (entry != NULL) {
+               void* origKey = hashMapEntry_getKey(entry);
+               void* value = hashMap_remove(watcher->entries, key);
+
+               free(origKey);
+
+               // check if there is another entry with the same value
+               hash_map_iterator_pt iter = 
hashMapIterator_create(watcher->entries);
+               unsigned int valueFound = 0;
+
+               while (hashMapIterator_hasNext(iter) && valueFound <= 1) {
+                       if (strcmp(value, hashMapIterator_nextValue(iter)) == 0)
+                               valueFound++;
+               }
+
+               hashMapIterator_destroy(iter);
+
+               if (valueFound == 0)
+                       status = 
endpointDiscoveryPoller_removeDiscoveryEndpoint(poller, value);
+
+               free(value);
+
+       }
+
+       return status;
+
+}
+
+
+/*
+ * performs (blocking) etcd_watch calls to check for
+ * changing discovery endpoint information within etcd.
+ */
+static void* etcdWatcher_run(void* data) {
+       etcd_watcher_pt watcher = (etcd_watcher_pt) data;
+       time_t timeBeforeWatch = time(NULL);
+       char rootPath[MAX_ROOTNODE_LENGTH];
+       long long highestModified = 0;
+
+       bundle_context_pt context = watcher->discovery->context;
+
+       etcdWatcher_addAlreadyExistingWatchpoints(watcher->discovery, 
&highestModified);
+       etcdWatcher_getRootPath(context, rootPath);
+
+       while (watcher->running) {
+
+               char *rkey = NULL;
+               char *value = NULL;
+               char *preValue = NULL;
+               char *action = NULL;
+               long long modIndex;
+
+        if (etcd_watch(rootPath, highestModified + 1, &action, &preValue, 
&value, &rkey, &modIndex) == 0 && action != NULL) {
+                       if (strcmp(action, "set") == 0) {
+                               etcdWatcher_addEntry(watcher, rkey, value);
+                       } else if (strcmp(action, "delete") == 0) {
+                               etcdWatcher_removeEntry(watcher, rkey, value);
+                       } else if (strcmp(action, "expire") == 0) {
+                               etcdWatcher_removeEntry(watcher, rkey, value);
+                       } else if (strcmp(action, "update") == 0) {
+                               etcdWatcher_addEntry(watcher, rkey, value);
+                       } else {
+                               logHelper_log(*watcher->loghelper, 
OSGI_LOGSERVICE_INFO, "Unexpected action: %s", action);
+                       }
+
+                       highestModified = modIndex;
+        } else if (time(NULL) - timeBeforeWatch <= (DEFAULT_ETCD_TTL / 4)) {
+                       sleep(DEFAULT_ETCD_TTL / 4);
+        }
+
+        FREE_MEM(action);
+        FREE_MEM(value);
+        FREE_MEM(preValue);
+        FREE_MEM(rkey);
+
+               // update own framework uuid
+               if (time(NULL) - timeBeforeWatch > (DEFAULT_ETCD_TTL / 4)) {
+                       etcdWatcher_addOwnFramework(watcher);
+                       timeBeforeWatch = time(NULL);
+               }
+       }
+
+       return NULL;
+}
+
+/*
+ * the ectdWatcher needs to have access to the endpoint_discovery_poller and 
therefore is only
+ * allowed to be created after the endpoint_discovery_poller
+ */
+celix_status_t etcdWatcher_create(discovery_pt discovery, bundle_context_pt 
context,
+               etcd_watcher_pt *watcher)
+{
+       celix_status_t status = CELIX_SUCCESS;
+
+       const char* etcd_server = NULL;
+       const char* etcd_port_string = NULL;
+       int etcd_port = 0;
+
+       if (discovery == NULL) {
+               return CELIX_BUNDLE_EXCEPTION;
+       }
+
+       (*watcher) = calloc(1, sizeof(struct etcd_watcher));
+       if (!*watcher) {
+               return CELIX_ENOMEM;
+       }
+       else
+       {
+               (*watcher)->discovery = discovery;
+               (*watcher)->loghelper = &discovery->loghelper;
+               (*watcher)->entries = hashMap_create(utils_stringHash, NULL, 
utils_stringEquals, NULL);
+       }
+
+       if ((bundleContext_getProperty(context, CFG_ETCD_SERVER_IP, 
&etcd_server) != CELIX_SUCCESS) || !etcd_server) {
+               etcd_server = DEFAULT_ETCD_SERVER_IP;
+       }
+
+       if ((bundleContext_getProperty(context, CFG_ETCD_SERVER_PORT, 
&etcd_port_string) != CELIX_SUCCESS) || !etcd_port_string) {
+               etcd_port = DEFAULT_ETCD_SERVER_PORT;
+       }
+       else
+       {
+               char* endptr = (char*)etcd_port_string;
+               errno = 0;
+               etcd_port =  strtol(etcd_port_string, &endptr, 10);
+               if (*endptr || errno != 0) {
+                       etcd_port = DEFAULT_ETCD_SERVER_PORT;
+               }
+       }
+
+       if (etcd_init((char*) etcd_server, etcd_port, CURL_GLOBAL_DEFAULT) != 
0) {
+               status = CELIX_BUNDLE_EXCEPTION;
+       } else {
+               status = CELIX_SUCCESS;
+       }
+
+    if (status == CELIX_SUCCESS) {
+        etcdWatcher_addOwnFramework(*watcher);
+        status = celixThreadMutex_create(&(*watcher)->watcherLock, NULL);
+    }
+
+    if (status == CELIX_SUCCESS) {
+        if (celixThreadMutex_lock(&(*watcher)->watcherLock) == CELIX_SUCCESS) {
+            status = celixThread_create(&(*watcher)->watcherThread, NULL, 
etcdWatcher_run, *watcher);
+            if (status == CELIX_SUCCESS) {
+                (*watcher)->running = true;
+            }
+            celixThreadMutex_unlock(&(*watcher)->watcherLock);
+        }
+    }
+
+    return status;
+}
+
+
+celix_status_t etcdWatcher_destroy(etcd_watcher_pt watcher) {
+       celix_status_t status = CELIX_SUCCESS;
+       char localNodePath[MAX_LOCALNODE_LENGTH];
+
+       celixThreadMutex_lock(&watcher->watcherLock);
+       watcher->running = false;
+       celixThreadMutex_unlock(&watcher->watcherLock);
+
+       celixThread_join(watcher->watcherThread, NULL);
+
+       // register own framework
+       status = etcdWatcher_getLocalNodePath(watcher->discovery->context, 
localNodePath);
+
+       if (status != CELIX_SUCCESS || etcd_del(localNodePath) == false)
+       {
+               logHelper_log(*watcher->loghelper, OSGI_LOGSERVICE_WARNING, 
"Cannot remove local discovery registration.");
+       }
+
+       watcher->loghelper = NULL;
+
+       hashMap_destroy(watcher->entries, true, true);
+
+       free(watcher);
+
+       return status;
+}
+

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/discovery_etcd/src/etcd_watcher.h
----------------------------------------------------------------------
diff --git a/remote_services/discovery_etcd/src/etcd_watcher.h 
b/remote_services/discovery_etcd/src/etcd_watcher.h
new file mode 100644
index 0000000..b4dbf40
--- /dev/null
+++ b/remote_services/discovery_etcd/src/etcd_watcher.h
@@ -0,0 +1,40 @@
+/**
+ * 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.
+ */
+/*
+ * etcd_watcher.h
+ *
+ * \date       17 Sep 2014
+ * \author     <a href="mailto:[email protected]";>Apache Celix Project 
Team</a>
+ * \copyright  Apache License, Version 2.0
+ */
+
+#ifndef ETCD_WATCHER_H_
+#define ETCD_WATCHER_H_
+
+#include "celix_errno.h"
+#include "discovery.h"
+#include "endpoint_discovery_poller.h"
+
+typedef struct etcd_watcher *etcd_watcher_pt;
+
+celix_status_t etcdWatcher_create(discovery_pt discovery,  bundle_context_pt 
context, etcd_watcher_pt *watcher);
+celix_status_t etcdWatcher_destroy(etcd_watcher_pt watcher);
+
+
+#endif /* ETCD_WATCHER_H_ */

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/examples/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/remote_services/examples/CMakeLists.txt 
b/remote_services/examples/CMakeLists.txt
index 44b7733..c7c5444 100644
--- a/remote_services/examples/CMakeLists.txt
+++ b/remote_services/examples/CMakeLists.txt
@@ -18,97 +18,42 @@
 celix_subproject(RSA_EXAMPLES "Option to enable building the RSA examples" ON 
DEPS LAUNCHER shell_tui log_writer RSA_TOPOLOGY_MANAGER)
 if (RSA_EXAMPLES)
     add_subdirectory(calculator_service)
-
-    add_subdirectory(calculator_endpoint)
-    add_subdirectory(calculator_endpoint2)
-
-    add_subdirectory(calculator_proxy)
-    add_subdirectory(calculator_proxy2)
-
     add_subdirectory(calculator_shell)
 
-    if(BUILD_RSA_REMOTE_SERVICE_ADMIN_HTTP AND BUILD_RSA_DISCOVERY_CONFIGURED)
-        add_deploy(remote-services-cfg-server 
-            NAME "server"
-            GROUP "remote-services/remote-services-cfg"
-            BUNDLES discovery_configured topology_manager 
remote_service_admin_http calculator shell shell_tui log_service log_writer
-            PROPERTIES
-                RSA_PORT=8001
-                
DISCOVERY_CFG_POLL_ENDPOINTS=http://localhost:8082/org.apache.celix.discovery.configured
-                DISCOVERY_CFG_SERVER_PORT=8081
-        )
-        deploy_bundles_dir(remote-services-cfg-server DIR_NAME "endpoints" 
BUNDLES
-            org.apache.celix.calc.api.Calculator_endpoint
-            org.apache.celix.calc.api.Calculator2_endpoint
-        )
-
-        add_deploy(remote-services-cfg-client
-            NAME "client"
-            GROUP "remote-services/remote-services-cfg"
-            BUNDLES topology_manager remote_service_admin_http shell shell_tui 
log_service log_writer calculator_shell discovery_configured
-            PROPERTIES
-                RSA_PORT=8002
-                
DISCOVERY_CFG_POLL_ENDPOINTS=http://localhost:8081/org.apache.celix.discovery.configured
-                DISCOVERY_CFG_SERVER_PORT=8082
-        )
-        deploy_bundles_dir(remote-services-cfg-client DIR_NAME "endpoints"
-            BUNDLES org.apache.celix.calc.api.Calculator_proxy 
org.apache.celix.calc.api.Calculator2_proxy
-        )
-    endif()
-
-    if (BUILD_RSA_REMOTE_SERVICE_ADMIN_SHM AND BUILD_RSA_DISCOVERY_SHM)
-        add_deploy(remote-services-shm 
-            NAME "server"
-            GROUP "remote-services/remote-services-shm"
-            BUNDLES discovery_shm topology_manager remote_service_admin_shm 
calculator shell shell_tui log_service log_writer
-        )
-        deploy_bundles_dir(remote-services-shm DIR_NAME "endpoints"
-            BUNDLES org.apache.celix.calc.api.Calculator_endpoint
-        )
-
-        add_deploy(remote-services-shm-client 
-            NAME "client"
-            GROUP "remote-services/remote-services-shm"
-            BUNDLES topology_manager remote_service_admin_shm shell shell_tui 
log_service log_writer calculator_shell discovery_shm
-        )
-        deploy_bundles_dir(remote-services-shm-client DIR_NAME "endpoints"
-            BUNDLES org.apache.celix.calc.api.Calculator_proxy
-        )
-    endif ()
 
-    if (BUILD_RSA_DISCOVERY_ETCD AND BUILD_RSA_REMOTE_SERVICE_ADMIN_HTTP)
-        add_deploy(remote-services-etcd 
-            NAME "server"
-            GROUP "remote-services/remote-services-etcd"
-            BUNDLES discovery_etcd topology_manager remote_service_admin_http 
calculator shell shell_tui log_service log_writer
-        )
-        deploy_bundles_dir(remote-services-etcd DIR_NAME "endpoints"
-            BUNDLES
-               org.apache.celix.calc.api.Calculator_endpoint
-               org.apache.celix.calc.api.Calculator2_endpoint
-        )
+#    TODO refactor shm remote service admin to use dfi
+#    if (BUILD_RSA_REMOTE_SERVICE_ADMIN_SHM AND BUILD_RSA_DISCOVERY_SHM)
+#        add_deploy(remote-services-shm
+#            NAME "server"
+#            GROUP "remote-services/remote-services-shm"
+#            BUNDLES discovery_shm topology_manager remote_service_admin_shm 
calculator shell shell_tui log_service log_writer
+#        )
+#        deploy_bundles_dir(remote-services-shm DIR_NAME "endpoints"
+#            BUNDLES org.apache.celix.calc.api.Calculator_endpoint
+#        )
+#
+#        add_deploy(remote-services-shm-client
+#            NAME "client"
+#            GROUP "remote-services/remote-services-shm"
+#            BUNDLES topology_manager remote_service_admin_shm shell shell_tui 
log_service log_writer calculator_shell discovery_shm
+#        )
+#        deploy_bundles_dir(remote-services-shm-client DIR_NAME "endpoints"
+#            BUNDLES org.apache.celix.calc.api.Calculator_proxy
+#        )
+#    endif ()
 
-        add_deploy("remote-services-etcd-client" 
-            NAME "client"
-            GROUP "remote-services/remote-services-etcd"
-            BUNDLES topology_manager remote_service_admin_http shell shell_tui 
log_service log_writer calculator_shell discovery_etcd
-        )
-        deploy_bundles_dir(remote-services-etcd-client DIR_NAME "endpoints"
-            BUNDLES org.apache.celix.calc.api.Calculator_proxy
-        )
-    endif ()
 
     if (BUILD_RSA_DISCOVERY_ETCD AND BUILD_RSA_REMOTE_SERVICE_ADMIN_DFI)
         add_deploy(remote-services-dfi 
             NAME "server"
             GROUP "remote-services/remote-services-dfi"
-            BUNDLES discovery_etcd topology_manager remote_service_admin_dfi 
calculator shell shell_tui log_service log_writer
+            BUNDLES discovery_etcd topology_manager remote_service_admin_dfi 
calculator Celix::shell Celix::shell_tui log_service log_writer
         )
 
         add_deploy("remote-services-dfi-client" 
             NAME "client"
             GROUP "remote-services/remote-services-dfi"
-            BUNDLES topology_manager remote_service_admin_dfi shell shell_tui 
log_service log_writer calculator_shell discovery_etcd
+            BUNDLES topology_manager remote_service_admin_dfi Celix::shell 
Celix::shell_tui log_service log_writer calculator_shell discovery_etcd
         )
     endif ()
 endif (RSA_EXAMPLES)

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/examples/calculator_endpoint/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/remote_services/examples/calculator_endpoint/CMakeLists.txt 
b/remote_services/examples/calculator_endpoint/CMakeLists.txt
deleted file mode 100644
index 6e9c928..0000000
--- a/remote_services/examples/calculator_endpoint/CMakeLists.txt
+++ /dev/null
@@ -1,35 +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.
-
-find_package(Jansson REQUIRED)
-
-include_directories("${JANSSON_INCLUDE_DIRS}")
-include_directories("../../../utils/public/include")
-include_directories("../../remote_service_admin/public/include")
-include_directories("../calculator_service/public/include")
-include_directories("private/include")
-
-add_bundle(org.apache.celix.calc.api.Calculator_endpoint SOURCES
-       private/src/calculator_endpoint_activator
-       private/src/calculator_endpoint_impl.c
-    
-    private/include/calculator_endpoint_impl.h
-    VERSION 0.0.1
-    SYMBOLIC_NAME "apache_celix_remoting_calculator_endpoint"
-)
-
-target_link_libraries(org.apache.celix.calc.api.Calculator_endpoint 
celix_framework ${JANSSON_LIBRARIES})

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/examples/calculator_endpoint/private/include/calculator_endpoint_impl.h
----------------------------------------------------------------------
diff --git 
a/remote_services/examples/calculator_endpoint/private/include/calculator_endpoint_impl.h
 
b/remote_services/examples/calculator_endpoint/private/include/calculator_endpoint_impl.h
deleted file mode 100644
index dbeda2d..0000000
--- 
a/remote_services/examples/calculator_endpoint/private/include/calculator_endpoint_impl.h
+++ /dev/null
@@ -1,46 +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.
- */
-/*
- * calculator_endpoint_impl.h
- *
- *  \date       Oct 7, 2011
- *  \author            <a href="mailto:[email protected]";>Apache Celix 
Project Team</a>
- *  \copyright Apache License, Version 2.0
- */
-
-#ifndef CALCULATOR_ENDPOINT_IMPL_H_
-#define CALCULATOR_ENDPOINT_IMPL_H_
-
-#include "celix_errno.h"
-#include "remote_endpoint_impl.h"
-
-#include "calculator_service.h"
-
-celix_status_t calculatorEndpoint_create(remote_endpoint_pt *endpoint);
-celix_status_t calculatorEndpoint_destroy(remote_endpoint_pt *endpoint);
-
-celix_status_t calculatorEndpoint_setService(remote_endpoint_pt endpoint, void 
*service);
-
-celix_status_t calculatorEndpoint_handleRequest(remote_endpoint_pt endpoint, 
char *data, char **reply);
-
-celix_status_t calculatorEndpoint_add(remote_endpoint_pt endpoint, char *data, 
char **reply);
-celix_status_t calculatorEndpoint_sub(remote_endpoint_pt endpoint, char *data, 
char **reply);
-celix_status_t calculatorEndpoint_sqrt(remote_endpoint_pt endpoint, char 
*data, char **reply);
-
-#endif /* CALCULATOR_ENDPOINT_IMPL_H_ */

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/examples/calculator_endpoint/private/src/calculator_endpoint_activator.c
----------------------------------------------------------------------
diff --git 
a/remote_services/examples/calculator_endpoint/private/src/calculator_endpoint_activator.c
 
b/remote_services/examples/calculator_endpoint/private/src/calculator_endpoint_activator.c
deleted file mode 100644
index 319ecb0..0000000
--- 
a/remote_services/examples/calculator_endpoint/private/src/calculator_endpoint_activator.c
+++ /dev/null
@@ -1,96 +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.
- */
-/*
- * calculator_endpoint_activator.c
- *
- *  \date       Oct 10, 2011
- *  \author            <a href="mailto:[email protected]";>Apache Celix 
Project Team</a>
- *  \copyright Apache License, Version 2.0
- */
-#include <stdlib.h>
-
-#include "bundle_activator.h"
-
-#include "calculator_endpoint_impl.h"
-#include "service_registration.h"
-
-struct activator {
-       remote_endpoint_service_pt endpointService;
-       service_registration_pt endpointServiceRegistration;
-};
-
-celix_status_t bundleActivator_create(bundle_context_pt context, void 
**userData) {
-       celix_status_t status = CELIX_SUCCESS;
-
-       struct activator *activator;
-
-       activator = calloc(1, sizeof(*activator));
-       if (!activator) {
-               status = CELIX_ENOMEM;
-       } else {
-               activator->endpointService = NULL;
-               activator->endpointServiceRegistration = NULL;
-
-               *userData = activator;
-       }
-
-       return status;
-}
-
-celix_status_t bundleActivator_start(void * userData, bundle_context_pt 
context) {
-       celix_status_t status = CELIX_SUCCESS;
-       struct activator *activator = userData;
-       remote_endpoint_pt endpoint = NULL;
-       remote_endpoint_service_pt endpointService = NULL;
-
-       calculatorEndpoint_create(&endpoint);
-       endpointService = calloc(1, sizeof(*endpointService));
-       endpointService->endpoint = endpoint;
-       endpointService->handleRequest = calculatorEndpoint_handleRequest;
-       endpointService->setService = calculatorEndpoint_setService;
-
-       properties_pt props = properties_create();
-       properties_set(props, (char *) "remote.interface", (char *) 
CALCULATOR_SERVICE);
-
-       bundleContext_registerService(context, OSGI_RSA_REMOTE_ENDPOINT, 
endpointService, props, &activator->endpointServiceRegistration);
-
-       activator->endpointService = endpointService;
-
-       return status;
-}
-
-celix_status_t bundleActivator_stop(void * userData, bundle_context_pt 
context) {
-       celix_status_t status = CELIX_SUCCESS;
-       struct activator *activator = userData;
-
-       serviceRegistration_unregister(activator->endpointServiceRegistration);
-
-       calculatorEndpoint_destroy(&activator->endpointService->endpoint);
-       free(activator->endpointService);
-
-       return status;
-}
-
-celix_status_t bundleActivator_destroy(void * userData, bundle_context_pt 
context) {
-       celix_status_t status = CELIX_SUCCESS;
-       struct activator *activator = userData;
-
-       free(activator);
-       return status;
-}

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/examples/calculator_endpoint/private/src/calculator_endpoint_impl.c
----------------------------------------------------------------------
diff --git 
a/remote_services/examples/calculator_endpoint/private/src/calculator_endpoint_impl.c
 
b/remote_services/examples/calculator_endpoint/private/src/calculator_endpoint_impl.c
deleted file mode 100644
index b9a973f..0000000
--- 
a/remote_services/examples/calculator_endpoint/private/src/calculator_endpoint_impl.c
+++ /dev/null
@@ -1,184 +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.
- */
-/*
- * calculator_endpoint_impl.c
- *
- *  \date       Oct 7, 2011
- *  \author            <a href="mailto:[email protected]";>Apache Celix 
Project Team</a>
- *  \copyright Apache License, Version 2.0
- */
-#include <jansson.h>
-#include <string.h>
-
-#include "celix_errno.h"
-
-#include "calculator_endpoint_impl.h"
-
-celix_status_t calculatorEndpoint_create(remote_endpoint_pt *endpoint) {
-       celix_status_t status = CELIX_SUCCESS;
-       *endpoint = calloc(1, sizeof(**endpoint));
-       if (!*endpoint) {
-               status = CELIX_ENOMEM;
-       } else {
-               (*endpoint)->service = NULL;
-       }
-
-       return status;
-}
-
-celix_status_t calculatorEndpoint_destroy(remote_endpoint_pt *endpoint) {
-       celix_status_t status = CELIX_SUCCESS;
-       free(*endpoint);
-       *endpoint = NULL;
-
-       return status;
-}
-
-celix_status_t calculatorEndpoint_setService(remote_endpoint_pt endpoint, void 
*service) {
-       celix_status_t status = CELIX_SUCCESS;
-       endpoint->service = service;
-       return status;
-}
-
-/**
- * Request: http://host:port/services/{service}
- */
-celix_status_t calculatorEndpoint_handleRequest(remote_endpoint_pt endpoint, 
char *data, char **reply) {
-       celix_status_t status = CELIX_SUCCESS;
-       json_error_t jsonError;
-    json_t *root = json_loads(data, 0, &jsonError);
-    const char *sig;
-    json_unpack(root, "{s:s}", "m", &sig);
-
-       printf("CALCULATOR_ENDPOINT: Handle request \"%s\" with data \"%s\"\n", 
sig, data);
-       if (strcmp(sig, "add(DD)D") == 0) {
-               calculatorEndpoint_add(endpoint, data, reply);
-       } else if (strcmp(sig, "sub(DD)D") == 0) {
-               calculatorEndpoint_sub(endpoint, data, reply);
-       } else if (strcmp(sig, "sqrt(D)D") == 0) {
-               calculatorEndpoint_sqrt(endpoint, data, reply);
-       } else {
-               status = CELIX_ILLEGAL_ARGUMENT;
-       }
-
-       json_decref(root);
-
-       return status;
-}
-
-celix_status_t calculatorEndpoint_add(remote_endpoint_pt endpoint, char *data, 
char **reply) {
-       celix_status_t status = CELIX_SUCCESS;
-       json_error_t jsonError;
-       json_t *root;
-
-       root = json_loads(data, 0, &jsonError);
-       if (!root) {
-               status = CELIX_ILLEGAL_ARGUMENT;
-       } else {
-               double a;
-               double b;
-               json_unpack(root, "{s:[ff]}", "a", &a, &b);
-
-               if (endpoint->service != NULL) {
-                       double result;
-                       json_t *resultRoot;
-                       calculator_service_pt service = endpoint->service;
-                       service->add(service->calculator, a, b, &result);
-                       resultRoot = json_pack("{s:f}", "r", result);
-
-                       char *c = json_dumps(resultRoot, 0);
-                       *reply = c;
-
-                       json_decref(resultRoot);
-               } else {
-                       printf("CALCULATOR_ENDPOINT: No service available");
-                       status = CELIX_BUNDLE_EXCEPTION;
-               }
-               json_decref(root);
-       }
-
-       return status;
-}
-
-celix_status_t calculatorEndpoint_sub(remote_endpoint_pt endpoint, char *data, 
char **reply) {
-       celix_status_t status = CELIX_SUCCESS;
-       json_error_t jsonError;
-       json_t *root;
-
-       root = json_loads(data, 0, &jsonError);
-       if (!root) {
-               status = CELIX_ILLEGAL_ARGUMENT;
-       } else {
-               double a;
-               double b;
-               json_unpack(root, "{s:[ff]}", "a", &a, &b);
-
-               if (endpoint->service != NULL) {
-                       double result;
-                       json_t *resultRoot;
-                       calculator_service_pt service = endpoint->service;
-                       service->sub(service->calculator, a, b, &result);
-                       resultRoot = json_pack("{s:f}", "r", result);
-
-                       char *c = json_dumps(resultRoot, JSON_ENCODE_ANY);
-                       *reply = c;
-
-                       json_decref(resultRoot);
-               } else {
-                       printf("CALCULATOR_ENDPOINT: No service available");
-                       status = CELIX_BUNDLE_EXCEPTION;
-               }
-               json_decref(root);
-       }
-
-       return status;
-}
-
-celix_status_t calculatorEndpoint_sqrt(remote_endpoint_pt endpoint, char 
*data, char **reply) {
-       celix_status_t status = CELIX_SUCCESS;
-       json_error_t jsonError;
-       json_t *root;
-
-       root = json_loads(data, 0, &jsonError);
-       if (!root) {
-               status = CELIX_ILLEGAL_ARGUMENT;
-       } else {
-               double a;
-               json_unpack(root, "{s:[f]}", "a", &a);
-
-               if (endpoint->service != NULL) {
-                       double result;
-                       json_t *resultRoot;
-                       calculator_service_pt service = endpoint->service;
-                       service->sqrt(service->calculator, a, &result);
-                       resultRoot = json_pack("{s:f}", "r", result);
-
-                       char *c = json_dumps(resultRoot, JSON_ENCODE_ANY);
-                       *reply = c;
-
-                       json_decref(resultRoot);
-               } else {
-                       printf("CALCULATOR_ENDPOINT: No service available");
-                       status = CELIX_BUNDLE_EXCEPTION;
-               }
-               json_decref(root);
-       }
-
-       return status;
-}

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/examples/calculator_endpoint2/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/remote_services/examples/calculator_endpoint2/CMakeLists.txt 
b/remote_services/examples/calculator_endpoint2/CMakeLists.txt
deleted file mode 100644
index b75e6df..0000000
--- a/remote_services/examples/calculator_endpoint2/CMakeLists.txt
+++ /dev/null
@@ -1,35 +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.
-
-find_package(Jansson REQUIRED)
-
-include_directories("${JANSSON_INCLUDE_DIRS}")
-include_directories("../../../utils/public/include")
-include_directories("../../remote_service_admin/public/include")
-include_directories("../calculator_service/public/include")
-include_directories("private/include")
-
-add_bundle(org.apache.celix.calc.api.Calculator2_endpoint SOURCES
-       private/src/calculator_endpoint_activator
-       private/src/calculator_endpoint_impl.c
-    
-    private/include/calculator_endpoint_impl.h
-    SYMBOLIC_NAME "apache_celix_remoting_calculator2_endpoint"
-    VERSION "0.0.1"
-)
-
-target_link_libraries(org.apache.celix.calc.api.Calculator2_endpoint 
celix_framework ${JANSSON_LIBRARIES})

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/examples/calculator_endpoint2/private/include/calculator_endpoint_impl.h
----------------------------------------------------------------------
diff --git 
a/remote_services/examples/calculator_endpoint2/private/include/calculator_endpoint_impl.h
 
b/remote_services/examples/calculator_endpoint2/private/include/calculator_endpoint_impl.h
deleted file mode 100644
index dbeda2d..0000000
--- 
a/remote_services/examples/calculator_endpoint2/private/include/calculator_endpoint_impl.h
+++ /dev/null
@@ -1,46 +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.
- */
-/*
- * calculator_endpoint_impl.h
- *
- *  \date       Oct 7, 2011
- *  \author            <a href="mailto:[email protected]";>Apache Celix 
Project Team</a>
- *  \copyright Apache License, Version 2.0
- */
-
-#ifndef CALCULATOR_ENDPOINT_IMPL_H_
-#define CALCULATOR_ENDPOINT_IMPL_H_
-
-#include "celix_errno.h"
-#include "remote_endpoint_impl.h"
-
-#include "calculator_service.h"
-
-celix_status_t calculatorEndpoint_create(remote_endpoint_pt *endpoint);
-celix_status_t calculatorEndpoint_destroy(remote_endpoint_pt *endpoint);
-
-celix_status_t calculatorEndpoint_setService(remote_endpoint_pt endpoint, void 
*service);
-
-celix_status_t calculatorEndpoint_handleRequest(remote_endpoint_pt endpoint, 
char *data, char **reply);
-
-celix_status_t calculatorEndpoint_add(remote_endpoint_pt endpoint, char *data, 
char **reply);
-celix_status_t calculatorEndpoint_sub(remote_endpoint_pt endpoint, char *data, 
char **reply);
-celix_status_t calculatorEndpoint_sqrt(remote_endpoint_pt endpoint, char 
*data, char **reply);
-
-#endif /* CALCULATOR_ENDPOINT_IMPL_H_ */

http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/remote_services/examples/calculator_endpoint2/private/src/calculator_endpoint_activator.c
----------------------------------------------------------------------
diff --git 
a/remote_services/examples/calculator_endpoint2/private/src/calculator_endpoint_activator.c
 
b/remote_services/examples/calculator_endpoint2/private/src/calculator_endpoint_activator.c
deleted file mode 100644
index 9f89d91..0000000
--- 
a/remote_services/examples/calculator_endpoint2/private/src/calculator_endpoint_activator.c
+++ /dev/null
@@ -1,96 +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.
- */
-/*
- * calculator_endpoint_activator.c
- *
- *  \date       Oct 10, 2011
- *  \author            <a href="mailto:[email protected]";>Apache Celix 
Project Team</a>
- *  \copyright Apache License, Version 2.0
- */
-#include <stdlib.h>
-
-#include "bundle_activator.h"
-
-#include "calculator_endpoint_impl.h"
-#include "service_registration.h"
-
-struct activator {
-       remote_endpoint_service_pt endpointService;
-       service_registration_pt endpointServiceRegistration;
-};
-
-celix_status_t bundleActivator_create(bundle_context_pt context, void 
**userData) {
-       celix_status_t status = CELIX_SUCCESS;
-
-       struct activator *activator;
-
-       activator = calloc(1, sizeof(*activator));
-       if (!activator) {
-               status = CELIX_ENOMEM;
-       } else {
-               activator->endpointService = NULL;
-               activator->endpointServiceRegistration = NULL;
-
-               *userData = activator;
-       }
-
-       return status;
-}
-
-celix_status_t bundleActivator_start(void * userData, bundle_context_pt 
context) {
-       celix_status_t status = CELIX_SUCCESS;
-       struct activator *activator = userData;
-       remote_endpoint_pt endpoint = NULL;
-       remote_endpoint_service_pt endpointService = NULL;
-
-       calculatorEndpoint_create(&endpoint);
-       endpointService = calloc(1, sizeof(*endpointService));
-       endpointService->endpoint = endpoint;
-       endpointService->handleRequest = calculatorEndpoint_handleRequest;
-        endpointService->setService = calculatorEndpoint_setService;
-
-        properties_pt props = properties_create();
-        properties_set(props, (char *) "remote.interface", (char *) 
CALCULATOR2_SERVICE);
-
-        bundleContext_registerService(context, OSGI_RSA_REMOTE_ENDPOINT, 
endpointService, props, &activator->endpointServiceRegistration);
-
-       activator->endpointService = endpointService;
-
-       return status;
-}
-
-celix_status_t bundleActivator_stop(void * userData, bundle_context_pt 
context) {
-       celix_status_t status = CELIX_SUCCESS;
-       struct activator *activator = userData;
-
-       serviceRegistration_unregister(activator->endpointServiceRegistration);
-
-       calculatorEndpoint_destroy(&activator->endpointService->endpoint);
-       free(activator->endpointService);
-
-       return status;
-}
-
-celix_status_t bundleActivator_destroy(void * userData, bundle_context_pt 
context) {
-       celix_status_t status = CELIX_SUCCESS;
-       struct activator *activator = userData;
-
-       free(activator);
-       return status;
-}

Reply via email to