1 #include "user_header.hpp"
2 
3 #include <phosphor-logging/log.hpp>
4 
5 namespace openpower
6 {
7 namespace pels
8 {
9 
10 using namespace phosphor::logging;
11 
12 void UserHeader::unflatten(Stream& stream)
13 {
14     stream >> _header >> _eventSubsystem >> _eventScope >> _eventSeverity >>
15         _eventType >> _reserved4Byte1 >> _problemDomain >> _problemVector >>
16         _actionFlags >> _reserved4Byte2;
17 }
18 
19 void UserHeader::flatten(Stream& stream)
20 {
21     stream << _header << _eventSubsystem << _eventScope << _eventSeverity
22            << _eventType << _reserved4Byte1 << _problemDomain << _problemVector
23            << _actionFlags << _reserved4Byte2;
24 }
25 
26 UserHeader::UserHeader(Stream& pel)
27 {
28     try
29     {
30         unflatten(pel);
31         validate();
32     }
33     catch (const std::exception& e)
34     {
35         log<level::ERR>("Cannot unflatten user header",
36                         entry("ERROR=%s", e.what()));
37         _valid = false;
38     }
39 }
40 
41 void UserHeader::validate()
42 {
43     bool failed = false;
44     if (header().id != userHeaderSectionID)
45     {
46         log<level::ERR>("Invalid user header section ID",
47                         entry("ID=0x%X", header().id));
48         failed = true;
49     }
50 
51     if (header().version != userHeaderVersion)
52     {
53         log<level::ERR>("Invalid user header version",
54                         entry("VERSION=0x%X", header().version));
55         failed = true;
56     }
57 
58     _valid = (failed) ? false : true;
59 }
60 
61 } // namespace pels
62 } // namespace openpower
63