aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Net/src/ICMPSocketImpl.cpp
diff options
context:
space:
mode:
authororivej <orivej@yandex-team.ru>2022-02-10 16:45:01 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:45:01 +0300
commit2d37894b1b037cf24231090eda8589bbb44fb6fc (patch)
treebe835aa92c6248212e705f25388ebafcf84bc7a1 /contrib/libs/poco/Net/src/ICMPSocketImpl.cpp
parent718c552901d703c502ccbefdfc3c9028d608b947 (diff)
downloadydb-2d37894b1b037cf24231090eda8589bbb44fb6fc.tar.gz
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/poco/Net/src/ICMPSocketImpl.cpp')
-rw-r--r--contrib/libs/poco/Net/src/ICMPSocketImpl.cpp194
1 files changed, 97 insertions, 97 deletions
diff --git a/contrib/libs/poco/Net/src/ICMPSocketImpl.cpp b/contrib/libs/poco/Net/src/ICMPSocketImpl.cpp
index b68748e2ab..8c68d53030 100644
--- a/contrib/libs/poco/Net/src/ICMPSocketImpl.cpp
+++ b/contrib/libs/poco/Net/src/ICMPSocketImpl.cpp
@@ -1,97 +1,97 @@
-//
-// ICMPSocketImpl.cpp
-//
-// Library: Net
-// Package: ICMP
-// Module: ICMPSocketImpl
-//
-// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/ICMPSocketImpl.h"
-#include "Poco/Net/NetException.h"
-#include "Poco/Timespan.h"
-#include "Poco/Timestamp.h"
-#include "Poco/Exception.h"
-#include "Poco/Buffer.h"
-
-
-using Poco::TimeoutException;
-using Poco::Timespan;
-using Poco::Exception;
-
-
-namespace Poco {
-namespace Net {
-
-
-ICMPSocketImpl::ICMPSocketImpl(IPAddress::Family family, int dataSize, int ttl, int timeout):
- RawSocketImpl(family, IPPROTO_ICMP),
- _icmpPacket(family, dataSize),
- _ttl(ttl),
- _timeout(timeout)
-{
- setOption(IPPROTO_IP, IP_TTL, ttl);
- setReceiveTimeout(Timespan(timeout));
-}
-
-
-ICMPSocketImpl::~ICMPSocketImpl()
-{
-}
-
-
-int ICMPSocketImpl::sendTo(const void*, int, const SocketAddress& address, int flags)
-{
- int n = SocketImpl::sendTo(_icmpPacket.packet(), _icmpPacket.packetSize(), address, flags);
- return n;
-}
-
-
-int ICMPSocketImpl::receiveFrom(void*, int, SocketAddress& address, int flags)
-{
- int maxPacketSize = _icmpPacket.maxPacketSize();
- Poco::Buffer<unsigned char> buffer(maxPacketSize);
-
- try
- {
- Poco::Timestamp ts;
- do
- {
- if (ts.isElapsed(_timeout))
- {
- // This guards against a possible DoS attack, where sending
- // fake ping responses will cause an endless loop.
- throw TimeoutException();
- }
- SocketImpl::receiveFrom(buffer.begin(), maxPacketSize, address, flags);
- }
- while (!_icmpPacket.validReplyID(buffer.begin(), maxPacketSize));
- }
- catch (TimeoutException&)
- {
- throw;
- }
- catch (Exception&)
- {
- std::string err = _icmpPacket.errorDescription(buffer.begin(), maxPacketSize);
- if (!err.empty())
- throw ICMPException(err);
- else
- throw;
- }
-
- struct timeval then = _icmpPacket.time(buffer.begin(), maxPacketSize);
- struct timeval now = _icmpPacket.time();
-
- int elapsed = (((now.tv_sec * 1000000) + now.tv_usec) - ((then.tv_sec * 1000000) + then.tv_usec))/1000;
-
- return elapsed;
-}
-
-
-} } // namespace Poco::Net
+//
+// ICMPSocketImpl.cpp
+//
+// Library: Net
+// Package: ICMP
+// Module: ICMPSocketImpl
+//
+// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/ICMPSocketImpl.h"
+#include "Poco/Net/NetException.h"
+#include "Poco/Timespan.h"
+#include "Poco/Timestamp.h"
+#include "Poco/Exception.h"
+#include "Poco/Buffer.h"
+
+
+using Poco::TimeoutException;
+using Poco::Timespan;
+using Poco::Exception;
+
+
+namespace Poco {
+namespace Net {
+
+
+ICMPSocketImpl::ICMPSocketImpl(IPAddress::Family family, int dataSize, int ttl, int timeout):
+ RawSocketImpl(family, IPPROTO_ICMP),
+ _icmpPacket(family, dataSize),
+ _ttl(ttl),
+ _timeout(timeout)
+{
+ setOption(IPPROTO_IP, IP_TTL, ttl);
+ setReceiveTimeout(Timespan(timeout));
+}
+
+
+ICMPSocketImpl::~ICMPSocketImpl()
+{
+}
+
+
+int ICMPSocketImpl::sendTo(const void*, int, const SocketAddress& address, int flags)
+{
+ int n = SocketImpl::sendTo(_icmpPacket.packet(), _icmpPacket.packetSize(), address, flags);
+ return n;
+}
+
+
+int ICMPSocketImpl::receiveFrom(void*, int, SocketAddress& address, int flags)
+{
+ int maxPacketSize = _icmpPacket.maxPacketSize();
+ Poco::Buffer<unsigned char> buffer(maxPacketSize);
+
+ try
+ {
+ Poco::Timestamp ts;
+ do
+ {
+ if (ts.isElapsed(_timeout))
+ {
+ // This guards against a possible DoS attack, where sending
+ // fake ping responses will cause an endless loop.
+ throw TimeoutException();
+ }
+ SocketImpl::receiveFrom(buffer.begin(), maxPacketSize, address, flags);
+ }
+ while (!_icmpPacket.validReplyID(buffer.begin(), maxPacketSize));
+ }
+ catch (TimeoutException&)
+ {
+ throw;
+ }
+ catch (Exception&)
+ {
+ std::string err = _icmpPacket.errorDescription(buffer.begin(), maxPacketSize);
+ if (!err.empty())
+ throw ICMPException(err);
+ else
+ throw;
+ }
+
+ struct timeval then = _icmpPacket.time(buffer.begin(), maxPacketSize);
+ struct timeval now = _icmpPacket.time();
+
+ int elapsed = (((now.tv_sec * 1000000) + now.tv_usec) - ((then.tv_sec * 1000000) + then.tv_usec))/1000;
+
+ return elapsed;
+}
+
+
+} } // namespace Poco::Net