HDLC-Daemon
HdlcFrame.cpp
Go to the documentation of this file.
1 
37 #include "HdlcFrame.h"
38 #include <sstream>
39 #include <iomanip>
40 
41 const std::vector<unsigned char> HdlcFrame::Dissect() const {
42  bool l_bHasPayload = false;
43  std::stringstream l_Output;
44  if (IsIFrame()) {
45  l_bHasPayload = true;
46  l_Output << "HDLC frame, Addr=0x" << std::hex << (int)GetAddress() << std::dec << ", ";
47  l_Output << "I-Frame, PF=" << IsPF() << ", SSeq=" << (int)GetSSeq() << ", RSeq=" << (int)GetRSeq();
48  } else if (IsSFrame()) {
49  l_Output << "HDLC frame, Addr=0x" << std::hex << (int)GetAddress() << std::dec << ", S-Frame: ";
50  switch (GetHDLCFrameType()) {
52  l_Output << "RR";
53  break;
54  }
56  l_Output << "RNR";
57  break;
58  }
60  l_Output << "REJ";
61  break;
62  }
64  l_Output << "SREJ";
65  break;
66  }
67  default: {
68  break;
69  }
70  } // switch
71 
72  l_Output << ", PF=" << IsPF() << ", RSeq=" << (int)GetRSeq();
73  } else if (IsUFrame()) {
74  l_Output << "HDLC frame, Addr=0x" << std::hex << (int)GetAddress() << std::dec << ", U-Frame: ";
75  switch (GetHDLCFrameType()) {
77  l_bHasPayload = true;
78  l_Output << "UI";
79  break;
80  }
82  l_Output << "SIM";
83  break;
84  }
86  l_Output << "SARM";
87  break;
88  }
90  l_Output << "UP";
91  break;
92  }
94  l_Output << "SABM";
95  break;
96  }
98  l_Output << "DISC";
99  break;
100  }
102  l_Output << "UA";
103  break;
104  }
106  l_Output << "SNRM";
107  break;
108  }
110  l_bHasPayload = true;
111  l_Output << "FRMR/CMDR";
112  break;
113  }
115  l_bHasPayload = true;
116  l_Output << "TEST";
117  break;
118  }
120  l_bHasPayload = true;
121  l_Output << "XID";
122  break;
123  }
124  default: {
125  break;
126  }
127  } // switch
128 
129  l_Output << ", PF=" << IsPF();
130  } else {
131  l_Output << "Unparseable HDLC frame";
132  } // else
133 
134  if (l_bHasPayload) {
135  l_Output << ", with " << m_Payload.size() << " bytes payload:";
136  for (auto it = m_Payload.begin(); it != m_Payload.end(); ++it) {
137  l_Output << " " << std::hex << std::setw(2) << std::setfill('0') << int(*it);
138  } // for
139  } // if
140 
141  std::vector<unsigned char> l_DissectedFrame;
142  std::string l_String(l_Output.str());
143  l_DissectedFrame.insert(l_DissectedFrame.begin(), l_String.data(), (l_String.data() + l_String.size()));
144  return l_DissectedFrame;
145 }
const std::vector< unsigned char > Dissect() const
Definition: HdlcFrame.cpp:41
E_HDLC_FRAMETYPE GetHDLCFrameType() const
Definition: HdlcFrame.h:70
Copyright (c) 2016, Florian Evers, florian-evers@gmx.de All rights reserved.
unsigned char GetSSeq() const
Definition: HdlcFrame.h:83
unsigned char GetRSeq() const
Definition: HdlcFrame.h:80
bool IsIFrame() const
Definition: HdlcFrame.h:72
bool IsSFrame() const
Definition: HdlcFrame.h:73
unsigned char GetAddress() const
Definition: HdlcFrame.h:48
bool IsUFrame() const
Definition: HdlcFrame.h:74
bool IsPF() const
Definition: HdlcFrame.h:77