diff options
-rw-r--r-- | src/anytun.cpp | 55 | ||||
-rw-r--r-- | src/anytun.vcproj | 4 | ||||
-rw-r--r-- | src/bsd/tunDevice.cpp | 6 | ||||
-rw-r--r-- | src/linux/tunDevice.cpp | 6 | ||||
-rw-r--r-- | src/threadParam.h | 52 | ||||
-rw-r--r-- | src/tunDevice.h | 14 |
6 files changed, 40 insertions, 97 deletions
diff --git a/src/anytun.cpp b/src/anytun.cpp index 98bebb0..b0997d4 100644 --- a/src/anytun.cpp +++ b/src/anytun.cpp @@ -74,7 +74,6 @@ #include "syncOnConnect.hpp" #endif -#include "threadParam.h" #define MAX_PACKET_LENGTH 1600 #include "cryptinit.hpp" @@ -101,11 +100,9 @@ void createConnection(const PacketSourceEndpoint & remote_end, window_size_t seq } #ifndef ANYTUN_NOSYNC -void syncConnector(void* p ) +void syncConnector(const OptionHost& connto) { - ThreadParam* param = reinterpret_cast<ThreadParam*>(p); - - SyncClient sc ( param->connto.addr, param->connto.port); + SyncClient sc(connto.addr, connto.port); sc.run(); } @@ -141,12 +138,15 @@ void syncListener() } #endif -void sender(void* p) +void sender(const TunDevice* dev, PacketSource* src) { + if(!dev || !src) { + cLog.msg(Log::PRIO_ERROR) << "sender thread died becaause either dev or src pointer is null"; + return; + } + try { - ThreadParam* param = reinterpret_cast<ThreadParam*>(p); - std::auto_ptr<Cipher> c(CipherFactory::create(gOpt.getCipher(), KD_OUTBOUND, gOpt.getAnytun02Compat())); std::auto_ptr<AuthAlgo> a(AuthAlgoFactory::create(gOpt.getAuthAlgo(), KD_OUTBOUND) ); @@ -161,7 +161,7 @@ void sender(void* p) encrypted_packet.setLength(MAX_PACKET_LENGTH); // read packet from device - int len = param->dev.read(plain_packet.getPayload(), plain_packet.getPayloadLength()); + int len = dev->read(plain_packet.getPayload(), plain_packet.getPayloadLength()); if(len < 0) continue; // silently ignore device read errors, this is probably no good idea... @@ -169,9 +169,9 @@ void sender(void* p) continue; // ignore short packets plain_packet.setPayloadLength(len); // set payload type - if(param->dev.getType() == TYPE_TUN) + if(dev->getType() == TYPE_TUN) plain_packet.setPayloadType(PAYLOAD_TYPE_TUN); - else if(param->dev.getType() == TYPE_TAP) + else if(dev->getType() == TYPE_TAP) plain_packet.setPayloadType(PAYLOAD_TYPE_TAP); else plain_packet.setPayloadType(0); @@ -212,7 +212,7 @@ void sender(void* p) a->generate(conn.kd_, encrypted_packet); try { - param->src.send(encrypted_packet.getBuf(), encrypted_packet.getLength(), conn.remote_end_); + src->send(encrypted_packet.getBuf(), encrypted_packet.getLength(), conn.remote_end_); } catch (std::exception& /*e*/) { //TODO: do something here //cLog.msg(Log::PRIO_ERROR) << "could not send data: " << e.what(); @@ -227,12 +227,15 @@ void sender(void* p) } } -void receiver(void* p) +void receiver(const TunDevice* dev, PacketSource* src) { + if(!dev || !src) { + cLog.msg(Log::PRIO_ERROR) << "receiver thread died becaause either dev or src pointer is null"; + return; + } + try { - ThreadParam* param = reinterpret_cast<ThreadParam*>(p); - std::auto_ptr<Cipher> c(CipherFactory::create(gOpt.getCipher(), KD_INBOUND, gOpt.getAnytun02Compat())); std::auto_ptr<AuthAlgo> a(AuthAlgoFactory::create(gOpt.getAuthAlgo(), KD_INBOUND)); @@ -249,7 +252,7 @@ void receiver(void* p) // read packet from socket int len; try { - len = param->src.recv(encrypted_packet.getBuf(), encrypted_packet.getLength(), remote_end); + len = src->recv(encrypted_packet.getBuf(), encrypted_packet.getLength(), remote_end); } catch (std::exception& /*e*/) { //TODO: do something here //cLog.msg(Log::PRIO_ERROR) << "could not recive packet "<< e.what(); @@ -305,13 +308,13 @@ void receiver(void* p) c->decrypt(conn.kd_, encrypted_packet, plain_packet); // check payload_type - if((param->dev.getType() == TYPE_TUN && plain_packet.getPayloadType() != PAYLOAD_TYPE_TUN4 && + if((dev->getType() == TYPE_TUN && plain_packet.getPayloadType() != PAYLOAD_TYPE_TUN4 && plain_packet.getPayloadType() != PAYLOAD_TYPE_TUN6) || - (param->dev.getType() == TYPE_TAP && plain_packet.getPayloadType() != PAYLOAD_TYPE_TAP)) + (dev->getType() == TYPE_TAP && plain_packet.getPayloadType() != PAYLOAD_TYPE_TAP)) continue; // write it on the device - param->dev.write(plain_packet.getPayload(), plain_packet.getLength()); + dev->write(plain_packet.getPayload(), plain_packet.getLength()); } } catch(std::runtime_error& e) { @@ -482,12 +485,9 @@ int main(int argc, char* argv[]) } #endif - OptionHost* connTo = new OptionHost(); - ThreadParam p(dev, *src, *connTo); - - boost::thread senderThread(boost::bind(sender,&p)); + boost::thread senderThread(boost::bind(sender, &dev, src)); #if defined(WIN_SERVICE) || !defined(NO_SIGNALCONTROLLER) - boost::thread receiverThread(boost::bind(receiver,&p)); + boost::thread receiverThread(boost::bind(receiver, &dev, src)); #endif #ifndef ANYTUN_NOSYNC boost::thread * syncListenerThread; @@ -495,9 +495,8 @@ int main(int argc, char* argv[]) syncListenerThread = new boost::thread(boost::bind(syncListener)); std::list<boost::thread *> connectThreads; - for(HostList::iterator it = connect_to.begin() ;it != connect_to.end(); ++it) { - ThreadParam * point = new ThreadParam(dev, *src, *it); - connectThreads.push_back(new boost::thread(boost::bind(syncConnector,point))); + for(HostList::const_iterator it = connect_to.begin() ;it != connect_to.end(); ++it) { + connectThreads.push_back(new boost::thread(boost::bind(syncConnector, *it))); } #endif @@ -507,7 +506,7 @@ int main(int argc, char* argv[]) #elif !defined(NO_SIGNALCONTROLLER) int ret = gSignalController.run(); #else - receiver(&p); + receiver(dev, *src); int ret = 0; #endif // TODO cleanup threads here! diff --git a/src/anytun.vcproj b/src/anytun.vcproj index 4bd6d85..57b141a 100644 --- a/src/anytun.vcproj +++ b/src/anytun.vcproj @@ -480,10 +480,6 @@ >
</File>
<File
- RelativePath=".\threadParam.h"
- >
- </File>
- <File
RelativePath=".\threadUtils.hpp"
>
</File>
diff --git a/src/bsd/tunDevice.cpp b/src/bsd/tunDevice.cpp index 4e344a8..240e46c 100644 --- a/src/bsd/tunDevice.cpp +++ b/src/bsd/tunDevice.cpp @@ -192,7 +192,7 @@ void TunDevice::init_post() #error This Device works just for OpenBSD, FreeBSD or NetBSD #endif -int TunDevice::fix_return(int ret, size_t pi_length) +int TunDevice::fix_return(int ret, size_t pi_length) const { if(ret < 0) return ret; @@ -200,7 +200,7 @@ int TunDevice::fix_return(int ret, size_t pi_length) return (static_cast<size_t>(ret) > type_length ? (ret - type_length) : 0); } -int TunDevice::read(u_int8_t* buf, u_int32_t len) +int TunDevice::read(u_int8_t* buf, u_int32_t len) const { if(fd_ < 0) return -1; @@ -219,7 +219,7 @@ int TunDevice::read(u_int8_t* buf, u_int32_t len) return(::read(fd_, buf, len)); } -int TunDevice::write(u_int8_t* buf, u_int32_t len) +int TunDevice::write(u_int8_t* buf, u_int32_t len) const { if(fd_ < 0) return -1; diff --git a/src/linux/tunDevice.cpp b/src/linux/tunDevice.cpp index e9056b3..b221ebb 100644 --- a/src/linux/tunDevice.cpp +++ b/src/linux/tunDevice.cpp @@ -90,7 +90,7 @@ TunDevice::~TunDevice() ::close(fd_); } -int TunDevice::fix_return(int ret, size_t pi_length) +int TunDevice::fix_return(int ret, size_t pi_length) const { if(ret < 0) return ret; @@ -98,7 +98,7 @@ int TunDevice::fix_return(int ret, size_t pi_length) return (static_cast<size_t>(ret) > pi_length ? (ret - pi_length) : 0); } -int TunDevice::read(u_int8_t* buf, u_int32_t len) +int TunDevice::read(u_int8_t* buf, u_int32_t len) const { if(fd_ < 0) return -1; @@ -118,7 +118,7 @@ int TunDevice::read(u_int8_t* buf, u_int32_t len) return(::read(fd_, buf, len)); } -int TunDevice::write(u_int8_t* buf, u_int32_t len) +int TunDevice::write(u_int8_t* buf, u_int32_t len) const { if(fd_ < 0) return -1; diff --git a/src/threadParam.h b/src/threadParam.h deleted file mode 100644 index 60741d4..0000000 --- a/src/threadParam.h +++ /dev/null @@ -1,52 +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-2008 Othmar Gsenger, Erwin Nindl, - * Christian Pointner <satp@wirdorange.org> - * - * This file is part of Anytun. - * - * Anytun is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 3 as - * published by the Free Software Foundation. - * - * Anytun 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 anytun. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef _THREAD_PARAM_H -#define _THREAD_PARAM_H - -#include "threadUtils.hpp" -#include "datatypes.h" -#include "tunDevice.h" -#include "connectionList.h" -#include "syncQueue.h" - -class ThreadParam -{ -public: - ThreadParam(TunDevice& dev_,PacketSource& src_,OptionHost & connto_) - : dev(dev_),src(src_),connto(connto_) - {}; - TunDevice& dev; - PacketSource& src; - OptionHost & connto; -}; - -#endif diff --git a/src/tunDevice.h b/src/tunDevice.h index c470b9c..2443663 100644 --- a/src/tunDevice.h +++ b/src/tunDevice.h @@ -46,13 +46,13 @@ public: TunDevice(std::string dev,std::string dev_type, std::string ifcfg_addr, u_int16_t ifcfg_prefix); ~TunDevice(); - int read(u_int8_t* buf, u_int32_t len); - int write(u_int8_t* buf, u_int32_t len); + int read(u_int8_t* buf, u_int32_t len) const; + int write(u_int8_t* buf, u_int32_t len) const; - std::string getActualName() { return actual_name_; } - std::string getActualNode() { return actual_node_; } - device_type_t getType() { return conf_.type_; } - std::string getTypeString() + const char* getActualName() const { return actual_name_.c_str(); } + const char* getActualNode() const { return actual_node_.c_str(); } + device_type_t getType() const { return conf_.type_; } + const char* getTypeString() const { #ifndef _MSC_VER if(fd_ < 0) @@ -77,7 +77,7 @@ private: void init_post(); void do_ifconfig(); - int fix_return(int ret, size_t pi_length); + int fix_return(int ret, size_t pi_length) const; #ifndef _MSC_VER int fd_; |