summaryrefslogtreecommitdiff
path: root/buffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'buffer.cpp')
-rw-r--r--buffer.cpp257
1 files changed, 0 insertions, 257 deletions
diff --git a/buffer.cpp b/buffer.cpp
deleted file mode 100644
index 250a806..0000000
--- a/buffer.cpp
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * anytun
- *
- * The secure anycast tunneling protocol (satp) defines a protocol used
- * for communication between any combination of unicast and anycast
- * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel
- * mode and allows tunneling of every ETHER TYPE protocol (e.g.
- * ethernet, ip, arp ...). satp directly includes cryptography and
- * message authentication based on the methodes used by SRTP. It is
- * intended to deliver a generic, scaleable and secure solution for
- * tunneling and relaying of packets of any protocol.
- *
- *
- * Copyright (C) 2007 anytun.org <satp@wirdorange.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program (see the file COPYING included with this
- * distribution); if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include <stdexcept>
-#include <string>
-#include <sstream>
-#include <iostream>
-#include <boost/archive/text_oarchive.hpp>
-#include <boost/archive/text_iarchive.hpp>
-#include "datatypes.h"
-#include "buffer.h"
-
-Buffer::Buffer(bool allow_realloc) : buf_(0), length_(0), real_length_(0), allow_realloc_(allow_realloc)
-{
-}
-
-Buffer::Buffer(u_int32_t length, bool allow_realloc) : length_(length), real_length_(length_ + Buffer::OVER_SIZE_),
- allow_realloc_(allow_realloc)
-{
- buf_ = new u_int8_t[real_length_];
- if(!buf_) {
- length_ = 0;
- real_length_ = 0;
- throw std::bad_alloc();
- }
- std::memset(buf_, 0, real_length_);
-}
-
-Buffer::Buffer(u_int8_t* data, u_int32_t length, bool allow_realloc) : length_(length), real_length_(length + Buffer::OVER_SIZE_),
- allow_realloc_(allow_realloc)
-{
- if(!data) {
- length_ = 0;
- real_length_ = 0;
- return;
- }
-
- buf_ = new u_int8_t[real_length_];
- if(!buf_) {
- length_ = 0;
- real_length_ = 0;
- throw std::bad_alloc();
- }
- std::memcpy(buf_, data, length_);
-}
-
-Buffer::Buffer(std::string hex_data, bool allow_realloc) : length_(hex_data.size()/2),
- real_length_(length_ + Buffer::OVER_SIZE_),
- allow_realloc_(allow_realloc)
-{
- buf_ = new u_int8_t[real_length_];
- if(!buf_) {
- length_ = 0;
- real_length_ = 0;
- throw std::bad_alloc();
- }
-
- for(u_int32_t i=0; i<length_; ++i)
- {
- u_int32_t tmp;
- std::istringstream ss(std::string(hex_data.c_str(), i*2, 2));
- if(!(ss >> std::hex >> tmp)) tmp = 0;
- buf_[i] = tmp;
- }
-}
-
-Buffer::~Buffer()
-{
- if(buf_)
- delete[] buf_;
-}
-
-Buffer::Buffer(const Buffer &src) : length_(src.length_), real_length_(src.real_length_), allow_realloc_(src.allow_realloc_)
-{
- buf_ = new u_int8_t[real_length_];
- if(!buf_) {
- length_ = 0;
- real_length_ = 0;
- throw std::bad_alloc();
- }
- std::memcpy(buf_, src.buf_, length_);
-}
-
-void Buffer::operator=(const Buffer &src)
-{
- if(buf_)
- delete[] buf_;
-
- length_ = src.length_;
- real_length_ = src.real_length_;
- allow_realloc_ = src.allow_realloc_;
-
- buf_ = new u_int8_t[real_length_];
- if(!buf_) {
- length_ = 0;
- real_length_ = 0;
- throw std::bad_alloc();
- }
- std::memcpy(buf_, src.buf_, length_);
-}
-
-
-
-bool Buffer::operator==(const Buffer &cmp) const
-{
- if(length_ != cmp.length_)
- return false;
-
- if(!std::memcmp(buf_, cmp.buf_, length_))
- return true;
-
- return false;
-}
-
-Buffer Buffer::operator^(const Buffer &xor_by) const
-{
- u_int32_t res_length = (xor_by.length_ > length_) ? xor_by.length_ : length_;
- u_int32_t min_length = (xor_by.length_ < length_) ? xor_by.length_ : length_;
- Buffer res(res_length);
-
- for( u_int32_t index = 0; index < min_length; index++ )
- res[index] = buf_[index] ^ xor_by[index];
-
- return res;
-}
-
-u_int32_t Buffer::getLength() const
-{
- return length_;
-}
-
-void Buffer::setLength(u_int32_t new_length)
-{
- if(new_length == length_)
- return;
-
- if(new_length > real_length_)
- {
- if(!allow_realloc_)
- throw std::out_of_range("buffer::setLength() - reallocation not allowed for this Buffer");
-
- u_int8_t* old_buf = buf_;
- u_int32_t old_length = length_;
-
- length_ = new_length;
- real_length_ = length_ + Buffer::OVER_SIZE_;
-
- buf_ = new u_int8_t[real_length_];
- if(!buf_) {
- length_ = 0;
- real_length_ = 0;
- if(old_buf)
- delete[] old_buf;
-
- throw std::bad_alloc();
- }
- std::memcpy(buf_, old_buf, old_length);
-
- if(old_buf)
- delete[] old_buf;
-
- old_buf = &buf_[old_length];
- std::memset(old_buf, 0, real_length_ - old_length);
- }
- else
- length_ = new_length;
-
- reinit();
-}
-
-
-u_int8_t* Buffer::getBuf()
-{
- return buf_;
-}
-
-u_int8_t& Buffer::operator[](u_int32_t index)
-{
- if(index >= length_)
- throw std::out_of_range("buffer::operator[]");
-
- return buf_[index];
-}
-
-u_int8_t Buffer::operator[](u_int32_t index) const
-{
- if(index >= length_)
- throw std::out_of_range("buffer::operator[] const");
-
- return buf_[index];
-}
-
-Buffer::operator u_int8_t*()
-{
- return buf_;
-}
-
-std::string Buffer::getHexDump() const
-{
- std::stringstream ss;
- ss << "Length=" << length_ << std::endl << std::hex << std::uppercase;
- for( u_int32_t index = 0; index < length_; index++ )
- {
- ss << std::setw(2) << std::setfill('0') << u_int32_t(buf_[index]) << " ";
- if(!((index+1) % 16)) {
- ss << std::endl;
- continue;
- }
- if(!((index+1) % 8))
- ss << " ";
- }
- return ss.str();
-}
-
-std::string Buffer::getHexDumpOneLine() const
-{
- std::stringstream ss;
- ss << length_ << " Bytes,'" << std::hex << std::uppercase;
- for( u_int32_t index = 0; index < length_; index++ )
- {
- ss << std::setw(2) << std::setfill('0') << u_int32_t(buf_[index]);
- }
- ss << "'";
- return ss.str();
-}
-
-bool Buffer::isReallocAllowed() const
-{
- return allow_realloc_;
-}