TrinityCore
Loading...
Searching...
No Matches
IpNetwork.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef IpNetwork_h__
19#define IpNetwork_h__
20
21#include "Define.h"
22#include "IpAddress.h"
23#include <boost/asio/ip/network_v4.hpp>
24#include <boost/asio/ip/network_v6.hpp>
25
26namespace Trinity
27{
28 namespace Net
29 {
30 inline bool IsInNetwork(boost::asio::ip::address_v4 const& networkAddress, boost::asio::ip::address_v4 const& mask, boost::asio::ip::address_v4 const& clientAddress)
31 {
32 boost::asio::ip::network_v4 network = boost::asio::ip::make_network_v4(networkAddress, mask);
33 boost::asio::ip::address_v4_range hosts = network.hosts();
34 return hosts.find(clientAddress) != hosts.end();
35 }
36
37 inline boost::asio::ip::address_v4 GetDefaultNetmaskV4(boost::asio::ip::address_v4 const& networkAddress)
38 {
39 if ((address_to_uint(networkAddress) & 0x80000000) == 0)
40 return boost::asio::ip::address_v4(0xFF000000);
41 if ((address_to_uint(networkAddress) & 0xC0000000) == 0x80000000)
42 return boost::asio::ip::address_v4(0xFFFF0000);
43 if ((address_to_uint(networkAddress) & 0xE0000000) == 0xC0000000)
44 return boost::asio::ip::address_v4(0xFFFFFF00);
45 return boost::asio::ip::address_v4(0xFFFFFFFF);
46 }
47
48 inline bool IsInNetwork(boost::asio::ip::address_v6 const& networkAddress, uint16 prefixLength, boost::asio::ip::address_v6 const& clientAddress)
49 {
50 boost::asio::ip::network_v6 network = boost::asio::ip::make_network_v6(networkAddress, prefixLength);
51 boost::asio::ip::address_v6_range hosts = network.hosts();
52 return hosts.find(clientAddress) != hosts.end();
53 }
54 }
55}
56
57#endif // IpNetwork_h__
uint16_t uint16
Definition Define.h:134
bool IsInNetwork(boost::asio::ip::address_v4 const &networkAddress, boost::asio::ip::address_v4 const &mask, boost::asio::ip::address_v4 const &clientAddress)
Definition IpNetwork.h:30
boost::asio::ip::address_v4 GetDefaultNetmaskV4(boost::asio::ip::address_v4 const &networkAddress)
Definition IpNetwork.h:37
uint32 address_to_uint(boost::asio::ip::address_v4 const &address)
Definition IpAddress.h:30