00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef _PICMPSOCKET
00035 #define _PICMPSOCKET
00036
00037 #ifdef P_USE_PRAGMA
00038 #pragma interface
00039 #endif
00040
00041 #include <ptlib/pprocess.h>
00042
00046 class PICMPSocket : public PIPDatagramSocket
00047 {
00048 PCLASSINFO(PICMPSocket, PIPDatagramSocket);
00049
00050 public:
00056 PICMPSocket();
00058
00061
00062 enum PingStatus {
00063 PingSuccess,
00064 NetworkUnreachable,
00065 HostUnreachable,
00066 PacketTooBig,
00067 RequestTimedOut,
00068 BadRoute,
00069 TtlExpiredTransmit,
00070 TtlExpiredReassembly,
00071 SourceQuench,
00072 MtuChange,
00073 GeneralError,
00074 NumStatuses
00075 };
00076
00078 class PingInfo {
00079 public:
00081 PingInfo(WORD id = (WORD)PProcess::Current().GetProcessID());
00082
00085
00086 WORD identifier;
00088 WORD sequenceNum;
00090 BYTE ttl;
00092 const BYTE * buffer;
00094 PINDEX bufferSize;
00096
00099
00100 PTimeInterval delay;
00102 Address remoteAddr;
00104 Address localAddr;
00106 PingStatus status;
00108 };
00110
00119 PBoolean Ping(
00120 const PString & host
00121 );
00128 PBoolean Ping(
00129 const PString & host,
00130 PingInfo & info
00131 );
00133
00134 protected:
00135 const char * GetProtocolName() const;
00136 virtual PBoolean OpenSocket();
00137 virtual PBoolean OpenSocket(int ipAdressFamily);
00138
00139
00140
00141 #ifdef _WIN32
00142 #include "msos/ptlib/icmpsock.h"
00143 #else
00144 #include "unix/ptlib/icmpsock.h"
00145 #endif
00146 };
00147
00148 #endif
00149
00150