#ifndef RGJ_FREE_SOCKETS_PING_EXAMPLE
#define RGJ_FREE_SOCKETS_PING_EXAMPLE

#include <skstream/skstream.h>

#define ICMP_ECHOREPLY	0
#define ICMP_ECHOREQ	8

// IP Header -- RFC 791
struct IP_HEADER
{
  unsigned char  VIHL;          // Version and IHL
  unsigned char  TOS;           // Type Of Service
  short          TotLen;        // Total Length
  short          ID;            // Identification
  short          FlagOff;       // Flags and Fragment Offset
  unsigned char  TTL;           // Time To Live
  unsigned char  Protocol;      // Protocol
  unsigned short Checksum;      // Checksum
  in_addr        iaSrc;         // Internet Address - Source
  in_addr        iaDst;         // Internet Address - Destination
};


// ICMP Header - RFC 792
struct ICMP_HEADER
{
  unsigned char         Type;           // Type
  unsigned char         Code;           // Code
  unsigned short        Checksum;       // Checksum
  unsigned short        ID;             // Identification
  unsigned short        Seq;            // Sequence
  char                  Data;           // Data
};


// ICMP Echo Request
#define REQ_DATASIZE 32         // Echo Request Data size

struct ECHO_REQUEST {
  ICMP_HEADER   icmpHdr;
  unsigned long dwTime;
  char          cData[REQ_DATASIZE];
};


// ICMP Echo Reply
struct ECHO_REPLY {
  IP_HEADER     ipHdr;
  ECHO_REQUEST  echoRequest;
};

#endif



syntax highlighted by Code2HTML, v. 0.9.1