4 * The secure anycast tunneling protocol (satp) defines a protocol used
5 * for communication between any combination of unicast and anycast
6 * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel
7 * mode and allows tunneling of every ETHER TYPE protocol (e.g.
8 * ethernet, ip, arp ...). satp directly includes cryptography and
9 * message authentication based on the methodes used by SRTP. It is
10 * intended to deliver a generic, scaleable and secure solution for
11 * tunneling and relaying of packets of any protocol.
14 * Copyright (C) 2007-2008 Othmar Gsenger, Erwin Nindl,
15 * Christian Pointner <satp@wirdorange.org>
17 * This file is part of Anytun.
19 * Anytun is free software: you can redistribute it and/or modify
20 * it under the terms of the GNU General Public License version 3 as
21 * published by the Free Software Foundation.
23 * Anytun is distributed in the hope that it will be useful,
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 * GNU General Public License for more details.
28 * You should have received a copy of the GNU General Public License
29 * along with anytun. If not, see <http://www.gnu.org/licenses/>.
40 #include "datatypes.h"
43 #include "signalController.h"
44 #include "anyCtrOptions.h"
46 #include "syncServer.h"
54 ThreadParam() : addr(""), port(0) {};
59 void syncOnConnect(SyncTcpConnection
* connptr
)
61 std::ifstream
file( filename
.c_str() );
74 void syncListener(void* p
)
76 ThreadParam
* param
= reinterpret_cast<ThreadParam
*>(p
);
80 asio::io_service io_service
;
81 SyncServer
server(io_service
,asio::ip::tcp::endpoint(asio::ip::tcp::v6(), param
->port
));
82 server
.onConnect
=boost::bind(syncOnConnect
,_1
);
85 catch (std::exception
& e
)
87 std::cerr
<< e
.what() << std::endl
;
92 int main(int argc
, char* argv
[])
94 if(!gOpt
.parse(argc
, argv
))
100 std::ifstream
file( gOpt
.getFileName().c_str() );
105 std::cout
<< "ERROR: unable to open file!" << std::endl
;
109 std::ofstream pidFile
;
110 if(gOpt
.getPidFile() != "") {
111 pidFile
.open(gOpt
.getPidFile().c_str());
112 if(!pidFile
.is_open()) {
113 std::cout
<< "can't open pid file" << std::endl
;
118 chrootAndDrop(gOpt
.getChrootDir(), gOpt
.getUsername());
119 if(gOpt
.getDaemonize())
122 if(pidFile
.is_open()) {
123 pid_t pid
= getpid();
128 SignalController sig
;
132 p
.addr
= gOpt
.getBindToAddr();
133 p
.port
= gOpt
.getBindToPort();
134 filename
= gOpt
.getFileName();
135 boost::thread
* syncListenerThread
;
136 syncListenerThread
= new boost::thread(boost::bind(syncListener
,&p
));