Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions include/aos/cm/communication/communication.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
* Copyright (C) 2025 EPAM Systems, Inc.
*
* SPDX-License-Identifier: Apache-2.0
*/

#ifndef AOS_CM_COMMUNICATION_HPP_
#define AOS_CM_COMMUNICATION_HPP_

#include "aos/common/cloudprotocol/state.hpp"
#include "aos/common/types.hpp"

namespace aos::cm::communication {

/** @addtogroup cm Communication Manager
* @{
*/

/**
* Communication interface.
*/
class CommunicationItf {
public:
/**
* Sends instances new state.
*
* @param newState new state to send.
* @return Error.
*/
virtual Error SendInstanceNewState(const cloudprotocol::NewState& newState) = 0;

/**
* Sends instances update state.
*
* @param updateState update state to send.
* @return Error.
*/
virtual Error SendInstanceStateRequest(const cloudprotocol::StateRequest& stateRequest) = 0;

/**
* Destructor.
*/
virtual ~CommunicationItf() = default;
};

} // namespace aos::cm::communication

#endif
182 changes: 182 additions & 0 deletions include/aos/cm/storagestate/storagestate.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
/*
* Copyright (C) 2025 EPAM Systems, Inc.
*
* SPDX-License-Identifier: Apache-2.0
*/

#ifndef AOS_STORAGESTATE_HPP_
#define AOS_STORAGESTATE_HPP_

#include "aos/common/cloudprotocol/state.hpp"
#include "aos/common/crypto/crypto.hpp"
#include "aos/common/tools/noncopyable.hpp"
#include "aos/common/tools/thread.hpp"
#include "aos/common/types.hpp"

namespace aos::cm::storagestate {

/** @addtogroup cm Communication Manager
* @{
*/

/**
* Setup storage state instance params.
*/
struct SetupParams {
InstanceIdent mInstanceIdent;
size_t mUID {};
size_t mGID {};
size_t mStateQuota {};
size_t mStorageQuota {};
};

/**
* Storage state instance info.
*/
struct StorageStateInstanceInfo {
InstanceIdent mInstanceIdent;
StaticString<cInstanceIDLen> mInstanceID;
size_t mStorageQuota {};
size_t mStateQuota {};
StaticString<crypto::cSHA2DigestSize> mStateChecksum;

/**
* Compares storage state instance info.
*
* @param instance instance to compare with.
* @return bool.
*/
bool operator==(const StorageStateInstanceInfo& instance) const
{
return mInstanceIdent == instance.mInstanceIdent && mInstanceID == instance.mInstanceID
&& mStorageQuota == instance.mStorageQuota && mStateQuota == instance.mStateQuota
&& mStateChecksum == instance.mStateChecksum;
}

/**
* Compares storage state instance info.
*
* @param instance instance to compare with.
* @return bool.
*/
bool operator!=(const StorageStateInstanceInfo& instance) const { return !operator==(instance); }
};

/**
* StorageState storage interface.
*/
class StorageItf {
public:
/**
* Adds storage state instance info.
*
* @param storageStateInfo storage state instance info to add.
* @return Error.
*/
virtual Error AddStorageStateInfo(const StorageStateInstanceInfo& storageStateInfo) = 0;

/**
* Removes storage state instance info.
*
* @param instanceIdent instance ident to remove.
* @return Error.
*/
virtual Error RemoveStorageStateInfo(const InstanceIdent& instanceIdent) = 0;

/**
* Returns all storage state instance infos.
*
* @param storageStateInfos[out] array to return storage state instance infos.
* @return Error.
*/
virtual Error GetAllStorageStateInfo(Array<StorageStateInstanceInfo>& storageStateInfos) = 0;

/**
* Returns storage state instance info by instance ident.
*
* @param instanceIdent instance ident to get storage state info for.
* @param storageStateInfo[out] storage state instance info result.
* @return Error.
*/
virtual Error GetStorageStateInfo(const InstanceIdent& instanceIdent, StorageStateInstanceInfo& storageStateInfo)
= 0;

/**
* Updates storage state instance info.
*
* @param storageStateInfo storage state instance info to update.
* @return Error.
*/
virtual Error UpdateStorageStateInfo(const StorageStateInstanceInfo& storageStateInfo) = 0;

/**
* Destructor.
*/
virtual ~StorageItf() = default;
};

/**
* Interface to manage storage and state partitions.
*/
class StorageStateItf : public NonCopyable {
public:
/**
* Setups storage state instance.
*
* @param setupParams setup parameters.
* @param storagePath[out] storage path.
* @param statePath[out] state path.
* @return Error.
*/
virtual Error Setup(const SetupParams& setupParams, String& storagePath, String& statePath) = 0;

/**
* Clean-ups storage state instance.
*
* @param instanceIdent instance ident.
* @return Error.
*/
virtual Error Cleanup(const InstanceIdent& instanceIdent) = 0;

/**
* Removes storage state instance.
*
* @param instanceIdent instance ident.
* @return Error.
*/
virtual Error Remove(const InstanceIdent& instanceIdent) = 0;

/**
* Updates storage state with new state.
*
* @param state new state.
* @return Error.
*/
virtual Error UpdateState(const cloudprotocol::UpdateState& state) = 0;

/**
* Accepts state from storage.
*
* @param state state to accept.
* @return Error.
*/
virtual Error AcceptState(const cloudprotocol::StateAcceptance& state) = 0;

/**
* Returns instance's checksum.
*
* @param instanceIdent instance ident.
* @param checkSum[out] checksum.
* @return Error
*/
virtual Error GetInstanceCheckSum(const InstanceIdent& instanceIdent, String& checkSum) = 0;

/**
* Destructor.
*/
virtual ~StorageStateItf() = default;
};

} // namespace aos::cm::storagestate

#endif
29 changes: 29 additions & 0 deletions include/aos/common/cloudprotocol/cloudprotocol.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#ifndef AOS_CLOUDPROTOCOL_HPP_
#define AOS_CLOUDPROTOCOL_HPP_

#include "aos/common/tools/enum.hpp"
#include "aos/common/tools/optional.hpp"
#include "aos/common/types.hpp"

Expand Down Expand Up @@ -74,6 +75,34 @@ struct InstanceFilter {
}
};

/**
* Message type.
*/
class MessageTypeType {
public:
enum class Enum {
eStateAcceptance,
eUpdateState,
eNewState,
eStateRequest,
};

static const Array<const char* const> GetStrings()
{
static const char* const sStrings[] = {
"stateAcceptance",
"updateState",
"newState",
"stateRequest",
};

return Array<const char* const>(sStrings, ArraySize(sStrings));
};
};

using MessageTypeEnum = MessageTypeType::Enum;
using MessageType = EnumStringer<MessageTypeType>;

} // namespace aos::cloudprotocol

#endif
Loading
Loading