Beispiel #1
0
 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;
             }
         }
     }
 }
Beispiel #2
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;
}