Initial commit

Signed-off-by: Artem Senichev <a.senichev@yadro.com>
diff --git a/src/dbus_watch.hpp b/src/dbus_watch.hpp
new file mode 100644
index 0000000..1f5201f
--- /dev/null
+++ b/src/dbus_watch.hpp
@@ -0,0 +1,111 @@
+/**
+ * @brief D-Bus signal watcher.
+ *
+ * This file is part of HostLogger project.
+ *
+ * Copyright (c) 2018 YADRO
+ *
+ * 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 "log_manager.hpp"
+
+#include <set>
+#include <map>
+#include <string>
+
+#include <sdbusplus/bus/match.hpp>
+
+
+
+/** @class DbusServer
+ *  @brief D-Bus service by host logger.
+ */
+class DbusWatcher
+{
+public:
+    /** @brief Constructor.
+     *
+     *  @param[in] logManager - log manager
+     *  @param[in] bus - bus to attach to
+     */
+    DbusWatcher(LogManager& logManager, sdbusplus::bus::bus& bus);
+
+    /** @brief Initialize watcher.
+     *
+     *  @return error code, 0 if operation completed successfully
+     */
+    int initialize();
+
+private:
+    /** @brief Register D-Bus event handler. */
+    void registerEventHandler();
+
+    /** @brief Register D-Bus timer handler.
+     *
+     *  @return error code, 0 if operation completed successfully
+     */
+    int registerTimerHandler();
+
+    /** @brief Setup D-Bus timer.
+     *
+     *  @param[in] event - event source to setup
+     *
+     *  @return error code, 0 if operation completed successfully
+     */
+    int setupTimer(sd_event_source* event);
+
+    /** @brief Callback function for host state change.
+     *
+     *  @param[in] msg - data associated with subscribed signal
+     */
+    void hostStateHandler(sdbusplus::message::message& msg);
+
+    /** @brief D-Bus IO callback used to handle incoming data on the opened file.
+     *         See sd_event_io_handler_t for details.
+     */
+    static int ioCallback(sd_event_source* event, int fd, uint32_t revents, void* data);
+
+    /** @brief D-Bus timer callback used to flush log store.
+     *         See sd_event_add_time for details.
+     */
+    static int timerCallback(sd_event_source* event, uint64_t usec, void* data);
+
+private:
+    /** @struct FlushCondition
+     *  @brief Describes flush conditions for log manager based on host state event.
+     */
+    struct FlushCondition
+    {
+        /** @brief D-Bus property name to watch. */
+        std::string property;
+        /** @brief Set of possible values for property watched. */
+        std::set<std::string> values;
+        /** @brief Match object to create D-Bus handler. */
+        std::unique_ptr<sdbusplus::bus::match_t> match;
+    };
+
+private:
+    /** @brief Log manager instance. */
+    LogManager& logManager_;
+
+    /** @brief D-Bus bus. */
+    sdbusplus::bus::bus& bus_;
+
+    /** @brief Log storage flush conditions.
+     *         Map D-Bus interface name to condition description.
+     */
+    std::map<std::string, FlushCondition> conds_;
+};