mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-11-04 04:30:04 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include <scwx/awips/message.hpp>
 | 
						|
 | 
						|
#include <boost/log/trivial.hpp>
 | 
						|
 | 
						|
namespace scwx
 | 
						|
{
 | 
						|
namespace awips
 | 
						|
{
 | 
						|
 | 
						|
static const std::string logPrefix_ = "[scwx::awips::message] ";
 | 
						|
 | 
						|
class MessageImpl
 | 
						|
{
 | 
						|
public:
 | 
						|
   explicit MessageImpl() {};
 | 
						|
   ~MessageImpl() = default;
 | 
						|
};
 | 
						|
 | 
						|
Message::Message() : p(std::make_unique<MessageImpl>()) {}
 | 
						|
Message::~Message() = default;
 | 
						|
 | 
						|
Message::Message(Message&&) noexcept = default;
 | 
						|
Message& Message::operator=(Message&&) noexcept = default;
 | 
						|
 | 
						|
bool Message::ValidateMessage(std::istream& is, size_t bytesRead) const
 | 
						|
{
 | 
						|
   bool messageValid = true;
 | 
						|
 | 
						|
   const size_t dataSize = data_size();
 | 
						|
 | 
						|
   if (is.eof())
 | 
						|
   {
 | 
						|
      BOOST_LOG_TRIVIAL(warning) << logPrefix_ << "Reached end of data stream";
 | 
						|
      messageValid = false;
 | 
						|
   }
 | 
						|
   else if (is.fail())
 | 
						|
   {
 | 
						|
      BOOST_LOG_TRIVIAL(warning)
 | 
						|
         << logPrefix_ << "Could not read from input stream";
 | 
						|
      messageValid = false;
 | 
						|
   }
 | 
						|
   else if (bytesRead != dataSize)
 | 
						|
   {
 | 
						|
      is.seekg(static_cast<std::streamoff>(dataSize) -
 | 
						|
                  static_cast<std::streamoff>(bytesRead),
 | 
						|
               std::ios_base::cur);
 | 
						|
 | 
						|
      if (bytesRead < dataSize)
 | 
						|
      {
 | 
						|
         BOOST_LOG_TRIVIAL(trace)
 | 
						|
            << logPrefix_ << "Message contents smaller than size: " << bytesRead
 | 
						|
            << " < " << dataSize << " bytes";
 | 
						|
      }
 | 
						|
      if (bytesRead > dataSize)
 | 
						|
      {
 | 
						|
         BOOST_LOG_TRIVIAL(warning)
 | 
						|
            << logPrefix_ << "Message contents larger than size: " << bytesRead
 | 
						|
            << " > " << dataSize << " bytes";
 | 
						|
         messageValid = false;
 | 
						|
      }
 | 
						|
   }
 | 
						|
 | 
						|
   return messageValid;
 | 
						|
}
 | 
						|
 | 
						|
} // namespace awips
 | 
						|
} // namespace scwx
 |