blob: c60fa128079122d0492c21848a29c9eb81bbabd4 [file] [log] [blame]
/*
*
* Copyright (c) 2023 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include "core/CastingPlayer.h"
namespace matter {
namespace casting {
namespace support {
/**
* @brief CastingStore uses TLV-encoding to cache casting related data on disk, like the list of CastingPlayers that the
* tv-casting-app previously connected to.
*/
class CastingStore : public chip::FabricTable::Delegate
{
public:
static CastingStore * GetInstance();
/**
* @brief If castingPlayer already exists in the cache on disk (compares by castingPlayer.id), this will update the record for
* it in the cache. If castingPlayer is new i.e. not found, this will add it to the cache
*/
CHIP_ERROR AddOrUpdate(core::CastingPlayer castingPlayer);
/**
* @brief Reads and returns a vector of all CastingPlayers found in the cache
*/
std::vector<core::CastingPlayer> ReadAll();
/**
* @brief If castingPlayer is found in the cache, this will delete it. If it is not found, this method is a no-op
*/
CHIP_ERROR Delete(core::CastingPlayer castingPlayer);
/**
* @brief Purges the cache of all CastingStore data
*/
CHIP_ERROR DeleteAll();
/**
* @brief Implements chip::FabricTable::Delegate.OnFabricRemoved. Searches for and deletes the CastingPlayer(s) that match(es)
* the fabrixIndex argument, if any. If no such CastingPlayer exists, this method is a no-op.
*/
void OnFabricRemoved(const chip::FabricTable & fabricTable, chip::FabricIndex fabricIndex) override;
private:
CastingStore();
static CastingStore * _CastingStore;
/**
* @brief Writes the vector of CastingPlayers to the cache. This method will overwrite any pre-existing cached data.
*/
CHIP_ERROR WriteAll(std::vector<core::CastingPlayer> castingPlayers);
enum CastingStoreTLVTag
{
kCastingStoreDataVersionTag = 1,
kCastingPlayersContainerTag,
kCastingPlayerIdTag,
kCastingPlayerNodeIdTag,
kCastingPlayerFabricIndexTag,
kCastingPlayerVendorIdTag,
kCastingPlayerProductIdTag,
kCastingPlayerDeviceTypeIdTag,
kCastingPlayerPortTag,
kCastingPlayerInstanceNameTag,
kCastingPlayerDeviceNameTag,
kCastingPlayerHostNameTag,
kCastingPlayerEndpointsContainerTag,
kCastingPlayerEndpointIdTag,
kCastingPlayerEndpointVendorIdTag,
kCastingPlayerEndpointProductIdTag,
kCastingPlayerEndpointDeviceTypeListContainerTag,
kCastingPlayerEndpointDeviceTypeTag,
kCastingPlayerEndpointDeviceTypeRevisionTag,
kCastingPlayerEndpointServerListContainerTag,
kCastingPlayerEndpointServerClusterIdTag,
kCastingPlayerSupportsCommissionerGeneratedPasscodeTag,
kContextTagMaxNum = UINT8_MAX
};
constexpr static size_t kCastingStoreDataMaxBytes = 1024 * 100; // 100 KBs
constexpr static char * kCastingStoreDataKey = (char *) "com.matter.casting.CastingStore";
constexpr static uint32_t kCurrentCastingStoreDataVersion = 1;
constexpr static uint32_t kSupportedCastingStoreDataVersions[1] = { 1 };
};
}; // namespace support
}; // namespace casting
}; // namespace matter