blob: 4555e659b2941330e900eef2a26ecdc12b2eed76 [file] [log] [blame]
Marri Devender Rao70aafbb2018-04-12 01:11:48 -05001#pragma once
2#include "callback.hpp"
3
4namespace phosphor
5{
6namespace dbus
7{
8namespace monitoring
9{
10/** @class Trap
11 * @brief Raises SNMP trap
12 */
13class Trap
14{
15 public:
16 Trap() = default;
17 Trap(const Trap&) = delete;
18 Trap(Trap&&) = default;
19 Trap& operator=(const Trap&) = delete;
20 Trap& operator=(Trap&&) = default;
21 virtual ~Trap() = default;
22 /** @brief Raise SNMP trap by parsing the sdbus message.
23 * @param[in] msg - sdbus message.
24 */
25 virtual void trap(sdbusplus::message::message& msg) const = 0;
26};
27
28/** @class ErrorTrap
29 * @brief Sends SNMP trap for the elog error
30 */
31class ErrorTrap : public Trap
32{
33 public:
34 ErrorTrap() = default;
35 ErrorTrap(const ErrorTrap&) = delete;
36 ErrorTrap(ErrorTrap&&) = default;
37 ErrorTrap& operator=(const ErrorTrap&) = delete;
38 ErrorTrap& operator=(ErrorTrap&&) = default;
39 ~ErrorTrap() = default;
40
41 /** @brief Raise SNMP trap by parsing the sdbus message.
42 * @param[in] msg - sdbus message.
43 */
44 void trap(sdbusplus::message::message& msg) const override;
45};
46
47/** @class SNMPTrap
48 * @brief SNMP trap callback implementation.
49 */
Patrick Venture3d6d3182018-08-31 09:33:09 -070050template <typename T>
51class SNMPTrap : public Callback
Marri Devender Rao70aafbb2018-04-12 01:11:48 -050052{
53 public:
54 SNMPTrap(const SNMPTrap&) = delete;
55 SNMPTrap(SNMPTrap&&) = default;
56 SNMPTrap& operator=(const SNMPTrap&) = delete;
57 SNMPTrap& operator=(SNMPTrap&&) = default;
58 virtual ~SNMPTrap() = default;
59 SNMPTrap() : Callback()
60 {
61 }
62
63 /** @brief Callback interface implementation.
64 * @param[in] ctc - context.
65 */
66 void operator()(Context ctx)
67 {
68 }
69
70 /** @brief Callback interface implementation.
71 * @param[in] ctc - context.
72 * @param[in] msg - sdbus message.
73 */
74 void operator()(Context ctx, sdbusplus::message::message& msg)
75 {
76 event.trap(msg);
77 }
78
79 private:
80 T event;
81};
82
83} // namespace monitoring
84} // namespace dbus
85} // namespace phosphor