summaryrefslogtreecommitdiff
path: root/plainPacket.cpp
diff options
context:
space:
mode:
authorChristian Pointner <equinox@anytun.org>2008-02-23 23:05:43 +0000
committerChristian Pointner <equinox@anytun.org>2008-02-23 23:05:43 +0000
commitb8766a2041d57a3aa49c3855902953f8de0b0ec1 (patch)
treece3fd0496bbcc9c71b8a16ec1333f574e3fe51a5 /plainPacket.cpp
parentadded routing table basic structure (diff)
- keyderivation and cipher should work now
however it needs further testing - rewrite of Buffer and Packets
Diffstat (limited to 'plainPacket.cpp')
-rw-r--r--plainPacket.cpp54
1 files changed, 15 insertions, 39 deletions
diff --git a/plainPacket.cpp b/plainPacket.cpp
index 3ce1521..0906fa2 100644
--- a/plainPacket.cpp
+++ b/plainPacket.cpp
@@ -33,43 +33,14 @@
#include <arpa/inet.h>
#include "datatypes.h"
-
#include "plainPacket.h"
-
-PlainPacket::~PlainPacket()
-{
- buf_=complete_payload_;
- length_=max_length_;
-}
-
-PlainPacket::PlainPacket(u_int32_t max_payload_length) : Buffer(max_payload_length + sizeof(payload_type_t))
+PlainPacket::PlainPacket(u_int32_t payload_length, bool allow_realloc) : Buffer(payload_length + sizeof(payload_type_t), allow_realloc)
{
- payload_type_ = NULL;
- splitPayload();
-}
-
-void PlainPacket::splitPayload()
-{
- complete_payload_length_ = length_;
- complete_payload_ = buf_;
-
payload_type_ = reinterpret_cast<payload_type_t*>(buf_);
- buf_ += sizeof(payload_type_t);
- length_ -= sizeof(payload_type_t);
- max_length_ = length_;
-}
-
-void PlainPacket::setCompletePayloadLength(u_int32_t payload_length)
-{
- complete_payload_length_ = payload_length;
- length_=complete_payload_length_-sizeof(payload_type_t);
-}
-
-u_int32_t PlainPacket::getCompletePayloadLength()
-{
- return complete_payload_length_;
+ payload_ = buf_ + sizeof(payload_type_t);
+ *payload_type_ = 0;
}
payload_type_t PlainPacket::getPayloadType() const
@@ -83,16 +54,21 @@ void PlainPacket::setPayloadType(payload_type_t payload_type)
*payload_type_ = PAYLOAD_TYPE_T_HTON(payload_type);
}
-void PlainPacket::setLength(u_int32_t length)
+u_int32_t PlainPacket::getPayloadLength() const
+{
+ return (length_ > sizeof(payload_type_t)) ? (length_ - sizeof(payload_type_t)) : 0;
+}
+
+void PlainPacket::setPayloadLength(u_int32_t payload_length)
{
- if(length > max_length_)
- throw std::out_of_range("can't set length greater then size ofsize of allocated memory");
+ Buffer::setLength(payload_length + sizeof(payload_type_t));
- length_ = length;
- complete_payload_length_ = length_ + sizeof(payload_type_t);
+ // depending on allow_realloc buf_ may point to another address
+ payload_type_ = reinterpret_cast<payload_type_t*>(buf_);
+ payload_ = buf_ + sizeof(payload_type_t);
}
-u_int32_t PlainPacket::getMaxLength() const
+u_int8_t* PlainPacket::getPayload()
{
- return max_length_;
+ return payload_;
}