/**
 * MobileWonderGate Network Communication Library
 *      copyright 2000-2001, by Naga(nagaw@attglobal.net)
 *
 * $Id$
 *
 * $Log$
 */

#ifndef	_MWGSOCK_H_
#define	_MWGSOCK_H_

#ifdef	__cplusplus
extern	"C"
{
#endif


/*-------------------------------------------------------------------*/
/*
 * ソケット・タイプの定義
 */
#define	SOCK_STREAM		1	/* stream socket */

/*
 * アドレス・ファミリーの定義
 */
#define	AF_INET			2	/* internetwork: UDP, TCP, etc. */

/*
 * プロトコル・ファミリーの定義
 */
#define	PF_INET			AF_INET

/*
 * プロトコル番号の定義
 */
#define	IPPROTO_TCP		6	/* tcp */

/*-------------------------------------------------------------------*/
/*
 * インターネットアドレスのビット定義
 */
#define	IN_CLASSA(i)			(((long)(i) & 0x80000000L) == 0)
#define	IN_CLASSA_NET			0xff000000L
#define	IN_CLASSA_NSHIFT		24
#define	IN_CLASSA_HOST			0x00ffffffL
#define	IN_CLASSA_MAX			128

#define	IN_CLASSB(i)			(((long)(i) & 0xc0000000L) == 0x80000000L)
#define	IN_CLASSB_NET			0xffff0000L
#define	IN_CLASSB_NSHIFT		16
#define	IN_CLASSB_HOST			0x0000ffffL
#define	IN_CLASSB_MAX			65536L

#define	IN_CLASSC(i)			(((long)(i) & 0xe0000000L) == 0xc0000000L)
#define	IN_CLASSC_NET			0xffffff00L
#define	IN_CLASSC_NSHIFT		8
#define	IN_CLASSC_HOST			0x000000ffL

#define	IN_CLASSD(i)			(((long)(i) & 0xf0000000L) == 0xe0000000L)
#define	IN_MULTICAST(i)			IN_CLASSD(i)

#define	IN_EXPERIMENTAL(i)		(((long)(i) & 0xe0000000L) == 0xe0000000L)
#define	IN_BADCLASS(i)			(((long)(i) & 0xf0000000L) == 0xf0000000L)

#define	INADDR_ANY				(unsigned long)0x00000000L
#define	INADDR_BROADCAST		(unsigned long)0xffffffffL	/* must be masked */
#define	INADDR_NONE				0xffffffffL					/* -1 return */


/*-------------------------------------------------------------------*/
/*
 * インターネットアドレス構造体
 */
struct in_addr
{
	unsigned long	s_addr;
};

/*
 * ソケットアドレス構造体（インターネット型）
 */
struct sockaddr_in
{
	short			sin_family;
	unsigned short	sin_port;
	struct in_addr	sin_addr;
	char			sin_zero[8];
};

/*
 * ソケットアドレス構造体
 */
struct sockaddr
{
	unsigned short	sa_family;		/* address family */
	char			sa_data[14];	/* up to 14 bytes of direct address */
};

/*
 * gethostbynameの戻り値の構造体
 */
struct hostent
{
	char far	*h_name;		/* official name of host */
	int			h_addrtype;		/* host address type */
	int			h_length;		/* length of address */
	char far	*h_addr_list;	/* list of addresses from name server */
#define	h_addr	h_addr_list		/* address, for backward compatiblity */
};


/*-------------------------------------------------------------------*/
/*
 * バイトオーダーの変換マクロ
 */
#define	htonl(x)	(x)
#define	ntohl(x)	(x)
#define	htons(x)	(x)
#define	ntohs(x)	(x)

/*-------------------------------------------------------------------*/
/*
 * BSDライクなsocket関数
 */
unsigned long inet_addr(char far *cp);
char far * inet_ntoa(unsigned long in);

struct hostent far * gethostbyname(char far *name);

int connect(int s, struct sockaddr far *name, int namelen);

int recv_line(int s, char far *buff, int len, int flags);
int recv(int s, char far *buff, int len, int flags);
int send(int s, char far *buff, int len, int flags);

int socket(int af, int type, int protocol);
int soclose(int s);


#ifdef	__cplusplus
}
#endif

#endif	/* _MWGSOCK_H_ */
