Line data Source code
1 : // Network Address -- classes functions to ease handling IP addresses
2 : // Copyright (c) 2012-2019 Made to Order Software Corp. All Rights Reserved
3 : //
4 : // https://snapwebsites.org/project/libaddr
5 : //
6 : // Permission is hereby granted, free of charge, to any person obtaining a
7 : // copy of this software and associated documentation files (the
8 : // "Software"), to deal in the Software without restriction, including
9 : // without limitation the rights to use, copy, modify, merge, publish,
10 : // distribute, sublicense, and/or sell copies of the Software, and to
11 : // permit persons to whom the Software is furnished to do so, subject to
12 : // the following conditions:
13 : //
14 : // The above copyright notice and this permission notice shall be included
15 : // in all copies or substantial portions of the Software.
16 : //
17 : // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 : // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 : // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 : // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21 : // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22 : // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23 : // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 : //
25 : #pragma once
26 :
27 : /** \file
28 : * \brief The various libaddr classes.
29 : *
30 : * This header includes the base addr class used to handle one binary
31 : * address.
32 : */
33 :
34 : // addr library
35 : //
36 : #include <libaddr/addr.h>
37 :
38 :
39 :
40 : namespace addr
41 : {
42 :
43 :
44 0 : class iface_index_name
45 : {
46 : public:
47 : typedef std::vector<iface_index_name> vector_t;
48 :
49 : iface_index_name(int index, std::string const & name);
50 :
51 : int get_index() const;
52 : std::string const & get_name() const;
53 :
54 : private:
55 : int f_index;
56 : std::string f_name;
57 : };
58 :
59 : iface_index_name::vector_t get_interface_name_index();
60 :
61 :
62 1512 : class iface
63 : {
64 : public:
65 : typedef std::shared_ptr<iface> pointer_t;
66 : typedef std::vector<iface> vector_t;
67 :
68 : static iface::vector_t get_local_addresses();
69 :
70 : std::string get_name() const;
71 : unsigned int get_flags() const;
72 : addr const & get_address() const;
73 : addr const & get_broadcast_address() const;
74 : addr const & get_destination_address() const;
75 :
76 : bool has_broadcast_address() const;
77 : bool has_destination_address() const;
78 :
79 : private:
80 : std::string f_name = std::string();
81 : unsigned int f_flags = 0;
82 : addr f_address = addr();
83 : addr f_broadcast_address = addr();
84 : addr f_destination_address = addr();
85 : };
86 :
87 :
88 :
89 : iface::pointer_t find_addr_interface(addr const & a, bool allow_default_destination = true);
90 :
91 :
92 :
93 : }
94 : // addr namespace
95 : // vim: ts=4 sw=4 et
|