Program Listing for File IPLocator.h

Return to documentation for file (/tmp/ws/src/fastrtps/include/fastrtps/utils/IPLocator.h)

// Copyright 2016 Proyectos y Sistemas de Mantenimiento SL (eProsima).
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef IP_LOCATOR_H_
#define IP_LOCATOR_H_

#include <fastdds/rtps/common/Types.h>
#include <fastdds/dds/log/Log.hpp>

#include <regex>
#include <set>
#include <string>
#include <vector>

namespace eprosima {
namespace fastrtps {
namespace rtps {

class Locator_t;

class IPLocator
{
public:

    RTPS_DllAPI static void createLocator(
            int32_t kindin,
            const std::string& address,
            uint32_t portin,
            Locator_t& locator);

    RTPS_DllAPI static bool setIPv4(
            Locator_t& locator,
            const unsigned char* addr);

    RTPS_DllAPI static bool setIPv4(
            Locator_t& locator,
            octet o1,
            octet o2,
            octet o3,
            octet o4);

    RTPS_DllAPI static bool setIPv4(
            Locator_t& locator,
            const std::string& ipv4);

    RTPS_DllAPI static bool setIPv4(
            Locator_t& destlocator,
            const Locator_t& origlocator);

    RTPS_DllAPI static bool setIPv4address(
            Locator_t& destlocator,
            const std::string& lan,
            const std::string& wan,
            const std::string& ipv4);

    RTPS_DllAPI static const octet* getIPv4(
            const Locator_t& locator);

    RTPS_DllAPI static bool hasIPv4(
            const Locator_t& locator);

    RTPS_DllAPI static std::string toIPv4string(
            const Locator_t& locator);

    RTPS_DllAPI static bool copyIPv4(
            const Locator_t& locator,
            unsigned char* dest);

    // IPv6
    RTPS_DllAPI static bool setIPv6(
            Locator_t& locator,
            const unsigned char* addr);

    RTPS_DllAPI static bool setIPv6(
            Locator_t& locator,
            uint16_t group0,
            uint16_t group1,
            uint16_t group2,
            uint16_t group3,
            uint16_t group4,
            uint16_t group5,
            uint16_t group6,
            uint16_t group7);

    RTPS_DllAPI static bool setIPv6(
            Locator_t& locator,
            const std::string& ipv6);

    RTPS_DllAPI static bool setIPv6(
            Locator_t& destlocator,
            const Locator_t& origlocator);

    RTPS_DllAPI static const octet* getIPv6(
            const Locator_t& locator);

    RTPS_DllAPI static bool hasIPv6(
            const Locator_t& locator);

    RTPS_DllAPI static std::string toIPv6string(
            const Locator_t& locator);

    RTPS_DllAPI static bool copyIPv6(
            const Locator_t& locator,
            unsigned char* dest);

    RTPS_DllAPI static bool ip(
            Locator_t& locator,
            const std::string& ip);

    RTPS_DllAPI static std::string ip_to_string(
            const Locator_t& locator);

    // TCP
    RTPS_DllAPI static bool setLogicalPort(
            Locator_t& locator,
            uint16_t port);

    RTPS_DllAPI static uint16_t getLogicalPort(
            const Locator_t& locator);

    RTPS_DllAPI static bool setPhysicalPort(
            Locator_t& locator,
            uint16_t port);

    RTPS_DllAPI static uint16_t getPhysicalPort(
            const Locator_t& locator);

    // TCPv4
    RTPS_DllAPI static bool setWan(
            Locator_t& locator,
            octet o1,
            octet o2,
            octet o3,
            octet o4);

    RTPS_DllAPI static bool setWan(
            Locator_t& locator,
            const std::string& wan);

    RTPS_DllAPI static const octet* getWan(
            const Locator_t& locator);

    RTPS_DllAPI static bool hasWan(
            const Locator_t& locator);

    RTPS_DllAPI static std::string toWanstring(
            const Locator_t& locator);

    RTPS_DllAPI static bool setLanID(
            Locator_t& locator,
            const std::string& lanId);

    RTPS_DllAPI static const octet* getLanID(
            const Locator_t& locator);

    RTPS_DllAPI static std::string toLanIDstring(
            const Locator_t& locator);

    RTPS_DllAPI static Locator_t toPhysicalLocator(
            const Locator_t& locator);

    RTPS_DllAPI static bool ip_equals_wan(
            const Locator_t& locator);

    // Common
    RTPS_DllAPI static bool setPortRTPS(
            Locator_t& locator,
            uint16_t port);

    RTPS_DllAPI static uint16_t getPortRTPS(
            Locator_t& locator);

    RTPS_DllAPI static bool isLocal(
            const Locator_t& locator);

    RTPS_DllAPI static bool isAny(
            const Locator_t& locator);

    RTPS_DllAPI static bool compareAddress(
            const Locator_t& loc1,
            const Locator_t& loc2,
            bool fullAddress = false);

    RTPS_DllAPI static bool compareAddressAndPhysicalPort(
            const Locator_t& loc1,
            const Locator_t& loc2);

    RTPS_DllAPI static std::string to_string(
            const Locator_t& locator);

    // UDP
    RTPS_DllAPI static bool isMulticast(
            const Locator_t& locator);

    RTPS_DllAPI static std::pair<std::set<std::string>, std::set<std::string>> resolveNameDNS(
            const std::string& address_name);

    RTPS_DllAPI static bool isIPv4(
            const std::string& address);
    RTPS_DllAPI static bool isIPv6(
            const std::string& address);

protected:

    // Checks if the locator address is equal to 0
    // It checks the proper locator address depending on the locator kind
    static bool isEmpty(
            const Locator_t& locator);

    // Checks if the locator address from index till the end is equal to 0
    static bool isEmpty(
            const Locator_t& locator,
            uint16_t index);

    // Checks if a string matches an ipv6 address
    static bool IPv6isCorrect(
            const std::string& ipv6);

private:

    IPLocator() = delete;
    ~IPLocator() = delete;
};

} // namespace rtps
} // namespace fastrtps
} /* namespace eprosima */

#endif /* IP_LOCATOR_H_ */