#ifndef __PINGER_H__
#define __PINGER_H__
#include <sys/types.h>
#include <netinet/in.h>
#include "list.h"
#include "config.h"
#include <sys/time.h>
#define MAXFD 64
#define MAXPACKET (65536 - 60 - 8)/* max packet size */
#define DATALEN 1 /* 1 byte ;) */
#define PINGER_DONTPING 1
#ifdef HAVE_STRUCT_ICMP
#define STRUCT_ICMP struct icmp
#define ICMP_TYPE icmp_type
#define ICMP_CODE icmp_code
#define ICMP_CKSUM icmp_cksum
#define ICMP_SEQ icmp_seq
#define ICMP_ID icmp_id
#else
#define STRUCT_ICMP struct icmphdr
#define ICMP_TYPE type
#define ICMP_CODE code
#define ICMP_CKSUM checksum
#define ICMP_SEQ un.echo.sequence
#define ICMP_ID un.echo.id
#endif
#ifndef ICMP_UNREACH
#define ICMP_UNREACH ICMP_DEST_UNREACH
#endif
#ifndef ICMP_UNREACH_PORT
#define ICMP_UNREACH_PORT ICMP_PORT_UNREACH
#endif
#ifdef HAVE_STRUCT_UDPBSD
#define UDP_DPORT uh_dport
#else
#define UDP_DPORT dest
#endif
#ifndef __FreeBSD__
#if ! (defined(__GLIBC__) && (__GLIBC__ >= 2))
#define inet_ntoa(x) inet_ntoa(*((struct in_addr *)&(x)))
#endif
#endif
#define TIMEOUT_SIZE 55
typedef struct {
struct sockaddr_in *sock, *tcpsock;
time_t lastping;
time_t lastreply;
struct timeval lp,lr;
long timeout[TIMEOUT_SIZE];
int timeoutptr;
int sequence;
int flags;
int totalfailures;
int tcpport,udpport,udpstatus;
int tcp_socket;
} pinger_host;
typedef struct {
struct protoent *proto;
int socket;
int ident;
ListItem hosts;
unsigned char outbuf[MAXPACKET],inbuf[MAXPACKET];
fd_set fdmask_read, fdmask_write;
} pinger;
/* Statics */
/* functions */
int pinger_init(pinger*);
pinger_host *pinger_addhost(pinger *p,char*);
int pinger_poll(pinger*,pinger_host *);
int pinger_checkstatus(pinger*);
unsigned long pinger_checkoneandsleep(pinger*,unsigned long);
int pinger_pollall(pinger*);
pinger_host *pinger_pollnext(pinger*);
pinger_host *pinger_pollinit(pinger*);
int tcp_isalive(pinger_host *h);
#endif
syntax highlighted by Code2HTML, v. 0.9.1