Fix cleanup logic regarding notify fd
[platform/core/connectivity/bluetooth-frwk.git] / bt-api / bt-rfcomm-server.c
index d8a42f3..55c6425 100644 (file)
@@ -61,20 +61,19 @@ static guint rx_tag = 0;
 
 static bool __rfcomm_record_rx_data(void)
 {
-       BT_INFO("");
-       if (bluetooth_get_battery_monitor_state()) {
-               if (rx_data) {
-                       int ret = _bt_common_send_rfcomm_rx_details(rx_data);
-                       if (ret == BLUETOOTH_ERROR_NONE) {
-                               rx_data = 0;
-                               return TRUE;
-                       }
-                       else {
-                               BT_ERR("RFCOMM rx data could not be registered");
-                       }
+       if (rx_data) {
+               int ret = _bt_common_send_rfcomm_rx_details(rx_data);
+               if (ret == BLUETOOTH_ERROR_NONE) {
+                       rx_data = 0;
+                       return TRUE;
+               } else {
+                       BT_ERR("RFCOMM rx data could not be registered");
                }
        }
+
+       rx_data = 0;
        rx_tag = 0;
+
        return FALSE;
 }
 
@@ -198,6 +197,10 @@ static void __connected_cb(rfcomm_info_t *info, rfcomm_conn_t *conn,
 
        BT_INFO_C("### Connected [RFCOMM Server]");
 
+       if (_bt_common_send_rfcomm_conn_info(RFCOMM_ROLE_SERVER,
+                       TRUE, conn_info.socket_fd) != BLUETOOTH_ERROR_NONE)
+               BT_ERR("Fail to send the connection info");
+
        _bt_common_event_cb(BLUETOOTH_EVENT_RFCOMM_CONNECTED,
                        BLUETOOTH_ERROR_NONE, &conn_info,
                        event_info->cb, event_info->user_data);
@@ -235,6 +238,10 @@ static void __rfcomm_server_disconnect_conn(rfcomm_conn_t *conn,
        BT_INFO("Disconnected FD [%d]", conn->fd);
        disconn_info.socket_fd = conn->fd;
 
+       if (_bt_common_send_rfcomm_conn_info(RFCOMM_ROLE_SERVER,
+                       FALSE, disconn_info.socket_fd) != BLUETOOTH_ERROR_NONE)
+               BT_ERR("Fail to send the connection info");
+
        _bt_common_event_cb(BLUETOOTH_EVENT_RFCOMM_DISCONNECTED,
                        BLUETOOTH_ERROR_NONE, &disconn_info,
                        event_info->cb, event_info->user_data);
@@ -367,7 +374,7 @@ static gboolean __data_received_cb(GIOChannel *chan, GIOCondition cond,
 
        if (bluetooth_get_battery_monitor_state()) {
                if (rx_tag == 0) {
-                       BT_INFO("Adding rfcomm rx timeout function for battery monitor");
+                       BT_DBG("Adding rfcomm rx timeout function for battery monitor");
                        rx_tag = g_timeout_add_seconds(BATTERY_MONITOR_RFCOMM_INTERVAL, (GSourceFunc)__rfcomm_record_rx_data, NULL);
                }
                rx_data += len;
@@ -548,6 +555,16 @@ void _bt_rfcomm_server_disconnect_all(void)
 
        return;
 }
+
+void _bt_rfcomm_server_reset_timer(void)
+{
+       if (rx_tag > 0) {
+               g_source_remove(rx_tag);
+               rx_tag = 0;
+       }
+
+       rx_data = 0;
+}
 #else
 
 #define BT_RFCOMM_SERVER_ID_MAX 254