diff options
author | Christian Pointner <equinox@anytun.org> | 2007-06-18 20:27:25 +0000 |
---|---|---|
committer | Christian Pointner <equinox@anytun.org> | 2007-06-18 20:27:25 +0000 |
commit | 5387db5e548f4c539f74476717ecba0ff05476cd (patch) | |
tree | ecfeb43b0d3e7ad57b5cd18640f31bcd5a51afe4 | |
parent | added header functions to package (diff) |
package with all member functions (not working yet)
-rw-r--r-- | anytun.cpp | 140 | ||||
-rw-r--r-- | package.cpp | 108 | ||||
-rw-r--r-- | package.h | 1 |
3 files changed, 228 insertions, 21 deletions
@@ -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<pack.getLength(); ++i) - std::cout << (int)pack[i] << ","; - std::cout << std::endl; - std::cout << "pack: hdr=" << pack.hasHeader() << " seq_nr=" << pack.getSeqNr() << " sender_id=" << pack.getSenderId() << std::endl; - pack.setSeqNr(0x55AA55AA).setSenderId(0xBB11); +// std::cout << "pack[0-" << pack.getLength() << "]: '"; +// for(unsigned int i=0; i<pack.getLength(); ++i) +// std::cout << (int)pack[i] << ","; +// std::cout << std::endl; +// std::cout << "pack: hdr=" << pack.hasHeader() << " seq_nr=" << pack.getSeqNr() << " sender_id=" << pack.getSenderId() << std::endl; - std::cout << "pack[0-" << pack.getLength() << "]: '"; - for(unsigned int i=0; i<pack.getLength(); ++i) - std::cout << (int)pack[i] << ","; - std::cout << std::endl; - std::cout << "pack: hdr=" << pack.hasHeader() << " seq_nr=" << pack.getSeqNr() << " sender_id=" << pack.getSenderId() << std::endl; +// pack.setSeqNr(0x55AA55AA).setSenderId(0xBB11); + +// std::cout << "pack[0-" << pack.getLength() << "]: '"; +// for(unsigned int i=0; i<pack.getLength(); ++i) +// std::cout << (int)pack[i] << ","; +// std::cout << std::endl; +// std::cout << "pack: hdr=" << pack.hasHeader() << " seq_nr=" << pack.getSeqNr() << " sender_id=" << pack.getSenderId() << std::endl; - pack.addHeader(0x12345678, 0x9ABC); +// pack.addHeader(0x12345678, 0x9ABC); - std::cout << "pack[0-" << pack.getLength() << "]: '"; - for(unsigned int i=0; i<pack.getLength(); ++i) - std::cout << (int)pack[i] << ","; - std::cout << std::endl; - std::cout << "pack: hdr=" << pack.hasHeader() << " seq_nr=" << pack.getSeqNr() << " sender_id=" << pack.getSenderId() << std::endl; +// std::cout << "pack[0-" << pack.getLength() << "]: '"; +// for(unsigned int i=0; i<pack.getLength(); ++i) +// std::cout << (int)pack[i] << ","; +// std::cout << std::endl; +// std::cout << "pack: hdr=" << pack.hasHeader() << " seq_nr=" << pack.getSeqNr() << " sender_id=" << pack.getSenderId() << std::endl; + +// pack.removeHeader(); + +// std::cout << "pack[0-" << pack.getLength() << "]: '"; +// for(unsigned int i=0; i<pack.getLength(); ++i) +// std::cout << (int)pack[i] << ","; +// std::cout << std::endl; +// std::cout << "pack: hdr=" << pack.hasHeader() << " seq_nr=" << pack.getSeqNr() << " sender_id=" << pack.getSenderId() << std::endl; - pack.removeHeader(); +// pack.withHeader(true); + +// std::cout << "pack[0-" << pack.getLength() << "]: '"; +// for(unsigned int i=0; i<pack.getLength(); ++i) +// std::cout << (int)pack[i] << ","; +// std::cout << std::endl; +// std::cout << "pack: hdr=" << pack.hasHeader() << " seq_nr=" << pack.getSeqNr() << " sender_id=" << pack.getSenderId() << std::endl; + +// pack.withHeader(false); + +// std::cout << "pack[0-" << pack.getLength() << "]: '"; +// for(unsigned int i=0; i<pack.getLength(); ++i) +// std::cout << (int)pack[i] << ","; +// std::cout << std::endl; +// std::cout << "pack: hdr=" << pack.hasPayloadType() << " payload_type=" << pack.getPayloadType() << std::endl; + +// pack.addPayloadType(0xCCFF); + +// std::cout << "pack[0-" << pack.getLength() << "]: '"; +// for(unsigned int i=0; i<pack.getLength(); ++i) +// std::cout << (int)pack[i] << ","; +// std::cout << std::endl; +// std::cout << "pack: payt=" << pack.hasPayloadType() << " payload_type=" << pack.getPayloadType() << std::endl; + +// pack.addPayloadType(0xEEBB); + +// std::cout << "pack[0-" << pack.getLength() << "]: '"; +// for(unsigned int i=0; i<pack.getLength(); ++i) +// std::cout << (int)pack[i] << ","; +// std::cout << std::endl; +// std::cout << "pack: payt=" << pack.hasPayloadType() << " payload_type=" << pack.getPayloadType() << std::endl; + +// pack.removePayloadType(); + +// std::cout << "pack[0-" << pack.getLength() << "]: '"; +// for(unsigned int i=0; i<pack.getLength(); ++i) +// std::cout << (int)pack[i] << ","; +// std::cout << std::endl; +// std::cout << "pack: payt=" << pack.hasPayloadType() << " payload_type=" << pack.getPayloadType() << std::endl; + +// pack.withPayloadType(true); + +// std::cout << "pack[0-" << pack.getLength() << "]: '"; +// for(unsigned int i=0; i<pack.getLength(); ++i) +// std::cout << (int)pack[i] << ","; +// std::cout << std::endl; +// std::cout << "pack: payt=" << pack.hasPayloadType() << " payload_type=" << pack.getPayloadType() << std::endl; + +// pack.withPayloadType(false); + +// std::cout << "pack[0-" << pack.getLength() << "]: '"; +// for(unsigned int i=0; i<pack.getLength(); ++i) +// std::cout << (int)pack[i] << ","; +// std::cout << std::endl; +// std::cout << "pack: payt=" << pack.hasPayloadType() << " payload_type=" << pack.getPayloadType() << std::endl; + +// pack.addAuthTag(0xCCDDEEFF); + +// std::cout << "pack[0-" << pack.getLength() << "]: '"; +// for(unsigned int i=0; i<pack.getLength(); ++i) +// std::cout << (int)pack[i] << ","; +// std::cout << std::endl; +// std::cout << "pack: autht=" << pack.hasAuthTag() << " auth_tag=" << pack.getAuthTag() << std::endl; + +// pack.removeAuthTag(); + +// std::cout << "pack[0-" << pack.getLength() << "]: '"; +// for(unsigned int i=0; i<pack.getLength(); ++i) +// std::cout << (int)pack[i] << ","; +// std::cout << std::endl; +// std::cout << "pack: autht=" << pack.hasAuthTag() << " auth_tag=" << pack.getAuthTag() << std::endl; + +// pack.withAuthTag(true); + +// std::cout << "pack[0-" << pack.getLength() << "]: '"; +// for(unsigned int i=0; i<pack.getLength(); ++i) +// std::cout << (int)pack[i] << ","; +// std::cout << std::endl; +// std::cout << "pack: autht=" << pack.hasAuthTag() << " auth_tag=" << pack.getAuthTag() << std::endl; + +// pack.withAuthTag(false); + +// std::cout << "pack[0-" << pack.getLength() << "]: '"; +// for(unsigned int i=0; i<pack.getLength(); ++i) +// std::cout << (int)pack[i] << ","; +// std::cout << std::endl; +// std::cout << "pack: autht=" << pack.hasAuthTag() << " auth_tag=" << pack.getAuthTag() << std::endl; + + std::cout << std::endl << std::endl; + + pack.addHeader(0x56789ABC,0xDEF0); std::cout << "pack[0-" << pack.getLength() << "]: '"; for(unsigned int i=0; i<pack.getLength(); ++i) std::cout << (int)pack[i] << ","; std::cout << std::endl; - std::cout << "pack: hdr=" << pack.hasHeader() << " seq_nr=" << pack.getSeqNr() << " sender_id=" << pack.getSenderId() << std::endl; - + std::cout << "pack: hdr=" << pack.hasHeader() << " payt=" << pack.hasPayloadType() << " autht=" << pack.hasAuthTag() << std::endl; + std::cout << "seq_nr=" << pack.getSeqNr() << " sender_id=" << pack.getSenderId() << " payload_type=" << pack.getPayloadType() + << " auth_tag=" << pack.getAuthTag() << std::endl; std::cout << std::dec; diff --git a/package.cpp b/package.cpp index e41c7a0..fe042d1 100644 --- a/package.cpp +++ b/package.cpp @@ -28,6 +28,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include <stdexcept> #include <arpa/inet.h> #include "datatypes.h" @@ -128,3 +129,110 @@ Package& Package::setSenderId(sender_id_t sender_id) return *this; } + +bool Package::hasPayloadType() const +{ + return payload_type_; +} + +Package& Package::withPayloadType(bool b) +{ + if(auth_tag_) + throw std::runtime_error("can't change payload_type state with existing auth_tag"); + + if(b && length_ >= sizeof(payload_type_t)) + payload_type_ = reinterpret_cast<payload_type_t*>(&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<payload_type_t*>(&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<auth_tag_t*>(&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<auth_tag_t*>(&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; +} @@ -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; |