Mesh: Maintain group subscription list in cdb
[platform/core/connectivity/bluetooth-frwk.git] / bt-service / services / mesh / bt-service-mesh-config-client.c
index 28f5afd..5a7810b 100644 (file)
@@ -320,6 +320,28 @@ static void __bt_mesh_wait_response_timeout(
                                BT_MESH_MODEL_CONFIG_GROUP_SUB, req->data,
                                        sizeof(bluetooth_mesh_model_configure_t));
                break;
+       case MESH_OPCODE_CONFIG_MODEL_PUB_GET:
+               /* Send event with timeout */
+               __bt_mesh_handle_pending_dev_config_request_info(
+                       BLUETOOTH_ERROR_TIMEOUT,
+                               BT_MESH_MODEL_GET_PUBLICATION, req->data,
+                               sizeof(bluetooth_mesh_model_configure_t));
+               break;
+       case MESH_OPCODE_CONFIG_MODEL_PUB_SET:
+               /* Send event with timeout */
+               __bt_mesh_handle_pending_dev_config_request_info(
+                       BLUETOOTH_ERROR_TIMEOUT,
+                               BT_MESH_MODEL_SET_PUBLICATION, req->data,
+                               sizeof(bluetooth_mesh_model_configure_t));
+               break;
+       case MESH_OPCODE_MODEL_APP_BIND:
+       case MESH_OPCODE_MODEL_APP_UNBIND:
+               /* Send event with timeout */
+               __bt_mesh_handle_pending_dev_config_request_info(
+                       BLUETOOTH_ERROR_TIMEOUT,
+                               BT_MESH_MODEL_CONFIGURE_APPKEY, req->data,
+                               sizeof(bluetooth_mesh_model_configure_t));
+               break;
        default:
                break;
        }
@@ -1263,6 +1285,43 @@ void _bt_mesh_config_client_devkey_msg_handler(
                BT_INFO("Subscr Addr\t%4.4x\n", addr);
                BT_INFO("Model ID\t%4.4x\n", mod_id);
 
+               if (data[0] == MESH_STATUS_SUCCESS) {
+                       /* Update cdb */
+                       switch (cmd->opcode) {
+                       case MESH_OPCODE_CONFIG_MODEL_SUB_ADD:
+                       case MESH_OPCODE_CONFIG_MODEL_SUB_VIRT_ADD:
+                               if (!_bt_mesh_network_add_model_subscription(
+                                       event->net_uuid.uuid, event->source,
+                                       ele_addr - event->source, mod_id, addr)) {
+                                       BT_INFO("Failed to add model subscription!");
+                               }
+                       break;
+                       case MESH_OPCODE_CONFIG_MODEL_SUB_DELETE:
+                       case MESH_OPCODE_CONFIG_MODEL_SUB_VIRT_DELETE:
+                               if (!_bt_mesh_network_delete_model_subscription(
+                                       event->net_uuid.uuid, event->source,
+                                       ele_addr - event->source, mod_id, addr)) {
+                                       BT_INFO("Failed to delete model subscription!");
+                               }
+                       break;
+                       case MESH_OPCODE_CONFIG_MODEL_SUB_DELETE_ALL:
+                               if (!_bt_mesh_network_delete_all_model_subscription(
+                                       event->net_uuid.uuid, event->source,
+                                       ele_addr - event->source, mod_id)) {
+                                       BT_INFO("Failed to delete all model subscription!");
+                               }
+                       break;
+                       case MESH_OPCODE_CONFIG_MODEL_SUB_OVERWRITE:
+                       case MESH_OPCODE_CONFIG_MODEL_SUB_VIRT_OVERWRITE:
+                               if (!_bt_mesh_network_overwrite_model_subscription(
+                                       event->net_uuid.uuid, event->source,
+                                       ele_addr - event->source, mod_id, addr)) {
+                                       BT_INFO("Failed to overwrite model subscription!");
+                               }
+                       break;
+                       }
+               }
+
                if (cmd)
                        __mesh_handle_model_subscription_event(result, &param, cmd);
 
@@ -1436,6 +1495,9 @@ void _bt_mesh_config_client_devkey_msg_handler(
                                *param.sub_list[k] = l_get_le16(data + i);
                        }
                }
+
+               /* <TO-DO> Update model sub in cdb */
+
                __bt_mesh_handle_pending_dev_config_request_info(result,
                        BT_MESH_MODEL_GET_SUBSCRIPTION_LIST, &param,
                                sizeof(bluetooth_mesh_model_configure_t));