Author: abroekhuis
Date: Fri Jul 25 11:04:19 2014
New Revision: 1613384

URL: http://svn.apache.org/r1613384
Log:
CELIX-129, CELIX-130: Update HTTP RSAAdmin and added initial directory for 
Configured discovery.

Modified:
    celix/trunk/remote_services/CMakeLists.txt
    
celix/trunk/remote_services/calculator_endpoint/private/include/calculator_endpoint_impl.h
    
celix/trunk/remote_services/calculator_endpoint/private/src/calculator_endpoint_impl.c
    
celix/trunk/remote_services/calculator_proxy/private/src/calculator_proxy_impl.c
    celix/trunk/remote_services/discovery_bonjour/private/src/discovery.c
    
celix/trunk/remote_services/remote_service_admin/private/include/remote_service_admin_impl.h
    
celix/trunk/remote_services/remote_service_admin/public/include/remote_endpoint.h
    
celix/trunk/remote_services/remote_service_admin/public/include/remote_proxy.h
    
celix/trunk/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c

Modified: celix/trunk/remote_services/CMakeLists.txt
URL: 
http://svn.apache.org/viewvc/celix/trunk/remote_services/CMakeLists.txt?rev=1613384&r1=1613383&r2=1613384&view=diff
==============================================================================
--- celix/trunk/remote_services/CMakeLists.txt (original)
+++ celix/trunk/remote_services/CMakeLists.txt Fri Jul 25 11:04:19 2014
@@ -35,6 +35,7 @@ if (REMOTE_SERVICE_ADMIN)
     add_subdirectory(remote_service_admin_shm)   
     add_subdirectory(discovery_slp)
     add_subdirectory(discovery_bonjour)
+    add_subdirectory(discovery_configured)
     add_subdirectory(discovery_shm)
     
     add_subdirectory(calculator_service)

Modified: 
celix/trunk/remote_services/calculator_endpoint/private/include/calculator_endpoint_impl.h
URL: 
http://svn.apache.org/viewvc/celix/trunk/remote_services/calculator_endpoint/private/include/calculator_endpoint_impl.h?rev=1613384&r1=1613383&r2=1613384&view=diff
==============================================================================
--- 
celix/trunk/remote_services/calculator_endpoint/private/include/calculator_endpoint_impl.h
 (original)
+++ 
celix/trunk/remote_services/calculator_endpoint/private/include/calculator_endpoint_impl.h
 Fri Jul 25 11:04:19 2014
@@ -36,7 +36,7 @@ celix_status_t calculatorEndpoint_create
 
 celix_status_t calculatorEndpoint_setService(remote_endpoint_pt endpoint, void 
*service);
 
-celix_status_t calculatorEndpoint_handleRequest(remote_endpoint_pt endpoint, 
char *request, char *data, char **reply);
+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);

Modified: 
celix/trunk/remote_services/calculator_endpoint/private/src/calculator_endpoint_impl.c
URL: 
http://svn.apache.org/viewvc/celix/trunk/remote_services/calculator_endpoint/private/src/calculator_endpoint_impl.c?rev=1613384&r1=1613383&r2=1613384&view=diff
==============================================================================
--- 
celix/trunk/remote_services/calculator_endpoint/private/src/calculator_endpoint_impl.c
 (original)
+++ 
celix/trunk/remote_services/calculator_endpoint/private/src/calculator_endpoint_impl.c
 Fri Jul 25 11:04:19 2014
@@ -51,17 +51,21 @@ celix_status_t calculatorEndpoint_setSer
 }
 
 /**
- * Request: http://host:port/services/{service}/{request}
+ * Request: http://host:port/services/{service}
  */
-celix_status_t calculatorEndpoint_handleRequest(remote_endpoint_pt endpoint, 
char *request, char *data, char **reply) {
+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", 
request, data);
-       if (strcmp(request, "add") == 0) {
+       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(request, "sub") == 0) {
+       } else if (strcmp(sig, "sub(DD)D") == 0) {
                calculatorEndpoint_sub(endpoint, data, reply);
-       } else if (strcmp(request, "sqrt") == 0) {
+       } else if (strcmp(sig, "sqrt(D)D") == 0) {
                calculatorEndpoint_sqrt(endpoint, data, reply);
        } else {
                status = CELIX_ILLEGAL_ARGUMENT;
@@ -70,10 +74,6 @@ celix_status_t calculatorEndpoint_handle
        return status;
 }
 
