* 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
+ * message authentication based on the methods 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-2009 Othmar Gsenger, Erwin Nindl,
+ * Copyright (C) 2007-2014 Markus Grüneis, Othmar Gsenger, Erwin Nindl,
* Christian Pointner <satp@wirdorange.org>
*
* This file is part of Anytun.
* 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/>.
+ * along with Anytun. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * In addition, as a special exception, the copyright holders give
+ * permission to link the code of portions of this program with the
+ * OpenSSL library under certain conditions as described in each
+ * individual source file, and distribute linked combinations
+ * including the two.
+ * You must obey the GNU General Public License in all respects
+ * for all of the code used other than OpenSSL. If you modify
+ * file(s) with this exception, you may extend this exception to your
+ * version of the file(s), but you are not obligated to do so. If you
+ * do not wish to do so, delete this exception statement from your
+ * version. If you delete this exception statement from all source
+ * files in the program, then also delete it here.
*/
#include "threadUtils.hpp"
#include "connectionList.h"
-ConnectionList* ConnectionList::inst = NULL;
-Mutex ConnectionList::instMutex;
ConnectionList& gConnectionList = ConnectionList::instance();
-
ConnectionList& ConnectionList::instance()
{
- Lock lock(instMutex);
- static instanceCleaner c;
- if(!inst)
- inst = new ConnectionList();
-
- return *inst;
+ static ConnectionList instance;
+ return instance;
}
ConnectionList::ConnectionList()
ConnectionList::~ConnectionList()
{
-// TODO: comment this in as soon as threads @ main get cleaned up properly
-// Lock lock(mutex_);
-// ConnectionMap::iterator it;
-// for(it = connections_.begin(); it != connections_.end(); ++it) {
-// delete &it->second.kd_;
-// delete &it->second.seq_window_;
-// }
-}
-
-void ConnectionList::addConnection(ConnectionParam &conn, u_int16_t mux )
+ // TODO: comment this in as soon as threads @ main get cleaned up properly
+ // Lock lock(mutex_);
+ // ConnectionMap::iterator it;
+ // for(it = connections_.begin(); it != connections_.end(); ++it) {
+ // delete &it->second.kd_;
+ // delete &it->second.seq_window_;
+ // }
+}
+
+void ConnectionList::addConnection(ConnectionParam& conn, uint16_t mux)
{
Lock lock(mutex_);
std::pair<ConnectionMap::iterator, bool> ret = connections_.insert(ConnectionMap::value_type(mux, conn));
- if(!ret.second)
- {
+ if(!ret.second) {
connections_.erase(ret.first);
connections_.insert(ConnectionMap::value_type(mux, conn));
}
const ConnectionMap::iterator ConnectionList::getEnd()
{
- Lock lock(mutex_);
- return connections_.end();
+ Lock lock(mutex_);
+ return connections_.end();
}
ConnectionMap::iterator ConnectionList::getBeginUnlocked()
return connections_.end();
}
-const ConnectionMap::iterator ConnectionList::getConnection(u_int16_t mux)
+const ConnectionMap::iterator ConnectionList::getConnection(uint16_t mux)
{
- Lock lock(mutex_);
- ConnectionMap::iterator it = connections_.find(mux);
- return it;
+ Lock lock(mutex_);
+ ConnectionMap::iterator it = connections_.find(mux);
+ return it;
}
-ConnectionParam & ConnectionList::getOrNewConnectionUnlocked(u_int16_t mux)
+ConnectionParam& ConnectionList::getOrNewConnectionUnlocked(uint16_t mux)
{
- ConnectionMap::iterator it = connections_.find(mux);
- if(it!=connections_.end())
- return it->second;
+ ConnectionMap::iterator it = connections_.find(mux);
+ if(it!=connections_.end()) {
+ return it->second;
+ }
- u_int8_t key[] = {
- 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
- 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'
+ uint8_t key[] = {
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
+ 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'
};
-
- u_int8_t salt[] = {
- 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
- 'i', 'j', 'k', 'l', 'm', 'n'
+
+ uint8_t salt[] = {
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
+ 'i', 'j', 'k', 'l', 'm', 'n'
};
- SeqWindow * seq= new SeqWindow(0);
+ SeqWindow* seq= new SeqWindow(0);
seq_nr_t seq_nr_=0;
- KeyDerivation * kd = KeyDerivationFactory::create(gOpt.getKdPrf());
+ KeyDerivation* kd = KeyDerivationFactory::create(gOpt.getKdPrf());
kd->init(Buffer(key, sizeof(key)), Buffer(salt, sizeof(salt)));
- ConnectionParam conn ((*kd), (*seq), seq_nr_, PacketSourceEndpoint());
- connections_.insert(ConnectionMap::value_type(mux, conn));
- it = connections_.find(mux);
- return it->second;
+ ConnectionParam conn((*kd), (*seq), seq_nr_, PacketSourceEndpoint());
+ connections_.insert(ConnectionMap::value_type(mux, conn));
+ it = connections_.find(mux);
+ return it->second;
}
void ConnectionList::clear()
{
Lock lock(mutex_);
- connections_.clear();
+ connections_.clear();
}
bool ConnectionList::empty()
{
Lock lock(mutex_);
- return connections_.empty();
+ return connections_.empty();
}
Mutex& ConnectionList::getMutex()