From 5387db5e548f4c539f74476717ecba0ff05476cd Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Mon, 18 Jun 2007 20:27:25 +0000 Subject: package with all member functions (not working yet) --- anytun.cpp | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++--------- package.cpp | 108 ++++++++++++++++++++++++++++++++++++++++++++++ package.h | 1 - 3 files changed, 228 insertions(+), 21 deletions(-) diff --git a/anytun.cpp b/anytun.cpp index 4b11231..8213df3 100644 --- a/anytun.cpp +++ b/anytun.cpp @@ -49,36 +49,136 @@ int main(int argc, char* argv[]) Package pack(test); std::cout << std::hex; - std::cout << "pack[0-" << pack.getLength() << "]: '"; - for(unsigned int i=0; i= sizeof(payload_type_t)) + payload_type_ = reinterpret_cast(&buf_[length_ - sizeof(payload_type_t)]); + else + payload_type_ = 0; + + return *this; +} + +payload_type_t Package::getPayloadType() const +{ + if(!payload_type_) + return 0; + + return PAYLOAD_TYPE_T_NTOH(*payload_type_); +} + +Package& Package::addPayloadType(payload_type_t payload_type) +{ + if(auth_tag_) + throw std::runtime_error("can't add payload_type with existing auth_tag"); + + if(!payload_type_) + { + if(sizeof(payload_type_t) > resizeBack(length_ + sizeof(payload_type_t))) + return *this; + + payload_type_ = reinterpret_cast(&buf_[length_ - sizeof(payload_type_t)]); + } + *payload_type_ = PAYLOAD_TYPE_T_HTON(payload_type); + return *this; +} + +Package& Package::removePayloadType() +{ + if(auth_tag_) + throw std::runtime_error("can't remove payload_type with existing auth_tag"); + + if(!payload_type_) + return *this; + + if(length_ >= sizeof(payload_type_t)) + resizeBack(length_ - sizeof(payload_type_t)); + + payload_type_ = 0; + + return *this; +} + +bool Package::hasAuthTag() const +{ + return auth_tag_; +} + +Package& Package::withAuthTag(bool b) +{ + if(b && length_ >= sizeof(auth_tag_t)) + auth_tag_ = reinterpret_cast(&buf_[length_ - sizeof(auth_tag_t)]); + else + auth_tag_ = 0; + + return *this; +} + +auth_tag_t Package::getAuthTag() const +{ + if(!auth_tag_) + return 0; + + return AUTH_TAG_T_NTOH(*auth_tag_); +} + +Package& Package::addAuthTag(auth_tag_t auth_tag) +{ + if(!auth_tag_) + { + if(sizeof(auth_tag_t) > resizeBack(length_ + sizeof(auth_tag_t))) + return *this; + + auth_tag_ = reinterpret_cast(&buf_[length_ - sizeof(auth_tag_t)]); + } + *auth_tag_ = AUTH_TAG_T_HTON(auth_tag); + return *this; +} + +Package& Package::removeAuthTag() +{ + if(!auth_tag_) + return *this; + + if(length_ >= sizeof(auth_tag_t)) + resizeBack(length_ - sizeof(auth_tag_t)); + + auth_tag_ = 0; + + return *this; +} diff --git a/package.h b/package.h index 2a28f2c..a5f7a84 100644 --- a/package.h +++ b/package.h @@ -50,7 +50,6 @@ public: Package& setSeqNr(seq_nr_t seq_nr); Package& setSenderId(sender_id_t sender_id); - bool hasPayloadType() const; Package& withPayloadType(bool b); payload_type_t getPayloadType() const; -- cgit v1.2.3