bt-avrcp.c
bt-telephony.c
bt-opp-client.c
+bt-map-client.c
bt-obex-server.c
bt-rfcomm-client.c
bt-rfcomm-server.c
bluetooth_dpm_get_data_transfer_state(&dpm_status);
return (dpm_status == BLUETOOTH_DPM_RESTRICTED ? BT_DPM_RESTRICTED : BT_DPM_ALLOWED);
}
+ /* TODO: MAP? see above */
/* ++ check MDM profile restriction ++ */
if (g_strcmp0(BT_A2DP_UUID, uuid) == 0)
bt_dpm_status_t dpm_value = BLUETOOTH_DPM_ALLOWED;
dpm_status = _bt_check_dpm_blacklist_uuid(BT_OPP_UUID);
+ /* TODO: MAP? see above */
if (dpm_status == BT_DPM_NO_SERVICE || dpm_status == BT_DPM_RESTRICTED)
return dpm_status;
case BT_DPM_OPP:
status = _bt_check_dpm_transfer_restriction();
break;
+ /* TODO: MAP? see above */
case BT_DPM_HSP:
status = _bt_check_dpm_hsp_restriction();
break;
}
}
+void __bt_map_client_event_filter(GDBusConnection *connection,
+ const gchar *sender_name,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ bt_event_info_t *event_info;
+ int result = BLUETOOTH_ERROR_NONE;
+ event_info = (bt_event_info_t *)user_data;
+ ret_if(event_info == NULL);
+
+ if (strcasecmp(object_path, BT_MAP_CLIENT_PATH) != 0)
+ return;
+ if (strcasecmp(interface_name, BT_EVENT_SERVICE) != 0)
+ return;
+
+ ret_if(signal_name == NULL);
+
+ if (strcasecmp(signal_name, BT_MAP_CONNECTED) == 0) {
+ const char *address = NULL;
+ int request_id = 0;
+ bluetooth_device_address_t dev_address = { {0} };
+
+ g_variant_get(parameters, "(i&si)", &result,
+ &address, &request_id);
+
+ if (__bt_is_request_id_exist(request_id) == FALSE) {
+ BT_ERR("Different request id!");
+ return;
+ }
+
+ _bt_convert_addr_string_to_type(dev_address.addr,
+ address);
+
+ _bt_common_event_cb(BLUETOOTH_EVENT_MAP_CONNECTED,
+ result, &dev_address,
+ event_info->cb, event_info->user_data);
+
+ if (result != BLUETOOTH_ERROR_NONE) {
+ __bt_remove_push_request_id(request_id);
+ }
+ } else if (strcasecmp(signal_name, BT_MAP_DISCONNECTED) == 0) {
+ const char *address = NULL;
+ int request_id = 0;
+ bluetooth_device_address_t dev_address = { {0} };
+
+ g_variant_get(parameters, "(i&si)", &result, &address,
+ &request_id);
+
+ if (__bt_is_request_id_exist(request_id) == FALSE) {
+ BT_ERR("Different request id!");
+ return;
+ }
+
+ _bt_convert_addr_string_to_type(dev_address.addr,
+ address);
+
+ _bt_common_event_cb(BLUETOOTH_EVENT_MAP_DISCONNECTED,
+ result, &dev_address,
+ event_info->cb, event_info->user_data);
+
+ __bt_remove_push_request_id(request_id);
+ } else if (strcasecmp(signal_name, BT_MAP_OP_COMPLETE) == 0) {
+
+ /* TODO: MAP, see __bt_opp_client_event_filter above */
+
+ }
+}
+
void __bt_pbap_client_event_filter(GDBusConnection *connection,
const gchar *sender_name,
const gchar *object_path,
event_func = __bt_opp_server_event_filter;
path = BT_OPP_SERVER_PATH;
break;
+ case BT_MAP_CLIENT_EVENT:
+ event_func = __bt_map_client_event_filter;
+ path = BT_MAP_CLIENT_PATH;
+ break;
case BT_PBAP_CLIENT_EVENT:
event_func = __bt_pbap_client_event_filter;
path = BT_PBAP_CLIENT_PATH;
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed 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 <string.h>
+
+#include "bluetooth-api.h"
+#include "bt-internal-types.h"
+
+#include "bt-common.h"
+#include "bt-request-sender.h"
+#include "bt-event-handler.h"
+
+#ifdef TIZEN_DPM_ENABLE
+#include "bt-dpm.h"
+#endif
+
+BT_EXPORT_API int bluetooth_map_init(void)
+{
+ bt_user_info_t *user_info;
+
+ user_info = _bt_get_user_data(BT_COMMON);
+ retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
+
+ return _bt_register_event(BT_MAP_CLIENT_EVENT, user_info->cb, user_info->user_data);
+}
+
+BT_EXPORT_API int bluetooth_map_deinit(void)
+{
+ return _bt_unregister_event(BT_MAP_CLIENT_EVENT);
+}
+
+/* TODO: MAP API */
BT_DBG("request_id : %d", request_id);
_bt_add_push_request_id(request_id);
}
+ if (cb_data->service_function == BT_MAP_111) {
+ /* TODO: MAP service functions */
+ }
goto done;
}
void _bt_opp_client_event_cb(int event, int result, void *param,
void *callback, void *user_data);
+void _bt_map_client_event_cb(int event, int result, void *param,
+ void *callback, void *user_data);
+
void _bt_divide_device_class(bluetooth_device_class_t *device_class,
unsigned int cod);
BT_DPM_A2DP,
BT_DPM_AVRCP,
BT_DPM_SPP,
+ /* TODO: MAP? see above */
} bt_dpm_service_e;
int _bt_check_dpm(int service, void *param);
bt-service-audio.c
bt-service-oob.c
bt-service-opp-client.c
+bt-service-map-client.c
bt-service-obex-server.c
bt-service-rfcomm-client.c
bt-service-rfcomm-server.c
#include "bt-service-avrcp.h"
#include "bt-service-avrcp-controller.h"
#include "bt-service-opp-client.h"
+#include "bt-service-map-client.h"
#include "bt-service-obex-server.h"
#include "bt-service-rfcomm-client.h"
#include "bt-service-rfcomm-server.h"
out_param1 = NULL;
}
}
+ /* TODO: MAP? see the if{}else{} above */
g_variant_unref(param1);
g_variant_unref(param2);
sizeof(gboolean));
break;
}
+ /* TODO: MAP? MAP functions, see above */
case BT_OBEX_SERVER_ALLOCATE: {
int app_pid;
gboolean is_native;
case BT_OPP_PUSH_FILES:
case BT_OPP_CANCEL_PUSH:
+ /* TODO: MAP? MAP functions, see above */
case BT_OBEX_SERVER_ACCEPT_CONNECTION:
case BT_OBEX_SERVER_REJECT_CONNECTION:
case BT_OPP_SERVER_EVENT:
path = BT_OPP_SERVER_PATH;
break;
+ case BT_MAP_CLIENT_EVENT:
+ path = BT_MAP_CLIENT_PATH;
+ break;
case BT_PBAP_CLIENT_EVENT:
path = BT_PBAP_CLIENT_PATH;
break;
signal = BT_OPP_DISCONNECTED;
BT_INFO_C("Disconnected [OPP]");
break;
+ case BLUETOOTH_EVENT_MAP_CONNECTED:
+ signal = BT_MAP_CONNECTED;
+ BT_INFO_C("Connected [MAP]");
+ break;
+ case BLUETOOTH_EVENT_MAP_DISCONNECTED:
+ signal = BT_MAP_DISCONNECTED;
+ BT_INFO_C("Disconnected [MAP]");
+ break;
case BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_CONNECTED:
signal = BT_TRANSFER_CONNECTED;
break;
#define PBAP_UUID "0000112f-0000-1000-8000-00805f9b34fb"
#define OBEX_OPP_UUID "00001105-0000-1000-8000-00805f9b34fb"
+#define OBEX_MAP_UUID "00001134-0000-1000-8000-00805f9b34fb"
#define OBEX_PSE_UUID "0000112f-0000-1000-8000-00805f9b34fb"
#define GATT_UUID "00001801-0000-1000-8000-00805f9b34fb"
bt-service-oob.c
bt-service-obex-agent.c
bt-service-opp-client.c
+bt-service-map-client.c
bt-service-obex-server.c
bt-service-rfcomm-client.c
bt-service-rfcomm-server.c
#include "bt-service-avrcp.h"
#include "bt-service-avrcp-controller.h"
#include "bt-service-opp-client.h"
+#include "bt-service-map-client.h"
#include "bt-service-obex-server.h"
#include "bt-service-rfcomm-client.h"
#include "bt-service-rfcomm-server.h"
out_param1 = NULL;
}
}
+ /* TODO: MAP? see the if{}else{} above */
g_variant_unref(param1);
g_variant_unref(param2);
break;
}
+ /* TODO: MAP? MAP functions, see above */
case BT_OBEX_SERVER_ALLOCATE: {
int app_pid;
gboolean is_native;
case BT_OPP_PUSH_FILES:
case BT_OPP_CANCEL_PUSH:
+ /* TODO: MAP? MAP functions, see above */
case BT_OBEX_SERVER_ACCEPT_CONNECTION:
case BT_OBEX_SERVER_REJECT_CONNECTION:
#include "bt-service-network.h"
#include "bt-service-obex-server.h"
#include "bt-service-opp-client.h"
+#include "bt-service-map-client.h"
#include "bt-service-agent.h"
#include "bt-service-main.h"
#include "bt-service-avrcp.h"
goto done;
}
+ /* TODO: MAP? see above */
if (_gap_agent_exist_osp_server(agent, BT_RFCOMM_SERVER,
(char *)uuid) == TRUE) {
request_type = BT_AGENT_EVENT_PBAP_REQUEST;
else if (!strcasecmp(uuid, MAP_UUID))
request_type = BT_AGENT_EVENT_MAP_REQUEST;
+ /* TODO: MAP is already here */
if (trust) {
BT_INFO("Trusted device, so authorize\n");
#include "bt-service-proximity.h"
#include "bt-service-opp-client.h"
+#include "bt-service-map-client.h"
#ifdef TIZEN_FEATURE_BT_DPM
#include "bt-service-dpm.h"
static GDBusConnection *manager_conn;
static GDBusConnection *obexd_conn;
static GDBusConnection *opc_obexd_conn;
+static GDBusConnection *map_obexd_conn;
static GList *p_cache_list = NULL;
OBEX_PCSUITE = (1 << 6),
OBEX_SYNCEVOLUTION = (1 << 7),
OBEX_MAS = (1 << 8),
+ OBEX_MAP = (1 << 9),
} bluetooth_obex_connection_type_t;
void _bt_handle_property_changed_event(GVariant *msg, const char *object_path);
void _bt_opc_property_changed_event(GVariant *msg, char *path);
+void _bt_map_property_changed_event(GVariant *msg, char *path); /* TODO: MAP, do we need this? */
int _bt_register_service_event(GDBusConnection *g_conn, int event_type);
void _bt_unregister_service_event(GDBusConnection *g_conn, int event_type);
void _bt_opp_client_event_deinit(void);
+void _bt_map_client_event_deinit(void);
void _bt_handle_network_client_event(GVariant *msg_iter,
const char *path);
void __bt_gatt_char_property_changed_event(GVariant *msg_iter,
_bt_obex_transfer_progress(path, transferred);
}
+ /* TODO: MAP, "Complete"? see above */
g_free(property);
g_variant_unref(val);
g_variant_unref(child);
}
+void __bt_map_property_changed_event(GVariant *msg,
+ const char *path)
+{
+ /* TODO: MAP, do we need this? see above */
+}
+
+void _bt_map_property_changed_event(GVariant *msg, char *path)
+{
+ /* TODO: MAP, do we need this? see above */
+}
+
+
void _bt_handle_input_event(GVariant *msg, const char *path)
{
int result = BLUETOOTH_ERROR_NONE;
_bt_opp_client_is_sending(&sending);
if (sending == TRUE)
_bt_opp_client_check_pending_transfer(address);
+ /* TODO: MAP? see above */
}
param = g_variant_new("(isy)", result, address, addr_type);
_bt_send_event(BT_DEVICE_EVENT,
_bt_send_event(BT_OPP_SERVER_EVENT,
BLUETOOTH_EVENT_OBEX_SERVER_CONNECTION_AUTHORIZE,
param);
+ /* TODO: MAP? see above */
g_free(address);
g_free(name);
} else if (strcasecmp(member, "RfcommAuthorize") == 0) {
BT_INFO("object_path = [%s]", obj_path);
/*Handle OPP_SERVER_CONNECTED_EVENT here */
+ /* TODO: MAP? see above */
if (strncmp(obj_path, BT_SESSION_BASEPATH_SERVER,
strlen(BT_SESSION_BASEPATH_SERVER)) != 0) {
g_free(obj_path);
g_free(obj_path);
} else if (strcasecmp(member, "InterfacesRemoved") == 0) {
/*Handle OPP_SERVER_DISCONNECTED_EVENT here */
+ /* TODO: MAP? see above */
if (__bt_get_object_path(parameters, &obj_path)) {
BT_ERR("Fail to get the path");
return;
}
}
+static void __bt_map_event_filter(GDBusConnection *connection,
+ const gchar *sender_name,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ /* TODO: MAP, do we need this here? see above */
+}
+
+int _bt_map_client_event_init(void)
+{
+ GError *error = NULL;
+
+ if (map_obexd_conn == NULL) {
+ map_obexd_conn = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error);
+
+ if (!map_obexd_conn) {
+ if (error) {
+ BT_ERR("Unable to connect to dbus: %s", error->message);
+ g_clear_error(&error);
+ }
+ return BLUETOOTH_ERROR_INTERNAL;
+ }
+ }
+
+ if (_bt_register_service_event(map_obexd_conn,
+ BT_MAP_CLIENT_EVENT) != BLUETOOTH_ERROR_NONE) {
+ g_object_unref(map_obexd_conn);
+ map_obexd_conn = NULL;
+ return BLUETOOTH_ERROR_INTERNAL;
+ }
+
+ return BLUETOOTH_ERROR_NONE;
+}
+
+void _bt_map_client_event_deinit(void)
+{
+ if (map_obexd_conn) {
+ _bt_unregister_service_event(map_obexd_conn,
+ BT_MAP_CLIENT_EVENT);
+ g_object_unref(map_obexd_conn);
+ map_obexd_conn = NULL;
+ }
+}
+
int _bt_register_manager_subscribe_signal(GDBusConnection *conn,
int subscribe)
{
return 0;
}
+int _bt_register_map_client_subscribe_signal(GDBusConnection *conn,
+ int subscribe)
+{
+ if (conn == NULL)
+ return -1;
+
+ static int subs_map_client_interface_added_id = -1;
+ static int subs_map_client_interface_removed_id = -1;
+ static int subs_map_client_property_id = -1;
+
+
+ if (subscribe) {
+ if (subs_map_client_interface_added_id == -1) {
+ subs_map_client_interface_added_id = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_MANAGER_INTERFACE,
+ BT_INTERFACES_ADDED, NULL, NULL, 0,
+ __bt_map_event_filter,
+ NULL, NULL);
+ }
+ if (subs_map_client_interface_removed_id == -1) {
+ subs_map_client_interface_removed_id = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_MANAGER_INTERFACE,
+ BT_INTERFACES_REMOVED, NULL, NULL, 0,
+ __bt_map_event_filter,
+ NULL, NULL);
+ }
+ if (subs_map_client_property_id == -1) {
+ subs_map_client_property_id = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_PROPERTIES_INTERFACE,
+ BT_PROPERTIES_CHANGED, NULL, NULL, 0,
+ __bt_map_event_filter,
+ NULL, NULL);
+ }
+ } else {
+ if (subs_map_client_interface_added_id != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_map_client_interface_added_id);
+ subs_map_client_interface_added_id = -1;
+ }
+ if (subs_map_client_interface_removed_id != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_map_client_interface_removed_id);
+ subs_map_client_interface_removed_id = -1;
+ }
+ if (subs_map_client_property_id != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_map_client_property_id);
+ subs_map_client_property_id = -1;
+ }
+ }
+ return 0;
+}
+
int _bt_register_a2dp_subscribe_signal(GDBusConnection *conn,
int subscribe)
{
BT_ERR("BT_OPP_CLIENT_EVENT: register service event");
_bt_register_opp_client_subscribe_signal(g_conn, TRUE);
break;
+ case BT_MAP_CLIENT_EVENT:
+ BT_ERR("BT_MAP_CLIENT_EVENT: register service event");
+ _bt_register_map_client_subscribe_signal(g_conn, TRUE);
+ break;
case BT_A2DP_SOURCE_EVENT:
BT_INFO("A2dp Source event");
_bt_register_a2dp_subscribe_signal(g_conn, TRUE);
case BT_OPP_CLIENT_EVENT:
_bt_register_opp_client_subscribe_signal(g_conn, FALSE);
break;
+ case BT_MAP_CLIENT_EVENT:
+ _bt_register_map_client_subscribe_signal(g_conn, FALSE);
+ break;
default:
BT_ERR("Unknown event");
return;
case BT_OPP_SERVER_EVENT:
path = BT_OPP_SERVER_PATH;
break;
+ case BT_MAP_CLIENT_EVENT:
+ path = BT_MAP_CLIENT_PATH;
+ break;
case BT_PBAP_CLIENT_EVENT:
path = BT_PBAP_CLIENT_PATH;
break;
signal = BT_OPP_DISCONNECTED;
BT_INFO_C("Disconnected [OPP]");
break;
+ case BLUETOOTH_EVENT_MAP_CONNECTED:
+ signal = BT_MAP_CONNECTED;
+ BT_INFO_C("Connected [MAP]");
+ break;
+ case BLUETOOTH_EVENT_MAP_DISCONNECTED:
+ signal = BT_MAP_DISCONNECTED;
+ BT_INFO_C("Disconnected [MAP]");
+ break;
case BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_CONNECTED:
signal = BT_TRANSFER_CONNECTED;
break;
#include "bt-service-headset-connection.h"
#include "bt-service-opp-client.h"
+#include "bt-service-map-client.h"
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed 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 <glib.h>
+#include <dlog.h>
+#include <string.h>
+#include <mime_type.h>
+#include <aul.h>
+#include <glib.h>
+#include <gio/gio.h>
+
+#include "bluetooth-api.h"
+#include "bt-internal-types.h"
+
+#include "bt-service-common.h"
+#include "bt-service-event.h"
+#include "bt-service-util.h"
+#include "bt-service-map-client.h"
+#include "bt-service-obex-agent.h"
+#include "bt-service-adapter.h"
+
+#define DBUS_TIEMOUT 20 * 1000 /* 20 Seconds */
+
+bt_session_info_t *session_info;
+
+static void __bt_free_session_info(bt_session_info_t *info)
+{
+ ret_if(info == NULL);
+
+ /* TODO: MAP bt_session_info_t, see bt-service-opp-client.c */
+
+ g_free(info->address);
+ g_free(info);
+}
+
+static void __bt_free_session_data(gpointer data)
+{
+ bt_session_data_t *info = data;
+
+ ret_if(info == NULL);
+
+ _bt_delete_request_id(info->request_id);
+
+ /* TODO: MAP bt_session_data_t, see bt-service-opp-client.c */
+
+ g_free(info->address);
+ g_free(info);
+}
+
+static void __bt_session_release_cb(GDBusProxy *proxy,
+ GAsyncResult *res, gpointer user_data)
+{
+ BT_DBG("+");
+ ret_if(session_info == NULL);
+
+ GError *error = NULL;
+ int result = BLUETOOTH_ERROR_NONE;
+ GVariant *param = NULL;
+ g_dbus_proxy_call_finish(proxy, res, &error);
+ if (proxy)
+ g_object_unref(proxy);
+
+ if (error) {
+ BT_ERR("%s", error->message);
+ g_error_free(error);
+
+ result = BLUETOOTH_ERROR_INTERNAL;
+ } else {
+ BT_DBG("Session Removed");
+ }
+
+ session_info->result = result;
+ param = g_variant_new("(isi)", session_info->result,
+ session_info->address,
+ session_info->request_id);
+ /* Send the event in only error none case */
+ _bt_send_event(BT_OPP_CLIENT_EVENT,
+ BLUETOOTH_EVENT_OPC_DISCONNECTED,
+ param);
+
+ __bt_free_session_info(session_info);
+ session_info = NULL;
+
+ _bt_map_client_event_deinit();
+
+ /* Operate remain works */
+ /* TODO: MAP */
+
+ return;
+fail:
+
+ BT_DBG("-");
+
+ return;
+}
+
+static int _bt_remove_session()
+{
+ GDBusConnection *g_conn;
+ GDBusProxy *session_proxy;
+ GError *err = NULL;
+
+ g_conn = _bt_gdbus_get_session_gconn();
+ retv_if(g_conn == NULL, BLUETOOTH_ERROR_INTERNAL);
+ retv_if(session_info->session_path == NULL, BLUETOOTH_ERROR_INVALID_PARAM);
+
+ session_proxy = g_dbus_proxy_new_sync(g_conn, G_DBUS_PROXY_FLAGS_NONE,
+ NULL, BT_OBEXD_DBUS_NAME,
+ BT_OBEX_CLIENT_PATH,
+ BT_OBEX_CLIENT_INTERFACE,
+ NULL, &err);
+
+ retv_if(session_proxy == NULL, BLUETOOTH_ERROR_INTERNAL);
+
+ g_dbus_proxy_call(session_proxy, "RemoveSession",
+ g_variant_new("(o)", session_info->session_path),
+ G_DBUS_CALL_FLAGS_NONE,
+ DBUS_TIEMOUT, NULL,
+ (GAsyncReadyCallback)__bt_session_release_cb,
+ NULL);
+
+ return BLUETOOTH_ERROR_NONE;
+}
+
+void _bt_map_disconnected(const char *session_path)
+{
+ BT_DBG("+");
+ GVariant *param = NULL;
+ ret_if(session_info == NULL);
+
+ if (g_strcmp0(session_info->session_path,
+ session_path) != 0) {
+ BT_INFO("Path mismatch, previous transfer failed! Returning");
+ return;
+ }
+
+ param = g_variant_new("(isi)", session_info->result,
+ session_info->address,
+ session_info->request_id);
+ _bt_send_event(BT_MAP_CLIENT_EVENT,
+ BLUETOOTH_EVENT_MAP_DISCONNECTED,
+ param);
+
+ __bt_free_session_info(session_info);
+ session_info = NULL;
+
+ BT_DBG("-");
+}
+
+static void __bt_create_session_cb(GDBusProxy *proxy,
+ GAsyncResult *res, gpointer user_data)
+{
+ BT_DBG("+");
+
+ GError *error = NULL;
+ GVariant *value;
+ int result = BLUETOOTH_ERROR_NONE;
+ char *session_path = NULL;
+ GVariant *param = NULL;
+
+ value = g_dbus_proxy_call_finish(proxy, res, &error);
+ if (value) {
+ g_variant_get(value, "(o)", &session_path);
+ g_variant_unref(value);
+ }
+ if (error) {
+
+ BT_ERR("%s", error->message);
+ g_clear_error(&error);
+
+ result = BLUETOOTH_ERROR_INTERNAL;
+ } else {
+ BT_DBG("Session created");
+ if (session_info != NULL)
+ session_info->session_path = g_strdup(session_path);
+ }
+ g_free(session_path);
+ g_object_unref(proxy);
+ ret_if(session_info == NULL);
+
+ session_info->result = result;
+ param = g_variant_new("(isi)", result,
+ session_info->address,
+ session_info->request_id);
+ /* Send the event in only error none case */
+ _bt_send_event(BT_MAP_CLIENT_EVENT,
+ BLUETOOTH_EVENT_MAP_CONNECTED,
+ param);
+
+ if (result != BLUETOOTH_ERROR_NONE) {
+ BT_ERR("Calling __bt_session_release");
+ gboolean ret = __bt_session_release();
+
+ __bt_free_session_info(session_info);
+ session_info = NULL;
+
+ if (ret == FALSE) {
+ BT_DBG("ReleaseSession Not called");
+ /* Operate remain works */
+
+ /* TODO: MAP */
+
+ }
+ } else {
+
+ /* TODO: MAP */
+
+ }
+ BT_DBG("-");
+
+}
+
+static int __bt_opp_client_start_XXXXXXXXXX(int request_id, char *address
+ /* parameters................... */)
+{
+ /* TODO: MAP */
+}
+
+/* TODO: MAP */
#define PBAP_UUID "0000112f-0000-1000-8000-00805f9b34fb"
#define OBEX_OPP_UUID "00001105-0000-1000-8000-00805f9b34fb"
+#define OBEX_MAP_UUID "00001134-0000-1000-8000-00805f9b34fb"
#define OBEX_PSE_UUID "0000112f-0000-1000-8000-00805f9b34fb"
#define GATT_UUID "00001801-0000-1000-8000-00805f9b34fb"
int _bt_opp_client_event_init(void);
void _bt_opp_client_event_deinit(void);
+int _bt_map_client_event_init(void);
+void _bt_map_client_event_deinit(void);
+
int _bt_send_hf_local_term_event(char *address);
int _bt_init_hf_local_term_event_sender(void);
void _bt_deinit_hf_local_term_event_sender(void);
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed 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 _BT_SERVICE_MAP_CLIENT_H_
+#define _BT_SERVICE_MAP_CLIENT_H_
+
+#include <glib.h>
+#include <sys/types.h>
+#include <gio/gio.h>
+#include "bluetooth-api.h"
+#include "bt-internal-types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BT_OBEX_CLIENT_AGENT_PATH "/org/obex/client_agent"
+
+/* TODO: MAP */
+
+typedef struct {
+ int request_id;
+ int result;
+
+ char *session_path;
+
+ char *address;
+
+/* int file_count;
+ int file_offset;
+ char **file_name_array;
+ gboolean is_canceled; */
+
+ /* TODO: MAP */
+
+} bt_session_info_t; /* TODO: "session"? */
+
+typedef struct {
+ char *address;
+ int request_id;
+
+ /* char **file_path;
+ int file_count; */
+
+ /* TODO: MAP */
+
+} bt_session_data_t; /* TODO: "session"? */
+
+/* TODO: MAP */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /*_BT_SERVICE_MAP_CLIENT_H_*/
/**< Base ID for AVRCP events */
#define BLUETOOTH_EVENT_IPSP_BASE ((int)(BLUETOOTH_EVENT_AVRCP_CONTROL_BASE + 0x0020))
/**< Base ID for IPSP events */
+#define BLUETOOTH_EVENT_MAP_BASE ((int)(BLUETOOTH_EVENT_IPSP_BASE + 0x0020))
+ /**< Base ID for MAP events */
/**
* Bluetooth event type
BLUETOOTH_EVENT_OPC_TRANSFER_PROGRESS, /* OPC Transfer progress event */
BLUETOOTH_EVENT_OPC_TRANSFER_COMPLETE, /* OPC Transfer Complete event */
+ BLUETOOTH_EVENT_MAP_CONNECTED = BLUETOOTH_EVENT_MAP_BASE,
+ BLUETOOTH_EVENT_MAP_DISCONNECTED,
+ /*
+ BLUETOOTH_EVENT_MAP_SET_FOLDER_COMPLETE,
+ BLUETOOTH_EVENT_MAP_SET_FOLDER_INVALID_ARGUMENTS,
+ BLUETOOTH_EVENT_MAP_SET_FOLDER_FAILED,
+ BLUETOOTH_EVENT_MAP_UPDATE_INBOX_COMPLETE,
+ BLUETOOTH_EVENT_MAP_UPDATE_INBOX_FAILED,
+ */
+ BLUETOOTH_EVENT_MAP_LIST_FOLDERS_COMPLETE,
+ BLUETOOTH_EVENT_MAP_LIST_FOLDERS_INVALID_ARGUMENTS,
+ BLUETOOTH_EVENT_MAP_LIST_FOLDERS_FAILED,
+ BLUETOOTH_EVENT_MAP_LIST_MESSAGES_COMPLETE,
+ BLUETOOTH_EVENT_MAP_LIST_MESSAGES_INVALID_ARGUMENTS,
+ BLUETOOTH_EVENT_MAP_LIST_MESSAGES_FAILED,
+ BLUETOOTH_EVENT_MAP_PUSH_MESSAGE_COMPLETE,
+ BLUETOOTH_EVENT_MAP_PUSH_MESSAGE_INVALID_ARGUMENTS,
+ BLUETOOTH_EVENT_MAP_PUSH_MESSAGE_FAILED,
+ BLUETOOTH_EVENT_MAP_GET_MESSAGE_COMPLETE,
+ BLUETOOTH_EVENT_MAP_GET_MESSAGE_INVALID_ARGUMENTS,
+ BLUETOOTH_EVENT_MAP_GET_MESSAGE_FAILED,
+
BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_AUTHORIZE = BLUETOOTH_EVENT_OBEX_SERVER_BASE,
/* Obex server authorize event*/
BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_STARTED, /* Obex Server transfer started event*/
BLUETOOTH_DUN_PROFILE_UUID = ((unsigned short)0x1103), /**<DUN*/
BLUETOOTH_OBEX_IR_MC_SYNC_SERVICE_UUID = ((unsigned short)0x1104), /**<OBEX IR MC SYNC*/
BLUETOOTH_OBEX_OBJECT_PUSH_SERVICE_UUID = ((unsigned short)0x1105), /**<OPP*/
+ BLUETOOTH_OBEX_MESSAGE_ACCESS_SERVICE_UUID = ((unsigned short)0x1134), /**<MAP*/
BLUETOOTH_OBEX_FILE_TRANSFER_UUID = ((unsigned short)0x1106), /**<FTP*/
BLUETOOTH_IRMC_SYNC_COMMAND_UUID = ((unsigned short)0x1107), /**<IRMC SYNC COMMAND*/
BLUETOOTH_HS_PROFILE_UUID = ((unsigned short)0x1108), /**<HS*/
int percentage;
} bt_opc_transfer_info_t;
+/* TODO: MAP client structures, see above */
+
/* Obex Server transfer type */
#define TRANSFER_PUT "PUT"
#define TRANSFER_GET "GET"
/**
+ * @fn int bluetooth_map_init(void)
+ * @brief Initialize MAP client.
+ *
+ * This function is a synchronous call.
+ * No event corresponding to this api
+ *
+ * @return BLUETOOTH_ERROR_NONE - Success \n
+ * BLUETOOTH_ERROR_DEVICE_NOT_ENABLED - Device is not enabled \n
+ * BLUETOOTH_ERROR_INTERNAL - Internal Error \n
+ * BLUETOOTH_ERROR_NO_RESOURCES - Not resource available \n
+ * BLUETOOTH_ERROR_ACCESS_DENIED -Memory allocation failed \n
+ *
+ * @exception None
+ *
+ * @remark None
+ * @see bluetooth_map_deinit
+ */
+int bluetooth_map_init(void);
+
+/**
+ * @fn int bluetooth_map_deinit(void)
+ * @brief Deinitialize MAP client.
+ *
+ * This function is a synchronous call.
+ * No event corresponding to this api
+ *
+ * @return BLUETOOTH_ERROR_NONE - Success \n
+ * BLUETOOTH_ERROR_DEVICE_NOT_ENABLED - Device is not enabled \n
+ * BLUETOOTH_ERROR_ACCESS_DENIED -Memory allocation failed \n
+ *
+ * @exception None
+ *
+ * @remark None
+ * @see bluetooth_map_init
+ */
+ int bluetooth_map_deinit(void);
+
+ /* TODO: MAP, see above */
+
+
+/**
* @fn int bluetooth_oob_read_local_data(bt_oob_data_t *local_oob_data)
* @brief Read the local Hash and Randmizer.
*
BT_AVRCP_CONTROL_EVENT,
BT_A2DP_SOURCE_EVENT,
BT_HID_DEVICE_EVENT,
+ BT_MAP_CLIENT_EVENT,
#ifdef GATT_NO_RELAY
BT_GATT_BLUEZ_EVENT, /* GattValueChanged from bluez directly */
#endif
#define BT_AVRCP_TARGET_UUID "0000110c-0000-1000-8000-00805f9b34fb"
#define BT_OPP_UUID "00001105-0000-1000-8000-00805f9b34fb"
#define BT_FTP_UUID "00001106-0000-1000-8000-00805f9b34fb"
+#define BT_MAP_UUID "00001134-0000-1000-8000-00805f9b34fb"
#define BT_SPP_UUID "00001101-0000-1000-8000-00805f9b34fb"
#define BT_HID_UUID "00001124-0000-1000-8000-00805f9b34fb"
#define BT_PAN_PANU_UUID "00001115-0000-1000-8000-00805f9b34fb"
#define BT_FUNC_IPSP_BASE ((int)(BT_FUNC_GATT_BASE + 0x0020))
#define BT_FUNC_DPM_BASE ((int)(BT_FUNC_IPSP_BASE + 0x0020))
#define BT_FUNC_PXP_BASE ((int)(BT_FUNC_DPM_BASE + 0x0030)) /* Adding 0x0030 to base, as DPM has more use case */
+#define BT_FUNC_MAP_BASE ((int)(BT_FUNC_PXP_BASE + 0x0020))
typedef enum {
BT_CHECK_ADAPTER = BT_FUNC_BASE,
BT_OPP_CANCEL_PUSH,
BT_OPP_IS_PUSHING_FILES,
BT_OPP_GET_TRANSFER_PROGRESS,
+ BT_MAP_111 = BT_FUNC_MAP_BASE,
+ BT_MAP_222,
+ BT_MAP_333,
+ BT_MAP_444,
+ BT_MAP_555,
+ BT_MAP_666,
BT_OBEX_SERVER_ALLOCATE,
BT_OBEX_SERVER_DEALLOCATE,
BT_OBEX_SERVER_IS_ACTIVATED,
#define BT_NETWORK_PATH "/org/projectx/bt/newtork"
#define BT_OPP_CLIENT_PATH "/org/projectx/bt/opp_client"
#define BT_OPP_SERVER_PATH "/org/projectx/bt/opp_server"
+#define BT_MAP_CLIENT_PATH "/org/projectx/bt/map_client"
#define BT_PBAP_CLIENT_PATH "/org/projectx/bt/pbap_client"
#define BT_RFCOMM_CLIENT_PATH "/org/projectx/bt/rfcomm_client"
#define BT_RFCOMM_SERVER_PATH "/org/projectx/bt/rfcomm_server"
#define BT_NETWORK_SERVER_DISCONNECTED "NetworkServerDisconnected"
#define BT_OPP_CONNECTED "OppConnected"
#define BT_OPP_DISCONNECTED "OppDisconnected"
+#define BT_MAP_CONNECTED "MapConnected"
+#define BT_MAP_DISCONNECTED "MapDisconnected"
+#define BT_MAP_OP_COMPLETE "Complete"
#define BT_TRANSFER_CONNECTED "TransferConnected"
#define BT_TRANSFER_DISCONNECTED "TransferDisonnected"
#define BT_TRANSFER_STARTED "TransferStarted"