-/**
- * data = { "a" : 1.1, "b" : 2.4 }
- * reply = 3.5
- */
 celix_status_t calculatorEndpoint_add(remote_endpoint_pt endpoint, char *data, 
char **reply) {
        celix_status_t status = CELIX_SUCCESS;
        json_error_t jsonError;
@@ -85,7 +85,7 @@ celix_status_t calculatorEndpoint_add(re
        } else {
                double a;
                double b;
-               json_unpack(root, "{s:f, s:f}", "arg0", &a, "arg1", &b);
+               json_unpack(root, "{s:[ff]}", "a", &a, &b);
 
                if (endpoint->service != NULL) {
                        double result;
@@ -116,7 +116,7 @@ celix_status_t calculatorEndpoint_sub(re
        } else {
                double a;
                double b;
-               json_unpack(root, "{s:f, s:f}", "arg0", &a, "arg1", &b);
+               json_unpack(root, "{s:[ff]}", "a", &a, &b);
 
                if (endpoint->service != NULL) {
                        double result;
@@ -146,7 +146,7 @@ celix_status_t calculatorEndpoint_sqrt(r
                status = CELIX_ILLEGAL_ARGUMENT;
        } else {
                double a;
-               json_unpack(root, "{s:f}", "arg0", &a);
+               json_unpack(root, "{s:[f]}", "a", &a);
 
                if (endpoint->service != NULL) {
                        double result;

Modified: 
celix/trunk/remote_services/calculator_proxy/private/src/calculator_proxy_impl.c
URL: 
http://svn.apache.org/viewvc/celix/trunk/remote_services/calculator_proxy/private/src/calculator_proxy_impl.c?rev=1613384&r1=1613383&r2=1613384&view=diff
==============================================================================
--- 
celix/trunk/remote_services/calculator_proxy/private/src/calculator_proxy_impl.c
 (original)
+++ 
celix/trunk/remote_services/calculator_proxy/private/src/calculator_proxy_impl.c
 Fri Jul 25 11:04:19 2014
@@ -56,18 +56,21 @@ celix_status_t calculatorProxy_create(ap
        return status;
 }
 
+// { "m": "" "a":["arg1", "arg2"] }
 celix_status_t calculatorProxy_add(calculator_pt calculator, double a, double 
b, double *result) {
        celix_status_t status = CELIX_SUCCESS;
 
        if (calculator->endpoint != NULL) {
                json_t *root;
-               root = json_pack("{s:f, s:f}", "arg0", a, "arg1", b);
+               root = json_pack("{s:s, s:[ff]}", "m", "add(DD)D", "a", a, b);
 
                char *data = json_dumps(root, 0);
                char *reply = calloc(128, sizeof(char));
                int replyStatus = 0;
 
-               calculator->sendToCallback(calculator->sendToHandler, 
calculator->endpoint, "add", data, &reply, &replyStatus);
+               printf("Send: %s\n", data);
+
+               calculator->sendToCallback(calculator->sendToHandler, 
calculator->endpoint, data, &reply, &replyStatus);
 
                if (status == CELIX_SUCCESS) {
                        json_error_t jsonError;
@@ -86,13 +89,13 @@ celix_status_t calculatorProxy_sub(calcu
        celix_status_t status = CELIX_SUCCESS;
        if (calculator->endpoint != NULL) {
                json_t *root;
-               root = json_pack("{s:f, s:f}", "arg0", a, "arg1", b);
+               root = json_pack("{s:s, s:[ff]}", "m", "sub(DD)D", "a", a, b);
 
                char *data = json_dumps(root, 0);
                char *reply = calloc(128, sizeof(char));
                int replyStatus = 0;
 
-               calculator->sendToCallback(calculator->sendToHandler, 
calculator->endpoint, "sub", data, &reply, &replyStatus);
+               calculator->sendToCallback(calculator->sendToHandler, 
calculator->endpoint, data, &reply, &replyStatus);
 
                if (status == CELIX_SUCCESS) {
                        json_error_t jsonError;
@@ -110,13 +113,13 @@ celix_status_t calculatorProxy_sqrt(calc
        celix_status_t status = CELIX_SUCCESS;
        if (calculator->endpoint != NULL) {
                json_t *root;
-               root = json_pack("{s:f}", "arg0", a);
+               root = json_pack("{s:s, s:[f]}", "m", "sqrt(D)D", "a", a);
 
                char *data = json_dumps(root, 0);
                char *reply = calloc(128, sizeof(char));
                int replyStatus;
 
-               calculator->sendToCallback(calculator->sendToHandler, 
calculator->endpoint, "sqrt", data, &reply, &replyStatus);
+               calculator->sendToCallback(calculator->sendToHandler, 
calculator->endpoint, data, &reply, &replyStatus);
 
                if (status == CELIX_SUCCESS) {
                        json_error_t jsonError;

Modified: celix/trunk/remote_services/discovery_bonjour/private/src/discovery.c
URL: 
http://svn.apache.org/viewvc/celix/trunk/remote_services/discovery_bonjour/private/src/discovery.c?rev=1613384&r1=1613383&r2=1613384&view=diff
==============================================================================
--- celix/trunk/remote_services/discovery_bonjour/private/src/discovery.c 
(original)
+++ celix/trunk/remote_services/discovery_bonjour/private/src/discovery.c Fri 
Jul 25 11:04:19 2014
@@ -479,6 +479,7 @@ static void discovery_resolveAddCallback
                endpoint->serviceId = serviceId == NULL? 0 : atol(serviceId);
                endpoint->service = properties_get(props, "objectClass");
                endpoint->properties = props;
+               endpoint->frameworkUUID = endpointFrameworkUuid;
 
                entry->pool = childPool;
                entry->endpointDescription = endpoint;

Modified: 
celix/trunk/remote_services/remote_service_admin/private/include/remote_service_admin_impl.h
URL: 
http://svn.apache.org/viewvc/celix/trunk/remote_services/remote_service_admin/private/include/remote_service_admin_impl.h?rev=1613384&r1=1613383&r2=1613384&view=diff
==============================================================================
--- 
celix/trunk/remote_services/remote_service_admin/private/include/remote_service_admin_impl.h
 (original)
+++ 
celix/trunk/remote_services/remote_service_admin/private/include/remote_service_admin_impl.h
 Fri Jul 25 11:04:19 2014
@@ -45,7 +45,7 @@ struct import_reference {
 celix_status_t remoteServiceAdmin_create(apr_pool_t *pool, bundle_context_pt 
context, remote_service_admin_pt *admin);
 celix_status_t remoteServiceAdmin_destroy(remote_service_admin_pt admin);
 
-celix_status_t remoteServiceAdmin_send(remote_service_admin_pt rsa, 
endpoint_description_pt endpointDescription, char *methodSignature, char 
*request, char **reply, int* replyStatus);
+celix_status_t remoteServiceAdmin_send(remote_service_admin_pt rsa, 
endpoint_description_pt endpointDescription, char *methodSignature, char 
**reply, int* replyStatus);
 
 celix_status_t remoteServiceAdmin_exportService(remote_service_admin_pt admin, 
char *serviceId, properties_pt properties, array_list_pt *registrations);
 celix_status_t remoteServiceAdmin_removeExportedService(export_registration_pt 
registration);

Modified: 
celix/trunk/remote_services/remote_service_admin/public/include/remote_endpoint.h
URL: 
http://svn.apache.org/viewvc/celix/trunk/remote_services/remote_service_admin/public/include/remote_endpoint.h?rev=1613384&r1=1613383&r2=1613384&view=diff
==============================================================================
--- 
celix/trunk/remote_services/remote_service_admin/public/include/remote_endpoint.h
 (original)
+++ 
celix/trunk/remote_services/remote_service_admin/public/include/remote_endpoint.h
 Fri Jul 25 11:04:19 2014
@@ -34,7 +34,7 @@ typedef struct remote_endpoint *remote_e
 struct remote_endpoint_service {
        remote_endpoint_pt endpoint;
        celix_status_t (*setService)(remote_endpoint_pt endpoint, void 
*service);
-       celix_status_t (*handleRequest)(remote_endpoint_pt endpoint, char 
*request, char *data, char **reply);
+       celix_status_t (*handleRequest)(remote_endpoint_pt endpoint, char 
*data, char **reply);
 };
 
 typedef struct remote_endpoint_service *remote_endpoint_service_pt;

Modified: 
celix/trunk/remote_services/remote_service_admin/public/include/remote_proxy.h
URL: 
http://svn.apache.org/viewvc/celix/trunk/remote_services/remote_service_admin/public/include/remote_proxy.h?rev=1613384&r1=1613383&r2=1613384&view=diff
==============================================================================
--- 
celix/trunk/remote_services/remote_service_admin/public/include/remote_proxy.h 
(original)
+++ 
celix/trunk/remote_services/remote_service_admin/public/include/remote_proxy.h 
Fri Jul 25 11:04:19 2014
@@ -32,7 +32,7 @@
 
 #define OSGI_RSA_REMOTE_PROXY_FACTORY  "remote_proxy_factory"
 
-typedef celix_status_t (*sendToHandle)(void *handler, endpoint_description_pt 
endpointDescription, char *methodSignature, char *request, char **reply, int* 
replyStatus);
+typedef celix_status_t (*sendToHandle)(void *handler, endpoint_description_pt 
endpointDescription, char *request, char **reply, int* replyStatus);
 
 typedef struct remote_proxy_service *remote_proxy_service_pt;
 

Modified: 
celix/trunk/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c
URL: 
http://svn.apache.org/viewvc/celix/trunk/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c?rev=1613384&r1=1613383&r2=1613384&view=diff
==============================================================================
--- 
celix/trunk/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c
 (original)
+++ 
celix/trunk/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c
 Fri Jul 25 11:04:19 2014
@@ -28,6 +28,7 @@
 
 #include <apr_strings.h>
 #include <apr_uuid.h>
+#include <uuid/uuid.h>
 #include <apr_network_io.h>
 
 #include <curl/curl.h>
@@ -166,9 +167,9 @@ static int remoteServiceAdmin_callback(s
                        strncpy(service, rest, pos);
                        service[pos] = '\0';
 
-//                     printf("Got service %s, interfaceStart is %s and 
callStart is %s\n", service, interfaceStart, callStart);
+                       printf("Got service %s, interfaceStart is %s and 
callStart is %s\n", service, interfaceStart, callStart);
 
-                       char *request = callStart+1;
+//                     char *request = callStart+1;
 
                        const char *lengthStr = mg_get_header(conn, (const char 
*) "Content-Length");
                        int datalength = apr_atoi64(lengthStr);
@@ -176,6 +177,8 @@ static int remoteServiceAdmin_callback(s
                        mg_read(conn, data, datalength);
                        data[datalength] = '\0';
 
+                       printf("%s\n", data);
+
                        hash_map_iterator_pt iter = 
hashMapIterator_create(rsa->exportedServices);
                        while (hashMapIterator_hasNext(iter)) {
                                hash_map_entry_pt entry = 
hashMapIterator_nextEntry(iter);
@@ -186,7 +189,7 @@ static int remoteServiceAdmin_callback(s
                                        long serviceId = atol(service);
                                        if (serviceId == 
export->endpointDescription->serviceId) {
                                                char *reply = NULL;
-                                               
export->endpoint->handleRequest(export->endpoint->endpoint, request, data, 
&reply);
+                                               
export->endpoint->handleRequest(export->endpoint->endpoint, data, &reply);
                                                if (reply != NULL) {
                                                        mg_printf(conn, "%s", 
ajax_reply_start);
                                                        mg_printf(conn, "%s", 
reply);
@@ -201,7 +204,7 @@ static int remoteServiceAdmin_callback(s
        return 1;
 }
 
-celix_status_t remoteServiceAdmin_handleRequest(remote_service_admin_pt rsa, 
char *service, char *request, char *data, char **reply) {
+celix_status_t remoteServiceAdmin_handleRequest(remote_service_admin_pt rsa, 
char *service, char *data, char **reply) {
        hash_map_iterator_pt iter = 
hashMapIterator_create(rsa->exportedServices);
        while (hashMapIterator_hasNext(iter)) {
                hash_map_entry_pt entry = hashMapIterator_nextEntry(iter);
@@ -210,7 +213,7 @@ celix_status_t remoteServiceAdmin_handle
                for (expIt = 0; expIt < arrayList_size(exports); expIt++) {
                        export_registration_pt export = arrayList_get(exports, 
expIt);
                        if (strcmp(service, 
export->endpointDescription->service) == 0) {
-                               
export->endpoint->handleRequest(export->endpoint->endpoint, request, data, 
reply);
+                               
export->endpoint->handleRequest(export->endpoint->endpoint, data, reply);
                        }
                }
        }
@@ -403,20 +406,23 @@ celix_status_t remoteServiceAdmin_create
        apr_pool_create(&childPool, admin->pool); //TODO pool should be 
destroyed after when endpoint is removed
 
        *description = apr_palloc(childPool, sizeof(*description));
-//     *description = malloc(sizeof(*description));
        if (!*description) {
                status = CELIX_ENOMEM;
        } else {
                char *uuid = NULL;
                status = bundleContext_getProperty(admin->context, (char 
*)OSGI_FRAMEWORK_FRAMEWORK_UUID, &uuid);
                if (status == CELIX_SUCCESS) {
+//                 char uuid[37];
+//                 uuid_t uid;
+//            uuid_generate(uid);
+//            uuid_unparse(uid, uuid);
+//
+//            printf("%s\n", uuid);
+
                        (*description)->properties = endpointProperties;
                        (*description)->frameworkUUID = uuid;
                        (*description)->serviceId = 
apr_atoi64(properties_get(serviceProperties, (char *) 
OSGI_FRAMEWORK_SERVICE_ID));
-                       (*description)->id = apr_pstrdup(childPool, "TODO"); // 
does not work, txt record to big ?? --> apr_pstrcat(childPool, uuid, "-", 
(*description)->serviceId, NULL);
-//                     char *id = apr_pstrcat(childPool, uuid, "-", 
properties_get(serviceProperties, (char *) OSGI_FRAMEWORK_SERVICE_ID), NULL);
-//                     printf("ID %s\n", id);
-//            (*description)->id = id;
+                       (*description)->id = apr_pstrdup(childPool, 
properties_get(serviceProperties, (char *) OSGI_FRAMEWORK_SERVICE_ID)); // 
Should be uuid
                        (*description)->service = interface;
                }
        }
@@ -502,7 +508,7 @@ celix_status_t remoteServiceAdmin_remove
 
 
 
-celix_status_t remoteServiceAdmin_send(remote_service_admin_pt rsa, 
endpoint_description_pt endpointDescription, char *methodSignature, char 
*request, char **reply, int* replyStatus) {
+celix_status_t remoteServiceAdmin_send(remote_service_admin_pt rsa, 
endpoint_description_pt endpointDescription, char *request, char **reply, int* 
replyStatus) {
 
     struct post post;
     post.readptr = request;
@@ -514,7 +520,7 @@ celix_status_t remoteServiceAdmin_send(r
 
     char *serviceUrl = properties_get(endpointDescription->properties, 
".ars.alias");
     printf("CALCULATOR_PROXY: URL: %s\n", serviceUrl);
-    char *url = apr_pstrcat(rsa->pool, serviceUrl, "/", methodSignature, NULL);
+    char *url = apr_pstrcat(rsa->pool, serviceUrl, NULL);
 
     celix_status_t status = CELIX_SUCCESS;
     CURL *curl;


Reply via email to