icmpsock.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:5k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * icmpsock.h
  3.  *
  4.  * Internet Control Message Protocol socket I/O channel class.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: icmpsock.h,v $
  30.  * Revision 1.10  1999/08/07 15:22:20  craigs
  31.  * Changed Success to PingSuccess to avoid namespace collision with X define of the same name
  32.  *
  33.  * Revision 1.9  1999/03/09 02:59:49  robertj
  34.  * Changed comments to doc++ compatible documentation.
  35.  *
  36.  * Revision 1.8  1999/02/16 08:20:48  robertj
  37.  * MSVC 6.0 compatibility changes.
  38.  *
  39.  * Revision 1.7  1998/09/23 06:20:39  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.6  1998/01/26 00:30:41  robertj
  43.  * Added error codes, TTL and data buffer to Ping.
  44.  *
  45.  * Revision 1.5  1997/02/05 11:52:07  robertj
  46.  * Changed current process function to return reference and validate objects descendancy.
  47.  *
  48.  * Revision 1.4  1996/11/04 03:57:16  robertj
  49.  * Rewrite of ping for Win32 support.
  50.  *
  51.  * Revision 1.3  1996/09/14 13:09:19  robertj
  52.  * Major upgrade:
  53.  *   rearranged sockets to help support IPX.
  54.  *   added indirect channel class and moved all protocols to descend from it,
  55.  *   separating the protocol from the low level byte transport.
  56.  *
  57.  * Revision 1.2  1996/06/03 10:03:22  robertj
  58.  * Changed ping to return more parameters.
  59.  *
  60.  * Revision 1.1  1996/05/15 21:11:16  robertj
  61.  * Initial revision
  62.  *
  63.  */
  64. #define _PICMPSOCKET
  65. #ifdef __GNUC__
  66. #pragma interface
  67. #endif
  68. /**Create a socket channel that uses allows ICMP commands in the Internal
  69.    Protocol.
  70.  */
  71. class PICMPSocket : public PIPDatagramSocket
  72. {
  73.   PCLASSINFO(PICMPSocket, PIPDatagramSocket);
  74.   public:
  75.   /**@name Construction */
  76.   //@{
  77.     /**Create a TCP/IP protocol socket channel. If a remote machine address or
  78.        a "listening" socket is specified then the channel is also opened.
  79.      */
  80.     PICMPSocket();
  81.   //@}
  82.   /**@name Status & Information */
  83.   //@{
  84.     /// Results of ICMP operation.
  85.     enum PingStatus {
  86.       PingSuccess,         // don't use Success - X11 defines this!
  87.       NetworkUnreachable,
  88.       HostUnreachable,
  89.       PacketTooBig,
  90.       RequestTimedOut,
  91.       BadRoute,
  92.       TtlExpiredTransmit,
  93.       TtlExpiredReassembly,
  94.       SourceQuench,
  95.       MtuChange,
  96.       GeneralError,
  97.       NumStatuses
  98.     };
  99.     /// Information used by and obtained by the ping operation.
  100.     class PingInfo {
  101.       public:
  102.         /// Create Ping information structure.
  103.         PingInfo(WORD id = (WORD)PProcess::Current().GetProcessID());
  104.         /**@name Supplied data */
  105.         //@{
  106.         /// Arbitrary identifier for the ping.
  107.         WORD identifier;         
  108.         /// Sequence number for ping packet.
  109.         WORD sequenceNum;        
  110.         /// Time To Live for packet.
  111.         BYTE ttl;                
  112.         /// Send buffer (if NULL, defaults to 32 bytes).
  113.         const BYTE * buffer;     
  114.         /// Size of buffer (< 64k).
  115.         PINDEX bufferSize;       
  116.         //@}
  117.         /**@name Returned data */
  118.         //@{
  119.         /// Time for packet to make trip.
  120.         PTimeInterval delay;     
  121.         /// Source address of reply packet.
  122.         Address remoteAddr;      
  123.         /// Destination address of reply packet.
  124.         Address localAddr;       
  125.         /// Status of the last ping operation
  126.         PingStatus status;       
  127.         //@}
  128.     };
  129.   //@}
  130.   /**@name Ping */
  131.   //@{
  132.     /**Send an ECHO_REPLY message to the specified host and wait for a reply
  133.        to be sent back.
  134.        @return
  135.        FALSE if host not found or no response.
  136.      */
  137.     BOOL Ping(
  138.       const PString & host   /// Host to send ping.
  139.     );
  140.     /**Send an ECHO_REPLY message to the specified host and wait for a reply
  141.        to be sent back.
  142.        @return
  143.        FALSE if host not found or no response.
  144.      */
  145.     BOOL Ping(
  146.       const PString & host,   /// Host to send ping.
  147.       PingInfo & info         /// Information on the ping and reply.
  148.     );
  149.   //@}
  150.   protected:
  151.     const char * GetProtocolName() const;
  152.     virtual BOOL OpenSocket();
  153. #ifdef DOC_PLUS_PLUS
  154. };
  155. #endif
  156. // Class declaration continued in platform specific header file ///////////////