fixed windows endian include
[anytun.git] / src / anyConfOptions.h
blobfdcec705eb95204c5ea1df4a13c1f603679285e3
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 #ifndef _ANY_CONF_OPTIONS_H_
33 #define _ANY_CONF_OPTIONS_H_
35 #include "datatypes.h"
36 #include "buffer.h"
37 #include "threadUtils.hpp"
38 #include <list>
40 typedef struct
42 std::string net_addr;
43 u_int16_t prefix_length;
44 } OptionRoute;
46 typedef std::list<OptionRoute> RouteList;
48 class Options
50 public:
51 static Options& instance();
53 bool parse(int argc, char* argv[]);
54 void printUsage();
55 void printOptions();
57 std::string getProgname();
58 Options& setProgname(std::string p);
59 std::string getRemoteAddr();
60 Options& setRemoteAddr(std::string r);
61 std::string getRemotePort();
62 Options& setRemotePort(std::string r);
63 Options& setRemoteAddrPort(std::string addr, std::string port);
65 window_size_t getSeqWindowSize();
66 Options& setSeqWindowSize(window_size_t s);
67 std::string getKdPrf();
68 Options& setKdPrf(std::string k);
69 Options& setMux(u_int16_t m);
70 u_int16_t getMux();
71 Options& setKey(std::string k);
72 Buffer getKey();
73 Options& setSalt(std::string s);
74 Buffer getSalt();
75 RouteList getRoutes();
77 private:
78 Options();
79 ~Options();
80 Options(const Options &l);
81 void operator=(const Options &l);
83 static Options* inst;
84 static Mutex instMutex;
85 class instanceCleaner {
86 public: ~instanceCleaner() {
87 if(Options::inst != 0)
88 delete Options::inst;
91 friend class instanceCleaner;
93 Mutex mutex;
95 std::string progname_;
96 std::string remote_addr_;
97 std::string remote_port_;
98 window_size_t seq_window_size_;
99 std::string kd_prf_;
100 u_int16_t mux_;
101 Buffer key_;
102 Buffer salt_;
104 RouteList routes_;
107 extern Options& gOpt;
109 #endif