summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/anyConfOptions.cpp8
-rw-r--r--src/anyConfOptions.h12
-rw-r--r--src/anytun-config.cpp13
-rw-r--r--src/anytun-showtables.cpp4
-rw-r--r--src/anytun.cpp7
-rw-r--r--src/syncClient.cpp31
6 files changed, 44 insertions, 31 deletions
diff --git a/src/anyConfOptions.cpp b/src/anyConfOptions.cpp
index 3ab0560..f768e54 100644
--- a/src/anyConfOptions.cpp
+++ b/src/anyConfOptions.cpp
@@ -56,7 +56,7 @@ Options::Options() : key_(u_int32_t(0)), salt_(u_int32_t(0))
{
progname_ = "anytun-config";
remote_addr_ = "";
- remote_port_ = 4444;
+ remote_port_ = "4444";
seq_window_size_ = 100;
kd_prf_ = "aes-ctr";
mux_ = 0;
@@ -228,18 +228,18 @@ Options& Options::setRemoteAddr(std::string r)
return *this;
}
-u_int16_t Options::getRemotePort()
+std::string Options::getRemotePort()
{
return remote_port_;
}
-Options& Options::setRemotePort(u_int16_t r)
+Options& Options::setRemotePort(std::string r)
{
remote_port_ = r;
return *this;
}
-Options& Options::setRemoteAddrPort(std::string addr, u_int16_t port)
+Options& Options::setRemoteAddrPort(std::string addr, std::string port)
{
Lock lock(mutex);
remote_addr_ = addr;
diff --git a/src/anyConfOptions.h b/src/anyConfOptions.h
index 836187e..55dffa3 100644
--- a/src/anyConfOptions.h
+++ b/src/anyConfOptions.h
@@ -37,11 +37,11 @@
#include "threadUtils.hpp"
#include <list>
-typedef struct OptionRoute
+typedef struct
{
std::string net_addr;
uint16_t prefix_length;
-};
+} OptionRoute;
typedef std::list<OptionRoute> RouteList;
@@ -58,9 +58,9 @@ public:
Options& setProgname(std::string p);
std::string getRemoteAddr();
Options& setRemoteAddr(std::string r);
- u_int16_t getRemotePort();
- Options& setRemotePort(u_int16_t r);
- Options& setRemoteAddrPort(std::string addr, u_int16_t port);
+ std::string getRemotePort();
+ Options& setRemotePort(std::string r);
+ Options& setRemoteAddrPort(std::string addr, std::string port);
window_size_t getSeqWindowSize();
Options& setSeqWindowSize(window_size_t s);
@@ -94,7 +94,7 @@ private:
std::string progname_;
std::string remote_addr_;
- u_int16_t remote_port_;
+ std::string remote_port_;
window_size_t seq_window_size_;
std::string kd_prf_;
u_int16_t mux_;
diff --git a/src/anytun-config.cpp b/src/anytun-config.cpp
index 933a6dc..9ac9321 100644
--- a/src/anytun-config.cpp
+++ b/src/anytun-config.cpp
@@ -100,11 +100,14 @@ int main(int argc, char* argv[])
ConnectionList cl;
SyncQueue queue;
- boost::asio::io_service io_service;
- boost::asio::ip::udp::resolver resolver(io_service);
- boost::asio::ip::udp::resolver::query query(gOpt.getRemoteAddr(), gOpt.getRemotePort());
- boost::asio::ip::udp::endpoint endpoint = *resolver.resolve(query);
-
+ boost::asio::ip::udp::endpoint endpoint;
+ if (gOpt.getRemoteAddr()!="" && gOpt.getRemotePort()!="")
+ {
+ boost::asio::io_service io_service;
+ boost::asio::ip::udp::resolver resolver(io_service);
+ boost::asio::ip::udp::resolver::query query(gOpt.getRemoteAddr(), gOpt.getRemotePort());
+ endpoint = *resolver.resolve(query);
+ }
createConnection(endpoint,cl,gOpt.getSeqWindowSize(), queue, gOpt.getMux());
return ret;
diff --git a/src/anytun-showtables.cpp b/src/anytun-showtables.cpp
index 87fc4e8..6e197b1 100644
--- a/src/anytun-showtables.cpp
+++ b/src/anytun-showtables.cpp
@@ -56,11 +56,11 @@ void output(ConnectionList &cl)
mux_t mux = it->first;
ConnectionParam &conn( it->second );
std::cout << "Client " << mux << ": " ;
- if( conn.remote_host_=="")
+ if( conn.remote_end_==PacketSourceEndpoint())
{
std::cout<< "not registered";
} else {
- std::cout<< conn.remote_host_ << ':'<<conn.remote_port_;
+ std::cout<< conn.remote_end_;
}
std::cout << std::endl;
//std::cout << "Connection: Keyderivation-Type: " << conn.kd_.printType() << std::endl;
diff --git a/src/anytun.cpp b/src/anytun.cpp
index e762e0b..012e233 100644
--- a/src/anytun.cpp
+++ b/src/anytun.cpp
@@ -131,6 +131,7 @@ void sender(void* p)
//TODO replace mux
u_int16_t mux = gOpt.getMux();
+ PacketSourceEndpoint emptyEndpoint;
while(1)
{
plain_packet.setLength(MAX_PACKET_LENGTH);
@@ -158,9 +159,11 @@ void sender(void* p)
continue;
ConnectionParam & conn = cit->second;
-// TODO test if endpoint is not valid
- if(conn.remote_end_.address().to_string()==""||!conn.remote_end_.port())
+ if(conn.remote_end_ == emptyEndpoint)
+ {
+ //cLog.msg(Log::PRIO_INFO) << "no remote address set";
continue;
+ }
// generate packet-key TODO: do this only when needed
conn.kd_.generate(LABEL_SATP_ENCRYPTION, conn.seq_nr_, session_key);
diff --git a/src/syncClient.cpp b/src/syncClient.cpp
index 5d4be45..8170990 100644
--- a/src/syncClient.cpp
+++ b/src/syncClient.cpp
@@ -44,7 +44,7 @@
SyncClient::SyncClient(std::string hostname,std::string port)
-:hostname_( hostname),port_(port)
+:hostname_( hostname),port_(port),missing_chars(-1)
{
}
@@ -70,26 +70,33 @@ void SyncClient::run()
if (error)
throw boost::system::system_error(error);
- for (;;)
+ try
{
- boost::array<char, 128> buf;
- boost::system::error_code error;
+ for (;;)
+ {
+ boost::array<char, 1> buf;
+ boost::system::error_code error;
- size_t len = socket.read_some(boost::asio::buffer(buf), error);
+ size_t len = socket.read_some(boost::asio::buffer(buf), error);
- if (error == boost::asio::error::eof)
- break; // Connection closed cleanly by peer.
- else if (error)
- throw boost::system::system_error(error); // Some other error.
+ if (error == boost::asio::error::eof)
+ break; // Connection closed cleanly by peer.
+ else if (error)
+ throw boost::system::system_error(error); // Some other error.
- OnRawData(buf.data(), len);
+ OnRawData(buf.data(), len);
+ }
+ }
+ catch (std::exception& e)
+ {
+ cLog.msg(Log::PRIO_NOTICE) << e.what() << std::endl;
}
}
sleep(10);
}
catch (std::exception& e)
{
- std::cerr << e.what() << std::endl;
+ cLog.msg(Log::PRIO_NOTICE) << e.what() << std::endl;
}
}
@@ -113,7 +120,7 @@ void SyncClient::OnRawData(const char *buf,size_t len)
std::stringstream tmp;
tmp.write(buffer,6);
tmp>>missing_chars;
-// cLog.msg(Log::PRIO_NOTICE) << "recieved sync inforamtaion length from " << GetRemoteHostname() <<" "<<tmp.str()<<"bytes of data"<< std::endl;
+// cLog.msg(Log::PRIO_NOTICE) << "recieved sync inforamtaion "<<tmp.str()<<"bytes of data"<< std::endl;
delete[] buffer;
buffer_size_-=6;
} else