summaryrefslogtreecommitdiff
path: root/src/state/activating_state.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/activating_state.hpp')
-rw-r--r--src/state/activating_state.hpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/state/activating_state.hpp b/src/state/activating_state.hpp
new file mode 100644
index 0000000..bd1688f
--- /dev/null
+++ b/src/state/activating_state.hpp
@@ -0,0 +1,59 @@
+#pragma once
+
+#include "basic_state.hpp"
+
+struct ActivatingState : public BasicStateT<ActivatingState>
+{
+ static std::string_view stateName()
+ {
+ return "ActivatingState";
+ }
+
+ ActivatingState(interfaces::MountPointStateMachine& machine);
+
+ std::unique_ptr<BasicState> onEnter() override;
+
+ std::unique_ptr<BasicState> handleEvent(UdevStateChangeEvent event);
+ std::unique_ptr<BasicState> handleEvent(SubprocessStoppedEvent event);
+
+ template <class AnyEvent>
+ std::unique_ptr<BasicState> handleEvent(AnyEvent event)
+ {
+ LogMsg(Logger::Error, "Invalid event: ", event.eventName);
+ return nullptr;
+ }
+
+ private:
+ std::unique_ptr<BasicState> activateProxyMode();
+ std::unique_ptr<BasicState> activateLegacyMode();
+ std::unique_ptr<BasicState> mountSmbShare();
+ std::unique_ptr<BasicState> mountHttpsShare();
+
+ static std::unique_ptr<resource::Process>
+ spawnNbdKit(interfaces::MountPointStateMachine& machine,
+ std::unique_ptr<utils::VolatileFile>&& secret,
+ const std::vector<std::string>& params);
+ static std::unique_ptr<resource::Process>
+ spawnNbdKit(interfaces::MountPointStateMachine& machine,
+ const fs::path& file);
+ static std::unique_ptr<resource::Process>
+ spawnNbdKit(interfaces::MountPointStateMachine& machine,
+ const std::string& url);
+
+ static bool checkUrl(const std::string& urlScheme,
+ const std::string& imageUrl);
+ static bool getImagePathFromUrl(const std::string& urlScheme,
+ const std::string& imageUrl,
+ std::string* imagePath);
+ static bool isHttpsUrl(const std::string& imageUrl);
+ static bool getImagePathFromHttpsUrl(const std::string& imageUrl,
+ std::string* imagePath);
+
+ static bool isCifsUrl(const std::string& imageUrl);
+ static bool getImagePathFromCifsUrl(const std::string& imageUrl,
+ std::string* imagePath);
+ static fs::path getImagePath(const std::string& imageUrl);
+
+ std::unique_ptr<resource::Process> process;
+ std::unique_ptr<resource::Gadget> gadget;
+};