From 30dbbc65bd3684b9cefa000069b611a608f4be3e Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Mon, 3 Mar 2008 17:59:57 +0000 Subject: some bugfixes added support for authentication --- plainPacket.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'plainPacket.cpp') diff --git a/plainPacket.cpp b/plainPacket.cpp index f9c43ae..c1fd99a 100644 --- a/plainPacket.cpp +++ b/plainPacket.cpp @@ -61,6 +61,9 @@ void PlainPacket::setPayloadType(payload_type_t payload_type) u_int32_t PlainPacket::getPayloadLength() const { + if(!payload_) + return 0; + return (length_ > sizeof(payload_type_t)) ? (length_ - sizeof(payload_type_t)) : 0; } @@ -73,9 +76,17 @@ void PlainPacket::setPayloadLength(u_int32_t payload_length) void PlainPacket::reinit() { - Buffer::reinit(); payload_type_ = reinterpret_cast(buf_); payload_ = buf_ + sizeof(payload_type_t); + + if(length_ <= (sizeof(payload_type_t))) + payload_ = NULL; + + if(length_ < (sizeof(payload_type_t))) { + payload_type_ = NULL; + throw std::runtime_error("packet can't be initialized, buffer is too small"); + } + } u_int8_t* PlainPacket::getPayload() @@ -83,7 +94,6 @@ u_int8_t* PlainPacket::getPayload() return payload_; } - NetworkAddress PlainPacket::getSrcAddr() const { if(!payload_type_ || !payload_) @@ -108,12 +118,11 @@ NetworkAddress PlainPacket::getSrcAddr() const if(length_ < (sizeof(payload_type_t)+sizeof(struct ip6_hdr))) return NetworkAddress(); struct ip6_hdr* hdr = reinterpret_cast(payload_); - return NetworkAddress(hdr->ip6_dst); + return NetworkAddress(hdr->ip6_src); } return NetworkAddress(); } - NetworkAddress PlainPacket::getDstAddr() const { if(!payload_type_ || !payload_) -- cgit v1.2.3