/*
Copyright (C) 1997-2001 Id Software, Inc.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

*/

#ifndef NET_ADR_H
#define NET_ADR_H

#include STDINT_H

// net.h -- quake's interface to the networking layer
// a1ba: copied from Quake-2/qcommon/qcommon.h and modified to support IPv6

#define	PORT_ANY	-1

typedef enum {NA_LOOPBACK = 1, NA_BROADCAST, NA_IP, NA_IPX, NA_BROADCAST_IPX, NA_IP6, NA_MULTICAST_IP6} netadrtype_t;

/*
Original Quake-2 structure:
typedef struct
{
	netadrtype_t	type;

	byte	ip[4];
	byte	ipx[10];

	unsigned short	port;
} netadr_t;
*/

#pragma pack( push, 1 )
typedef struct netadr_s
{
	union
	{
		// IPv6 struct
		struct
		{
			uint16_t	type6;
			uint8_t	ip6[16];
		};
		struct
		{
			uint32_t	type; // must be netadrtype_t but will break with short enums
			union
			{
				uint8_t	ip[4];
				uint32_t	ip4; // for easier conversions
			};
			uint8_t	ipx[10];
		};
	};
	uint16_t	port;
} netadr_t;
#pragma pack( pop )

STATIC_ASSERT( sizeof( netadr_t ) == 20, "netadr_t isn't 20 bytes!" );

#endif // NET_ADR_H
