From e63bfdce883c80ee856668fc8cccdf3f5740fb6b Mon Sep 17 00:00:00 2001 From: Othmar Gsenger Date: Mon, 24 Nov 2008 22:57:07 +0000 Subject: fixed syncing, config & showtables --- src/anyConfOptions.cpp | 8 ++++---- src/anyConfOptions.h | 12 ++++++------ src/anytun-config.cpp | 13 ++++++++----- src/anytun-showtables.cpp | 4 ++-- src/anytun.cpp | 7 +++++-- src/syncClient.cpp | 31 +++++++++++++++++++------------ 6 files changed, 44 insertions(+), 31 deletions(-) (limited to 'src') 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 -typedef struct OptionRoute +typedef struct { std::string net_addr; uint16_t prefix_length; -}; +} OptionRoute; typedef std::list 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_ << ':'<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 buf; - boost::system::error_code error; + for (;;) + { + boost::array 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() <<" "<