WSF
WsfCyberEngagementManager.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2016 Infoscitex, a DCS Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef WSFCYBERENGAGEMENTMANAGER_HPP
13#define WSFCYBERENGAGEMENTMANAGER_HPP
14
15#include "wsf_cyber_export.h"
16
17#include <list>
18#include <map>
19#include <memory>
20
23#include "effects/WsfCyberEffect.hpp"
24class WsfPlatform;
25class WsfSimulation;
26
27namespace wsf
28{
29namespace cyber
30{
56class WSF_CYBER_EXPORT EngagementManager
57{
58public:
62 {
63 public:
66 : mEngagement(std::move(aEngagement))
67 {
68 }
69 ~EngagementData() = default;
70
75 EngagementData(const EngagementData& aSrc) = delete;
76 EngagementData(EngagementData&& aSrc) = default;
77
78 Effect* GetEffect(const std::string& aEffectName) const;
80 const AttackParameters& GetParameters() const { return mParameters; }
81 bool IsParametersValid() const { return mParametersValid; }
82
83 Effect& AddEffect(const std::string& aEffectName);
84 void RemoveEffect(const std::string& aEffectName);
85 void RemoveEffects();
86 void AddParameters(const AttackParameters& aParameters);
87 void RemoveParameters();
88
89 protected:
91
94 std::list<UtCloneablePtr<Effect>> mEngagementEffects{};
96 bool mParametersValid{false};
97 };
98
99 using EngagementMap = std::unordered_map<size_t, EngagementData>;
100
103 friend class Event;
104
105 static EngagementManager& Get(WsfSimulation& aSimulation);
106
107 EngagementManager() { mEngagements.reserve(500U); }
110 const EngagementManager& operator=(const EngagementManager& aRhs) = delete;
111
112 Engagement* FindEngagement(const std::string& aAttackType, const std::string& aAttacker, const std::string& aVictim);
113 Engagement* FindEngagement(size_t aKey);
114
115 bool EngagementExists(const std::string& aAttackType, const std::string& aAttacker, const std::string& aVictim) const;
116 bool EngagementExists(size_t aKey) const;
117
124
125 void CullVictimEngagements(const std::string& aVictim);
126 void CullAttackerEngagements(const std::string& aAttacker);
128
129 bool CyberAttack(const std::string& aAttackType,
130 const std::string& aAttacker,
131 const std::string& aVictim,
132 WsfSimulation& aSimulation,
133 AttackParameters* aParameters = nullptr);
134
140 bool CyberScan(const std::string& aAttackType,
141 const std::string& aAttacker,
142 const std::string& aVictim,
143 WsfSimulation& aSimulation);
144
147 bool Cancel(size_t aKey);
148
149protected:
152 EngagementMap::iterator FindEngagementByPlatform(const std::string& aName, bool aByVictim);
153
154 EngagementData* FindEngagementData(const std::string& aAttackType,
155 const std::string& aAttacker,
156 const std::string& aVictim);
158
164 EngagementData& AddEngagement(const std::string& aAttackType,
165 const std::string& aAttacker,
166 const std::string& aVictim,
167 WsfSimulation& aSimulation);
168
175
176 void CyberScanInitialize(EngagementData& aEngagementData);
177 void CyberScan(EngagementData& aEngagementData);
179
192
193 void CyberAttackInitialize(EngagementData& aEngagementData);
194 void CyberAttack(EngagementData& aEngagementData);
195 void CyberAttackEffect(EngagementData& aEngagementData);
196 void CyberAttackDetectionDelay(EngagementData& aEngagementData);
197 void CyberAttackRecoveryDelay(EngagementData& aEngagementData);
199
200private:
201 EngagementMap mEngagements;
202};
203
204} // namespace cyber
205} // namespace wsf
206
207#endif
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Definition WsfCyberAttackParameters.hpp:99
Definition WsfCyberEngagementManager.hpp:62
EngagementData(const EngagementData &aSrc)=delete
Engagement & GetEngagement()
Definition WsfCyberEngagementManager.hpp:79
Engagement mEngagement
Definition WsfCyberEngagementManager.hpp:90
bool IsParametersValid() const
Definition WsfCyberEngagementManager.hpp:81
AttackParameters mParameters
Definition WsfCyberEngagementManager.hpp:95
EngagementData(EngagementData &&aSrc)=default
Effect * GetEffect(const std::string &aEffectName) const
Definition WsfCyberEngagementManager.cpp:695
std::list< UtCloneablePtr< Effect > > mEngagementEffects
Definition WsfCyberEngagementManager.hpp:94
bool mParametersValid
Definition WsfCyberEngagementManager.hpp:96
EngagementData(Engagement aEngagement)
EngagementData requires an engagement. Engagements can be moved, but not copied.
Definition WsfCyberEngagementManager.hpp:65
const AttackParameters & GetParameters() const
Definition WsfCyberEngagementManager.hpp:80
Engagement * FindEngagement(const std::string &aAttackType, const std::string &aAttacker, const std::string &aVictim)
Definition WsfCyberEngagementManager.cpp:70
EngagementManager(const EngagementManager &aSrc)=delete
std::unordered_map< size_t, EngagementData > EngagementMap
Definition WsfCyberEngagementManager.hpp:99
EngagementData * FindEngagementData(const std::string &aAttackType, const std::string &aAttacker, const std::string &aVictim)
Definition WsfCyberEngagementManager.cpp:109
void CyberScanInitialize(EngagementData &aEngagementData)
Definition WsfCyberEngagementManager.cpp:570
friend class Event
Definition WsfCyberEngagementManager.hpp:103
void CyberAttackRecoveryDelay(EngagementData &aEngagementData)
Definition WsfCyberEngagementManager.cpp:444
EngagementMap::iterator FindEngagementByPlatform(const std::string &aName, bool aByVictim)
Definition WsfCyberEngagementManager.cpp:90
void CyberAttackEffect(EngagementData &aEngagementData)
Definition WsfCyberEngagementManager.cpp:370
EngagementManager()
Definition WsfCyberEngagementManager.hpp:107
bool CyberScan(const std::string &aAttackType, const std::string &aAttacker, const std::string &aVictim, WsfSimulation &aSimulation)
Definition WsfCyberEngagementManager.cpp:499
void CullVictimEngagements(const std::string &aVictim)
Definition WsfCyberEngagementManager.cpp:661
bool EngagementExists(const std::string &aAttackType, const std::string &aAttacker, const std::string &aVictim) const
Definition WsfCyberEngagementManager.cpp:681
EngagementData & AddEngagement(const std::string &aAttackType, const std::string &aAttacker, const std::string &aVictim, WsfSimulation &aSimulation)
Definition WsfCyberEngagementManager.cpp:49
void CyberAttackDetectionDelay(EngagementData &aEngagementData)
Definition WsfCyberEngagementManager.cpp:386
bool CyberAttack(const std::string &aAttackType, const std::string &aAttacker, const std::string &aVictim, WsfSimulation &aSimulation, AttackParameters *aParameters=nullptr)
Definition WsfCyberEngagementManager.cpp:129
const EngagementManager & operator=(const EngagementManager &aRhs)=delete
bool Cancel(size_t aKey)
Definition WsfCyberEngagementManager.cpp:554
void CyberAttackInitialize(EngagementData &aEngagementData)
Definition WsfCyberEngagementManager.cpp:181
static EngagementManager & Get(WsfSimulation &aSimulation)
Returns a modifiable instance of the cyber engagement manager.
Definition WsfCyberEngagementManager.cpp:43
void CullAttackerEngagements(const std::string &aAttacker)
Definition WsfCyberEngagementManager.cpp:671
A class that represents the cyber engagements between two platforms.
Definition WsfCyberEngagement.hpp:37
Template specialization for wsf::comm::Address. Allows usage of Address in std::unordered_map/set.
Definition WsfCommAddress.hpp:185
Definition WsfCyberApplicationExtension.cpp:24
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Copyrights Multiple, All Rights Reserved