diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/anyConfOptions.cpp | 8 | ||||
-rw-r--r-- | src/anyConfOptions.h | 12 | ||||
-rw-r--r-- | src/anytun-config.cpp | 13 | ||||
-rw-r--r-- | src/anytun-showtables.cpp | 4 | ||||
-rw-r--r-- | src/anytun.cpp | 7 | ||||
-rw-r--r-- | src/syncClient.cpp | 31 |
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 |