capi: Send data as array of bytes instead of string
authorSaurav Babu <saurav.babu@samsung.com>
Wed, 11 Apr 2018 09:22:18 +0000 (14:52 +0530)
committersaerome.kim <saerome.kim@samsung.com>
Mon, 2 Jul 2018 10:38:49 +0000 (19:38 +0900)
Application might be sending buffered data so this patch sends data as
array of bytes instead of string

Signed-off-by: Saurav Babu <saurav.babu@samsung.com>
capi/include/companion.h
capi/src/companion.c
capi/src/companion_dbus.c
capi/src/companion_gdbus.xml

index 2582f79..ba2d515 100644 (file)
@@ -461,7 +461,7 @@ int companion_group_eject_device(companion_h handle, companion_group_h group,
  * @see companion_request_result_callback()
  */
 typedef void (*companion_request_result_cb)(char *cmd, char *device_id,
-                                       char *arg, int ret, void *user_data);
+                                       unsigned char *arg, int len, int ret, void *user_data);
 
 /**
  * @brief Requests my device to be joined to remote group.
@@ -1036,8 +1036,9 @@ int companion_device_get_found_mowned_devices(companion_h handle,
  * @see companion_request_result_callback()
  *
  */
-int companion_device_send_data(companion_h handle, companion_device_h device, char *data,
-               int len, companion_device_send_data_finish_cb finish_cb, void *user_data);
+int companion_device_send_data(companion_h handle, companion_device_h device,
+                          unsigned char *data, int len,
+                          companion_device_send_data_finish_cb finish_cb, void *user_data);
 
 /**
  * @}
index 7bc28f6..adaf403 100644 (file)
@@ -302,11 +302,14 @@ EXPORT_API int companion_device_find_mowned_device(companion_h handle,
 }
 
 EXPORT_API int companion_device_send_data(companion_h handle,
-       companion_device_h device, char *data, int len,
+       companion_device_h device, unsigned char *data, int len,
        companion_device_send_data_finish_cb finish_cb, void *user_data)
 {
        int ret = COMP_ERROR_NONE;
-       char *buf = NULL;
+       unsigned char *buf = NULL;
+       GVariantBuilder *bytearray_builder = NULL;
+       int i;
+       GVariant *params = NULL;
        GError *error = NULL;
 
        CHECK_FEATURE_SUPPORTED(COMPANION_FEATURE);
@@ -326,11 +329,18 @@ EXPORT_API int companion_device_send_data(companion_h handle,
        }
        memcpy(buf, data, len);
 
+       bytearray_builder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
+       for (i = 0; i < len; i++)
+               g_variant_builder_add(bytearray_builder, "y", data[i]);
+
+       params = g_variant_new("(iay)", len, bytearray_builder);
+       g_variant_builder_unref(bytearray_builder);
+
        _handle->send_data_finish_cb.finish_cb = finish_cb;
        _handle->send_data_finish_cb.user_data = user_data;
 
        group_call_send_data_sync(_handle->group_proxy, dev->device_id, dev->ip,
-                                                         dev->sec_port, buf, len, &ret, NULL, &error);
+                                                         dev->sec_port, params, &ret, NULL, &error);
 
        free(buf);
        buf = NULL;
index d0f2dfd..ba5548b 100644 (file)
@@ -245,15 +245,31 @@ static void __send_data_finish_cb(Group *object, gchar *resp_data, gint ret,
 }
 
 static void __request_result_cb(Group *object, gchar *cmd, gchar *device_id,
-                                       gchar *arg, gint ret, gpointer user_data)
+                                       GVariant *arg, gint ret, gpointer user_data)
 {
+       int len, length = 0;
+       unsigned char *data;
+       GVariantIter *iter;
+
        NOTUSED(object);
 
        comp_manager_s *handle = user_data;
        companion_check_null_ret("user_data", user_data);
 
+       g_variant_get(arg, "(iay)", &len, &iter);
+
+       data = g_try_malloc0(len + 1);
+
+       while (g_variant_iter_loop(iter, "y", &data[length]))
+               length += 1;
+
+       data[length] = '\0';
+       _DBG("Received result length %d data %s", len, data);
+
+       g_variant_iter_free(iter);
+
        if (handle->request_result_cb.result_cb)
-               handle->request_result_cb.result_cb(cmd, device_id, arg, ret,
+               handle->request_result_cb.result_cb(cmd, device_id, data, len, ret,
                        handle->request_result_cb.user_data);
 }
 /* LCOV_EXCL_STOP */
index 8eca1c4..94e1fa5 100644 (file)
@@ -98,8 +98,7 @@
                        <arg type="s" name="uuid" direction="in" />
                        <arg type="s" name="addr" direction="in"/>
                        <arg type="i" name="port" direction="in"/>
-                       <arg type="s" name="data" direction="in"/>
-                       <arg type="i" name="len" direction="in"/>
+                       <arg type="(iay)" name="data" direction="in"/>
                        <arg type="i" name="result" direction="out" />
                </method>
                <method name="FindMownedDevices">
                <signal name="RequestResult">
                        <arg type="s" name="command" direction="out" />
                        <arg type="s" name="device_id" direction="out" />
-                       <arg type="s" name="arg" direction="out" />
+                       <arg type="(iay)" name="arg" direction="out" />
                        <arg type="i" name="result" direction="out" />
                </signal>
        </interface>