replaced some tabs with spaces
[senf.git] / Socket / Protocols / INet / MulticastSocketProtocol.cc
index 42f2126..8ec8629 100644 (file)
@@ -242,6 +242,7 @@ prefix_ void senf::INet6MulticastSocketProtocol::mcAddMembership(INet6Address co
 
 prefix_ void senf::INet6MulticastSocketProtocol::mcAddMembership(INet6Address const & mcAddr,
                                                                  std::string const & iface)
+    const
 {
     if (mcAddr.inet4Mapped()) {
         struct ip_mreqn mreqn;
@@ -311,14 +312,13 @@ senf::INet6MulticastSocketProtocol::mcDropMembership(INet6Address const & mcAddr
 }
 
 namespace {
+
     void mc6SSMSourceRequest(int operation, int fd, senf::INet6Address const & group,
-                             senf::INet6Address const & source, std::string const & iface)
+                             senf::INet6Address const & source, int ifacei)
     {
         struct group_source_req req;
         ::memset(&req, 0, sizeof(req));
-        req.gsr_interface = if_nametoindex(iface.c_str());
-        if (req.gsr_interface == 0)
-            throw senf::SystemException("::if_nametoindex()", ENOENT SENF_EXC_DEBUGINFO);
+        req.gsr_interface = ifacei;
         req.gsr_group.ss_family = AF_INET6;
         std::copy(group.begin(), group.end(),
                   reinterpret_cast<struct sockaddr_in6&>(req.gsr_group).sin6_addr.s6_addr);
@@ -328,6 +328,19 @@ namespace {
         if (::setsockopt(fd, SOL_IPV6, MCAST_JOIN_SOURCE_GROUP, &req, sizeof(req)) < 0)
             SENF_THROW_SYSTEM_EXCEPTION("::setsockopt()");
     }
+
+    void mc6SSMSourceRequest(int operation, int fd, senf::INet6Address const & group,
+                             senf::INet6Address const & source, std::string const & iface)
+    {
+        int ifacei (0);
+        if (! iface.empty()) {
+            ifacei = if_nametoindex(iface.c_str());
+            if (ifacei == 0)
+                throw senf::SystemException("::if_nametoindex()", ENOENT SENF_EXC_DEBUGINFO);
+        }
+        mc6SSMSourceRequest(operation, fd, group, source, ifacei);
+    }
+
 }
 
 prefix_ void senf::INet6MulticastSocketProtocol::mcJoinSSMSource(INet6Address const & group,
@@ -338,6 +351,14 @@ prefix_ void senf::INet6MulticastSocketProtocol::mcJoinSSMSource(INet6Address co
     mc6SSMSourceRequest(MCAST_JOIN_SOURCE_GROUP, fd(), group, source, iface);
 }
 
+prefix_ void senf::INet6MulticastSocketProtocol::mcJoinSSMSource(INet6Address const & group,
+                                                                 INet6Address const & source,
+                                                                 int ifacei)
+    const
+{
+    mc6SSMSourceRequest(MCAST_JOIN_SOURCE_GROUP, fd(), group, source, ifacei);
+}
+
 prefix_ void senf::INet6MulticastSocketProtocol::mcLeaveSSMSource(INet6Address const & group,
                                                                   INet6Address const & source,
                                                                   std::string const & iface)
@@ -346,6 +367,7 @@ prefix_ void senf::INet6MulticastSocketProtocol::mcLeaveSSMSource(INet6Address c
     mc6SSMSourceRequest(MCAST_LEAVE_SOURCE_GROUP, fd(), group, source, iface);
 }
 
+
 ///////////////////////////////cc.e////////////////////////////////////////
 #undef prefix_
 //#include "MulticastSocketProtocol.mpp"