static ug_nfc_share_result_e ug_nfc_share_make_mime_type_data_from_file_path(const char *path, uint8_t *type_data, uint32_t *type_size) { ug_nfc_share_result_e result = UG_NFC_SHARE_ERROR; char *extension = NULL; LOGD("[%s(): %d] BEGIN >>>>", __FUNCTION__, __LINE__); retv_if(path == NULL, result); retv_if(type_data == NULL, result); retv_if(type_size == NULL, result); LOGD("typedata = %p, typesize = %d", type_data, *type_size); memset(type_data, 0, *type_size); *type_size = 0; extension = strrchr(path, '.'); LOGD("extension = %s\n", GET_SAFE_STRING(extension)); if (extension != NULL) { char *mime_str = NULL; if (mime_type_get_mime_type(extension+1, &mime_str) == MIME_TYPE_ERROR_NONE) { LOGD("mime_str[%s]", mime_str); *type_size = strlen(mime_str); memcpy(type_data, mime_str, *type_size); result = UG_NFC_SHARE_OK; } else { LOGD("ERROR :: mime_type_get_mime_type failed"); result = UG_NFC_SHARE_ERROR; } } LOGD("mime type : %s", GET_SAFE_STRING((char *)type_data)); LOGD("[%s(): %d] END >>>>", __FUNCTION__, __LINE__); return result; }
static int __bt_opp_client_start_sending(int request_id, char *address, char **file_name_array, int file_count) { GHashTable *hash; GValue *value; GPtrArray *ptr_array; DBusGConnection *g_conn; DBusGProxy *client_proxy; DBusGProxyCall *proxy_call; char *agent_path; char *ext; char *mime_type = NULL; int i; int result = MIME_TYPE_ERROR_NONE; BT_CHECK_PARAMETER(address, return); BT_CHECK_PARAMETER(file_name_array, return); /* Get the session bus. */ g_conn = _bt_get_session_gconn(); retv_if(g_conn == NULL, BLUETOOTH_ERROR_INTERNAL); client_proxy = dbus_g_proxy_new_for_name(g_conn, BT_OBEX_SERVICE_NAME, "/", BT_OBEX_CLIENT_INTERFACE); retv_if(client_proxy == NULL, BLUETOOTH_ERROR_INTERNAL); hash = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, (GDestroyNotify)__bt_value_free); value = g_new0(GValue, 1); g_value_init(value, G_TYPE_STRING); g_value_set_string(value, address); g_hash_table_insert(hash, "Destination", value); __bt_free_sending_info(sending_info); sending_info = g_malloc0(sizeof(bt_sending_info_t)); sending_info->address = g_strdup(address); sending_info->request_id = request_id; __bt_opp_client_agent_deinit(); __bt_opp_client_agent_init(); agent_path = g_strdup(BT_OBEX_CLIENT_AGENT_PATH); ptr_array = g_ptr_array_new_with_free_func(__bluetooth_ptr_array_free); for (i = 0; i < file_count; i++) { ext = strchr(file_name_array[i], '.'); if (ext != NULL) { result = mime_type_get_mime_type(ext + 1, &mime_type); if (result != MIME_TYPE_ERROR_NONE) BT_ERR("mime_type_get_mime_type failed %d", result); } __data_list_ptr_array_add(ptr_array, file_name_array[i], mime_type); if (mime_type) { free(mime_type); mime_type = NULL; } } proxy_call = dbus_g_proxy_begin_call(client_proxy, "SendFiles", __bt_send_files_cb, NULL, NULL, dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), hash, dbus_g_type_get_collection("GPtrArray", DBUS_STRUCT_STRING_STRING), ptr_array, DBUS_TYPE_G_OBJECT_PATH, agent_path, G_TYPE_INVALID); g_free(agent_path); if (proxy_call == NULL) { BT_ERR("Fail to Send files"); g_hash_table_destroy(hash); g_object_unref(client_proxy); __bt_free_sending_info(sending_info); __bt_opp_client_agent_deinit(); sending_info = NULL; return BLUETOOTH_ERROR_INTERNAL; } sending_info->sending_proxy = proxy_call; g_hash_table_destroy(hash); if (ptr_array) g_ptr_array_free(ptr_array, TRUE); return BLUETOOTH_ERROR_NONE; }