X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPPI%2FSocketSource.ct;h=00f556418288af24715eeb3e508eb6e20532ce68;hb=aeb7c57c3b42e83cb0b429989f9c3ab0900a76a4;hp=58131fa8d8962ef6a2161185e12f664c5731e05c;hpb=adc12e8819cd179bf717132e9eb5a5849f281e52;p=senf.git diff --git a/senf/PPI/SocketSource.ct b/senf/PPI/SocketSource.ct index 58131fa..00f5564 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,7 +81,69 @@ prefix_ senf::ppi::module::ActiveSocketSource::ActiveSocketSource(Handle route(event_, output); } -///////////////////////////////ct.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// +// 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::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; + } +} + +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_