*/
#include <string.h>
-#ifdef RFCOMM_DIRECT
+#ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
#include <gio/gio.h>
#include <gio/gunixfdlist.h>
#include <sys/socket.h>
#include "bt-request-sender.h"
#include "bt-event-handler.h"
-#ifdef TIZEN_DPM_ENABLE
+#ifdef TIZEN_FEATURE_BT_DPM
#include "bt-dpm.h"
#endif
-#ifdef RFCOMM_DIRECT
+#ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
static GSList *rfcomm_nodes;
if (info == NULL)
return -1;
+#ifdef TIZEN_FEATURE_BT_DPM
+ if (_bt_check_dpm(BT_DPM_SPP, NULL) == BT_DPM_RESTRICTED) {
+ char addr_str[20];
+
+ BT_ERR("Not allow to use SPP profile");
+
+ close(fd);
+ _bt_convert_addr_type_to_string(addr_str, addr->addr);
+ _bt_disconnect_profile(addr_str, info->uuid, NULL,NULL);
+
+ return -1;
+ }
+#endif
+
conn = g_new0(rfcomm_conn_t, 1);
conn->fd = fd;
memcpy(&conn->addr, addr, sizeof(bluetooth_device_address_t));
g_free(info);
}
-void _bt_rfcomm_server_free_all()
+void _bt_rfcomm_server_free_all(void)
{
BT_DBG("Free all the servers");
g_slist_free_full(rfcomm_nodes, (GDestroyNotify)free_rfcomm_info);
rfcomm_nodes = NULL;
}
+
+void _bt_rfcomm_server_disconnect_all(void)
+{
+ GSList *server;
+ GSList *conn;
+ char addr[20];
+
+ BT_INFO("### Disconnect all RFCOMM server connections");
+
+ for (server = rfcomm_nodes; server; ) {
+ rfcomm_info_t *info = server->data;
+
+ for (conn = info->rfcomm_conns; conn; conn = conn->next) {
+ rfcomm_conn_t *conn_info = conn->data;
+
+ if (conn_info == NULL)
+ continue;
+
+ if (conn_info->watch_id == 0 || conn_info->disconnected)
+ continue;
+
+ close(conn_info->fd);
+ conn_info->disconnected = TRUE;
+
+ _bt_convert_addr_type_to_string(addr,
+ conn_info->addr.addr);
+ _bt_disconnect_profile(addr, info->uuid, NULL,NULL);
+ }
+
+ server = server->next;
+ __rfcomm_server_disconnect(info);
+ }
+
+ return;
+}
#endif
BT_EXPORT_API int bluetooth_rfcomm_create_socket(const char *uuid)
{
-#ifdef RFCOMM_DIRECT
+#ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
rfcomm_info_t *info;
#else
int result;
return BLUETOOTH_ERROR_PERMISSION_DEINED;
}
-#ifdef TIZEN_DPM_ENABLE
+#ifdef TIZEN_FEATURE_BT_DPM
if (_bt_check_dpm(BT_DPM_SPP, NULL) == BT_DPM_RESTRICTED) {
BT_ERR("Not allow to use SPP profile");
return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION;
}
#endif
-#ifdef RFCOMM_DIRECT
+#ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
BT_INFO("<<<<<<<<< RFCOMM Create socket from app >>>>>>>>>");
info = __register_method();
if (info == NULL)
BT_EXPORT_API int bluetooth_rfcomm_create_socket_ex(const char *uuid, const char *bus_name, const char *path)
{
-#ifdef RFCOMM_DIRECT
+#ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
rfcomm_info_t *info;
BT_CHECK_ENABLED(return);
return BLUETOOTH_ERROR_PERMISSION_DEINED;
}
-#ifdef TIZEN_DPM_ENABLE
+#ifdef TIZEN_FEATURE_BT_DPM
if (_bt_check_dpm(BT_DPM_SPP, NULL) == BT_DPM_RESTRICTED) {
BT_ERR("Not allow to use SPP profile");
return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION;
BT_EXPORT_API int bluetooth_rfcomm_remove_socket(int id)
{
-#ifdef RFCOMM_DIRECT
+#ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
rfcomm_info_t *info;
#else
int result;
return BLUETOOTH_ERROR_INVALID_PARAM;
}
-#ifdef RFCOMM_DIRECT
+#ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
BT_INFO("RFCOMM Remove socket request from app, ID [%d]", id);
info = __find_rfcomm_info_with_id(id);
BT_EXPORT_API int bluetooth_rfcomm_remove_socket_ex(const char *uuid)
{
-#ifdef RFCOMM_DIRECT
+#ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
rfcomm_info_t *info;
BT_CHECK_ENABLED(return);
BT_EXPORT_API int bluetooth_rfcomm_server_disconnect(int socket_fd)
{
-#ifdef RFCOMM_DIRECT
+#ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
rfcomm_info_t *info;
rfcomm_conn_t *conn;
BT_EXPORT_API int bluetooth_rfcomm_listen_and_accept(int id, int max_pending_connection)
{
-#ifdef RFCOMM_DIRECT
+#ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
rfcomm_info_t *info;
#else
int result;
return BLUETOOTH_ERROR_INVALID_PARAM;
}
-#ifdef TIZEN_DPM_ENABLE
+#ifdef TIZEN_FEATURE_BT_DPM
if (_bt_check_dpm(BT_DPM_SPP, NULL) == BT_DPM_RESTRICTED) {
BT_ERR("Not allow to use SPP profile");
return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION;
}
#endif
-#ifdef RFCOMM_DIRECT
+#ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
BT_INFO("RFCOMM Listen & accept from app");
info = __find_rfcomm_info_with_id(id);
int max_pending_connection,
const char *bus_name, const char *path)
{
-#ifdef RFCOMM_DIRECT
+#ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
rfcomm_info_t *info;
BT_CHECK_ENABLED(return);
-#ifdef TIZEN_DPM_ENABLE
+#ifdef TIZEN_FEATURE_BT_DPM
if (_bt_check_dpm(BT_DPM_SPP, NULL) == BT_DPM_RESTRICTED) {
BT_ERR("Not allow to use SPP profile");
return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION;
BT_EXPORT_API int bluetooth_rfcomm_listen(int id, int max_pending_connection)
{
-#ifdef RFCOMM_DIRECT
+#ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
rfcomm_info_t *info;
#else
int result;
return BLUETOOTH_ERROR_INVALID_PARAM;
}
-#ifdef TIZEN_DPM_ENABLE
+#ifdef TIZEN_FEATURE_BT_DPM
if (_bt_check_dpm(BT_DPM_SPP, NULL) == BT_DPM_RESTRICTED) {
BT_ERR("Not allow to use SPP profile");
return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION;
}
#endif
-#ifdef RFCOMM_DIRECT
+#ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
BT_INFO("RFCOMM Listen");
info = __find_rfcomm_info_with_id(id);
BT_CHECK_ENABLED(return);
-#ifdef TIZEN_DPM_ENABLE
+#ifdef TIZEN_FEATURE_BT_DPM
if (_bt_check_dpm(BT_DPM_SPP, NULL) == BT_DPM_RESTRICTED) {
BT_ERR("Not allow to use SPP profile");
return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION;