Skip to content
Snippets Groups Projects
Select Git revision
  • d2cd2d85e7c994fcb88a2aee79c3429b0dbb62c6
  • master default protected
  • L2SS-1914-fix_job_dispatch
  • TMSS-3170
  • TMSS-3167
  • TMSS-3161
  • TMSS-3158-Front-End-Only-Allow-Changing-Again
  • TMSS-3133
  • TMSS-3319-Fix-Templates
  • test-fix-deploy
  • TMSS-3134
  • TMSS-2872
  • defer-state
  • add-custom-monitoring-points
  • TMSS-3101-Front-End-Only
  • TMSS-984-choices
  • SDC-1400-Front-End-Only
  • TMSS-3079-PII
  • TMSS-2936
  • check-for-max-244-subbands
  • TMSS-2927---Front-End-Only-PXII
  • Before-Remove-TMSS
  • LOFAR-Release-4_4_318 protected
  • LOFAR-Release-4_4_317 protected
  • LOFAR-Release-4_4_316 protected
  • LOFAR-Release-4_4_315 protected
  • LOFAR-Release-4_4_314 protected
  • LOFAR-Release-4_4_313 protected
  • LOFAR-Release-4_4_312 protected
  • LOFAR-Release-4_4_311 protected
  • LOFAR-Release-4_4_310 protected
  • LOFAR-Release-4_4_309 protected
  • LOFAR-Release-4_4_308 protected
  • LOFAR-Release-4_4_307 protected
  • LOFAR-Release-4_4_306 protected
  • LOFAR-Release-4_4_304 protected
  • LOFAR-Release-4_4_303 protected
  • LOFAR-Release-4_4_302 protected
  • LOFAR-Release-4_4_301 protected
  • LOFAR-Release-4_4_300 protected
  • LOFAR-Release-4_4_299 protected
41 results

PacketReader.cc

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    PacketReader.cc 2.77 KiB
    #include <lofar_config.h>
    #include "PacketReader.h"
    #include <Common/LofarLogger.h>
    #include <Stream/SocketStream.h>
    #include <Interface/RSPTimeStamp.h>
    #include <Interface/Stream.h>
    #include <boost/format.hpp>
    
    namespace LOFAR {
    namespace RTCP {
    
    
    PacketReader::PacketReader( const std::string &logPrefix, const std::string &streamDescriptor, const struct BufferSettings &settings )
    :
      logPrefix(str(boost::format("%s [PacketReader] ") % logPrefix)),
      settings(settings),
    
      nrReceived(0),
      nrBadSize(0),
      nrBadTime(0),
      nrBadData(0),
      nrBadMode(0),
      hadSizeError(false),
      hadModeError(false)
    {
      inputStream = createStream(streamDescriptor, true);
    
      SocketStream *asSocket = dynamic_cast<SocketStream *>(inputStream.get());
      bool isUDP = asSocket && asSocket->protocol == SocketStream::UDP;
    
      supportPartialReads = !isUDP;
    }
    
    
    bool PacketReader::readPacket( struct RSP &packet )
    {
      if (supportPartialReads) {
        // read header first
        inputStream->read(&packet.header, sizeof packet.header);
    
        // read rest of packet
        inputStream->read(&packet.payload.data, packet.packetSize() - sizeof packet.header);
    
        ++nrReceived;
      } else {
        // read full packet at once -- numbytes will tell us how much we've actually read
        size_t numbytes = inputStream->tryRead(&packet, sizeof packet);
    
        ++nrReceived;
    
        if( numbytes < sizeof(struct RSP::Header)
         || numbytes != packet.packetSize() ) {
    
          if (!hadSizeError) {
            LOG_ERROR_STR( logPrefix << "Packet is " << numbytes << " bytes, but should be " << packet.packetSize() << " bytes" );
            hadSizeError = true;
          }
    
          ++nrBadSize;
          return false;
        }
      }
    
      // illegal timestamp means illegal packet
      if (packet.header.timestamp == ~0U) {
        ++nrBadTime;
        return false;
      }
    
      // check sanity of packet