aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Net/src/ICMPPacket.cpp
blob: a24b77cd78a1ae1b3ee08259970ba5decff24983 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// 
// ICMPPacket.cpp 
// 
// Library: Net 
// Package: ICMP 
// Module:  ICMPPacket 
// 
// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. 
// and Contributors. 
// 
// SPDX-License-Identifier:	BSL-1.0 
// 
 
 
#include "Poco/Net/ICMPPacket.h" 
#include "Poco/Net/ICMPv4PacketImpl.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::NotImplementedException; 
using Poco::Timestamp; 
using Poco::Timespan; 
using Poco::NumberFormatter; 
using Poco::UInt8; 
using Poco::UInt16; 
using Poco::Int32; 
 
 
namespace Poco { 
namespace Net { 
 
 
ICMPPacket::ICMPPacket(IPAddress::Family family, int dataSize):_pImpl(0) 
{ 
	if (family == IPAddress::IPv4) 
		_pImpl = new ICMPv4PacketImpl(dataSize); 
#if defined(POCO_HAVE_IPv6) 
	else if (family == IPAddress::IPv6) 
		throw NotImplementedException("ICMPv6 packets not implemented."); 
#endif 
	else throw InvalidArgumentException("Invalid or unsupported address family passed to ICMPPacket"); 
} 
 
 
ICMPPacket::~ICMPPacket() 
{ 
	delete _pImpl; 
} 
 
 
void ICMPPacket::setDataSize(int dataSize) 
{ 
	_pImpl->setDataSize(dataSize); 
} 
 
 
int ICMPPacket::getDataSize() const 
{ 
	return _pImpl->getDataSize(); 
} 
 
 
int ICMPPacket::packetSize() const 
{ 
	return _pImpl->packetSize(); 
} 
 
 
int ICMPPacket::maxPacketSize() const 
{ 
	return _pImpl->maxPacketSize(); 
} 
 
 
const Poco::UInt8* ICMPPacket::packet() 
{ 
	return _pImpl->packet(); 
} 
 
 
struct timeval ICMPPacket::time(Poco::UInt8* buffer, int length) const 
{ 
	return _pImpl->time(buffer, length); 
} 
 
 
bool ICMPPacket::validReplyID(Poco::UInt8* buffer, int length) const 
{ 
	return _pImpl->validReplyID(buffer, length); 
} 
 
 
std::string ICMPPacket::errorDescription(Poco::UInt8* buffer, int length) 
{ 
	return _pImpl->errorDescription(buffer, length); 
} 
 
 
std::string ICMPPacket::typeDescription(int typeId) 
{ 
	return _pImpl->typeDescription(typeId); 
} 
 
 
} } // namespace Poco::Net