1 #pragma once
2 #include "callback.hpp"
3 
4 namespace phosphor
5 {
6 namespace dbus
7 {
8 namespace monitoring
9 {
10 /** @class Trap
11  *  @brief Raises SNMP trap
12  */
13 class 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_t& msg) const = 0;
26 };
27 
28 /** @class ErrorTrap
29  *  @brief Sends SNMP trap for the elog error
30  */
31 class 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_t& msg) const override;
45 };
46 
47 /** @class SNMPTrap
48  *  @brief SNMP trap callback implementation.
49  */
50 template <typename T>
51 class SNMPTrap : public Callback
52 {
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;
SNMPTrap()59     SNMPTrap() : Callback() {}
60 
61     /** @brief Callback interface implementation.
62      *  @param[in] ctc - context.
63      */
operator ()(Context)64     void operator()(Context /* ctx */) override {}
65 
66     /** @brief Callback interface implementation.
67      *  @param[in] ctc - context.
68      *  @param[in] msg - sdbus message.
69      */
operator ()(Context,sdbusplus::message_t & msg)70     void operator()(Context /* ctx */, sdbusplus::message_t& msg) override
71     {
72         event.trap(msg);
73     }
74 
75   private:
76     T event;
77 };
78 
79 } // namespace monitoring
80 } // namespace dbus
81 } // namespace phosphor
82