fixed windows endian include
[anytun.git] / src / anytun-showtables.cpp
blob0ba8bdb86cd5032efac0da0e83456d1f65a38abb
1 /*
2 * anytun
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/>.
32 #include "datatypes.h"
34 #include "log.h"
35 #include "buffer.h"
36 #include "keyDerivation.h"
37 #include "seqWindow.h"
38 #include "connectionList.h"
39 #include "routingTable.h"
40 #include "networkAddress.h"
41 #include "syncCommand.h"
43 #include <sstream>
44 #include <iostream>
45 #include <string>
47 #include <boost/archive/text_oarchive.hpp>
48 #include <boost/archive/text_iarchive.hpp>
51 void output()
53 ConnectionList &cl(gConnectionList);
54 if( !cl.empty() )
56 ConnectionMap::iterator it = cl.getBeginUnlocked();
57 mux_t mux = it->first;
58 ConnectionParam &conn( it->second );
59 std::cout << "Client " << mux << ": " ;
60 if( conn.remote_end_==PacketSourceEndpoint())
62 std::cout<< "not registered";
63 } else {
64 std::cout<< conn.remote_end_;
66 std::cout << std::endl;
67 //std::cout << "Connection: Keyderivation-Type: " << conn.kd_.printType() << std::endl;
68 cl.clear();
69 } else {
70 network_address_type_t types[] = {ipv4,ipv6,ethernet};
71 for (int types_idx=0; types_idx<3; types_idx++)
73 network_address_type_t type = types[types_idx];
74 if( !gRoutingTable.empty(type) )
76 RoutingMap::iterator it = gRoutingTable.getBeginUnlocked(type);
77 NetworkPrefix pref( it->first );
78 std::cout << "Route: " << pref.toString() << "/" << (int)pref.getNetworkPrefixLength() << " -> ";
79 mux_t mux = it->second;
80 std::cout << mux << std::endl;
81 gRoutingTable.clear(type);
87 void readExactly(size_t toread, std::iostream & result)
89 size_t hasread = 0;
90 while (toread > hasread && std::cin.good())
92 char a[1];
93 std::cin.read(a,1);
94 result.write(a,1);
95 hasread++;
99 void readAndProcessOne()
101 size_t message_lenght ;
102 std::stringstream message_lenght_stream;
103 readExactly(5,message_lenght_stream);
104 message_lenght_stream >> message_lenght;
105 std::stringstream void_stream;
106 readExactly(1,void_stream); //skip space
107 std::stringstream sync_command_stream;
108 readExactly(message_lenght, sync_command_stream);
109 //std::cout << message_lenght << std::endl;
110 //std::cout << sync_command_stream.str()<< std::endl;
111 boost::archive::text_iarchive ia(sync_command_stream);
112 SyncCommand scom(gConnectionList);
113 ia >> scom;
116 int main(int argc, char* argv[])
118 int ret = 0;
120 while( std::cin.good() )
122 readAndProcessOne();
123 output();
125 return ret;