void ServiceControl(int offset, const std::string& operation, int ranking) { if (0 <= offset && offset <= 3) { if (operation == "register") { if (!servregs[offset]) { std::stringstream servicename; servicename << SERVICE << offset; InterfaceMap ifm; ifm.insert(std::make_pair(servicename.str(), static_cast<void*>(this))); ServiceProperties props; props.insert(std::make_pair(ServiceConstants::SERVICE_RANKING(), Any(ranking))); servregs[offset] = mc->RegisterService(ifm, props); } } if (operation == "unregister") { if (servregs[offset]) { ServiceRegistrationU sr1 = servregs[offset]; sr1.Unregister(); servregs[offset] = 0; } } } }
InterfaceMap genInterfaceMap() { InterfaceMap ifmap; struct ifaddrs *if_addrs = nullptr, *if_addr = nullptr; if (getifaddrs(&if_addrs) != 0 || if_addrs == nullptr) { return ifmap; } InterfaceMap::iterator it = ifmap.begin(); for (if_addr = if_addrs; if_addr != nullptr; if_addr = if_addr->ifa_next) { if (if_addr->ifa_addr != nullptr && if_addr->ifa_addr->sa_family == AF_LINK) { auto route_type = std::string(if_addr->ifa_name); auto sdl = (struct sockaddr_dl *)if_addr->ifa_addr; ifmap.insert(it, std::make_pair(sdl->sdl_index, route_type)); } } freeifaddrs(if_addrs); return ifmap; }