From 3c66fe726ae8044b2d3ce90115217a6240473598 Mon Sep 17 00:00:00 2001 From: Othmar Gsenger Date: Sun, 19 Oct 2008 20:23:49 +0000 Subject: now with files --- src/syncClient.cpp | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 src/syncClient.cpp (limited to 'src/syncClient.cpp') diff --git a/src/syncClient.cpp b/src/syncClient.cpp new file mode 100644 index 0000000..d6ede4a --- /dev/null +++ b/src/syncClient.cpp @@ -0,0 +1,153 @@ +/* + * anytun + * + * The secure anycast tunneling protocol (satp) defines a protocol used + * for communication between any combination of unicast and anycast + * 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 + * intended to deliver a generic, scaleable and secure solution for + * tunneling and relaying of packets of any protocol. + * + * + * Copyright (C) 2007-2008 Othmar Gsenger, Erwin Nindl, + * Christian Pointner + * + * This file is part of Anytun. + * + * Anytun is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Anytun is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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 . + */ +#include +#include +#include + +#include +#include + + +#include "log.h" +//#include "connectionParam.h" +#include "syncClient.h" +#include "buffer.h" +#include + + +SyncClient::SyncClient(std::string hostname,uint16_t port) +:hostname_( hostname),port_(port) +{ +} + +void SyncClient::run() +{ + try + { + asio::io_service io_service; + for(;;) + { + std::stringstream portsrt; + portsrt << port_; + asio::ip::tcp::resolver resolver(io_service); + asio::ip::tcp::resolver::query query( hostname_, portsrt.str()); + asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); + asio::ip::tcp::resolver::iterator end; + + asio::ip::tcp::socket socket(io_service); + asio::error_code error = asio::error::host_not_found; + while (error && endpoint_iterator != end) + { + socket.close(); + socket.connect(*endpoint_iterator++, error); + } + if (error) + throw asio::system_error(error); + + for (;;) + { + boost::array buf; + asio::error_code error; + + size_t len = socket.read_some(asio::buffer(buf), error); + + if (error == asio::error::eof) + break; // Connection closed cleanly by peer. + else if (error) + throw asio::system_error(error); // Some other error. + + OnRawData(buf.data(), len); + } + } + sleep(10); + } + catch (std::exception& e) + { + std::cerr << e.what() << std::endl; + } +} + +void SyncClient::OnRawData(const char *buf,size_t len) +//void SyncClientSocket::OnLine(const std::string& line) +{ + ConnectionList & cl_ (gConnectionList); + for(size_t index=0;index5) + { + char * buffer = new char [6+1]; + iss_.read(buffer,6); + std::stringstream tmp; + tmp.write(buffer,6); + tmp>>missing_chars; +// cLog.msg(Log::PRIO_NOTICE) << "recieved sync inforamtaion length from " << GetRemoteHostname() <<" "<0 && missing_chars<=buffer_size_) + { + char * buffer = new char [missing_chars+1]; + iss_.read(buffer,missing_chars); + std::stringstream tmp; + tmp.write(buffer,missing_chars); +// cLog.msg(Log::PRIO_NOTICE) << "recieved sync inforamtaion from " << GetRemoteHostname() <<" \""<> scom; + buffer_size_-=missing_chars; + missing_chars=-1; + delete[] buffer; + } else + break; + } + + //u_int16_t mux = scom.getMux(); + //const ConnectionParam & conn = cl_.getConnection(mux)->second; + //cLog.msg(Log::PRIO_NOTICE) << "sync connection #"<