common/recipes-qin/ipc-interface/files/Ipc.h (22 lines of code) (raw):
/*
 * Copyright 2014-present Facebook. All Rights Reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
#pragma once
#include <string>
#include <functional>
namespace openbmc {
namespace qin {
/**
 * Ipc class provides a general interface for polymorphism over
 * interprocess communication techniques such as file systems
 * and DBus.
 */
class Ipc {
  public:
    typedef void onConnFuncType(void);
    virtual ~Ipc() {}
    /**
     * Register for the Ipc connection. Throw errors if the connection
     * failed.
     */
    virtual void registerConnection() = 0;
    /**
     * Unregister for the Ipc connection. Throw errors properly.
     */
    virtual void unregisterConnection() = 0;
    /**
     * Register the object path on the connection. Throw errors if
     * the object cannot be registered.
     *
     * @param path of the object
     * @param userData to be associated with the object
     * @throw std::invalid_argument if path is illegal
     */
    virtual void registerObject(const std::string &path,
                                void*             userData) = 0;
    /**
     * Unregister the dbus object with all the associated object args.
     *
     * @param path of the object
     */
    virtual void unregisterObject(const std::string &path) = 0;
    /**
     * Check if the object path matches the rule of the Ipc
     */
    virtual bool isPathAllowed(const std::string &path) const = 0;
    /**
     * The get function that forms a path from the given parentPath
     * and name.
     *
     * @param parentPath is path to parent of object to create path with
     * @param name is the name of the object to create path with
     * @return new path
     */
    virtual const std::string getPath(const std::string &parentPath,
                                      const std::string &name) const = 0;
    /**
     * Callback on connection acquired for the user application to set
     */
    std::function<onConnFuncType> onConnAcquired;
    /**
     * Callback on connection lost for the user application to set
     */
    std::function<onConnFuncType> onConnLost;
};
} // namesapce ipc
} // namespace openbmc