Add internal send select result API for c# API 83/110783/8
authorHyunho Kang <hhstark.kang@samsung.com>
Wed, 18 Jan 2017 05:06:30 +0000 (14:06 +0900)
committerHyunho Kang <hhstark.kang@samsung.com>
Tue, 31 Jan 2017 11:56:13 +0000 (03:56 -0800)
This API is made for C# API. C# API has a different select flow.
It will send select result after provider's select callback and
do not get db handle for sending result to remove db dependancy.
So, this API just send provider's select callback result and pass
connected socket fd for sending selected data to consumer.

- int datacontrol_provider_send_select_result_without_data(
int request_id, int *fd)

This API is made for C# API. C# API has a different select flow.
It will send select result after provider's select callback and
do not get db handle for sending result to remove db dependancy.
So, C# API need native API which get buffer and send it to consumer.

- int datacontrol_provider_write_socket(int fd, void *buffer,
unsigned int nbytes, unsigned int *bytes_write)

Change-Id: Ia62f65081d102cce9e62f3cc9d806f3ce6b11333
Signed-off-by: Hyunho Kang <hhstark.kang@samsung.com>
Signed-off-by: jusung son <jusung07.son@samsung.com>
include/data-control-provider.h
src/data-control-provider.c

index e7e82db3332a4b9ed4b9d4fb8362257fa4bd5ce1..732309391f96693481ac045abb1ea46f3cbca75f 100755 (executable)
@@ -381,6 +381,46 @@ EXPORT_API int datacontrol_provider_send_map_bulk_add_result(
 EXPORT_API bool datacontrol_provider_map_is_registered();
 EXPORT_API bool datacontrol_provider_sql_is_registered();
 
+/**
+ * @brief  Sends select result without selected data.
+ * @details This API is made for C# API. C# API has a different select flow. \n
+ *     It will send select result after provider's select callback and \n
+ *     do not get db handle for sending result to remove db dependancy. \n
+ *     So, this API just send provider's select callback result and pass \n
+ *     connected socket fd for sending selected data to consumer.
+ *
+ * @param[in]  request_id              The request ID
+ * @param[out] fd                      The socket fd
+ *
+ * @return  @c 0 on success,
+ *          otherwise a negative error value
+ *
+ * @retval #DATACONTROL_ERROR_NONE              Successful
+ * @retval #DATACONTROL_ERROR_IO_ERROR          I/O error
+ * @retval #DATACONTROL_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+EXPORT_API int datacontrol_provider_send_select_result_without_data(int request_id, int *fd);
+
+/**
+ * @brief  Writes data to socket.
+ * @details This API is made for C# API. C# API has a different select flow. \n
+ *     It will send select result after provider's select callback and \n
+ *     do not get db handle for sending result to remove db dependancy. \n
+ *     So, C# API need native API which get buffer and send it to the consumer.
+ *
+ * @param[in]  fd              The socket fd
+ * @param[in]  buffer          The data for sending to the consumer application
+ * @param[in]  nbytes          The data size
+ * @param[out] bytes_write     The data size of sent successfully to the consumer
+ *
+ * @return  @c 0 on success,
+ *          otherwise a negative error value
+ *
+ * @retval #DATACONTROL_ERROR_NONE              Successful
+ * @retval #DATACONTROL_ERROR_IO_ERROR          I/O error
+ */
+EXPORT_API int datacontrol_provider_write_socket(int fd, void *buffer, unsigned int nbytes,
+               unsigned int *bytes_write);
 
 #ifdef __cplusplus
 }
index 199701ea3031dc6cf7925f43af70eb55a0b4f91d..9f6c518cafbd5678848a5bc220a80dc868775e66 100755 (executable)
@@ -1801,6 +1801,46 @@ int datacontrol_provider_get_client_appid(int request_id, char **appid)
        return DATACONTROL_ERROR_NONE;
 }
 
+int datacontrol_provider_write_socket(int fd, void *buffer, unsigned int nbytes,
+               unsigned int *bytes_write)
+{
+       int ret = _write_socket(fd, buffer, nbytes, bytes_write);
+       return ret;
+}
+
+int datacontrol_provider_send_select_result_without_data(int request_id, int *fd)
+{
+       int ret;
+       bundle *res;
+       bundle *b;
+       datacontrol_socket_info *socket_info;
+       char *caller_app_id;
+
+       LOGI("Send select result by byte array for request id: %d", request_id);
+
+       if (__request_table == NULL)
+               __initialize_provider();
+
+       b = g_hash_table_lookup(__request_table, &request_id);
+       if (!b) {
+               LOGE("No data for the request id: %d", request_id);
+               return DATACONTROL_ERROR_INVALID_PARAMETER;
+       }
+       res = __set_result(b, DATACONTROL_TYPE_SQL_SELECT, NULL);
+       ret = __send_result(res, DATACONTROL_TYPE_UNDEFINED, NULL);
+
+       caller_app_id = (char *)bundle_get_val(b, AUL_K_CALLER_APPID);
+       socket_info = g_hash_table_lookup(__socket_pair_hash, caller_app_id);
+       if (socket_info == NULL) {
+               LOGE("__socket_pair_hash lookup fail");
+               return DATACONTROL_ERROR_IO_ERROR;
+       }
+       *fd = socket_info->socket_fd;
+       g_hash_table_remove(__request_table, &request_id);
+
+       return ret;
+}
+
 int datacontrol_provider_send_bulk_insert_result(int request_id, data_control_bulk_result_data_h bulk_result_data)
 {
        int ret;