You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pn...@apache.org on 2018/05/27 18:52:23 UTC

[15/60] [abbrv] [partial] celix git commit: CELIX-424: Cleans up the directory structure. Moves all libraries to the libs subdir and all bundles to the bundles subdir

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/dfi/test/json_serializer_tests.cpp
----------------------------------------------------------------------
diff --git a/dfi/test/json_serializer_tests.cpp b/dfi/test/json_serializer_tests.cpp
deleted file mode 100644
index a52e4cc..0000000
--- a/dfi/test/json_serializer_tests.cpp
+++ /dev/null
@@ -1,558 +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.
- */
-#include <CppUTest/TestHarness.h>
-#include "CppUTest/CommandLineTestRunner.h"                                                                                                                                                                        
-
-extern "C" {
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <ffi.h>
-
-#include "dyn_common.h"
-#include "dyn_type.h"
-#include "json_serializer.h"
-
-static void stdLog(void*, int level, const char *file, int line, const char *msg, ...) {
-	va_list ap;
-	const char *levels[5] = {"NIL", "ERROR", "WARNING", "INFO", "DEBUG"};
-	fprintf(stderr, "%s: FILE:%s, LINE:%i, MSG:",levels[level], file, line);
-	va_start(ap, msg);
-	vfprintf(stderr, msg, ap);
-	fprintf(stderr, "\n");
-	va_end(ap);
-}
-
-/*********** example 1 ************************/
-/** struct type ******************************/
-const char *example1_descriptor = "{DJISF a b c d e}";
-
-const char *example1_input = "{ \
-    \"a\" : 1.0, \
-    \"b\" : 22, \
-    \"c\" : 32, \
-    \"d\" : 42, \
-    \"e\" : 4.4 \
-}";
-
-struct example1 {
-	double a;   //0
-	int64_t b;  //1
-	int32_t c;  //2
-	int16_t d;  //3
-	float e;    //4
-};
-
-static void check_example1(void *data) {
-	struct example1 *ex = (struct example1 *)data;
-	CHECK_EQUAL(1.0, ex->a);
-	LONGS_EQUAL(22, ex->b);
-	LONGS_EQUAL(32, ex->c);
-	LONGS_EQUAL(42, ex->d);
-	CHECK_EQUAL(4.4f, ex->e);
-}
-
-/*********** example 2 ************************/
-const char *example2_descriptor = "{BJJDFD byte long1 long2 double1 float1 double2}";
-
-const char *example2_input = "{ \
-    \"byte\" : 42, \
-    \"long1\" : 232, \
-    \"long2\" : 242, \
-    \"double1\" : 4.2, \
-    \"float1\" : 3.2, \
-    \"double2\" : 4.4 \
-}";
-
-struct example2 {
-	char byte;      //0
-	int64_t long1;     //1
-	int64_t long2;     //2
-	double double1; //3
-	float float1;   //4
-	double double2; //5
-};
-
-static void check_example2(void *data) {
-	struct example2 *ex = (struct example2 *)data;
-	CHECK_EQUAL(42, ex->byte);
-	LONGS_EQUAL(232, ex->long1);
-	LONGS_EQUAL(242, ex->long2);
-	CHECK_EQUAL(4.2, ex->double1);
-	CHECK_EQUAL(3.2f, ex->float1);
-	CHECK_EQUAL(4.4, ex->double2);
-}
-
-
-/*********** example 3 ************************/
-/** sequence with a simple type **************/
-const char *example3_descriptor = "{[I numbers}";
-
-const char *example3_input = "{ \
-    \"numbers\" : [22,32,42] \
-}";
-
-struct example3 {
-	struct {
-		uint32_t cap;
-		uint32_t len;
-		int32_t *buf;
-	} numbers;
-};
-
-static void check_example3(void *data) {
-	struct example3 *ex = (struct example3 *)data;
-	CHECK_EQUAL(3, ex->numbers.len);
-	CHECK_EQUAL(22, ex->numbers.buf[0]);
-	CHECK_EQUAL(32, ex->numbers.buf[1]);
-	CHECK_EQUAL(42, ex->numbers.buf[2]);
-}
-
-/*********** example 4 ************************/
-/** structs within a struct (by reference)*******/
-const char *example4_descriptor = "{{IDD index val1 val2}{IDD index val1 val2} left right}";
-
-static const char *example4_input =  "{ \
-    \"left\" : {\"index\":1, \"val1\":1.0, \"val2\":2.0 }, \
-    \"right\" : {\"index\":2, \"val1\":5.0, \"val2\":4.0 } \
-}";
-
-struct ex4_leaf {
-	int32_t index;
-	double val1;
-	double val2;
-};
-
-struct example4 {
-	struct ex4_leaf left;
-	struct ex4_leaf right;
-};
-
-static void check_example4(void *data) {
-	struct example4 *ex = (struct example4 *)data;
-	CHECK_EQUAL(1, ex->left.index);
-	CHECK_EQUAL(1.0, ex->left.val1);
-	CHECK_EQUAL(2.0, ex->left.val2);
-	CHECK_EQUAL(2, ex->right.index);
-	CHECK_EQUAL(5.0, ex->right.val1);
-	CHECK_EQUAL(4.0, ex->right.val2);
-}
-
-
-/*********** example 5 ************************/
-/** structs within a struct (by reference)*******/
-const char *example5_descriptor = "Tleaf={ts name age};Tnode={Lnode;Lnode;Lleaf; left right value};{Lnode; head}";
-
-static const char *example5_input =  "{ \
-    \"head\" : {\
-        \"left\" : {\
-            \"value\" : {\
-                \"name\" : \"John\",\
-                \"age\" : 44 \
-            }\
-        },\
-        \"right\" : {\
-            \"value\" : {\
-                \"name\" : \"Peter\", \
-                \"age\" : 55 \
-            }\
-        }\
-    }\
-}";
-
-struct leaf {
-	const char *name;
-	uint16_t age;
-};
-
-struct node {
-	struct node *left;
-	struct node *right;
-	struct leaf *value;
-};
-
-struct example5 {
-	struct node *head;
-};
-
-static void check_example5(void *data) {
-	struct example5 *ex = (struct example5 *)data;
-	CHECK_TRUE(ex->head != NULL);
-
-	CHECK(ex->head->left != NULL);
-	CHECK(ex->head->left->value != NULL);
-	STRCMP_EQUAL("John", ex->head->left->value->name);
-	CHECK_EQUAL(44, ex->head->left->value->age);
-	CHECK(ex->head->left->left == NULL);
-	CHECK(ex->head->left->right == NULL);
-
-	CHECK(ex->head->right != NULL);
-	CHECK(ex->head->right->value != NULL);
-	STRCMP_EQUAL("Peter", ex->head->right->value->name);
-	CHECK_EQUAL(55, ex->head->right->value->age);
-	CHECK(ex->head->right->left == NULL);
-	CHECK(ex->head->right->right == NULL);
-}
-
-static const char *example6_descriptor = "Tsample={DD v1 v2};[lsample;";
-
-static const char *example6_input = "[{\"v1\":0.1,\"v2\":0.2},{\"v1\":1.1,\"v2\":1.2},{\"v1\":2.1,\"v2\":2.2}]";
-
-struct ex6_sample {
-	double v1;
-	double v2;
-};
-
-struct ex6_sequence {
-	uint32_t cap;
-	uint32_t len;
-	struct ex6_sample *buf;
-};
-
-static void check_example6(struct ex6_sequence seq) {
-	CHECK_EQUAL(3, seq.cap);
-	CHECK_EQUAL(3, seq.len);
-	CHECK_EQUAL(0.1, seq.buf[0].v1);
-	CHECK_EQUAL(0.2, seq.buf[0].v2);
-	CHECK_EQUAL(1.1, seq.buf[1].v1);
-	CHECK_EQUAL(1.2, seq.buf[1].v2);
-	CHECK_EQUAL(2.1, seq.buf[2].v1);
-	CHECK_EQUAL(2.2, seq.buf[2].v2);
-}
-
-
-/*********** example 7 ************************/
-const char *example7_descriptor = "{t a}";
-
-const char *example7_input = "{ \
-    \"a\" : \"apache celix\" \
-}";
-
-struct example7 {
-	char* a;   //0
-};
-
-static void check_example7(void *data) {
-	struct example7 *ex = (struct example7 *)data;
-	STRCMP_EQUAL("apache celix", ex->a);
-}
-
-
-/*********** example 8 ************************/
-
-const char *example8_descriptor = "{ZbijNP a b c d e f}";
-
-const char *example8_input = "{ \
-    \"a\" : true, \
-    \"b\" : 4, \
-    \"c\" : 8, \
-    \"d\" : 16, \
-    \"e\" : 32 \
-}";
-
-struct example8 {
-	bool a;
-	unsigned char b;
-	uint32_t c;
-	uint64_t d;
-	int e;
-	void* f;
-};
-
-static void check_example8(void *data) {
-	struct example8 *ex = (struct example8 *)data;
-	CHECK_EQUAL(true,ex->a);
-	CHECK_EQUAL(4,ex->b);
-	CHECK_EQUAL(8,ex->c);
-	//error on mac CHECK_EQUAL(16,ex->d);
-    CHECK(16 == ex->d)
-	CHECK_EQUAL(32,ex->e);
-}
-
-
-static void parseTests(void) {
-	dyn_type *type;
-	void *inst;
-	int rc;
-
-	type = NULL;
-	inst = NULL;
-	rc = dynType_parseWithStr(example1_descriptor, NULL, NULL, &type);
-	CHECK_EQUAL(0, rc);
-	rc = jsonSerializer_deserialize(type, example1_input, &inst);
-	CHECK_EQUAL(0, rc);
-	check_example1(inst);
-	dynType_free(type, inst);
-	dynType_destroy(type);
-
-	type = NULL;
-	inst = NULL;
-	rc = dynType_parseWithStr(example2_descriptor, NULL, NULL, &type);
-	CHECK_EQUAL(0, rc);
-	rc = jsonSerializer_deserialize(type, example2_input, &inst);
-	CHECK_EQUAL(0, rc);
-	check_example2(inst);
-	dynType_free(type, inst);
-	dynType_destroy(type);
-
-	type = NULL;
-	inst = NULL;
-	rc = dynType_parseWithStr(example3_descriptor, NULL, NULL, &type);
-	CHECK_EQUAL(0, rc);
-	rc = jsonSerializer_deserialize(type, example3_input, &inst);
-	CHECK_EQUAL(0, rc);
-	check_example3(inst);
-	dynType_free(type, inst);
-	dynType_destroy(type);
-
-	type = NULL;
-	inst = NULL;
-	rc = dynType_parseWithStr(example4_descriptor, NULL, NULL, &type);
-	CHECK_EQUAL(0, rc);
-	rc = jsonSerializer_deserialize(type, example4_input, &inst);
-	CHECK_EQUAL(0, rc);
-	check_example4(inst);
-	dynType_free(type, inst);
-	dynType_destroy(type);
-
-	type = NULL;
-	inst = NULL;
-	rc = dynType_parseWithStr(example5_descriptor, NULL, NULL, &type);
-	CHECK_EQUAL(0, rc);
-	rc = jsonSerializer_deserialize(type, example5_input, &inst);
-	CHECK_EQUAL(0, rc);
-	check_example5(inst);
-	dynType_free(type, inst);
-	dynType_destroy(type);
-
-	type = NULL;
-	struct ex6_sequence *seq;
-	rc = dynType_parseWithStr(example6_descriptor, NULL, NULL, &type);
-	CHECK_EQUAL(0, rc);
-	rc = jsonSerializer_deserialize(type, example6_input, (void **)&seq);
-	CHECK_EQUAL(0, rc);
-	check_example6((*seq));
-	dynType_free(type, seq);
-	dynType_destroy(type);
-
-
-	type = NULL;
-	inst = NULL;
-	rc = dynType_parseWithStr(example7_descriptor, NULL, NULL, &type);
-	CHECK_EQUAL(0, rc);
-	rc = jsonSerializer_deserialize(type, example7_input, &inst);
-	CHECK_EQUAL(0, rc);
-	check_example7(inst);
-	dynType_free(type, inst);
-	dynType_destroy(type);
-
-	type = NULL;
-	inst = NULL;
-	rc = dynType_parseWithStr(example8_descriptor, NULL, NULL, &type);
-	CHECK_EQUAL(0, rc);
-	rc = jsonSerializer_deserialize(type, example8_input, &inst);
-	CHECK_EQUAL(0, rc);
-	check_example8(inst);
-	dynType_free(type, inst);
-	dynType_destroy(type);
-}
-
-const char *write_example1_descriptor = "{BSIJsijFDNZb a b c d e f g h i j k l}";
-
-struct write_example1 {
-	char a;
-	int16_t b;
-	int32_t c;
-	int64_t d;
-	uint16_t e;
-	uint32_t f;
-	uint64_t g;
-	float h;
-	double i;
-	int j;
-	bool k;
-	unsigned char l;
-};
-
-void writeTest1(void) {
-	struct write_example1 ex1;
-	ex1.a=1;
-	ex1.b=2;
-	ex1.c=3;
-	ex1.d=4;
-	ex1.e=5;
-	ex1.f=6;
-	ex1.g=7;
-	ex1.h=8.8f;
-	ex1.i=9.9;
-	ex1.j=10;
-	ex1.k=true;
-	ex1.l=12;
-
-	dyn_type *type = NULL;
-	char *result = NULL;
-	int rc = dynType_parseWithStr(write_example1_descriptor, "ex1", NULL, &type);
-	CHECK_EQUAL(0, rc);
-	rc = jsonSerializer_serialize(type, &ex1, &result);
-	CHECK_EQUAL(0, rc);
-	STRCMP_CONTAINS("\"a\":1", result);
-	STRCMP_CONTAINS("\"b\":2", result);
-	STRCMP_CONTAINS("\"c\":3", result);
-	STRCMP_CONTAINS("\"d\":4", result);
-	STRCMP_CONTAINS("\"e\":5", result);
-	STRCMP_CONTAINS("\"f\":6", result);
-	STRCMP_CONTAINS("\"g\":7", result);
-	STRCMP_CONTAINS("\"h\":8.8", result);
-	STRCMP_CONTAINS("\"i\":9.9", result);
-	STRCMP_CONTAINS("\"j\":10", result);
-	STRCMP_CONTAINS("\"k\":true", result);
-	STRCMP_CONTAINS("\"l\":12", result);
-	//printf("example 1 result: '%s'\n", result);
-	dynType_destroy(type);
-	free(result);
-}
-
-const char *write_example2_descriptor = "{*{JJ a b}{SS c d} sub1 sub2}";
-
-struct write_example2_sub {
-	int64_t a;
-	int64_t b;
-};
-
-struct write_example2 {
-	struct write_example2_sub *sub1;
-	struct {
-		int16_t c;
-		int16_t d;
-	} sub2;
-};
-
-void writeTest2(void) {
-	struct write_example2_sub sub1;
-	sub1.a = 1;
-	sub1.b = 2;
-
-	struct write_example2 ex;
-	ex.sub1=&sub1;
-	ex.sub2.c = 3;
-	ex.sub2.d = 4;
-
-	dyn_type *type = NULL;
-	char *result = NULL;
-	int rc = dynType_parseWithStr(write_example2_descriptor, "ex2", NULL, &type);
-	CHECK_EQUAL(0, rc);
-	rc = jsonSerializer_serialize(type, &ex, &result);
-	CHECK_EQUAL(0, rc);
-	STRCMP_CONTAINS("\"a\":1", result);
-	STRCMP_CONTAINS("\"b\":2", result);
-	STRCMP_CONTAINS("\"c\":3", result);
-	STRCMP_CONTAINS("\"d\":4", result);
-	//printf("example 2 result: '%s'\n", result);
-	dynType_destroy(type);
-	free(result);
-}
-
-const char *write_example3_descriptor = "Tperson={ti name age};[Lperson;";
-
-struct write_example3_person {
-	const char *name;
-	uint32_t age;
-};
-
-struct write_example3 {
-	uint32_t cap;
-	uint32_t len;
-	struct write_example3_person **buf;
-};
-
-void writeTest3(void) {
-	struct write_example3_person p1;
-	p1.name = "John";
-	p1.age = 33;
-
-	struct write_example3_person p2;
-	p2.name = "Peter";
-	p2.age = 44;
-
-	struct write_example3_person p3;
-	p3.name = "Carol";
-	p3.age = 55;
-
-	struct write_example3_person p4;
-	p4.name = "Elton";
-	p4.age = 66;
-
-	struct write_example3 seq;
-	seq.buf = (struct write_example3_person **) calloc(4, sizeof(void *));
-	seq.len = seq.cap = 4;
-	seq.buf[0] = &p1;
-	seq.buf[1] = &p2;
-	seq.buf[2] = &p3;
-	seq.buf[3] = &p4;
-
-	dyn_type *type = NULL;
-	char *result = NULL;
-	int rc = dynType_parseWithStr(write_example3_descriptor, "ex3", NULL, &type);
-	CHECK_EQUAL(0, rc);
-	rc = jsonSerializer_serialize(type, &seq, &result);
-	CHECK_EQUAL(0, rc);
-	STRCMP_CONTAINS("\"age\":33", result);
-	STRCMP_CONTAINS("\"age\":44", result);
-	STRCMP_CONTAINS("\"age\":55", result);
-	STRCMP_CONTAINS("\"age\":66", result);
-	//printf("example 3 result: '%s'\n", result);
-	free(seq.buf);
-	dynType_destroy(type);
-	free(result);
-}
-
-
-
-}
-
-TEST_GROUP(JsonSerializerTests) {
-	void setup() {
-		int lvl = 1;
-		dynCommon_logSetup(stdLog, NULL, lvl);
-		dynType_logSetup(stdLog, NULL,lvl);
-		jsonSerializer_logSetup(stdLog, NULL, lvl);
-	}
-};
-
-TEST(JsonSerializerTests, ParseTests) {
-	//TODO split up
-	parseTests();
-}
-
-TEST(JsonSerializerTests, WriteTest1) {
-	writeTest1();
-}
-
-TEST(JsonSerializerTests, WriteTest2) {
-	writeTest2();
-}
-
-TEST(JsonSerializerTests, WriteTest3) {
-	writeTest3();
-}
-
-

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/dfi/test/run_tests.cpp
----------------------------------------------------------------------
diff --git a/dfi/test/run_tests.cpp b/dfi/test/run_tests.cpp
deleted file mode 100644
index 786f4bf..0000000
--- a/dfi/test/run_tests.cpp
+++ /dev/null
@@ -1,24 +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.
- */
-#include <CppUTest/TestHarness.h>
-#include "CppUTest/CommandLineTestRunner.h"                                                                                                                                                                        
-
-int main(int argc, char** argv) {
-        return RUN_ALL_TESTS(argc, argv);
-}

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/dfi/test/schemas/complex.avdl
----------------------------------------------------------------------
diff --git a/dfi/test/schemas/complex.avdl b/dfi/test/schemas/complex.avdl
deleted file mode 100644
index eff1fd8..0000000
--- a/dfi/test/schemas/complex.avdl
+++ /dev/null
@@ -1,30 +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.
- */
-
-protocol Complex {
-
-  record StatResult {
-    double sum;
-    double min;
-    double max;
-    array<double> input;
-  }
-
-  StatResult stats(array<double> input);
-}

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/dfi/test/schemas/complex.avpr
----------------------------------------------------------------------
diff --git a/dfi/test/schemas/complex.avpr b/dfi/test/schemas/complex.avpr
deleted file mode 100644
index ca39b56..0000000
--- a/dfi/test/schemas/complex.avpr
+++ /dev/null
@@ -1,55 +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.
- */
-
-{
-  "protocol" : "Complex",
-  "namespace" : null,
-  "types" : [ {
-    "type" : "record",
-    "name" : "StatResult",
-    "fields" : [ {
-      "name" : "sum",
-      "type" : "double"
-    }, {
-      "name" : "min",
-      "type" : "double"
-    }, {
-      "name" : "max",
-      "type" : "double"
-    }, {
-      "name" : "input",
-      "type" : {
-        "type" : "array",
-        "items" : "double"
-      }
-    } ]
-  } ],
-  "messages" : {
-    "stats" : {
-      "request" : [ {
-        "name" : "input",
-        "type" : {
-          "type" : "array",
-          "items" : "double"
-        }
-      } ],
-      "response" : "StatResult"
-    }
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/dfi/test/schemas/invalid1.avpr
----------------------------------------------------------------------
diff --git a/dfi/test/schemas/invalid1.avpr b/dfi/test/schemas/invalid1.avpr
deleted file mode 100644
index bbf77ee..0000000
--- a/dfi/test/schemas/invalid1.avpr
+++ /dev/null
@@ -1,47 +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.
- */
-{
-  "protocol" : "Complex",
-  "namespace" : null,
-  "types" : [ {
-    "type" : "record",
-    "name" : "StatResult",
-    "fields" : [ {
-      "name" : "sum",
-      "type" : "double"
-    }, {
-      "name" : "min",
-      "type" : "double"
-    }, {
-      "name" : "max",
-      "type" : "double"
-    }, {
-      "name" : "input",
-      "type" : {
-        "type" : "array",
-        "items" : "double"
-      }
-    } ]
-  } ],
-  "messages" : {
-    "stats" : {
-      "response" : "StatResult"
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/dfi/test/schemas/invalid2.avpr
----------------------------------------------------------------------
diff --git a/dfi/test/schemas/invalid2.avpr b/dfi/test/schemas/invalid2.avpr
deleted file mode 100644
index 9eb9209..0000000
--- a/dfi/test/schemas/invalid2.avpr
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- *Licensed to the Apache Software Foundation (ASF) under one
- *or more contributor license agreements.  See the NOTICE file
- *distributed with this work for additional information
- *regarding copyright ownership.  The ASF licenses this file
- *to you under the Apache License, Version 2.0 (the
- *"License"); you may not use this file except in compliance
- *with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *Unless required by applicable law or agreed to in writing,
- *software distributed under the License is distributed on an
- *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- *specific language governing permissions and limitations
- *under the License.
- */
- {
-  "protocol" : "Simple",
-  "types" : [ ],
-  "messages" : {
-    "sum" : {
-      "request" : [ {
-        "name" : "a"
-      }, {
-        "name" : "b",
-        "type" : "double"
-      } ],
-      "response" : "double"
-    },
-    "sub" : {
-      "request" : [ {
-        "name" : "a",
-        "type" : "double"
-      }, {
-        "name" : "b",
-        "type" : "double"
-      } ],
-      "response" : "double"
-    },
-    "sqrt" : {
-      "request" : [ {
-        "name" : "a"
-      } ],
-      "response" : "double"
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/dfi/test/schemas/simple.avdl
----------------------------------------------------------------------
diff --git a/dfi/test/schemas/simple.avdl b/dfi/test/schemas/simple.avdl
deleted file mode 100644
index a03e352..0000000
--- a/dfi/test/schemas/simple.avdl
+++ /dev/null
@@ -1,24 +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.
- */
- @namespace("org.apache.avro.test")
-protocol Simple {
-  double sum(double a, double b);
-  double sub(double a, double b);
-  double sqrt(double a);
-}

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/dfi/test/schemas/simple.avpr
----------------------------------------------------------------------
diff --git a/dfi/test/schemas/simple.avpr b/dfi/test/schemas/simple.avpr
deleted file mode 100644
index 4910346..0000000
--- a/dfi/test/schemas/simple.avpr
+++ /dev/null
@@ -1,51 +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.
- */
- {
-  "protocol" : "Simple",
-  "types" : [ ],
-  "messages" : {
-    "sum" : {
-      "request" : [ {
-        "name" : "a",
-        "type" : "double"
-      }, {
-        "name" : "b",
-        "type" : "double"
-      } ],
-      "response" : "double"
-    },
-    "sub" : {
-      "request" : [ {
-        "name" : "a",
-        "type" : "double"
-      }, {
-        "name" : "b",
-        "type" : "double"
-      } ],
-      "response" : "double"
-    },
-    "sqrt" : {
-      "request" : [ {
-        "name" : "a",
-        "type" : "double"
-      } ],
-      "response" : "double"
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/dfi/test/schemas/simple_min.avpr
----------------------------------------------------------------------
diff --git a/dfi/test/schemas/simple_min.avpr b/dfi/test/schemas/simple_min.avpr
deleted file mode 100644
index f5c6673..0000000
--- a/dfi/test/schemas/simple_min.avpr
+++ /dev/null
@@ -1,19 +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.
- */
- {"protocol":"Simple","types":[],"messages":{"sum":{"request":[{"name":"a","type":"double"},{"name":"b","type":"double"}],"response":"double"},"sub":{"request":[{"name":"a","type":"double"},{"name":"b","type":"double"}],"response":"double"},"sqrt":{"request":[{"name":"a","type":"double"}],"response":"double"}}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/documents/getting_started/using_services_with_c.md
----------------------------------------------------------------------
diff --git a/documents/getting_started/using_services_with_c.md b/documents/getting_started/using_services_with_c.md
index 6622cba..75692f9 100644
--- a/documents/getting_started/using_services_with_c.md
+++ b/documents/getting_started/using_services_with_c.md
@@ -607,4 +607,4 @@ The suspend strategy has the advantage of reducing locks' usage: of course, susp
 
 ## See also
 
-See the [C Dependeny Manager](../../dependency_manager/readme.md) and [C Dependency Manager example](../../examples/dm_example) for more information and a more complex working example.
+See the [C Dependeny Manager](../../libs/dependency_manager/readme.md) and [C Dependency Manager example](../../examples/celix-examples/dm_example) for more information and a more complex working example.

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/documents/getting_started/using_services_with_cxx.md
----------------------------------------------------------------------
diff --git a/documents/getting_started/using_services_with_cxx.md b/documents/getting_started/using_services_with_cxx.md
index d8ad2ca..b8f359e 100644
--- a/documents/getting_started/using_services_with_cxx.md
+++ b/documents/getting_started/using_services_with_cxx.md
@@ -141,7 +141,7 @@ Component are concrete classes in C++. This do not have to implement specific in
 ## Code Examples
 
 The next code blocks contains some code examples of components to indicate how to handle service dependencies, how to specify providing services and how to cope with locking/synchronizing.
-The complete example can be found [here](../../examples/services_example_cxx).
+The complete example can be found [here](../../examples/celix-examples/services_example_cxx).
 
 ### Bar Example
 
@@ -568,4 +568,4 @@ The suspend strategy has the advantage of reducing locks' usage: of course, susp
 
 ## See also
 
-See the [C++ Dependeny Manager](../../dependency_manager_cxx/readme.md) and [C++ Dependency Manager example](../../examples/dm_example_cxx) for more information and a more complex working example.
+See the [C++ Dependeny Manager](../../libs/dependency_manager_cxx/readme.md) and [C++ Dependency Manager example](../../examples/celix-examples/dm_example_cxx) for more information and a more complex working example.

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/documents/intro/readme.md
----------------------------------------------------------------------
diff --git a/documents/intro/readme.md b/documents/intro/readme.md
index b91a0e0..c98883e 100644
--- a/documents/intro/readme.md
+++ b/documents/intro/readme.md
@@ -134,17 +134,17 @@ Taking into account that C has no garbage collection handling the dynamic behavi
  
 Apache Celix offers different solutions how to cope with this dynamic behaviour:
 
-* Bundle Context & Service References  - This (low level) [API](../../framework/public/include/bundle_context.h) exists to be compatible with the OSGi standard. This should not be used in production code, because no locking/syncing mechanisms are available.   
-* Service Listener - This (log level) [API](../../framework/public/include/service_listener.h) can be used to retrieve event when services are being removed or are added. Combined with locking this can be used to safely monitor and use services. 
-* Service Tracker - This [API](../../framework/public/include/service_tracker.h) can be used to register callbacks function when services are being removed or are added. Combined with locking this can be used to safely use services.
-* [Dependency Manager](../../dependency_manager/readme.md) - This library can be used to add service dependency is a declarative way.  A locking or syncing mechanism can be selected to safely use services. Note that this is not part of the OSGi standard.
+* Bundle Context & Service References  - This (low level) [API](../../libs/framework/public/include/bundle_context.h) exists to be compatible with the OSGi standard. This should not be used in production code, because no locking/syncing mechanisms are available.
+* Service Listener - This (log level) [API](../../libs/framework/public/include/service_listener.h) can be used to retrieve event when services are being removed or are added. Combined with locking this can be used to safely monitor and use services.
+* Service Tracker - This [API](../../libs/framework/public/include/service_tracker.h) can be used to register callbacks function when services are being removed or are added. Combined with locking this can be used to safely use services.
+* [Dependency Manager](../../libs/dependency_manager/readme.md) - This library can be used to add service dependency is a declarative way.  A locking or syncing mechanism can be selected to safely use services. Note that this is not part of the OSGi standard.
 
 Even though the dependency manager is not part of the OSGi specification, this is the preferred way because it uses a higher abstraction and removes a lot boilerplate code. 
 
 ## C++ Support
 
 One of the reasons why C was chosen as implementation language is that C can act as a common denominator for (service oriented) interoperability between a range of languages.
-C++ support is added with the use of a [C++ Dependency Manager](../../dependency_manager_cxx/readme.md).
+C++ support is added with the use of a [C++ Dependency Manager](../../libs/dependency_manager_cxx/readme.md).
 The Dependency Manager is arguably the most convenient way to interact with services, confers most uses cases and eliminates the necessity to port the rest of the (large) API to C++.
 
 ## Documentation

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/documents/subprojects/readme.md
----------------------------------------------------------------------
diff --git a/documents/subprojects/readme.md b/documents/subprojects/readme.md
index 49da63e..2853912 100644
--- a/documents/subprojects/readme.md
+++ b/documents/subprojects/readme.md
@@ -19,25 +19,25 @@ limitations under the License.
 
 Apache Celix is organized into several subprojects. The following subproject are currently available:
 
-* [Framework](../../framework) - The Apache Celix framework, an implementation of OSGi adapted to C.
-* [C Dependency Manager](../../dependency_manager) - A C component/dependency model for use through an API provided as library.
-* [C++ Dependency Manager](../../dependency_manager_cxx) - A C++ component/dependency model for use through an API provided as library.
-* [Device Access](../../device_access) - An implementation of the OSGi Device Access specification adapted to C.
-* [Etcd library](../../etcdlib) - A C library that interfaces with ETCD. 
+* [Framework](../../libs/framework) - The Apache Celix framework, an implementation of OSGi adapted to C.
+* [C Dependency Manager](../../libs/dependency_manager) - A C component/dependency model for use through an API provided as library.
+* [C++ Dependency Manager](../../libs/dependency_manager_cxx) - A C++ component/dependency model for use through an API provided as library.
+* [Device Access](../../bundles/device_access) - An implementation of the OSGi Device Access specification adapted to C.
+* [Etcd library](../../libs/etcdlib) - A C library that interfaces with ETCD.
 * [Examples](../../examples) - A Selection of examples showing how the framework can be used.
-* [Log Service](../../log_service) - An implementation of the OSGi Log Service adapated to C.
-* [Log Writer](../../log_writer) - A simple log writer for use in combination with the Log Service.
-* [Remote Service Admin](../../remote_services) - An implementation of the OSGi Remote Service Admin Service - for several protocols - adapted to C.
-    * [Remote Service Admin HTTP](../../remote_services/remote_service_admin_http) - A HTTP implementation of the RSA.
-    * [Remote Service Admin DFI](../../remote_services/remote_service_admin_dfi) - A Dynamic Function Interface (DFI) implementation of the RSA.
-    * [Remote Service Admin SHM](../../remote_services/remote_service_admin_shm) - A shared memory implementation of the RSA.
-    * [Topology Manager](../../remote_services/topology_manager) - A (scoped) RSA Topology Manager implementation. 
-    * [Discovery Configured](../../remote_services/discovery_configured) - A RSA Discovery implementation using static configuration (xml).
-    * [Discovery Etcd](../../remote_services/dicovery_etcd) - A RSA Discovery implementation using etcd.
-    * [Discovery SHM](../../remote_services/dicovery_shm) - A RSA Discovery implementation using shared memory.
-* [Shell](../../shell) - A OSGi shell implementation.
-* [Shell TUI](../../shell_tui) - A textual UI for the Celix Shell.
-* [Remote Shell](../../remote_shell) - A remote (telnet) frontend for the Celix shell.
-* [Bonjour Shell](../../shell_bonjour) - A remote (Bonjour / mDNS) frontend for the Celix shell.
-* [Deployment Admin](../../deployment_admin) - A deployment admin implementation.
+* [Log Service](../../bundles/log_service) - An implementation of the OSGi Log Service adapated to C.
+* [Log Writer](../../bundles/log_writer) - A simple log writer for use in combination with the Log Service.
+* [Remote Service Admin](../../bundles/remote_services) - An implementation of the OSGi Remote Service Admin Service - for several protocols - adapted to C.
+    * [Remote Service Admin HTTP](../../bundles/remote_services/remote_service_admin_http) - A HTTP implementation of the RSA.
+    * [Remote Service Admin DFI](../../bundles/remote_services/remote_service_admin_dfi) - A Dynamic Function Interface (DFI) implementation of the RSA.
+    * [Remote Service Admin SHM](../../bundles/remote_services/remote_service_admin_shm) - A shared memory implementation of the RSA.
+    * [Topology Manager](../../bundles/remote_services/topology_manager) - A (scoped) RSA Topology Manager implementation.
+    * [Discovery Configured](../../bundles/remote_services/discovery_configured) - A RSA Discovery implementation using static configuration (xml).
+    * [Discovery Etcd](../../bundles/remote_services/dicovery_etcd) - A RSA Discovery implementation using etcd.
+    * [Discovery SHM](../../bundles/remote_services/dicovery_shm) - A RSA Discovery implementation using shared memory.
+* [Shell](../../bundles/shell/shell) - A OSGi shell implementation.
+* [Shell TUI](../../bundles/shell/shell_tui) - A textual UI for the Celix Shell.
+* [Remote Shell](../../bundles/shell/remote_shell) - A remote (telnet) frontend for the Celix shell.
+* [Bonjour Shell](../../bundles/shell/shell_bonjour) - A remote (Bonjour / mDNS) frontend for the Celix shell.
+* [Deployment Admin](../../bundles/deployment_admin) - A deployment admin implementation.
 

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/etcdlib/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/etcdlib/CMakeLists.txt b/etcdlib/CMakeLists.txt
deleted file mode 100644
index eae7d0f..0000000
--- a/etcdlib/CMakeLists.txt
+++ /dev/null
@@ -1,88 +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.
-
-
-if (NOT COMMAND celix_subproject) 
-    #If COMMAND celix_subproject is not defined, this CMakeLists will
-    #act as a top level project. Making the etcdlib useable 
-    #stand-alone
-
-    cmake_minimum_required (VERSION 3.2)
-    project(ETCDLIB 
-        VERSION 1.0.0
-        LANGUAGES C CXX
-    )
-
-    include(GNUInstallDirs)
-
-    set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
-    set(CMAKE_C_FLAGS "-D_GNU_SOURCE -std=gnu99 ${CMAKE_C_FLAGS}")
-    set(CMAKE_C_FLAGS_DEBUG "-g -DDEBUG")
-
-    set(ETCDLIB_CMP ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME})
-else()
-    set(ETCDLIB_CMP framework)
-endif ()
-
-find_package(CURL REQUIRED)
-find_package(Jansson REQUIRED)
-
-add_library(etcdlib SHARED
-    src/etcd.c
-)
-target_include_directories(etcdlib PUBLIC 
-    $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/api>
-    $<INSTALL_INTERFACE:include/etcdlib>
-)
-target_include_directories(etcdlib PRIVATE src)
-target_include_directories(etcdlib SYSTEM PRIVATE 
-    ${CURL_INCLUDE_DIRS}
-    ${JANSSON_INCLUDE_DIRS}
-)
-
-set_target_properties(etcdlib PROPERTIES SOVERSION 1)
-set_target_properties(etcdlib PROPERTIES VERSION 1.0.0)
-target_link_libraries(etcdlib PRIVATE ${CURL_LIBRARIES} ${JANSSON_LIBRARIES})
-
-add_library(etcdlib_static STATIC
-    src/etcd.c
-)
-target_include_directories(etcdlib_static PUBLIC 
-    $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/api>
-    $<INSTALL_INTERFACE:include/etcdlib>
-)
-target_include_directories(etcdlib_static PRIVATE src)
-target_include_directories(etcdlib_static SYSTEM PRIVATE 
-    ${CURL_INCLUDE_DIRS}
-    ${JANSSON_INCLUDE_DIRS}
-)
-set_target_properties(etcdlib_static PROPERTIES "SOVERSION" 1)
-target_link_libraries(etcdlib_static PRIVATE ${CURL_LIBRARIES} ${JANSSON_LIBRARY})
-
-add_executable(etcdlib_test ${CMAKE_CURRENT_SOURCE_DIR}/test/etcdlib_test.c)
-target_link_libraries(etcdlib_test PRIVATE etcdlib_static)
-
-#TODO install etcdlib_static. For now left out, because the imported target leaks library paths
-install(DIRECTORY api/ DESTINATION include/etcdlib COMPONENT ${ETCDLIB_CMP})
-if (NOT COMMAND celix_subproject) 
-    install(TARGETS etcdlib DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${ETCDLIB_CMP})
-else ()
-    install(TARGETS etcdlib EXPORT celix DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${ETCDLIB_CMP})
-    #Setup target aliases to match external usage
-    add_library(Celix::etcdlib ALIAS etcdlib)
-    add_library(Celix::etcdlib_static ALIAS etcdlib_static)
-endif ()

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/etcdlib/README.md
----------------------------------------------------------------------
diff --git a/etcdlib/README.md b/etcdlib/README.md
deleted file mode 100644
index 28cc442..0000000
--- a/etcdlib/README.md
+++ /dev/null
@@ -1,88 +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.
--->
-
-# Etcdlib
-etcd is a distributed, consistent key-value store for shared configuration and service discovery, part of the CoreOS project.
-
-This repository provides a library for etcd for C applications.
-
-Etcdlib can be used as part of Celix but is also useable stand-alone.
-
-## Preparing
-The following packages (libraries + headers) should be installed on your system:
-
-*	Development Environment
-	*	build-essentials (gcc/g++ or clang/clang++)
-	*	cmake (3.2 or higher)
-
-* 	Etcdlib Dependencies
-	*	curl
-	*	jansson
-
-## Download the Apache Celix sources
-To get started you first have to download the Apache Celix sources. This can be done by cloning the Apache Celix git repository:
-
-```bash
-# Create a new workspace to work in, e.g:
-mkdir -p ${HOME}/workspace
-export WS=${HOME}/workspace
-cd ${WS}
-
-# clone the repro
-git clone --single-branch --branch develop https://github.com/apache/celix.git
-```
-
-## Building
-Etcdlib uses [CMake](https://cmake.org) as build system. CMake can generate (among others) makefiles or ninja build files. Using ninja build files will result in a faster build.
-
-### Building using CMake and makefiles:
-```bash
-cd ${WS}/celix/etcdlib
-mkdir build
-cd build
-cmake .. 
-make 
-```
-
-### Building using CMake and Ninja
-```bash
-cd ${WS}/celix/etcdlib
-mkdir build
-cd build
-cmake -G Ninja ..
-ninja
-```
-
-## Editing Build options
-With use of CMake, Etcdlib makes it possible to edit build options. This enabled users, among other options, to configure a install location.
-To edit the options use ccmake or cmake-gui. For cmake-gui an additional package install can be necessary (Fedora: `dnf install cmake-gui`). 
-
-```bash
-cd ${WS}/celix/etcdlib/build
-ccmake .
-# Edit the CMAKE_INSTALL_PREFIX config to set the install location
-```
-
-For this guide we assume the CMAKE_INSTALL_PREFIX is `/usr/local`.
-
-## Installing Etcdlib
-
-```bash
-cd ${WS}/celix/etcdlib/build
-make
-sudo make install
-```

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/etcdlib/api/etcd.h
----------------------------------------------------------------------
diff --git a/etcdlib/api/etcd.h b/etcdlib/api/etcd.h
deleted file mode 100644
index 7980700..0000000
--- a/etcdlib/api/etcd.h
+++ /dev/null
@@ -1,110 +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.
- */
-
-#ifndef ETCDLIB_H_
-#define ETCDLIB_H_
-
-#include <stdbool.h>
-
-/*
- * If set etcdlib will _not_ initialize curl
- * using curl_global_init. Note that 
- * curl_global_init can be called multiple
- * times, but is _not_ thread-safe.
- */
-#define ETCDLIB_NO_CURL_INITIALIZATION (1)
-
-#define ETCDLIB_ACTION_CREATE   "create"
-#define ETCDLIB_ACTION_GET      "get"
-#define ETCDLIB_ACTION_SET      "set"
-#define ETCDLIB_ACTION_UPDATE   "update"
-#define ETCDLIB_ACTION_DELETE   "delete"
-#define ETCDLIB_ACTION_EXPIRE   "expire"
-
-typedef void (*etcd_key_value_callback) (const char *key, const char *value, void* arg);
-
-/**
- * @desc Initialize the ETCD-LIB  with the server/port where Etcd can be reached.
- * @param const char* server. String containing the IP-number of the server.
- * @param int port. Port number of the server.
- * @param int flags. bitwise flags to control etcdlib initialization. 
- * @return 0 on success, non zero otherwise.
- */
-int etcd_init(const char* server, int port, int flags);
-
-/**
- * @desc Retrieve a single value from Etcd.
- * @param const char* key. The Etcd-key (Note: a leading '/' should be avoided)
- * @param char** value. The allocated memory contains the Etcd-value. The caller is responsible for freeing this memory.
- * @param int* modifiedIndex. If not NULL the Etcd-index of the last modified value.
- * @return 0 on success, non zero otherwise
- */
-int etcd_get(const char* key, char** value, int* modifiedIndex);
-
-/**
- * @desc Retrieve the contents of a directory. For every found key/value pair the given callback function is called.
- * @param const char* directory. The Etcd-directory which has to be searched for keys
- * @param etcd_key_value_callback callback. Callback function which is called for every found key
- * @param void *arg. Argument is passed to the callback function
- * @param int* modifiedIndex. If not NULL the Etcd-index of the last modified value.
- * @return 0 on success, non zero otherwise
- */
-int etcd_get_directory(const char* directory, etcd_key_value_callback callback, void *arg, long long* modifiedIndex);
-
-/**
- * @desc Setting an Etcd-key/value
- * @param const char* key. The Etcd-key (Note: a leading '/' should be avoided)
- * @param const char* value. The Etcd-value 
- * @param int ttl. If non-zero this is used as the TTL value
- * @param bool prevExist. If true the value is only set when the key already exists, if false it is always set
- * @return 0 on success, non zero otherwise
- */
-int etcd_set(const char* key, const char* value, int ttl, bool prevExist);
-
-/**
- * @desc Setting an Etcd-key/value and checks if there is a different previuos value
- * @param const char* key. The Etcd-key (Note: a leading '/' should be avoided)
- * @param const char* value. The Etcd-value 
- * @param int ttl. If non-zero this is used as the TTL value
- * @param bool always_write. If true the value is written, if false only when the given value is equal to the value in etcd.
- * @return 0 on success, non zero otherwise
- */
-int etcd_set_with_check(const char* key, const char* value, int ttl, bool always_write);
-
-/**
- * @desc Deleting an Etcd-key
- * @param const char* key. The Etcd-key (Note: a leading '/' should be avoided)
- * @return 0 on success, non zero otherwise
- */
-int etcd_del(const char* key);
-
-/**
- * @desc Watching an etcd directory for changes
- * @param const char* key. The Etcd-key (Note: a leading '/' should be avoided)
- * @param long long index. The Etcd-index which the watch has to be started on.
- * @param char** action. If not NULL, memory is allocated and contains the action-string. The caller is responsible of freeing the memory.
- * @param char** prevValue. If not NULL, memory is allocated and contains the previous value. The caller is responsible of freeing the memory.
- * @param char** value. If not NULL, memory is allocated and contains the new value. The caller is responsible of freeing the memory.
- * @param char** rkey. If not NULL, memory is allocated and contains the updated key. The caller is responsible of freeing the memory.
- * @param long long* modifiedIndex. If not NULL, the index of the modification is written.
- * @return 0 on success, non zero otherwise
- */
-int etcd_watch(const char* key, long long index, char** action, char** prevValue, char** value, char** rkey, long long* modifiedIndex);
-
-#endif /*ETCDLIB_H_ */

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/etcdlib/cmake/FindJansson.cmake
----------------------------------------------------------------------
diff --git a/etcdlib/cmake/FindJansson.cmake b/etcdlib/cmake/FindJansson.cmake
deleted file mode 100644
index bedf8be..0000000
--- a/etcdlib/cmake/FindJansson.cmake
+++ /dev/null
@@ -1,42 +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.
-
-
-# - Try to find Jansson
-# Once done this will define
-#  JANSSON_FOUND - System has Jansson
-#  JANSSON_INCLUDE_DIRS - The Jansson include directories
-#  JANSSON_LIBRARIES - The libraries needed to use Jansson
-#  JANSSON_DEFINITIONS - Compiler switches required for using Jansson
-
-find_path(JANSSON_INCLUDE_DIR jansson.h
-          /usr/include
-          /usr/local/include )
-
-find_library(JANSSON_LIBRARY NAMES jansson
-             PATHS /usr/lib /usr/local/lib )
-
-set(JANSSON_LIBRARIES ${JANSSON_LIBRARY} )
-set(JANSSON_INCLUDE_DIRS ${JANSSON_INCLUDE_DIR} )
-
-include(FindPackageHandleStandardArgs)
-# handle the QUIETLY and REQUIRED arguments and set JANSSON_FOUND to TRUE
-# if all listed variables are TRUE
-find_package_handle_standard_args(Jansson  DEFAULT_MSG
-                                  JANSSON_LIBRARY JANSSON_INCLUDE_DIR)
-
-mark_as_advanced(JANSSON_INCLUDE_DIR JANSSON_LIBRARY )
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/etcdlib/src/etcd.c
----------------------------------------------------------------------
diff --git a/etcdlib/src/etcd.c b/etcdlib/src/etcd.c
deleted file mode 100644
index 0c9d615..0000000
--- a/etcdlib/src/etcd.c
+++ /dev/null
@@ -1,546 +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.
- */
-
-#include <stdio.h>
-#include <stdbool.h>
-#include <string.h>
-#include <curl/curl.h>
-#include <jansson.h>
-
-#include "etcd.h"
-
-#define ETCD_JSON_NODE                  "node"
-#define ETCD_JSON_PREVNODE              "prevNode"
-#define ETCD_JSON_NODES                 "nodes"
-#define ETCD_JSON_ACTION                "action"
-#define ETCD_JSON_KEY                   "key"
-#define ETCD_JSON_VALUE                 "value"
-#define ETCD_JSON_DIR                   "dir"
-#define ETCD_JSON_MODIFIEDINDEX         "modifiedIndex"
-#define ETCD_JSON_INDEX                 "index"
-
-#define ETCD_HEADER_INDEX               "X-Etcd-Index: "
-
-#define MAX_OVERHEAD_LENGTH           64
-#define DEFAULT_CURL_TIMEOUT          10
-#define DEFAULT_CURL_CONECTTIMEOUT    10
-
-typedef enum {
-	GET, PUT, DELETE
-} request_t;
-
-static const char* etcd_server;
-static int etcd_port = 0;
-
-struct MemoryStruct {
-	char *memory;
-	char *header;
-	size_t memorySize;
-    size_t headerSize;
-};
-
-
-/**
- * Static function declarations
- */
-static int performRequest(char* url, request_t request, void* reqData, void* repData);
-static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp);
-/**
- * External function definition
- */
-
-
-/**
- * etcd_init
- */
-int etcd_init(const char* server, int port, int flags) {
-	int status = 0;
-	etcd_server = server;
-	etcd_port = port;
-
-	if ((flags & ETCDLIB_NO_CURL_INITIALIZATION) == 0) {
-		//NO_CURL_INITIALIZATION flag not set
-		status = curl_global_init(CURL_GLOBAL_ALL);
-	}
-
-	return status;
-}
-
-
-/**
- * etcd_get
- */
-int etcd_get(const char* key, char** value, int* modifiedIndex) {
-	json_t* js_root = NULL;
-	json_t* js_node = NULL;
-	json_t* js_value = NULL;
-	json_t* js_modifiedIndex = NULL;
-	json_error_t error;
-	int res = -1;
-	struct MemoryStruct reply;
-
-	reply.memory = malloc(1); /* will be grown as needed by the realloc above */
-	reply.memorySize = 0; /* no data at this point */
-    reply.header = NULL; /* will be grown as needed by the realloc above */
-    reply.headerSize = 0; /* no data at this point */
-
-	int retVal = -1;
-	char *url;
-	asprintf(&url, "http://%s:%d/v2/keys/%s", etcd_server, etcd_port, key);
-	res = performRequest(url, GET, NULL, (void*) &reply);
-	free(url);
-
-	if (res == CURLE_OK) {
-		js_root = json_loads(reply.memory, 0, &error);
-
-		if (js_root != NULL) {
-			js_node = json_object_get(js_root, ETCD_JSON_NODE);
-		}
-		if (js_node != NULL) {
-			js_value = json_object_get(js_node, ETCD_JSON_VALUE);
-			js_modifiedIndex = json_object_get(js_node,
-					ETCD_JSON_MODIFIEDINDEX);
-
-			if (js_modifiedIndex != NULL && js_value != NULL) {
-				if (modifiedIndex) {
-					*modifiedIndex = json_integer_value(js_modifiedIndex);
-				}
-				*value = strdup(json_string_value(js_value));
-				retVal = 0;
-			}
-		}
-		if (js_root != NULL) {
-			json_decref(js_root);
-		}
-	}
-
-	if (reply.memory) {
-		free(reply.memory);
-	}
-	if(retVal != 0) {
-		*value = NULL;
-	}
-	return retVal;
-}
-
-
-static int etcd_get_recursive_values(json_t* js_root, etcd_key_value_callback callback, void *arg, json_int_t *mod_index) {
-	json_t *js_nodes;
-	if ((js_nodes = json_object_get(js_root, ETCD_JSON_NODES)) != NULL) {
-		// subarray
-		if (json_is_array(js_nodes)) {
-			int len = json_array_size(js_nodes);
-			for (int i = 0; i < len; i++) {
-				json_t *js_object = json_array_get(js_nodes, i);
-				json_t *js_mod_index = json_object_get(js_object, ETCD_JSON_MODIFIEDINDEX);
-
-				if(js_mod_index != NULL) {
-					json_int_t index = json_integer_value(js_mod_index);
-					if(*mod_index < index) {
-						*mod_index = index;
-					}
-				} else {
-					printf("[ETCDLIB] Error: No INDEX found for key!\n");
-				}
-
-				if (json_object_get(js_object, ETCD_JSON_NODES)) {
-					// node contains nodes
-					etcd_get_recursive_values(js_object, callback, arg, mod_index);
-				} else {
-					json_t* js_key = json_object_get(js_object, ETCD_JSON_KEY);
-					json_t* js_value = json_object_get(js_object, ETCD_JSON_VALUE);
-
-					if (js_key && js_value) {
-						if (!json_object_get(js_object, ETCD_JSON_DIR)) {
-							callback(json_string_value(js_key), json_string_value(js_value), arg);
-						}
-					} //else empty etcd directory, not an error.
-
-				}
-			}
-		} else {
-			fprintf(stderr, "[ETCDLIB] Error: misformatted JSON: nodes element is not an array !!\n");
-		}
-	} else {
-		fprintf(stderr, "[ETCDLIB] Error: nodes element not found!!\n");
-	}
-
-	return (*mod_index > 0 ? 0 : 1);
-}
-
-static long long etcd_get_current_index(const char* headerData) {
-    long long index = -1;
-    char * indexStr = strstr(headerData, ETCD_HEADER_INDEX);
-    indexStr += strlen(ETCD_HEADER_INDEX);
-
-    if (sscanf(indexStr, "%lld\n",&index) == 1) {
-    } else {
-        index = -1;
-    }
-    return index;
-}
-/**
- * etcd_get_directory
- */
-int etcd_get_directory(const char* directory, etcd_key_value_callback callback, void* arg, long long* modifiedIndex) {
-	json_t* js_root = NULL;
-	json_t* js_rootnode = NULL;
-
-	json_error_t error;
-	int res;
-	struct MemoryStruct reply;
-
-	reply.memory = malloc(1); /* will be grown as needed by the realloc above */
-	reply.memorySize = 0; /* no data at this point */
-    reply.header = malloc(1); /* will be grown as needed by the realloc above */
-    reply.headerSize = 0; /* no data at this point */
-
-	int retVal = 0;
-	char *url;
-
-	asprintf(&url, "http://%s:%d/v2/keys/%s?recursive=true", etcd_server, etcd_port, directory);
-
-	res = performRequest(url, GET, NULL, (void*) &reply);
-	free(url);
-	if (res == CURLE_OK) {
-		js_root = json_loads(reply.memory, 0, &error);
-		if (js_root != NULL) {
-			js_rootnode = json_object_get(js_root, ETCD_JSON_NODE);
-		} else {
-			retVal = -1;
-			fprintf(stderr, "[ETCDLIB] Error: %s in js_root not found", ETCD_JSON_NODE);
-		}
-		if (js_rootnode != NULL) {
-			*modifiedIndex = 0;
-			retVal = etcd_get_recursive_values(js_rootnode, callback, arg, (json_int_t*)modifiedIndex);
-            long long indexFromHeader = etcd_get_current_index(reply.header);
-            if (indexFromHeader > *modifiedIndex) {
-              *modifiedIndex = indexFromHeader;
-            }
-		} else {
-			// Error occured, retrieve the index of ETCD from the error code
-			js_rootnode = json_object_get(js_root, ETCD_JSON_INDEX);
-			if(js_rootnode) {
-				json_int_t index = json_integer_value(js_rootnode);
-				*modifiedIndex = index;
-
-			} else {
-				fprintf(stderr, "[ETCDLIB] Error: index not found in error %s\n", reply.memory);
-
-			}
-
-		}
-		if (js_root != NULL) {
-			json_decref(js_root);
-		}
-	}
-
-    free(reply.memory);
-    free(reply.header);
-
-	return retVal;
-}
-
-/**
- * etcd_set
- */
-int etcd_set(const char* key, const char* value, int ttl, bool prevExist) {
-	json_error_t error;
-	json_t* js_root = NULL;
-	json_t* js_node = NULL;
-	json_t* js_value = NULL;
-	int retVal = -1;
-	char *url;
-	size_t req_len = strlen(value) + MAX_OVERHEAD_LENGTH;
-	char request[req_len];
-	char* requestPtr = request;
-	int res;
-	struct MemoryStruct reply;
-
-	/* Skip leading '/', etcd cannot handle this. */
-	while(*key == '/') {
-		key++;
-	}
-
-	reply.memory = calloc(1, 1); /* will be grown as needed by the realloc above */
-	reply.memorySize = 0; /* no data at this point */
-    reply.header = NULL; /* will be grown as needed by the realloc above */
-    reply.headerSize = 0; /* no data at this point */
-
-	asprintf(&url, "http://%s:%d/v2/keys/%s", etcd_server, etcd_port, key);
-
-	requestPtr += snprintf(requestPtr, req_len, "value=%s", value);
-	if (ttl > 0) {
-		requestPtr += snprintf(requestPtr, req_len-(requestPtr-request), ";ttl=%d", ttl);
-	}
-
-	if (prevExist) {
-		requestPtr += snprintf(requestPtr, req_len-(requestPtr-request), ";prevExist=true");
-	}
-
-	res = performRequest(url, PUT, request, (void*) &reply);
-	if(url) {
-		free(url);
-	}
-
-	if (res == CURLE_OK) {
-		js_root = json_loads(reply.memory, 0, &error);
-
-		if (js_root != NULL) {
-			js_node = json_object_get(js_root, ETCD_JSON_NODE);
-		}
-		if (js_node != NULL) {
-			js_value = json_object_get(js_node, ETCD_JSON_VALUE);
-		}
-		if (js_value != NULL && json_is_string(js_value)) {
-			if(strcmp(json_string_value(js_value), value) == 0) {
-				retVal = 0;
-			}
-		}
-		if (js_root != NULL) {
-			json_decref(js_root);
-		}
-	}
-
-	if (reply.memory) {
-		free(reply.memory);
-	}
-
-	return retVal;
-}
-
-
-/**
- * etcd_set_with_check
- */
-int etcd_set_with_check(const char* key, const char* value, int ttl, bool always_write) {
-	char *etcd_value;
-	int result = 0;
-	if (etcd_get(key, &etcd_value, NULL) == 0) {
-		if(etcd_value!=NULL){
-			if (strcmp(etcd_value, value) != 0) {
-				fprintf(stderr, "[ETCDLIB] WARNING: value already exists and is different\n");
-				fprintf(stderr, "   key       = %s\n", key);
-				fprintf(stderr, "   old value = %s\n", etcd_value);
-				fprintf(stderr, "   new value = %s\n", value);
-				result = -1;
-			}
-			free(etcd_value);
-		}
-	}
-	if(always_write || !result) {
-		result = etcd_set(key, value, ttl, false);
-	}
-	return result;
-}
-
-
-/**
- * etcd_watch
- */
-int etcd_watch(const char* key, long long index, char** action, char** prevValue, char** value, char** rkey, long long* modifiedIndex) {
-	json_error_t error;
-	json_t* js_root = NULL;
-	json_t* js_node = NULL;
-	json_t* js_prevNode = NULL;
-	json_t* js_action = NULL;
-	json_t* js_value = NULL;
-	json_t* js_rkey = NULL;
-	json_t* js_prevValue = NULL;
-	json_t* js_modIndex = NULL;
-	int retVal = -1;
-	char *url = NULL;
-	int res;
-	struct MemoryStruct reply;
-
-	reply.memory = malloc(1); /* will be grown as needed by the realloc above */
-	reply.memorySize = 0; /* no data at this point */
-    reply.header = NULL; /* will be grown as needed by the realloc above */
-    reply.headerSize = 0; /* no data at this point */
-
-	if (index != 0)
-		asprintf(&url, "http://%s:%d/v2/keys/%s?wait=true&recursive=true&waitIndex=%lld", etcd_server, etcd_port, key, index);
-	else
-		asprintf(&url, "http://%s:%d/v2/keys/%s?wait=true&recursive=true", etcd_server, etcd_port, key);
-	res = performRequest(url, GET, NULL, (void*) &reply);
-	if(url)
-		free(url);
-	if (res == CURLE_OK) {
-		js_root = json_loads(reply.memory, 0, &error);
-
-		if (js_root != NULL) {
-			js_action = json_object_get(js_root, ETCD_JSON_ACTION);
-			js_node = json_object_get(js_root, ETCD_JSON_NODE);
-			js_prevNode = json_object_get(js_root, ETCD_JSON_PREVNODE);
-			retVal = 0;
-		}
-		if (js_prevNode != NULL) {
-			js_prevValue = json_object_get(js_prevNode, ETCD_JSON_VALUE);
-		}
-		if (js_node != NULL) {
-			js_rkey = json_object_get(js_node, ETCD_JSON_KEY);
-			js_value = json_object_get(js_node, ETCD_JSON_VALUE);
-			js_modIndex = json_object_get(js_node, ETCD_JSON_MODIFIEDINDEX);
-		}
-		if (js_prevNode != NULL) {
-			js_prevValue = json_object_get(js_prevNode, ETCD_JSON_VALUE);
-		}
-		if ((prevValue != NULL) && (js_prevValue != NULL) && (json_is_string(js_prevValue))) {
-
-			*prevValue = strdup(json_string_value(js_prevValue));
-		}
-		if(modifiedIndex != NULL) {
-			if ((js_modIndex != NULL) && (json_is_integer(js_modIndex))) {
-				*modifiedIndex = json_integer_value(js_modIndex);
-			} else {
-				*modifiedIndex = index;
-			}
-		}
-		if ((rkey != NULL) && (js_rkey != NULL) && (json_is_string(js_rkey))) {
-			*rkey = strdup(json_string_value(js_rkey));
-
-		}
-		if ((action != NULL)  && (js_action != NULL)  && (json_is_string(js_action))) {
-			*action = strdup(json_string_value(js_action));
-		}
-		if ((value != NULL) && (js_value != NULL) && (json_is_string(js_value))) {
-			*value = strdup(json_string_value(js_value));
-		}
-		if (js_root != NULL) {
-			json_decref(js_root);
-		}
-
-	}
-
-	free(reply.memory);
-
-	return retVal;
-}
-
-/**
- * etcd_del
- */
-int etcd_del(const char* key) {
-	json_error_t error;
-	json_t* js_root = NULL;
-	json_t* js_node = NULL;
-	int retVal = -1;
-	char *url;
-	int res;
-	struct MemoryStruct reply;
-
-	reply.memory = malloc(1); /* will be grown as needed by the realloc above */
-	reply.memorySize = 0; /* no data at this point */
-    reply.header = NULL; /* will be grown as needed by the realloc above */
-    reply.headerSize = 0; /* no data at this point */
-
-	asprintf(&url, "http://%s:%d/v2/keys/%s?recursive=true", etcd_server, etcd_port, key);
-	res = performRequest(url, DELETE, NULL, (void*) &reply);
-	free(url);
-
-	if (res == CURLE_OK) {
-		js_root = json_loads(reply.memory, 0, &error);
-		if (js_root != NULL) {
-			js_node = json_object_get(js_root, ETCD_JSON_NODE);
-		}
-
-		if (js_node != NULL) {
-			retVal = 0;
-		}
-
-		if (js_root != NULL) {
-			json_decref(js_root);
-		}
-	}
-
-	free(reply.memory);
-
-	return retVal;
-}
-
-
-static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) {
-	size_t realsize = size * nmemb;
-	struct MemoryStruct *mem = (struct MemoryStruct *) userp;
-
-    mem->memory = realloc(mem->memory, mem->memorySize + realsize + 1);
-	if (mem->memory == NULL) {
-		/* out of memory! */
-		fprintf(stderr, "[ETCDLIB] Error: not enough memory (realloc returned NULL)\n");
-		return 0;
-	}
-
-	memcpy(&(mem->memory[mem->memorySize]), contents, realsize);
-	mem->memorySize += realsize;
-	mem->memory[mem->memorySize] = 0;
-
-	return realsize;
-}
-
-static size_t WriteHeaderCallback(void *contents, size_t size, size_t nmemb, void *userp) {
-    size_t realsize = size * nmemb;
-    struct MemoryStruct *mem = (struct MemoryStruct *) userp;
-
-    mem->header = realloc(mem->header, mem->headerSize + realsize + 1);
-    if (mem->header == NULL) {
-        /* out of memory! */
-        fprintf(stderr, "[ETCDLIB] Error: not enough header-memory (realloc returned NULL)\n");
-        return 0;
-    }
-
-    memcpy(&(mem->header[mem->headerSize]), contents, realsize);
-    mem->headerSize += realsize;
-    mem->header[mem->headerSize] = 0;
-
-    return realsize;
-}
-
-
-
-static int performRequest(char* url, request_t request, void* reqData, void* repData) {
-	CURL *curl = NULL;
-	CURLcode res = 0;
-	curl = curl_easy_init();
-	curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
-	curl_easy_setopt(curl, CURLOPT_TIMEOUT, DEFAULT_CURL_TIMEOUT);
-	curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, DEFAULT_CURL_CONECTTIMEOUT);
-	curl_easy_setopt(curl, CURLOPT_URL, url);
-	curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
-	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
-	curl_easy_setopt(curl, CURLOPT_WRITEDATA, repData);
-    if (((struct MemoryStruct*)repData)->header) {
-        curl_easy_setopt(curl, CURLOPT_HEADERDATA, repData);
-        curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, WriteHeaderCallback);
-    }
-
-	if (request == PUT) {
-		curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
-		curl_easy_setopt(curl, CURLOPT_POST, 1L);
-		curl_easy_setopt(curl, CURLOPT_POSTFIELDS, reqData);
-	} else if (request == DELETE) {
-		curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
-	} else if (request == GET) {
-		curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
-	}
-
-	res = curl_easy_perform(curl);
-	curl_easy_cleanup(curl);
-
-	return res;
-}

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/etcdlib/test/etcdlib_test.c
----------------------------------------------------------------------
diff --git a/etcdlib/test/etcdlib_test.c b/etcdlib/test/etcdlib_test.c
deleted file mode 100644
index d4b34b9..0000000
--- a/etcdlib/test/etcdlib_test.c
+++ /dev/null
@@ -1,116 +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.
- */
-
-/**
- * Test program for testing the etcdlib.
- * Prerequisite is that etcdlib is started on localhost on default port (2379)
- * tested with etcd 2.3.7
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include "etcd.h"
-
-#include <pthread.h>
-
-int simplewritetest() {
-	int res = 0;
-	char*value = NULL;
-	etcd_set("simplekey", "testvalue", 5, false);
-	etcd_get("simplekey", &value, NULL);
-	if (value && strcmp(value, "testvalue")) {
-		printf("etcdlib test error: expected testvalue got %s\n", value);
-		res = -1;
-	}
-	free(value);
-	return res;
-}
-
-void* waitForChange(void*arg) {
-	int *idx = (int*)arg;
-	char *action = NULL;
-	char *prevValue = NULL;
-	char *value = NULL;
-	char *rkey = NULL;
-	long long modifiedIndex;
-
-	printf("Watching for index %d\n", *idx);
-
-	if(etcd_watch("hier/ar", *idx, &action, &prevValue, &value, &rkey, &modifiedIndex) == 0){
-		printf(" New value from watch : [%s]%s => %s\n", rkey, prevValue, value);
-		if(action != NULL) free(action);
-		if(prevValue != NULL) free(prevValue);
-		if(rkey != NULL) free(rkey);
-		if(value != NULL) free(value);
-	}
-
-	*idx = modifiedIndex+1;
-
-	action = NULL;
-	prevValue = NULL;
-	value = NULL;
-	rkey = NULL;
-
-	if(etcd_watch("hier/ar", *idx, &action, &prevValue, &value, &rkey, &modifiedIndex) == 0){
-		printf(" New value from watch : [%s]%s => %s\n", rkey, prevValue, value);
-		if(action != NULL) free(action);
-		if(prevValue != NULL) free(prevValue);
-		if(rkey != NULL) free(rkey);
-	}
-
-	return value;
-}
-
-int waitforchangetest() {
-	int res = 0;
-	char*value = NULL;
-
-	etcd_set("hier/ar/chi/cal", "testvalue1", 5, false);
-
-	int index;
-	etcd_get("hier/ar/chi/cal", &value, &index);
-	free(value);
-	pthread_t waitThread;
-	index++;
-	pthread_create(&waitThread, NULL, waitForChange, &index);
-	sleep(1);
-	etcd_set("hier/ar/chi/cal", "testvalue2", 5, false);
-	sleep(1);
-	etcd_set("hier/ar/chi/cal", "testvalue3", 5, false);
-	void *resVal;
-	pthread_join(waitThread, &resVal);
-	if(strcmp((char*)resVal,"testvalue3" )) {
-		printf("etcdtest::waitforchange1 expected testvalue3, got %s\n", (char*)resVal);
-		res = -1;
-	}
-	free(resVal);
-	return res;
-}
-
-int main (void) {
-	etcd_init("localhost", 2379, 0);
-
-	int res = simplewritetest(); if(res) return res; else printf("simplewrite test success\n");
-	res = waitforchangetest(); if(res) return res;else printf("waitforchange1 test success\n");
-
-	return 0;
-}
-

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/event_admin/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/event_admin/CMakeLists.txt b/event_admin/CMakeLists.txt
deleted file mode 100644
index 2882069..0000000
--- a/event_admin/CMakeLists.txt
+++ /dev/null
@@ -1,43 +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.
-
-celix_subproject(EVENT_ADMIN "Option to enable building the Event Admin Service bundles" OFF DEPS LAUNCHER LOG_SERVICE SHELL shell_tui)
-if(EVENT_ADMIN)
-
-	#add_subdirectory(utils)
-	add_subdirectory(event_admin)
-	add_subdirectory(event_handler)
-	add_subdirectory(event_publisher)
-
-	#deploy("event_admin_bundle" BUNDLES event_admin shell shell_tui log_service log_writer)
-  #  deploy("event_publisher_example" BUNDLES event_admin event_publisher shell shell_tui log_service log_writer)
-#	deploy("event_handler_example" BUNDLES event_admin event_handler shell shell_tui log_service log_writer)
-#	deploy("event_admin_example" BUNDLES event_admin event_publisher event_handler shell shell_tui log_service log_writer)
-	add_celix_container(event_admin_service
-			NAME "event_admin_service"
-			GROUP "event_admin/event_admin"
-			BUNDLES event_admin shell shell_tui log_service log_writer
-			)
-	add_celix_container(event_handler_consumer
-			NAME "event_handler_consumer"
-			GROUP "event_handler"
-			BUNDLES event_handler event_admin shell shell_tui log_service log_writer)
-	add_celix_container(event_publisher_consumer
-			NAME "event_publisher_consumer"
-			GROUP "event_publisher"
-			BUNDLES event_publisher event_handler event_admin shell shell_tui log_service log_writer)
-endif(EVENT_ADMIN)

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/event_admin/event_admin/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/event_admin/event_admin/CMakeLists.txt b/event_admin/event_admin/CMakeLists.txt
deleted file mode 100644
index 87b6e62..0000000
--- a/event_admin/event_admin/CMakeLists.txt
+++ /dev/null
@@ -1,39 +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.
-
-
-
-include_directories(public/include)
-include_directories(private/include)
-include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")
-include_directories("${PROJECT_SOURCE_DIR}/log_service/public/include")
-
-add_celix_bundle(event_admin
-    VERSION 0.0.0
-	SOURCES 
-		private/src/event_admin_activator.c
-		private/src/event_admin_impl.c
-		private/src/event_impl.c
-		public/include/event_admin.h
-		public/include/event_handler.h
-		private/include/event_admin_impl.h
-		${PROJECT_SOURCE_DIR}/log_service/public/src/log_helper.c
-)
-
-install_celix_bundle(event_admin)
-
-target_link_libraries(event_admin Celix::framework)

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/event_admin/event_admin/private/include/event_admin_impl.h
----------------------------------------------------------------------
diff --git a/event_admin/event_admin/private/include/event_admin_impl.h b/event_admin/event_admin/private/include/event_admin_impl.h
deleted file mode 100644
index 20b0f1b..0000000
--- a/event_admin/event_admin/private/include/event_admin_impl.h
+++ /dev/null
@@ -1,169 +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.
- */
-/*
- * event_admin_impl.h
- *
- *  \Created on: Jul 16, 2013
- *  \author    	<a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- *  \copyright	Apache License, Version 2.0
- */
-
-#ifndef EVENT_ADMIN_IMPL_H_
-#define EVENT_ADMIN_IMPL_H_
-#include <string.h>
-#include "celix_errno.h"
-#include "bundle_context.h"
-#include "constants.h"
-#include "event_constants.h"
-#include "event_admin.h"
-#include "event_handler.h"
-#include "bundle_activator.h"
-#include "bundle_context.h"
-#include "service_tracker.h"
-#include "service_listener.h"
-#include "service_registration.h"
-#include "listener_hook_service.h"
-#include "event_admin.h"
-#include "log_helper.h"
-
-struct event_admin {
-        hash_map_pt channels;
-        array_list_pt event_handlers;
-        bundle_context_pt context;
-        log_helper_pt *loghelper;
-};
-typedef struct channel *channel_t;
-struct channel {
-        char *topic;
-        hash_map_pt eventHandlers;///array list containing all listeners subscribed to the channel
-       // hash_map_pt channels;
-       // apr_thread_mutex_t *channelLock;
-
-};
-/**
- * @desc Create event an event admin and put it in the event_admin parameter.
- * @param apr_pool_t *pool. Pointer to the apr pool
- * @param bundle_context_pt context. Pointer to the bundle context.
- * @param event_admin_pt *event_admin. The event admin result.
- */
-celix_status_t eventAdmin_create( bundle_context_pt context, event_admin_pt *event_admin);
-
-
-celix_status_t eventAdmin_destroy(event_admin_pt *event_admin);
-
-/**
- * @desc Post event. sends the event to the handlers in async.
- * @param event_admin_pt event_admin. the event admin instance
- * @param event_pt event. the event to be send.
- *
- */
-celix_status_t eventAdmin_postEvent(event_admin_pt event_admin, event_pt event);// async event sending
-/**
- * @desc send event. sends the event to the handlers in sync.
- * @param event_admin_pt event_admin. the event admin instance
- * @param event_pt event. the event to be send.
- *
- */
-celix_status_t eventAdmin_sendEvent(event_admin_pt event_admin, event_pt event);// sync event sending
-/**
- * @desc functions for the service tracker
- * @param void * handle.  Pointer to the event admin.
- * @param service_reference_pt ref. Pointer to the service reference. Needed to get the service
- * @param void **service Pointer to the service. Needed to use the service.
- */
-celix_status_t eventAdmin_addingService(void * handle, service_reference_pt ref, void **service);
-celix_status_t eventAdmin_addedService(void * handle, service_reference_pt ref, void * service);
-celix_status_t eventAdmin_modifiedService(void * handle, service_reference_pt ref, void * service);
-celix_status_t eventAdmin_removedService(void * handle, service_reference_pt ref, void * service) ;
-/*
- * end functions for service tracker
- */
-
-/**
- * @desc finds the handlers interested in the topic.
- * @param hash_map_pt channels. hashmap contains the channels, key string based
- * @param char *topic, the topic string.
- * @param array_list_pt event_handlers. The array list to contain the interested handlers.
- */
-celix_status_t eventAdmin_findHandlersByTopic(event_admin_pt event_admin, const char *topic,
-                                              array_list_pt event_handlers);
-/**
- * @desc create the needed event channels for an event handler.
- * @desc apr_pool_t *pool. a memory pool pointer.
- * @desc event_handler_service_pt event_handler_service. The handler
- * @desc char *topic the topic
- * @desc channel_t *channel. the top level channel.
- */
-celix_status_t eventAdmin_createEventChannelsByEventHandler(event_handler_service_pt event_handler_service,
-                                                            const char *topic, channel_t *channel);
-/**
- * @desc mutex functions for the channels
- * @param event_admin_pt event_admin. the event admin instance.
- * @param char *topic. the topic for which the channels need to be locked or unlocked
- */
-celix_status_t eventAdmin_lockHandlersList(event_admin_pt event_admin, const char *topic);
-
-celix_status_t eventAdmin_releaseHandersList(event_admin_pt event_admin, const char *topic);
-
-/**
- * @desc create an event
- * @param char *topic. String containing the topic
- * @param properties_pt properties.
- */
-celix_status_t eventAdmin_createEvent(event_admin_pt event_admin, const char *topic, properties_pt properties,
-                                      event_pt *event);
-/**
- * @desc checks if an event contains the property
- * @param event_pt *event. the event to check
- * @param char *property. the key for the property to check
- * @param bool *result. the result.
- */
-celix_status_t eventAdmin_containsProperty( event_pt *event, char *property, bool *result);
-/**
- * @desc checks if an event is equal to the second event.
- * @param event_pt *event, event to compare to
- * @param event_pt *event, the event to be compared
- * @param bool *result. the result true if equal.
- */
-celix_status_t eventAdmin_event_equals( event_pt *event, event_pt *compare, bool *result);
-/**
- * @desc gets a property from the event.
- * @param event_pt *event. the event to get the property from
- * @param char *propertyKey the key of the property to get
- * @param char **propertyValue. the result param will contain the property if it exists in the event.
- */
-celix_status_t eventAdmin_getProperty(event_pt *event, char *propertyKey, const char **propertyValue);
-/**
- * @desc gets all property names from the event
- * @param event_pt *event. the event to get the property names from
- * @param array_list_pt *names. will contain the keys
- */
-celix_status_t eventAdmin_getPropertyNames( event_pt *event, array_list_pt *names);
-/**
- * @desc gets the topic from an event
- * @param event_pt *event. the event to get the topic from
- * @param char **topic, result pointer will contain the topic.
- */
-celix_status_t eventAdmin_getTopic(event_pt *event, const char **topic);
-celix_status_t eventAdmin_hashCode(event_pt *event, int *hashCode);
-celix_status_t eventAdmin_matches( event_pt *event);
-celix_status_t eventAdmin_toString( event_pt *event, char *eventString);
-
-
-#endif /* EVENT_ADMIN_IMPL_H_ */

http://git-wip-us.apache.org/repos/asf/celix/blob/3bce889b/event_admin/event_admin/private/src/event_admin_activator.c
----------------------------------------------------------------------
diff --git a/event_admin/event_admin/private/src/event_admin_activator.c b/event_admin/event_admin/private/src/event_admin_activator.c
deleted file mode 100644
index a5f8cb2..0000000
--- a/event_admin/event_admin/private/src/event_admin_activator.c
+++ /dev/null
@@ -1,136 +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.
- */
-/*
- * activator.c
- *
- *  Created on: Jul 9, 2013
- *  \author    	<a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- *  \copyright	Apache License, Version 2.0
- */
-
-#include <stdlib.h>
-
-#include "event_admin_impl.h"
-#include "log_helper.h"
-#include "log_service.h"
-
-struct activator {
-
-	event_admin_service_pt event_admin_service;
-	event_admin_pt event_admin;
-	service_registration_pt registration;
-	service_tracker_pt tracker;
-	bundle_context_pt context;
-	log_helper_pt loghelper;
-};
-
-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_BUNDLE_EXCEPTION;
-	}else {
-		activator->registration = NULL;
-		logHelper_create(context, &activator->loghelper);
-
-		*userData = activator;
-		event_admin_pt event_admin = NULL;
-		event_admin_service_pt event_admin_service = NULL;
-		status = eventAdmin_create(context, &event_admin);
-		if(status == CELIX_SUCCESS){
-			activator->event_admin = event_admin;
-			event_admin_service = calloc(1, sizeof(event_admin_service));
-			if(!event_admin_service){
-				status = CELIX_ENOMEM;
-			} else {
-				event_admin->context = context;
-				event_admin->loghelper = &activator->loghelper;
-				event_admin_service->eventAdmin = event_admin;
-				event_admin_service->postEvent = eventAdmin_postEvent;
-				event_admin_service->sendEvent = eventAdmin_sendEvent;
-				event_admin_service->createEvent = eventAdmin_createEvent;
-				event_admin_service->containsProperty = eventAdmin_containsProperty;
-				event_admin_service->event_equals = eventAdmin_event_equals;
-				event_admin_service->getProperty = eventAdmin_getProperty;
-				event_admin_service->getPropertyNames = eventAdmin_getPropertyNames;
-				event_admin_service->getTopic = eventAdmin_getTopic;
-				event_admin_service->hashCode = eventAdmin_hashCode;
-				event_admin_service->matches = eventAdmin_matches;
-				event_admin_service->toString = eventAdmin_toString;
-
-			}
-		}
-		activator->event_admin_service = event_admin_service;
-	}
-
-
-	return status;
-}
-
-celix_status_t bundleActivator_start(void * userData, bundle_context_pt context) {
-	celix_status_t status = CELIX_SUCCESS;
-	struct activator *activator = userData;
-	event_admin_service_pt event_admin_service = NULL;
-
-	if(status == CELIX_SUCCESS) {
-		struct activator * data = (struct activator *) userData;
-		service_tracker_customizer_pt cust = NULL;
-		service_tracker_pt tracker = NULL;
-		data->context = context;
-
-		serviceTrackerCustomizer_create(data->event_admin_service->eventAdmin, eventAdmin_addingService, eventAdmin_addedService, eventAdmin_modifiedService, eventAdmin_removedService, &cust);
-		serviceTracker_create(context, (char *) EVENT_HANDLER_SERVICE, cust, &tracker);
-
-		data->tracker = tracker;
-
-		serviceTracker_open(tracker);
-		properties_pt properties = NULL;
-		properties = properties_create();
-		event_admin_service = activator->event_admin_service;
-		bundleContext_registerService(context, (char *) EVENT_ADMIN_NAME, event_admin_service, properties, &activator->registration);
-		logHelper_start(activator->loghelper);
-	}
-	return status;
-}
-
-celix_status_t bundleActivator_stop(void * userData, bundle_context_pt context) {
-	celix_status_t status = CELIX_SUCCESS;
-	struct activator * data =  userData;
-    serviceRegistration_unregister(data->registration);
-	serviceTracker_close(data->tracker);
-	status = logHelper_stop(data->loghelper);
-    logHelper_destroy(&data->loghelper);
-
-	return status;
-}
-
-
-celix_status_t bundleActivator_destroy(void * userData, bundle_context_pt context) {
-	celix_status_t status = CELIX_SUCCESS;
-    //stop  struct activator *activator = userData;
-
-    // free(activator);
-
-	return status;
-}
-
-