}
-datacontrol_socket_info *_add_watch_on_socket_info(const char *caller_id, const char *callee_id, const char *type,
- GIOFunc cb, void *data)
+int _add_watch_on_socket_info(const char *caller_id,
+ const char *callee_id, const char *type, const char *provider_id,
+ const char *data_type, GIOFunc cb, void *data,
+ datacontrol_socket_info **socket_info)
{
char err_buf[ERR_BUFFER_SIZE];
int socketpair = 0;
int g_src_id;
+ int ret;
- datacontrol_socket_info *socket_info = NULL;
+ datacontrol_socket_info *_socket_info = NULL;
bundle *sock_bundle = bundle_create();
bundle_add_str(sock_bundle, AUL_K_CALLER_APPID, caller_id);
bundle_add_str(sock_bundle, AUL_K_CALLEE_APPID, callee_id);
- bundle_add_str(sock_bundle, "DATA_CONTOL_TYPE", type);
+ bundle_add_str(sock_bundle, "DATA_CONTROL_TYPE", type);
+ if (provider_id)
+ bundle_add_str(sock_bundle, OSP_K_DATACONTROL_PROVIDER, provider_id);
+ if (data_type)
+ bundle_add_str(sock_bundle, "DATA_CONTROL_DATA_TYPE", data_type);
- aul_request_data_control_socket_pair(sock_bundle, &socketpair);
+ ret = aul_request_data_control_socket_pair(sock_bundle, &socketpair);
bundle_free(sock_bundle);
+ if (ret != AUL_R_OK) {
+ if (ret == AUL_R_EILLACC) {
+ LOGE("Permission denied. Consumer need privilege.");
+ return DATACONTROL_ERROR_PERMISSION_DENIED;
+ }
+
+ return DATACONTROL_ERROR_IO_ERROR;
+ }
LOGI("consumer socket pair : %d", socketpair);
gio_read = g_io_channel_unix_new(socketpair);
if (!gio_read) {
LOGE("Error is %s\n", strerror_r(errno, err_buf, sizeof(err_buf)));
- return NULL;
+ return DATACONTROL_ERROR_IO_ERROR;
}
g_src_id = g_io_add_watch(gio_read, G_IO_IN | G_IO_HUP,
if (g_src_id == 0) {
g_io_channel_unref(gio_read);
LOGE("fail to add watch on socket");
- return NULL;
+ return DATACONTROL_ERROR_IO_ERROR;
}
- socket_info = (datacontrol_socket_info *)calloc(1, sizeof(datacontrol_socket_info));
- if (socket_info == NULL) {
+ _socket_info = (datacontrol_socket_info *)calloc(1, sizeof(datacontrol_socket_info));
+ if (_socket_info == NULL) {
g_io_channel_unref(gio_read);
g_source_remove(g_src_id);
LOGE("fail to calloc socket_info");
- return NULL;
+ return DATACONTROL_ERROR_IO_ERROR;
}
- socket_info->socket_fd = socketpair;
- socket_info->gio_read = gio_read;
- socket_info->g_src_id = g_src_id;
+ _socket_info->socket_fd = socketpair;
+ _socket_info->gio_read = gio_read;
+ _socket_info->g_src_id = g_src_id;
LOGI("Watch on socketpair done.");
} else {
LOGE("fail to get socket pair");
- return NULL;
+ return DATACONTROL_ERROR_IO_ERROR;
}
- return socket_info;
+
+ *socket_info = _socket_info;
+ return DATACONTROL_ERROR_NONE;
}
int _request_appsvc_run(const char *caller_id, const char *callee_id)
gboolean _datacontrol_recv_message(GIOChannel *channel, GIOCondition cond, gpointer data);
int _get_gdbus_shared_connection(GDBusConnection **connection, char *provider_id);
void _socket_info_free(gpointer socket);
-datacontrol_socket_info *_add_watch_on_socket_info(const char *caller_id, const char *callee_id, const char *type, GIOFunc cb, void *data);
+int _add_watch_on_socket_info(const char *caller_id,
+ const char *callee_id, const char *type, const char *provider_id,
+ const char *data_type, GIOFunc cb, void *data,
+ datacontrol_socket_info **socket_info);
int _request_appsvc_run(const char *caller_id, const char *callee_id);
GDBusConnection *_get_dbus_connection();
do {
datacontrol_socket_info *socket_info = g_hash_table_lookup(__socket_pair_hash, provider->provider_id);
if (socket_info == NULL) {
- ret = _request_appsvc_run(caller_app_id, app_id);
+ ret = _add_watch_on_socket_info(caller_app_id, app_id,
+ "consumer", provider->provider_id, "Map",
+ __recv_map_message, data,
+ &socket_info);
if (ret != DATACONTROL_ERROR_NONE) {
bundle_free(send_data);
return ret;
}
- socket_info = _add_watch_on_socket_info(caller_app_id, app_id, "consumer", __recv_map_message, data);
- if (socket_info == NULL) {
+ ret = _request_appsvc_run(caller_app_id, app_id);
+ if (ret != DATACONTROL_ERROR_NONE) {
+ _socket_info_free(socket_info);
bundle_free(send_data);
- return DATACONTROL_ERROR_IO_ERROR;
+ return ret;
}
g_hash_table_insert(__socket_pair_hash, strdup(provider->provider_id), socket_info);
if (socket_info != NULL)
g_hash_table_remove(__socket_pair_hash, dup_caller);
- socket_info = _add_watch_on_socket_info(dup_caller, callee, "provider", __provider_recv_message, dup_caller);
- if (socket_info == NULL)
- return DATACONTROL_ERROR_IO_ERROR;
+ ret = _add_watch_on_socket_info(dup_caller, callee, "provider",
+ NULL, NULL, __provider_recv_message,
+ dup_caller, &socket_info);
+ if (ret != DATACONTROL_ERROR_NONE)
+ return ret;
g_hash_table_insert(__socket_pair_hash, dup_caller, socket_info);
} else {
datacontrol_socket_info *socket_info = g_hash_table_lookup(__socket_pair_hash, provider->provider_id);
if (socket_info == NULL) {
- ret = _request_appsvc_run(caller_app_id, app_id);
+ ret = _add_watch_on_socket_info(caller_app_id, app_id,
+ "consumer", provider->provider_id, "Sql",
+ __consumer_recv_sql_message, response_cb_data,
+ &socket_info);
if (ret != DATACONTROL_ERROR_NONE) {
- LOGE("_request_appsvc_run error !!!");
+ LOGE("_get_socket_info error !!!");
bundle_free(send_data);
return ret;
}
- socket_info = _add_watch_on_socket_info(caller_app_id, app_id, "consumer", __consumer_recv_sql_message, response_cb_data);
- if (socket_info == NULL) {
- LOGE("_get_socket_info error !!!");
+ ret = _request_appsvc_run(caller_app_id, app_id);
+ if (ret != DATACONTROL_ERROR_NONE) {
+ LOGE("_request_appsvc_run error !!!");
bundle_free(send_data);
- return DATACONTROL_ERROR_IO_ERROR;
+ _socket_info_free(socket_info);
+ return ret;
}
socket_info_key = strdup(provider->provider_id);