X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FINetProtocol.cc;h=b6685b0e24c884eea4061f6b9a572e0c14630ff1;hb=9a988902090d28007578e93bffd809f6bd913155;hp=b66e15d740d25d76c014b9552acb9da2a7eaff11;hpb=c52cd7d87dbb525c1267aad27391b8b7365dbb57;p=senf.git diff --git a/Socket/INetProtocol.cc b/Socket/INetProtocol.cc index b66e15d..b6685b0 100644 --- a/Socket/INetProtocol.cc +++ b/Socket/INetProtocol.cc @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2006 +// Copyright (C) 2006 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) // Kompetenzzentrum fuer Satelitenkommunikation (SatCom) // Stefan Bund @@ -20,7 +20,8 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// Definition of non-inline non-template functions +/** \file + \brief INet[46]Protocol non-inline non-template implementation */ #include "INetProtocol.hh" //#include "INetProtocol.ih" @@ -28,7 +29,6 @@ // Custom includes #include #include -#include // for if_nametoindex #include "Utils/Exception.hh" //#include "INetProtocol.mpp" @@ -36,118 +36,40 @@ ///////////////////////////////cc.p//////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// -// satcom::lib::INet4Protocol +// senf::IPv4Protocol -prefix_ void satcom::lib::IPv4Protocol::connect(INet4Address const & address) +prefix_ void senf::IPv4Protocol::connect(INet4Address const & address) const { if (::connect(body().fd(),address.sockaddr_p(), address.sockaddr_len()) < 0) throw SystemException(errno); } -prefix_ void satcom::lib::IPv4Protocol::bind(INet4Address const & address) +prefix_ void senf::IPv4Protocol::bind(INet4Address const & address) const { if (::bind(body().fd(),address.sockaddr_p(), address.sockaddr_len()) < 0) throw SystemException(errno); } -prefix_ bool satcom::lib::IPv4Protocol::mcLoop() - const -{ - int value; - socklen_t len (sizeof(value)); - if (::getsockopt(body().fd(),SOL_IP,IP_MULTICAST_LOOP,&value,&len) < 0) - throw SystemException(errno); - return value; -} - -prefix_ void satcom::lib::IPv4Protocol::mcLoop(bool value) - const -{ - int ivalue (value); - if (::setsockopt(body().fd(),SOL_IP,IP_MULTICAST_LOOP,&ivalue,sizeof(ivalue)) < 0) - throw SystemException(errno); -} - -prefix_ void satcom::lib::IPv4Protocol::mcAddMembership(INet4Address const & mcAddr) - const -{ - struct ip_mreqn mreqn; - mreqn.imr_multiaddr = reinterpret_cast(mcAddr.sockaddr_p())->sin_addr; - mreqn.imr_address.s_addr = htons(INADDR_ANY); - mreqn.imr_ifindex = 0; - if (::setsockopt(body().fd(),SOL_IP,IP_ADD_MEMBERSHIP,&mreqn,sizeof(mreqn)) < 0) - throw SystemException(errno); -} - -prefix_ void satcom::lib::IPv4Protocol::mcAddMembership(INet4Address const & mcAddr, - INet4Address const & localAddr) - const -{ - struct ip_mreqn mreqn; - mreqn.imr_multiaddr = reinterpret_cast(mcAddr.sockaddr_p())->sin_addr; - mreqn.imr_address = reinterpret_cast(localAddr.sockaddr_p())->sin_addr; - mreqn.imr_ifindex = 0; - if (::setsockopt(body().fd(),SOL_IP,IP_ADD_MEMBERSHIP,&mreqn,sizeof(mreqn)) < 0) - throw SystemException(errno); -} -prefix_ void satcom::lib::IPv4Protocol::mcDropMembership(INet4Address const & mcAddr) - const -{ - struct ip_mreqn mreqn; - mreqn.imr_multiaddr = reinterpret_cast(mcAddr.sockaddr_p())->sin_addr; - mreqn.imr_address.s_addr = htons(INADDR_ANY); - mreqn.imr_ifindex = 0; - if (::setsockopt(body().fd(),SOL_IP,IP_DROP_MEMBERSHIP,&mreqn,sizeof(mreqn)) < 0) - throw SystemException(errno); -} - -prefix_ void satcom::lib::IPv4Protocol::mcDropMembership(INet4Address const & mcAddr, - INet4Address const & localAddr) - const -{ - struct ip_mreqn mreqn; - mreqn.imr_multiaddr = reinterpret_cast(mcAddr.sockaddr_p())->sin_addr; - mreqn.imr_address = reinterpret_cast(localAddr.sockaddr_p())->sin_addr; - mreqn.imr_ifindex = 0; - if (::setsockopt(body().fd(),SOL_IP,IP_DROP_MEMBERSHIP,&mreqn,sizeof(mreqn)) < 0) - throw SystemException(errno); -} - -prefix_ void satcom::lib::IPv4Protocol::mcIface(std::string iface) - const -{ - struct ip_mreqn mreqn; - ::memset(&mreqn,sizeof(mreqn),0); - if (!iface.empty()) { - mreqn.imr_ifindex = if_nametoindex(iface.c_str()); - if (mreqn.imr_ifindex == 0) - throw SystemException(EINVAL); - } - if (::setsockopt(body().fd(),SOL_IP,IP_MULTICAST_IF,&mreqn,sizeof(mreqn)) < 0) - throw SystemException(errno); -} +/////////////////////////////////////////////////////////////////////////// +// senf::IPv6Protocol -prefix_ unsigned satcom::lib::IPv4Protocol::mcTTL() +prefix_ void senf::IPv6Protocol::connect(INet6SocketAddress const & address) const { - int value; - socklen_t len (sizeof(value)); - if (::getsockopt(body().fd(),SOL_IP,IP_MULTICAST_TTL,&value,&len) < 0) + if (::connect(body().fd(),address.sockaddr_p(), address.sockaddr_len()) < 0) throw SystemException(errno); - return value; } -prefix_ void satcom::lib::IPv4Protocol::mcTTL(unsigned value) +prefix_ void senf::IPv6Protocol::bind(INet6SocketAddress const & address) const { - if (::setsockopt(body().fd(),SOL_IP,IP_MULTICAST_TTL,&value,sizeof(value)) < 0) + if (::bind(body().fd(),address.sockaddr_p(), address.sockaddr_len()) < 0) throw SystemException(errno); } - ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_ //#include "INetProtocol.mpp" @@ -155,5 +77,8 @@ prefix_ void satcom::lib::IPv4Protocol::mcTTL(unsigned value) // Local Variables: // mode: c++ -// c-file-style: "satcom" +// fill-column: 100 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" // End: