Skip to content
Snippets Groups Projects
Select Git revision
  • c30f350b94458be4eb239f5574304ca448f83c5f
  • master default protected
  • release/202005
  • release/202001
  • release/201912
  • release/201911
  • release/releaseWindowsTestOne
  • release/windowsReleaseTest
  • release/releaseTest
  • release/releaseWindowsTest
  • release/201910
  • release/qt/201910
  • release/windows-test/201910
  • release/201908
  • release/201906
  • release/201905
  • release/201904
  • release/201903
  • release/201902
  • release/201901
  • release/201812
  • 4.0.0
  • 2.2.0
  • 2.1.0
  • 2.0.1
  • 2.0.0
  • 1.4.1
  • 1.4.0
  • 1.3.0
  • 1.2.0
  • 1.1.0
31 results

configurationmanager-glue.h

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    getif_workaround_android.h 1.09 KiB
    //Code from getifaddrs.3 man
    #include <arpa/inet.h>
    #include <sys/socket.h>
    #include <ifaddrs.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <net/if.h>
    #include <asio.hpp>
    #include <stdexcept>
    namespace dht{
    namespace workaround{
    
    asio::ip::address_v4
    get_interface(){
        struct ifaddrs *ifaddr;
        if(getifaddrs(&ifaddr) == -1){
            throw std::runtime_error("Can't getifaddrs");
        }
        for (struct ifaddrs *if1 = ifaddr; if1 != NULL; if1 = if1->ifa_next){
            if (if1->ifa_addr == NULL)
                continue;
            if (if1->ifa_addr->sa_family != AF_INET)
                continue;
            if((if1->ifa_flags & IFF_MULTICAST) == IFF_MULTICAST){
                char* sa_data = if1->ifa_addr->sa_data;
                uint32_t value = sa_data[2] << 24
                    | sa_data[3] << 16
                    | sa_data[4] << 8
                    | sa_data[5];
                freeifaddrs(ifaddr);
                return asio::ip::address_v4(value);
            }
        }
        freeifaddrs(ifaddr);
        throw std::runtime_error("Can't find a interface which supports multicast");
    }
    
    } /* namespace workaround */
    } /* namespace dht */