#include "UDPPacket.hh"
//#include "UDPPacket.ih"
-#include "IPv4Packet.hh"
// Custom includes
#include <iomanip>
const
{
IpChecksum summer;
- summer.feed( i(), i()+checksum_offset );
- summer.feed( i()+checksum_offset+2, data().end() );
-
- // Now on to the awkward part: the IP pseudo header
+ // first on to the awkward part: the IP pseudo header
IPv4Packet ipv4 (packet().rfind<IPv4Packet>(nothrow));
if (ipv4) {
// Pseudo header defined in RFC768
}
}
+ // since header are 16 / even 32bit aligned we don't have to care for padding. since IpChecksum
+ // cares for padding at the final summing we don't have to care is the payload is 16nbit-aligned, too.
+ summer.feed( i(), i()+checksum_offset );
+ summer.feed( i()+checksum_offset+2, data().end() );
+
boost::uint16_t rv (summer.sum());
return rv ? rv : 0xffffu;
}
{
boost::io::ios_all_saver ias(os);
os << "UDP:\n"
- << " source port : " << p->source() << "\n"
- << " dest port : " << p->destination() << "\n"
- << " length : " << p->length() << "\n"
- << " checksum : "
- << std::hex << std::setw(4) << std::setfill('0') << p->checksum() << "\n";
+ << " source port : " << p->source() << "\n"
+ << " dest port : " << p->destination() << "\n"
+ << " length : " << p->length() << "\n"
+ << " checksum : "
+ << std::hex << std::setw(4) << std::setfill('0') << p->checksum() << "\n";
}
prefix_ void senf::UDPPacketType::finalize(packet p)