--- /dev/null
+#ifndef __PLUGIN_SESSION_H__
+#define __PLUGIN_SESSION_H__
+
+#include <string>
+#include "AbstractSession.h"
+#include "PluginParam.h"
+#include "PluginData.h"
+
+namespace nncc
+{
+namespace contrib
+{
+namespace config
+{
+
+class PluginSession : public AbstractSession
+{
+public:
+ PluginSession();
+
+ void addInfo(const std::string &name, const std::string &value) override;
+ void registerParam(const PluginParam ¶m) override;
+
+ const DataList &getInfo() const;
+ const std::string &getInfo(const std::string &name) const;
+ const std::map<std::string, PluginParam> &getSupportedParams() const;
+
+private:
+ DataList _info;
+ std::map<std::string, PluginParam> _supported_params_map;
+};
+
+std::ostream &operator<<(std::ostream &os, const PluginSession &op);
+
+} // namespace config
+} // namespace contrib
+} // namespace nncc
+
+#endif /*__PLUGIN_SESSION_H__ */
--- /dev/null
+#include <string>
+#include "PluginParam.h"
+#include "module/plugin/PluginSession.h"
+
+namespace nncc
+{
+namespace contrib
+{
+namespace config
+{
+
+PluginSession::PluginSession() : _info("info") {}
+
+void PluginSession::addInfo(const std::string &name, const std::string &value)
+{
+ _info.createElement(name, value);
+}
+
+const std::string &PluginSession::getInfo(const std::string &name) const
+{
+ return _info.getElement(name).getValue();
+}
+
+const DataList &PluginSession::getInfo() const
+{
+ return _info;
+}
+
+void PluginSession::registerParam(const PluginParam ¶m)
+{
+ _supported_params_map.emplace(param.getName(), param);
+}
+
+const std::map<std::string, PluginParam> &PluginSession::getSupportedParams() const { return _supported_params_map; }
+
+std::ostream &operator<<(std::ostream &os, const PluginSession &session)
+{
+ os << session.getInfo();
+ os << "supported params:" << std::endl;
+ for (auto &el : session.getSupportedParams())
+ {
+ os << el.second << std::endl;
+ }
+ return os;
+}
+
+} // namespace config
+} // namespace core
+} // namespace nncc