X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Examples%2FMCSniffer%2FMCSniffer.cc;h=fd288d2edf7ac3fcac7a5f4875c8bde56fd8a420;hb=81ffa1c459b96dd44472bcef37e1e373934ee138;hp=3c85556574bbdef00e1de4d3be67174787cd6dc7;hpb=02c21e4905a5d5038e759a514babc0781e4d6052;p=senf.git diff --git a/Examples/MCSniffer/MCSniffer.cc b/Examples/MCSniffer/MCSniffer.cc index 3c85556..fd288d2 100644 --- a/Examples/MCSniffer/MCSniffer.cc +++ b/Examples/MCSniffer/MCSniffer.cc @@ -21,103 +21,49 @@ // Definition of non-inline non-template functions -//#include "Sniffer.hh" -//#include "Sniffer.ih" +//#include "MCSniffer.hh" +//#include "MCSniffer.ih" // Custom includes -#include #include - -#include -#include -#include -#include -#include // - #include -#include #include -#include "Socket/UDPSocketHandle.hh" +#include "Socket/Protocols/INet/UDPSocketHandle.hh" #include "Scheduler/Scheduler.hh" +#include "Packets/DefaultBundle/EthernetPacket.hh" #include "Utils/membind.hh" - -#include "Packets/EthernetPacket.hh" +#include "Utils/hexdump.hh" - - -//#include "Sniffer.mpp" +//#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 MSniffer +class MCSniffer { senf::UDPv4ClientSocketHandle sock; std::ostream& stream; public: - MSniffer(senf::INet4Address addr, std::ostream& s) + MCSniffer(senf::INet4SocketAddress addr, std::ostream& s) : stream(s) { sock.protocol().bind(addr); sock.protocol().mcLoop(true); sock.protocol().mcAddMembership(addr); senf::Scheduler::instance().add( - sock, senf::membind(&MSniffer::dumpPacket, this)); + sock, senf::membind(&MCSniffer::dumpPacket, this)); } private: void dumpPacket(senf::FileHandle /* ignored */, senf::Scheduler::EventId event) { std::string data (sock.read()); - senf::EthernetPacket::ptr packet ( - senf::Packet::create( - data.begin(), data.end())); - packet->dump(stream); - hexdump(packet->last()->begin(), - packet->last()->end(), + senf::EthernetPacket packet ( + senf::EthernetPacket::create(data)); + packet.dump(stream); + senf::hexdump(packet.last().data().begin(), + packet.last().data().end(), stream); stream << "\n\n"; } @@ -130,10 +76,10 @@ int main(int argc, char const * argv[]) std::ofstream f1 ("233.132.152.1.txt"); std::ofstream f2 ("233.132.152.2.txt"); - MSniffer sniffer1 ( - senf::INet4Address::INet4Address("233.132.152.1:22344"), f1); - MSniffer sniffer2 ( - senf::INet4Address::INet4Address("233.132.152.2:22344"), f2); + MCSniffer sniffer1 ( + senf::INet4SocketAddress("233.132.152.1:22344"), f1); + MCSniffer sniffer2 ( + senf::INet4SocketAddress("233.132.152.2:22344"), f2); senf::Scheduler::instance().process(); } @@ -146,7 +92,7 @@ int main(int argc, char const * argv[]) ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_ -//#include "Sniffer.mpp" +//#include "MCSniffer.mpp" // Local Variables: @@ -155,4 +101,6 @@ int main(int argc, char const * argv[]) // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" +// compile-command: "scons -u" +// comment-column: 40 // End: