summaryrefslogtreecommitdiffstats
path: root/xbmc/network/WakeOnAccess.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/network/WakeOnAccess.h')
-rw-r--r--xbmc/network/WakeOnAccess.h81
1 files changed, 81 insertions, 0 deletions
diff --git a/xbmc/network/WakeOnAccess.h b/xbmc/network/WakeOnAccess.h
new file mode 100644
index 0000000..797f0c1
--- /dev/null
+++ b/xbmc/network/WakeOnAccess.h
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2013-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#pragma once
+
+#include "URL.h"
+#include "XBDateTime.h"
+#include "settings/lib/ISettingCallback.h"
+#include "settings/lib/ISettingsHandler.h"
+#include "threads/CriticalSection.h"
+#include "utils/Job.h"
+
+#include <string>
+#include <vector>
+
+class CWakeOnAccess : private IJobCallback, public ISettingCallback, public ISettingsHandler
+{
+public:
+ static CWakeOnAccess &GetInstance();
+
+ bool WakeUpHost (const CURL& fileUrl);
+ bool WakeUpHost (const std::string& hostName, const std::string& customMessage);
+
+ void QueueMACDiscoveryForAllRemotes();
+
+ void OnJobComplete(unsigned int jobID, bool success, CJob *job) override;
+ void OnSettingChanged(const std::shared_ptr<const CSetting>& setting) override;
+ void OnSettingsLoaded() override;
+
+ // struct to keep per host settings
+ struct WakeUpEntry
+ {
+ explicit WakeUpEntry (bool isAwake = false);
+
+ std::string host;
+ std::string mac;
+ CDateTimeSpan timeout;
+ unsigned int wait_online1_sec; // initial wait
+ unsigned int wait_online2_sec; // extended wait
+ unsigned int wait_services_sec;
+
+ unsigned short ping_port = 0; // where to ping
+ unsigned short ping_mode = 0; // how to ping
+
+ CDateTime nextWake;
+ std::string upnpUuid; // empty unless upnpmode
+ std::string friendlyName;
+ };
+
+private:
+ CWakeOnAccess();
+ std::string GetSettingFile();
+ void LoadFromXML();
+ void SaveToXML();
+
+ void SetEnabled(bool enabled);
+ bool IsEnabled() const { return m_enabled; }
+
+ void QueueMACDiscoveryForHost(const std::string& host);
+ void SaveMACDiscoveryResult(const std::string& host, const std::string& mac);
+
+ typedef std::vector<WakeUpEntry> EntriesVector;
+ EntriesVector m_entries;
+ CCriticalSection m_entrylist_protect;
+ bool FindOrTouchHostEntry(const std::string& hostName, bool upnpMode, WakeUpEntry& server);
+ void TouchHostEntry(const std::string& hostName, bool upnpMode);
+
+ unsigned int m_netinit_sec, m_netsettle_ms; //time to wait for network connection
+
+ bool m_enabled = false;
+
+ bool WakeUpHost(const std::string& hostName, const std::string& customMessage, bool upnpMode);
+ bool WakeUpHost(const WakeUpEntry& server);
+
+ std::vector<struct UPnPServer> m_UPnPServers; // list of wakeable upnp servers
+};