PcapPlusPlus
RadiusLayer.h
Go to the documentation of this file.
1 #ifndef PACKETPP_RADIUS_LAYER
2 #define PACKETPP_RADIUS_LAYER
3 
4 #include "Layer.h"
5 #include "TLVData.h"
6 
8 
13 namespace pcpp
14 {
15 
20 #pragma pack(push, 1)
22  {
24  uint8_t code;
26  uint8_t id;
28  uint16_t length;
30  uint8_t authenticator[16];
31  };
32 #pragma pack(pop)
33 
34 
40  class RadiusAttribute : public TLVRecord
41  {
42  public:
43 
48  RadiusAttribute(uint8_t* attrRawData) : TLVRecord(attrRawData) { }
49 
53  virtual ~RadiusAttribute() { }
54 
55  // implement abstract methods
56 
57  size_t getTotalSize() const
58  {
59  return (size_t)m_Data->recordLen;
60  }
61 
62  size_t getDataSize()
63  {
64  return (size_t)m_Data->recordLen - 2*sizeof(uint8_t);
65  }
66  };
67 
68 
75  {
76  public:
77 
85  RadiusAttributeBuilder(uint8_t attrType, const uint8_t* attrValue, uint8_t attrValueLen) :
86  TLVRecordBuilder(attrType, attrValue, attrValueLen) { }
87 
94  RadiusAttributeBuilder(uint8_t attrType, uint8_t attrValue) :
95  TLVRecordBuilder(attrType, attrValue) { }
96 
103  RadiusAttributeBuilder(uint8_t attrType, uint16_t attrValue) :
104  TLVRecordBuilder(attrType, attrValue) { }
105 
112  RadiusAttributeBuilder(uint8_t attrType, uint32_t attrValue) :
113  TLVRecordBuilder(attrType, attrValue) { }
114 
121  RadiusAttributeBuilder(uint8_t attrType, const IPv4Address& attrValue) :
122  TLVRecordBuilder(attrType, attrValue) { }
123 
130  RadiusAttributeBuilder(uint8_t attrType, const std::string& attrValue) :
131  TLVRecordBuilder(attrType, attrValue) { }
132 
138  TLVRecordBuilder(other) { }
139 
144  RadiusAttribute build() const;
145  };
146 
147 
152  class RadiusLayer : public Layer
153  {
154  private:
155 
156  TLVRecordReader<RadiusAttribute> m_AttributeReader;
157 
158  inline uint8_t* getAttributesBasePtr() { return m_Data + sizeof(radius_header); }
159 
160  RadiusAttribute addAttrAt(const RadiusAttributeBuilder& attrBuilder, int offset);
161 
162  public:
163 
171  RadiusLayer(uint8_t* data, size_t dataLen, Layer* prevLayer, Packet* packet) :
172  Layer(data, dataLen, prevLayer, packet)
173  { m_Protocol = Radius; }
174 
184  RadiusLayer(uint8_t code, uint8_t id, const uint8_t* authenticator, uint8_t authenticatorArrSize);
185 
195  RadiusLayer(uint8_t code, uint8_t id, const std::string authenticator);
196 
201 
206  inline radius_header* getRadiusHeader() { return (radius_header*)m_Data; }
207 
211  std::string getAuthenticatorValue();
212 
217  void setAuthenticatorValue(const std::string& authValue);
218 
225  static std::string getRadiusMessageString(uint8_t radiusMessageCode);
226 
232 
241 
248  RadiusAttribute getAttribute(uint8_t attrType);
249 
253  size_t getAttributeCount();
254 
262 
270  RadiusAttribute addAttributeAfter(const RadiusAttributeBuilder& attrBuilder, uint8_t prevAttrType);
271 
277  bool removeAttribute(uint8_t attrType);
278 
283  bool removeAllAttributes();
284 
285 
286  // implement abstract methods
287 
291  size_t getHeaderLen();
292 
296  void parseNextLayer() {}
297 
301  void computeCalculateFields();
302 
303  std::string toString();
304 
306 
307  };
308 }
309 
310 #endif // PACKETPP_RADIUS_LAYER
uint8_t code
Definition: RadiusLayer.h:24
uint8_t recordLen
Definition: TLVData.h:33
radius_header * getRadiusHeader()
Definition: RadiusLayer.h:206
virtual ~RadiusAttribute()
Definition: RadiusLayer.h:53
RadiusAttributeBuilder(uint8_t attrType, const std::string &attrValue)
Definition: RadiusLayer.h:130
RadiusAttribute addAttribute(const RadiusAttributeBuilder &attrBuilder)
Definition: ProtocolType.h:224
RadiusAttributeBuilder(uint8_t attrType, uint16_t attrValue)
Definition: RadiusLayer.h:103
RadiusAttributeBuilder(const RadiusAttributeBuilder &other)
Definition: RadiusLayer.h:137
Definition: TLVData.h:333
Definition: TLVData.h:23
uint8_t id
Definition: RadiusLayer.h:26
size_t getDataSize()
Definition: RadiusLayer.h:62
size_t getTotalSize() const
Definition: RadiusLayer.h:57
std::string toString()
Definition: IpAddress.h:113
RadiusAttribute build() const
RadiusAttribute getNextAttribute(RadiusAttribute &attr)
RadiusAttributeBuilder(uint8_t attrType, uint8_t attrValue)
Definition: RadiusLayer.h:94
static std::string getRadiusMessageString(uint8_t radiusMessageCode)
RadiusAttributeBuilder(uint8_t attrType, uint32_t attrValue)
Definition: RadiusLayer.h:112
bool removeAttribute(uint8_t attrType)
void computeCalculateFields()
RadiusAttribute getAttribute(uint8_t attrType)
Definition: Layer.h:70
RadiusAttribute(uint8_t *attrRawData)
Definition: RadiusLayer.h:48
Definition: Packet.h:26
Definition: TLVData.h:189
Definition: RadiusLayer.h:40
OsiModelLayer
Definition: ProtocolType.h:213
size_t getHeaderLen()
uint16_t length
Definition: RadiusLayer.h:28
RadiusAttribute addAttributeAfter(const RadiusAttributeBuilder &attrBuilder, uint8_t prevAttrType)
std::string getAuthenticatorValue()
RadiusAttributeBuilder(uint8_t attrType, const IPv4Address &attrValue)
Definition: RadiusLayer.h:121
~RadiusLayer()
Definition: RadiusLayer.h:200
size_t getAttributeCount()
Definition: RadiusLayer.h:152
RadiusAttributeBuilder(uint8_t attrType, const uint8_t *attrValue, uint8_t attrValueLen)
Definition: RadiusLayer.h:85
Definition: RadiusLayer.h:21
uint8_t authenticator[16]
Definition: RadiusLayer.h:30
Definition: ProtocolType.h:206
OsiModelLayer getOsiModelLayer()
Definition: RadiusLayer.h:305
RadiusLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: RadiusLayer.h:171
Definition: RadiusLayer.h:74
RadiusAttribute getFirstAttribute()
void setAuthenticatorValue(const std::string &authValue)
bool removeAllAttributes()
The main namespace for the PcapPlusPlus lib.
void parseNextLayer()
Definition: RadiusLayer.h:296