www.pudn.com > FTPC.zip > WSA_XTRA.H


/* 
 * Filename: wsa_xtra.h 
 * 
 * Description: 
 *  - macros WinSock v1.1 forgot 
 *  - fixes one broken macro in v1.1 
 *  - structures for optional features  
 * 
 * Edit History: 
 *  10/10/95 changed ip_mreq declaration to avoid redefinition if already defined, 
 *           and forced BSD macro values for multicast socket options. 
 */ 
#ifndef _WSA_XTRA_ 
#define _WSA_XTRA_  
  
#include  
 
/* fix of broken macro in v1.1 WinSock.H */ 
#undef  IPROTO_GGP 
#define IPROTO_GGP  3 
#ifndef IPROTO_IGMP 
#define IPROTO_IGMP 2 
#endif 
 
#define MAXHOSTNAME   128   /* Maximum length of a DNS hostname */ 
#define MAXADDRSTR    16    /* Maximum length of an IP Address string */ 
 
/* handy in many places */  
#define SOCKADDR_LEN sizeof(struct sockaddr) 
 
/* WinSock version information (use WSA_VERSION for WSAStartup()) */ 
#ifndef MAKEWORD 
#define MAKEWORD(l,h) ((WORD)(((BYTE)(l))|(((WORD)(BYTE)(h))<<8))) 
#endif 
#define WSA_MAJOR_VERSION 1 
#define WSA_MINOR_VERSION 1 
#define WSA_VERSION MAKEWORD(WSA_MAJOR_VERSION, WSA_MINOR_VERSION) 
 
/* for unix compatibility */ 
#define bcopy(s,d,n)   _fmemcpy((d),(s),(n)) 
#define bcmp(s1,s2,n)  _fmemcmp((s1),(s2),(n)) 
#define bzero(s,n)     _fmemset(((s),0,(n)) 
 
#define IP_TTL	 4	/* level=IPPROTO_IP option, Time To Live */ 
#define MAX_TTL	255	/* maximum IP "Time To Live" value */ 
 
/* ICMP types */ 
#define ICMP_ECHOREPLY	0	/* ICMP type: echo reply */ 
#define ICMP_ECHOREQ	8	/* ICMP type: echo request */ 
 
/* definition of ICMP header as per RFC 792 */ 
typedef struct icmp_hdr { 
	u_char	icmp_type;		/* type of message */ 
	u_char	icmp_code;		/* type sub code */ 
	u_short icmp_cksum;		/* ones complement cksum */ 
	u_short	icmp_id;		/* identifier */ 
	u_short	icmp_seq;		/* sequence number */ 
	char	icmp_data[1];	/* data */ 
} ICMP_HDR, *PICMPHDR, FAR *LPICMPHDR; 
#define ICMP_HDR_LEN	sizeof(ICMP_HDR) 
 
/* definition of IP header version 4 as per RFC 791 */ 
#define	IPVERSION	4 
typedef struct ip_hdr { 
	u_char	ip_hl;		/* header length */ 
	u_char	ip_v;		/* version */ 
	u_char	ip_tos;		/* type of service */ 
	short	ip_len;		/* total length */ 
	u_short	ip_id;		/* identification */ 
	short	ip_off;		/* fragment offset field */ 
	u_char	ip_ttl;		/* time to live */ 
	u_char	ip_p;		/* protocol */ 
	u_short	ip_cksum;		/* checksum */ 
	struct	in_addr ip_src;	/* source address */ 
	struct	in_addr ip_dst;	/* destination address */ 
} IP_HDR, *PIP_HDR, *LPIP_HDR; 
#define IP_HDR_LEN sizeof(IP_HDR) 
 
/*  
 * The following constants are from BSD /include/netinet/in.h 
 *  header file.  They DO NOT match the values defined by Steve Deering  
 *  of Stanford University  (WinNT v3.5 
 *  did use Deering's values, however, which are 2-6 ...offset 7). 
 * 
 *  The use of these multicast options is described in "IP Multicast  
 *  Extensions for 4.3BSD UNIX related systems (MULTICAST 1.2 Release)".   
 *  It describes the extensions to BSD, SunOS and Ultrix to support  
 *  multicasting, as specified by RFC-1054 (since superceded by RFC-1112) 
 * 
 *  See chapter 16, "Optional Features," in _Windows Sockets Network 
 *  Programming_ by Bob Quinn & Dave Shute, for more information  
 *  (published by Addison-Wesley, ISBN: 0-201-63372-8). 
 */ 
#define DEERING_OFFSET      7   /* subtract this bias for MS WSOCK32 options */ 
 
#ifndef  IP_MULTICAST_IF 
/* The structure used to add and drop multicast addresses  (the 
 *  imr_interface field is ignored since we only support one interface */ 
typedef struct ip_mreq { 
	struct in_addr imr_multiaddr;	/* multicast group to join */ 
	struct in_addr imr_interface;	/* interface to join on */ 
}IP_MREQ; 
#endif 
 
#undef  IP_MULTICAST_IF 
#define IP_MULTICAST_IF	    9   /* set/get IP mulicast interface */ 
#undef  IP_MULTICAST_TTL 
#define	IP_MULTICAST_TTL    10  /* set/get IP multicast timetolive */ 
#undef  IP_MULTICAST_LOOP 
#define IP_MULTICAST_LOOP   11  /* set/get IP multicast loopback */ 
#undef  IP_ADD_MEMBERSHIP 
#define	IP_ADD_MEMBERSHIP   12  /* add  (set) IP group membership */ 
#undef  IP_DROP_MEMBERSHIP 
#define	IP_DROP_MEMBERSHIP  13  /* drop (set) IP group membership */ 
 
#undef  IP_DEFAULT_MULTICAST_TTL 
#define IP_DEFAULT_MULTICAST_TTL	1 
#undef  IP_DEFAULT_MULTICAST_LOOP 
#define IP_DEFAULT_MULTICAST_LOOP	1 
 
#define IP_MAX_MEMBERSHIPS		20 
 
#endif /* _WS_XTRA_ */