BT_EXPORT_API int bluetooth_map_init(void)
{
+ BT_DBG("bluetooth_map_init");
bt_user_info_t *user_info;
user_info = _bt_get_user_data(BT_COMMON);
BT_EXPORT_API int bluetooth_map_deinit(void)
{
+ BT_DBG("bluetooth_map_deinit");
return _bt_unregister_event(BT_MAP_CLIENT_EVENT);
}
+BT_EXPORT_API int bluetooth_map_create_session(bt_map_session_info_s* session) {
+ BT_DBG("bluetooth_map_create_session");
+ int result = 0;
+
+ BT_CHECK_ENABLED(return);
+ BT_CHECK_PARAMETER(session->remote_address, return);
+
+ BT_INIT_PARAMS();
+ BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
+
+ g_array_append_vals(in_param1, session->remote_address, strlen(session->remote_address)+1);
+
+ result = _bt_send_request(BT_OBEX_SERVICE, BT_MAP_CREATE_SESSION,
+ in_param1, in_param2, in_param3, in_param4, &out_param);
+
+ if (result == BLUETOOTH_ERROR_NONE) {
+ if (out_param->len > 0) {
+ session->session_path = strdup(&g_array_index(out_param, char, 0));
+ BT_DBG("session id: %s", session->session_path);
+ } else {
+ BT_ERR("out_param length is 0!!");
+ return BLUETOOTH_ERROR_INTERNAL;
+ }
+ }
+ BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
+ return result;
+}
+
+BT_EXPORT_API int bluetooth_map_destroy_session(bt_map_session_info_s* session) {
+ LOGE("bluetooth_map_destroy_session");
+ int result = 0;
+
+ BT_CHECK_ENABLED(return);
+ BT_CHECK_PARAMETER(session->session_path, return);
+
+ BT_INIT_PARAMS();
+ BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
+
+ g_array_append_vals(in_param1, session->session_path, strlen(session->session_path)+1);
+
+ result = _bt_send_request(BT_OBEX_SERVICE, BT_MAP_DESTROY_SESSION,
+ in_param1, in_param2, in_param3, in_param4, &out_param);
+
+ if (result == BLUETOOTH_ERROR_NONE) {
+ BT_DBG("session (%s) was destroyed", session->session_path);
+ free(session->remote_address);
+ free(session->session_path);
+ free(session);
+ }
+ BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
+ return result;
+}
+
+
+
/* TODO: MAP API */
request_id = g_array_index(out_param1, int, 0);
BT_DBG("request_id : %d", request_id);
_bt_add_push_request_id(request_id);
- }
- if (cb_data->service_function == BT_MAP_111) {
+ } else if (cb_data->service_function == BT_MAP_444) {
/* TODO: MAP service functions */
}
gpointer user_data)
{
FN_START;
+
BT_DBG("Method[%s] Object Path[%s] Interface Name[%s]",
method_name, object_path, interface_name);
sender = g_dbus_method_invocation_get_sender(invocation);
- if (service_type == BT_CORE_SERVICE) {
+ // TODO map - privileges should be checked, just debugging purposes
+ /*if (service_type == BT_CORE_SERVICE) {
BT_DBG("No need to check privilege from bt-core");
} else if (__bt_service_check_privilege(service_function,
service_type, (const char *)sender) == FALSE) {
BT_ERR("Client don't have the privilege to excute this function");
result = BLUETOOTH_ERROR_PERMISSION_DEINED;
goto fail;
- }
+ }*/
if (request_type == BT_ASYNC_REQ
|| service_function == BT_OBEX_SERVER_ACCEPT_CONNECTION) {
break;
}
+
+ case BT_MAP_CREATE_SESSION: {
+ BT_DBG("BT_MAP_CREATE_SESSION");
+ char *address = (char *)g_variant_get_data(in_param1);
+ char* session_id = NULL;
+ result = _bt_create_session_sync(address, &session_id);
+ if (result == BLUETOOTH_ERROR_NONE) {
+ g_array_append_vals(*out_param1, session_id, strlen(session_id)+1);
+ }
+ break;
+ }
+
+ case BT_MAP_DESTROY_SESSION: {
+ BT_DBG("BT_MAP_DESTROY_SESSION");
+ char* session_id = (char *)g_variant_get_data(in_param1);
+ result = _bt_destroy_session_sync(session_id);
+ if (result == BLUETOOTH_ERROR_NONE) {
+ BT_DBG("successfully destroyed session");
+ }
+ free(session_id);
+ break;
+ }
+
+ case BT_MAP_LIST_FOLDERS: {
+ BT_DBG("BT_MAP_LIST_FOLDERS");
+
+ result = BLUETOOTH_ERROR_NOT_SUPPORT;
+ break;
+ }
+
/* TODO: MAP? MAP functions, see above */
case BT_OBEX_SERVER_ALLOCATE: {
int app_pid;
/* TODO: MAP */
}
+int _bt_create_session_sync(char* address, char** session_id)
+{
+ BT_DBG("Entered SERVICE create session");
+ GDBusConnection *g_conn;
+ GDBusProxy *session_proxy;
+ GError *err = NULL;
+ const char *session_path;
+
+ retv_if(address == NULL, BLUETOOTH_ERROR_INVALID_PARAM);
+
+ g_conn = _bt_gdbus_get_session_gconn();
+ retv_if(g_conn == NULL, BLUETOOTH_ERROR_INTERNAL);
+
+ session_proxy = g_dbus_proxy_new_sync(g_conn, G_DBUS_PROXY_FLAGS_NONE,
+ NULL, BT_OBEX_SERVICE_NAME,
+ BT_OBEX_CLIENT_PATH,
+ BT_OBEX_CLIENT_INTERFACE,
+ NULL, &err);
+ if (err) {
+ BT_ERR("Unable to create session_proxy: %s", err->message);
+ g_clear_error(&err);
+ return BLUETOOTH_ERROR_INTERNAL;
+ }
+ retv_if(session_proxy == NULL, BLUETOOTH_ERROR_INTERNAL);
+
+ GVariantBuilder* builder = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
+ g_variant_builder_add(builder, "{sv}", "Target",
+ g_variant_new("s", "map"));
+ GVariant *args = g_variant_builder_end(builder);
+ g_variant_builder_unref (builder);
+ GVariant *param = g_variant_new("(s@a{sv})", address, args);
+
+ char* string = g_variant_print (param, true);
+
+ GVariant *value = g_dbus_proxy_call_sync(session_proxy, "CreateSession", param,
+ G_DBUS_CALL_FLAGS_NONE, -1, NULL, &err);
+ if (err != NULL) {
+ BT_ERR("Could not create session: %s\n", err->message);
+ g_error_free(err);
+ return BLUETOOTH_ERROR_INTERNAL;
+ } else {
+ if (NULL == value) {
+ BT_ERR("create session returned value is null\n");
+ return BLUETOOTH_ERROR_INTERNAL;
+ } else {
+ BT_DBG("create session succeed\n");
+ }
+ }
+
+ g_variant_get(value, "(&o)", session_id);
+ BT_DBG("session_id = \"%s\"\n", *session_id);
+
+ return BLUETOOTH_ERROR_NONE;
+}
+
+int _bt_destroy_session_sync(char* session_id)
+{
+ BT_DBG("Entered SERVICE destroy session with id: \"%s\"", session_id);
+ GDBusConnection *g_conn;
+ GDBusProxy *session_proxy;
+ GError *err = NULL;
+
+ retv_if(session_id == NULL, BLUETOOTH_ERROR_INVALID_PARAM);
+
+ g_conn = _bt_gdbus_get_session_gconn();
+ retv_if(g_conn == NULL, BLUETOOTH_ERROR_INTERNAL);
+
+ session_proxy = g_dbus_proxy_new_sync(g_conn, G_DBUS_PROXY_FLAGS_NONE,
+ NULL, BT_OBEX_SERVICE_NAME,
+ BT_OBEX_CLIENT_PATH,
+ BT_OBEX_CLIENT_INTERFACE,
+ NULL, &err);
+ if (err) {
+ BT_ERR("Unable to create session_proxy: %s", err->message);
+ g_clear_error(&err);
+ return BLUETOOTH_ERROR_INTERNAL;
+ }
+ retv_if(session_proxy == NULL, BLUETOOTH_ERROR_INTERNAL);
+
+ GVariant *param = g_variant_new("(o)", session_id);
+
+ char* string = g_variant_print (param, true);
+
+ GVariant *value = g_dbus_proxy_call_sync(session_proxy, "RemoveSession", param,
+ G_DBUS_CALL_FLAGS_NONE, -1, NULL, &err);
+ if (err != NULL) {
+ BT_ERR("Could not remove session: %s\n", err->message);
+ g_error_free(err);
+ return BLUETOOTH_ERROR_INTERNAL;
+ } else {
+ BT_DBG("remove session succeed\n");
+ }
+
+ return BLUETOOTH_ERROR_NONE;
+}
/* TODO: MAP */
} bt_session_data_t; /* TODO: "session"? */
+
+int _bt_create_session_sync(char* address, char** session_id);
+int _bt_destroy_session_sync(char* session_id);
/* TODO: MAP */
#ifdef __cplusplus
* @{
*/
+#define BLUETOOTH_ADDRESS_STRING_LENGTH 17 /**< This specifies bluetooth device address length (AA:BB:CC:DD:EE:FF) */
#define BLUETOOTH_ADDRESS_LENGTH 6 /**< This specifies bluetooth device address length */
#define BLUETOOTH_VERSION_LENGTH_MAX 30 /**< This specifies bluetooth device version length */
#define BLUETOOTH_INTERFACE_NAME_LENGTH 16
char if_name[16];
} bt_ipsp_connection_info_t;
+
+/* TODO MAP structures */
+typedef struct {
+ char* session_path;
+ char* remote_address;
+} bt_map_session_info_s;
+
/**
* Callback pointer type
*/
*/
int bluetooth_map_deinit(void);
+ int bluetooth_map_create_session(bt_map_session_info_s* s);
+
+ int bluetooth_map_destroy_session(bt_map_session_info_s* session);
+
/* TODO: MAP, see above */
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_CREATE_SESSION = BT_FUNC_MAP_BASE,
+ BT_MAP_DESTROY_SESSION,
+ BT_MAP_LIST_FOLDERS,
BT_MAP_444,
BT_MAP_555,
BT_MAP_666,