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"
49 void syncOnConnect(SyncTcpConnection
* connptr
)
51 std::ifstream
file( gOpt
.getFileName().c_str() );
66 boost::asio::io_service io_service
;
69 SyncTcpConnection::proto::resolver
resolver(io_service
);
70 SyncTcpConnection::proto::endpoint e
;
71 if(gOpt
.getBindToAddr()!="")
73 SyncTcpConnection::proto::resolver::query
query(gOpt
.getBindToAddr(), gOpt
.getBindToPort());
74 e
= *resolver
.resolve(query
);
76 SyncTcpConnection::proto::resolver::query
query(gOpt
.getBindToPort());
77 e
= *resolver
.resolve(query
);
81 SyncServer
server(io_service
,e
);
82 server
.onConnect
=boost::bind(syncOnConnect
,_1
);
85 catch (std::exception
& e
)
87 std::string addr
= gOpt
.getBindToAddr() == "" ? "*" : gOpt
.getBindToAddr();
88 cLog
.msg(Log::PRIO_ERR
) << "cannot bind to " << addr
<< ":" << gOpt
.getBindToPort()
89 << " (" << e
.what() << ") exiting.." << std::endl
;
95 int main(int argc
, char* argv
[])
97 bool daemonized
=false;
101 if(!gOpt
.parse(argc
, argv
))
107 cLog
.setLogName("anytun-controld");
108 cLog
.msg(Log::PRIO_NOTICE
) << "anytun-controld started...";
110 std::ifstream
file( gOpt
.getFileName().c_str() );
115 std::cout
<< "ERROR: unable to open file!" << std::endl
;
119 std::ofstream pidFile
;
120 if(gOpt
.getPidFile() != "") {
121 pidFile
.open(gOpt
.getPidFile().c_str());
122 if(!pidFile
.is_open()) {
123 std::cout
<< "can't open pid file" << std::endl
;
128 chrootAndDrop(gOpt
.getChrootDir(), gOpt
.getUsername());
129 if(gOpt
.getDaemonize())
135 if(pidFile
.is_open()) {
136 pid_t pid
= getpid();
141 SignalController sig
;
144 boost::thread
* syncListenerThread
;
145 syncListenerThread
= new boost::thread(boost::bind(syncListener
));
151 catch(std::runtime_error
& e
)
154 cLog
.msg(Log::PRIO_ERR
) << "uncaught runtime error, exiting: " << e
.what();
156 std::cout
<< "uncaught runtime error, exiting: " << e
.what() << std::endl
;
158 catch(std::exception
& e
)
161 cLog
.msg(Log::PRIO_ERR
) << "uncaught exception, exiting: " << e
.what();
163 std::cout
<< "uncaught exception, exiting: " << e
.what() << std::endl
;