diff options
author | orivej <orivej@yandex-team.ru> | 2022-02-10 16:44:49 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:44:49 +0300 |
commit | 718c552901d703c502ccbefdfc3c9028d608b947 (patch) | |
tree | 46534a98bbefcd7b1f3faa5b52c138ab27db75b7 /contrib/libs/poco/Net/src/ICMPPacketImpl.cpp | |
parent | e9656aae26e0358d5378e5b63dcac5c8dbe0e4d0 (diff) | |
download | ydb-718c552901d703c502ccbefdfc3c9028d608b947.tar.gz |
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/poco/Net/src/ICMPPacketImpl.cpp')
-rw-r--r-- | contrib/libs/poco/Net/src/ICMPPacketImpl.cpp | 206 |
1 files changed, 103 insertions, 103 deletions
diff --git a/contrib/libs/poco/Net/src/ICMPPacketImpl.cpp b/contrib/libs/poco/Net/src/ICMPPacketImpl.cpp index 48092c0094..d0f2592f61 100644 --- a/contrib/libs/poco/Net/src/ICMPPacketImpl.cpp +++ b/contrib/libs/poco/Net/src/ICMPPacketImpl.cpp @@ -1,103 +1,103 @@ -// -// ICMPPacketImpl.cpp -// -// Library: Net -// Package: ICMP -// Module: ICMPPacketImpl -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/ICMPPacketImpl.h" -#include "Poco/Net/NetException.h" -#include "Poco/Timestamp.h" -#include "Poco/Timespan.h" -#include "Poco/NumberFormatter.h" -#include <sstream> - - -using Poco::InvalidArgumentException; -using Poco::Timestamp; -using Poco::Timespan; -using Poco::NumberFormatter; -using Poco::UInt8; -using Poco::UInt16; -using Poco::Int32; - - -namespace Poco { -namespace Net { - - -const UInt16 ICMPPacketImpl::MAX_PACKET_SIZE = 4096; -const UInt16 ICMPPacketImpl::MAX_SEQ_VALUE = 65535; - - -ICMPPacketImpl::ICMPPacketImpl(int dataSize): - _seq(0), - _pPacket(new UInt8[MAX_PACKET_SIZE]), - _dataSize(dataSize) -{ - if (_dataSize > MAX_PACKET_SIZE) - throw InvalidArgumentException("Packet size must be <= " + NumberFormatter::format(MAX_PACKET_SIZE)); -} - - -ICMPPacketImpl::~ICMPPacketImpl() -{ - delete [] _pPacket; -} - - -void ICMPPacketImpl::setDataSize(int dataSize) -{ - _dataSize = dataSize; - initPacket(); -} - - -int ICMPPacketImpl::getDataSize() const -{ - return _dataSize; -} - - -const Poco::UInt8* ICMPPacketImpl::packet(bool init) -{ - if (init) initPacket(); - return _pPacket; -} - - -unsigned short ICMPPacketImpl::checksum(UInt16 *addr, Int32 len) -{ - Int32 nleft = len; - UInt16* w = addr; - UInt16 answer; - Int32 sum = 0; - - while (nleft > 1) - { - sum += *w++; - nleft -= sizeof(UInt16); - } - - if (nleft == 1) - { - UInt16 u = 0; - *(UInt8*) (&u) = *(UInt8*) w; - sum += u; - } - - sum = (sum >> 16) + (sum & 0xffff); - sum += (sum >> 16); - answer = static_cast<UInt16>(~sum); - return answer; -} - - -} } // namespace Poco::Net +// +// ICMPPacketImpl.cpp +// +// Library: Net +// Package: ICMP +// Module: ICMPPacketImpl +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#include "Poco/Net/ICMPPacketImpl.h" +#include "Poco/Net/NetException.h" +#include "Poco/Timestamp.h" +#include "Poco/Timespan.h" +#include "Poco/NumberFormatter.h" +#include <sstream> + + +using Poco::InvalidArgumentException; +using Poco::Timestamp; +using Poco::Timespan; +using Poco::NumberFormatter; +using Poco::UInt8; +using Poco::UInt16; +using Poco::Int32; + + +namespace Poco { +namespace Net { + + +const UInt16 ICMPPacketImpl::MAX_PACKET_SIZE = 4096; +const UInt16 ICMPPacketImpl::MAX_SEQ_VALUE = 65535; + + +ICMPPacketImpl::ICMPPacketImpl(int dataSize): + _seq(0), + _pPacket(new UInt8[MAX_PACKET_SIZE]), + _dataSize(dataSize) +{ + if (_dataSize > MAX_PACKET_SIZE) + throw InvalidArgumentException("Packet size must be <= " + NumberFormatter::format(MAX_PACKET_SIZE)); +} + + +ICMPPacketImpl::~ICMPPacketImpl() +{ + delete [] _pPacket; +} + + +void ICMPPacketImpl::setDataSize(int dataSize) +{ + _dataSize = dataSize; + initPacket(); +} + + +int ICMPPacketImpl::getDataSize() const +{ + return _dataSize; +} + + +const Poco::UInt8* ICMPPacketImpl::packet(bool init) +{ + if (init) initPacket(); + return _pPacket; +} + + +unsigned short ICMPPacketImpl::checksum(UInt16 *addr, Int32 len) +{ + Int32 nleft = len; + UInt16* w = addr; + UInt16 answer; + Int32 sum = 0; + + while (nleft > 1) + { + sum += *w++; + nleft -= sizeof(UInt16); + } + + if (nleft == 1) + { + UInt16 u = 0; + *(UInt8*) (&u) = *(UInt8*) w; + sum += u; + } + + sum = (sum >> 16) + (sum & 0xffff); + sum += (sum >> 16); + answer = static_cast<UInt16>(~sum); + return answer; +} + + +} } // namespace Poco::Net |