X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Examples%2FMCSniffer%2FMCSniffer.cc;h=81882a146491950ecd4994cd7cbcf8ebc19d99dc;hb=ca3f7bcf0c35022a2b6dbd33fd6b1afba4e78222;hp=2cbb2a3c8b646f7a654dbeaf9783598e791cf81b;hpb=2c4c9deecc7491fbfc916aeb41074dcb76e8a2c2;p=senf.git diff --git a/Examples/MCSniffer/MCSniffer.cc b/Examples/MCSniffer/MCSniffer.cc index 2cbb2a3..81882a1 100644 --- a/Examples/MCSniffer/MCSniffer.cc +++ b/Examples/MCSniffer/MCSniffer.cc @@ -1,23 +1,30 @@ // $Id$ // // Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// Fraunhofer Institute for Open Communication Systems (FOKUS) // -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. +// The contents of this file are subject to the Fraunhofer FOKUS Public License +// Version 1.0 (the "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// http://senf.berlios.de/license.html // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// The Fraunhofer FOKUS Public License Version 1.0 is based on, +// but modifies the Mozilla Public License Version 1.1. +// See the full license text for the amendments. // -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the -// Free Software Foundation, Inc., -// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// Software distributed under the License is distributed on an "AS IS" basis, +// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// for the specific language governing rights and limitations under the License. +// +// The Original Code is Fraunhofer FOKUS code. +// +// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. +// (registered association), Hansastraße 27 c, 80686 Munich, Germany. +// All Rights Reserved. +// +// Contributor(s): +// Thorsten Horstmann + // Definition of non-inline non-template functions @@ -28,82 +35,41 @@ #include #include #include -#include "Socket/Protocols/INet/UDPSocketHandle.hh" -#include "Scheduler/Scheduler.hh" -#include "Packets/DefaultBundle/EthernetPacket.hh" -#include "Utils/membind.hh" +#include +#include +#include +#include +#include //#include "MCSniffer.mpp" #define prefix_ -///////////////////////////////cc.p//////////////////////////////////////// - -namespace { - - static const unsigned BLOCK_SIZE = 16; - - template - void hexdump(Iterator i, Iterator const & i_end, std::ostream& stream) - { - unsigned offset (0); - std::string ascii; - for (; i != i_end; ++i, ++offset) { - switch (offset % BLOCK_SIZE) { - case 0: - if (!ascii.empty()) { - stream << " " << ascii << "\n"; - ascii = ""; - } - stream << " " - << std::hex << std::setw(4) << std::setfill('0') - << offset << ' '; - break; - case BLOCK_SIZE/2: - stream << " "; - ascii += ' '; - break; - } - stream << ' ' << std::hex << std::setw(2) << std::setfill('0') - << unsigned(*i); - ascii += (*i >= ' ' && *i < 126) ? *i : '.'; - } - if (!ascii.empty()) { - for (; (offset % BLOCK_SIZE) != 0; ++offset) { - if ((offset % BLOCK_SIZE) == BLOCK_SIZE/2) - stream << " "; - stream << " "; - } - stream << " " << ascii << "\n"; - } - stream << std::dec; - } -} - +//-///////////////////////////////////////////////////////////////////////////////////////////////// class MCSniffer { senf::UDPv4ClientSocketHandle sock; std::ostream& stream; + senf::scheduler::FdEvent event; public: MCSniffer(senf::INet4Address addr, std::ostream& s) - : stream(s) + : stream(s), event("MCSniffer", senf::membind(&MCSniffer::dumpPacket, this), + sock, senf::scheduler::FdEvent::EV_READ) { - sock.protocol().bind(addr); + // sock.bind(addr); sock.protocol().mcLoop(true); sock.protocol().mcAddMembership(addr); - senf::Scheduler::instance().add( - sock, senf::membind(&MCSniffer::dumpPacket, this)); } private: - void dumpPacket(senf::FileHandle /* ignored */, senf::Scheduler::EventId event) + void dumpPacket(int event) { std::string data (sock.read()); senf::EthernetPacket packet ( senf::EthernetPacket::create(data)); packet.dump(stream); - hexdump(packet.last().data().begin(), + senf::hexdump(packet.last().data().begin(), packet.last().data().end(), stream); stream << "\n\n"; @@ -112,17 +78,17 @@ private: int main(int argc, char const * argv[]) -{ +{ try { std::ofstream f1 ("233.132.152.1.txt"); std::ofstream f2 ("233.132.152.2.txt"); - + MCSniffer sniffer1 ( - senf::INet4Address::INet4Address("233.132.152.1:22344"), f1); + senf::INet4Address::from_string("233.132.152.1"), f1); MCSniffer sniffer2 ( - senf::INet4Address::INet4Address("233.132.152.2:22344"), f2); - - senf::Scheduler::instance().process(); + senf::INet4Address::from_string("233.132.152.2"), f2); + + senf::scheduler::process(); } catch (std::exception const & ex) { std::cerr << senf::prettyName(typeid(ex)) << ": " << ex.what() << "\n"; @@ -130,8 +96,8 @@ int main(int argc, char const * argv[]) return 0; } - -///////////////////////////////cc.e//////////////////////////////////////// + +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_ //#include "MCSniffer.mpp"