-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathCTraceRoute.h
72 lines (57 loc) · 2.34 KB
/
CTraceRoute.h
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
/*
Copyright [2010] [Richard Bross]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
//! CTraceRoute.h: interface for the CTraceRoute class.
//
#if !defined(AFX_CTRACEROUTE_H__52B1F4A5_BD28_11D2_AF6A_00C04F6E1532__INCLUDED_)
#define AFX_CTRACEROUTE_H__52B1F4A5_BD28_11D2_AF6A_00C04F6E1532__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif //! _MSC_VER >= 1000
#include "icmp.h"
//! Callback function prototype.
//! If iRTTms == -1, there was a timeout
#ifndef DWORD
#define DWORD int
#endif
typedef int (*TR_CALLBACK)(const char *lpHop, int iRTTms, DWORD dwUserParm);
//! Class to implement traceroute
class CTraceRoute
{
public:
//! Call back function and user parm. User parm is passed to the callback.
//! Typically it is a pointer to the calling object, since the callback must be static.
CTraceRoute(TR_CALLBACK pCallback = NULL, DWORD dwUserParm = 0);
virtual ~CTraceRoute();
//! Do the traceroute
int TraceRoute( const char *szIPAddress,
int iTimeoutMS,
int iMaxRetries,
const char *szLooseRoute = NULL,
bool bPingOnly = false);
//! Register a callback function. If the callback returns anything other than 0, stop.
void RegisterCallback(TR_CALLBACK pCallback, DWORD dwUserParm);
//! Get last socket error
int GetLastSocketError();
protected:
//! Decode the ICMP iResponse
int DecodeTracerouteResponse(char *szBuf, int iBytes, struct sockaddr_in* sFrom, unsigned short &usSeq);
//! Calculate the checksum
unsigned short CheckSum(unsigned short *szBuffer, int iSize);
protected:
TR_CALLBACK pUserFunc;
DWORD dwUserParm;
int iLastError;
struct in_addr sLastAddr;
unsigned short uID;
};
#endif //! !defined(AFX_CTRACEROUTE_H__52B1F4A5_BD28_11D2_AF6A_00C04F6E1532__INCLUDED_)