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         return;
50     }
51 
52     if (header().version != userHeaderVersion)
53     {
54         log<level::ERR>("Invalid user header version",
55                         entry("VERSION=0x%X", header().version));
56         failed = true;
57         return;
58     }
59 
60     _valid = (failed) ? false : true;
61 }
62 
63 } // namespace pels
64 } // namespace openpower
65