X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FPacketSocketHandle.cc;h=7250c8c46249213460a1df739d8df281da57d37c;hb=3b44557da0af28f1e0e3b8c0e0fb03de6b0d18c7;hp=4dc8791a60e85311c0121949751294fa5f35dd76;hpb=c52cd7d87dbb525c1267aad27391b8b7365dbb57;p=senf.git diff --git a/Socket/PacketSocketHandle.cc b/Socket/PacketSocketHandle.cc index 4dc8791..7250c8c 100644 --- a/Socket/PacketSocketHandle.cc +++ b/Socket/PacketSocketHandle.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,9 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// Definition of non-inline non-template functions +/** \file + \brief PacketProtocol and PacketSocketHandle non-inline non-template implementation + */ #include "PacketSocketHandle.hh" #include "PacketSocketHandle.ih" @@ -38,7 +40,7 @@ #define prefix_ ///////////////////////////////cc.p//////////////////////////////////////// -prefix_ void satcom::lib::PacketProtocol::init_client(SocketType type, int protocol) +prefix_ void senf::PacketProtocol::init_client(SocketType type, int protocol) const { int socktype = SOCK_RAW; @@ -52,13 +54,13 @@ prefix_ void satcom::lib::PacketProtocol::init_client(SocketType type, int proto body().fd(sock); } -prefix_ std::auto_ptr satcom::lib::PacketProtocol::clone() +prefix_ std::auto_ptr senf::PacketProtocol::clone() const { return std::auto_ptr(new PacketProtocol()); } -prefix_ unsigned satcom::lib::PacketProtocol::available() +prefix_ unsigned senf::PacketProtocol::available() const { if (! body().readable()) @@ -69,38 +71,13 @@ prefix_ unsigned satcom::lib::PacketProtocol::available() return l; } -prefix_ bool satcom::lib::PacketProtocol::eof() +prefix_ bool senf::PacketProtocol::eof() const { return false; } -prefix_ void satcom::lib::PacketProtocol::promisc(std::string interface, PromiscMode mode) - const -{ - // The interface is really stupid: as far as i understand, it is possible to - // enable PROMISC and ALLMULTI seperately, however PROMISC is really a superset - // of ALLMULTI ... grmpf ... therefore we allways set/reset both to implement sane - // semantics - - struct packet_mreq mreq; - mreq.mr_ifindex = ::if_nametoindex(interface.c_str()); - if (mreq.mr_ifindex == 0) - throw SystemException(EINVAL); - mreq.mr_alen = 0; - - mreq.mr_type = PACKET_MR_PROMISC; - int command = mode == Promiscuous ? PACKET_ADD_MEMBERSHIP : PACKET_DROP_MEMBERSHIP; - if (::setsockopt(body().fd(),SOL_PACKET,command,&mreq,sizeof(mreq)) < 0) - throw SystemException(errno); - - mreq.mr_type = PACKET_MR_ALLMULTI; - command = mode == AllMulticast ? PACKET_ADD_MEMBERSHIP : PACKET_DROP_MEMBERSHIP; - if (::setsockopt(body().fd(),SOL_PACKET,command,&mreq,sizeof(mreq)) < 0) - throw SystemException(errno); -} - -prefix_ void satcom::lib::PacketProtocol::do_mc_i(std::string interface, +prefix_ void senf::PacketProtocol::do_mc_i(std::string interface, detail::LLAddressCopier const & copier, bool add) const { @@ -123,5 +100,10 @@ prefix_ void satcom::lib::PacketProtocol::do_mc_i(std::string interface, // Local Variables: // mode: c++ -// c-file-style: "satcom" +// fill-column: 100 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 // End: