diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/anytun.cpp | 82 | ||||
-rw-r--r-- | src/authAlgo.cpp | 10 | ||||
-rw-r--r-- | src/keyDerivation.cpp | 6 |
3 files changed, 56 insertions, 42 deletions
diff --git a/src/anytun.cpp b/src/anytun.cpp index bbea08a..bf20d1c 100644 --- a/src/anytun.cpp +++ b/src/anytun.cpp @@ -105,6 +105,47 @@ void createConnection(const PacketSourceEndpoint & remote_end, window_size_t seq #endif } +#ifndef ANYTUN_NOSYNC +void syncConnector(void* p ) +{ + ThreadParam* param = reinterpret_cast<ThreadParam*>(p); + + SyncClient sc ( param->connto.host, param->connto.port); + sc.run(); +} + +void syncListener(SyncQueue * queue) +{ + try + { + boost::asio::io_service io_service; + SyncTcpConnection::proto::resolver resolver(io_service); + SyncTcpConnection::proto::endpoint e; + if(gOpt.getLocalSyncAddr()!="") + { + SyncTcpConnection::proto::resolver::query query(gOpt.getLocalSyncAddr(), gOpt.getLocalSyncPort()); + e = *resolver.resolve(query); + } else { + SyncTcpConnection::proto::resolver::query query(gOpt.getLocalSyncPort()); + e = *resolver.resolve(query); + } + + + SyncServer server(io_service,e); + server.onConnect=boost::bind(syncOnConnect,_1); + queue->setSyncServerPtr(&server); + io_service.run(); + } + catch (std::exception& e) + { + std::string addr = gOpt.getLocalSyncAddr() == "" ? "*" : gOpt.getLocalSyncAddr(); + cLog.msg(Log::PRIO_ERR) << "sync: cannot bind to " << addr << ":" << gOpt.getLocalSyncPort() + << " (" << e.what() << ")" << std::endl; + } + +} +#endif + void sender(void* p) { try @@ -193,47 +234,6 @@ void sender(void* p) cLog.msg(Log::PRIO_ERR) << "sender thread died due to an uncaught exception: " << e.what(); } } - -#ifndef ANYTUN_NOSYNC -void syncConnector(void* p ) -{ - ThreadParam* param = reinterpret_cast<ThreadParam*>(p); - - SyncClient sc ( param->connto.host, param->connto.port); - sc.run(); -} - -void syncListener(SyncQueue * queue) -{ - try - { - boost::asio::io_service io_service; - SyncTcpConnection::proto::resolver resolver(io_service); - SyncTcpConnection::proto::endpoint e; - if(gOpt.getLocalSyncAddr()!="") - { - SyncTcpConnection::proto::resolver::query query(gOpt.getLocalSyncAddr(), gOpt.getLocalSyncPort()); - e = *resolver.resolve(query); - } else { - SyncTcpConnection::proto::resolver::query query(gOpt.getLocalSyncPort()); - e = *resolver.resolve(query); - } - - - SyncServer server(io_service,e); - server.onConnect=boost::bind(syncOnConnect,_1); - queue->setSyncServerPtr(&server); - io_service.run(); - } - catch (std::exception& e) - { - std::string addr = gOpt.getLocalSyncAddr() == "" ? "*" : gOpt.getLocalSyncAddr(); - cLog.msg(Log::PRIO_ERR) << "sync: cannot bind to " << addr << ":" << gOpt.getLocalSyncPort() - << " (" << e.what() << ")" << std::endl; - } - -} -#endif void receiver(void* p) { diff --git a/src/authAlgo.cpp b/src/authAlgo.cpp index 3088c72..8293d70 100644 --- a/src/authAlgo.cpp +++ b/src/authAlgo.cpp @@ -76,6 +76,11 @@ Sha1AuthAlgo::~Sha1AuthAlgo() void Sha1AuthAlgo::generate(KeyDerivation& kd, kd_dir dir, EncryptedPacket& packet) { +#ifndef USE_SSL_CRYPTO + if(!handle) + return; +#endif + packet.addAuthTag(); if(!packet.getAuthTagLength()) return; @@ -113,6 +118,11 @@ void Sha1AuthAlgo::generate(KeyDerivation& kd, kd_dir dir, EncryptedPacket& pack bool Sha1AuthAlgo::checkTag(KeyDerivation& kd, kd_dir dir, EncryptedPacket& packet) { +#ifndef USE_SSL_CRYPTO + if(!handle) + return false; +#endif + packet.withAuthTag(true); if(!packet.getAuthTagLength()) return true; diff --git a/src/keyDerivation.cpp b/src/keyDerivation.cpp index 46c1568..fcb3001 100644 --- a/src/keyDerivation.cpp +++ b/src/keyDerivation.cpp @@ -198,6 +198,11 @@ bool AesIcmKeyDerivation::generate(kd_dir dir, satp_prf_label label, seq_nr_t se { ReadersLock lock(mutex_); +#ifndef USE_SSL_CRYPTO + if(!handle_[dir]) + return false; +#endif + seq_nr_t r; calcCtr(dir, &r, label, seq_nr); // TODO: return stored key @@ -212,7 +217,6 @@ bool AesIcmKeyDerivation::generate(kd_dir dir, satp_prf_label label, seq_nr_t se // return false; // } - #ifndef USE_SSL_CRYPTO gcry_error_t err = gcry_cipher_reset(handle_[dir]); if(err) { |