X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPPI%2FSocketSource.ct;h=946515bf04731a74b7a5f41b5d2a61e81d48c85b;hb=refs%2Fheads%2Fmaster;hp=bc60d299c6c728e6978091e6544748552e30b539;hpb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;p=senf.git diff --git a/senf/PPI/SocketSource.ct b/senf/PPI/SocketSource.ct index bc60d29..946515b 100644 --- a/senf/PPI/SocketSource.ct +++ b/senf/PPI/SocketSource.ct @@ -2,23 +2,28 @@ // // Copyright (C) 2007 // Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY -// Stefan Bund // -// 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): +// Stefan Bund /** \file \brief SocketSource non-inline template implementation */ @@ -28,20 +33,20 @@ // Custom includes #define prefix_ -///////////////////////////////ct.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::ppi::DgramReader template -prefix_ Packet senf::ppi::DgramReader::operator()(Handle handle) +prefix_ Packet senf::ppi::DgramReader::operator()(Handle & handle) { Packet packet (Packet::create(senf::noinit)); - handle.read(packet.data(),MaxSize); + handle.read(packet.data(), MaxSize); return packet; } -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::ppi::module::ActiveSocketSource template @@ -60,7 +65,7 @@ prefix_ senf::ppi::module::ActiveSocketSource::ActiveSocketSource(Reader } template -prefix_ senf::ppi::module::ActiveSocketSource::ActiveSocketSource(Handle handle) +prefix_ senf::ppi::module::ActiveSocketSource::ActiveSocketSource(Handle const & handle) : handle_(handle), event_(handle_, IOEvent::Read) { registerEvent( event_, &ActiveSocketSource::read ); @@ -68,7 +73,7 @@ prefix_ senf::ppi::module::ActiveSocketSource::ActiveSocketSource(Handle } template -prefix_ senf::ppi::module::ActiveSocketSource::ActiveSocketSource(Handle handle, +prefix_ senf::ppi::module::ActiveSocketSource::ActiveSocketSource(Handle const & handle, Reader reader) : handle_(handle), event_(handle_, IOEvent::Read), reader_(reader) { @@ -76,16 +81,83 @@ prefix_ senf::ppi::module::ActiveSocketSource::ActiveSocketSource(Handle route(event_, output); } -//////////////////////////////////////// -// private members +//-///////////////////////////////////////////////////////////////////////////////////////////////// +// senf::ppi::module::ActiveBurstSocketSource + +template +prefix_ senf::ppi::module::ActiveBurstSocketSource::ActiveBurstSocketSource(unsigned max_burst) + : maxBurst_(max_burst) +{ + registerEvent( event_, &ActiveBurstSocketSource::read ); + route(event_, output); +} + +template +prefix_ senf::ppi::module::ActiveBurstSocketSource::ActiveBurstSocketSource(Reader reader, unsigned max_burst) + : reader_(reader), maxBurst_(maxBurst) +{ + registerEvent( event_, &ActiveBurstSocketSource::read ); + route(event_, output); +} + +template +prefix_ senf::ppi::module::ActiveBurstSocketSource::ActiveBurstSocketSource(Handle const & handle, unsigned max_burst) + : handle_(handle), event_(handle_, IOEvent::Read), maxBurst_(max_burst) +{ + registerEvent( event_, &ActiveBurstSocketSource::read ); + route(event_, output); +} + +template +prefix_ senf::ppi::module::ActiveBurstSocketSource::ActiveBurstSocketSource(Handle const & handle, + Reader reader, unsigned max_burst) + : handle_(handle), event_(handle_, IOEvent::Read), reader_(reader), maxBurst_(max_burst) +{ + registerEvent( event_, &ActiveBurstSocketSource::read ); + route(event_, output); +} + +template +prefix_ void senf::ppi::module::ActiveBurstSocketSource::maxBurst(unsigned max_burst) +{ + maxBurst_ = max_burst; +} + +template +prefix_ unsigned senf::ppi::module::ActiveBurstSocketSource::maxBurst() + const +{ + return maxBurst_; +} template -prefix_ void senf::ppi::module::ActiveSocketSource::read() +prefix_ void senf::ppi::module::ActiveBurstSocketSource::read() { output(reader_(handle_)); + for (unsigned int i = 0; i < maxBurst_; ++i) { + typename Reader::PacketType p (reader_(handle_)); + if (p.data().size() > 0) + output( p); + else + break; + } } -///////////////////////////////ct.e//////////////////////////////////////// +template +prefix_ void senf::ppi::module::ActiveBurstSocketSource::flush() +{ + try{ + while( true){ + typename Reader::PacketType p(reader_(handle_)); + if (p.data().size() <= 0) + break; + } + } + catch(...){}; +} + + +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_