dawn/notes/
dawn/src/
dawn/src/docs/
/**************************************************************************/
// netio.h - defines related to the netio code
/***************************************************************************
 * The Dawn of Time v1.69r (c)1997-2004 Michael Garratt                    *
 * >> A number of people have contributed to the Dawn codebase, with the   *
 *    majority of code written by Michael Garratt - www.dawnoftime.org     *
 * >> To use this source code, you must fully comply with the dawn license *
 *    in licenses.txt... In particular, you may not remove this copyright  *
 *    notice.                                                              *
 **************************************************************************/
#ifndef __NETIO_H
#define __NETIO_H
/**************************************************************************/
enum CONNECTION_TYPE { CONTYPE_TELNET, CONTYPE_HTTP, 
					CONTYPE_IRC, CONTYPE_MUDFTP, CONTYPE_UNSET};
/**************************************************************************/
// The order of the PROTOCOL_TYPE enum below MUST NOT be changed... 
// as other parts of the code makes assumptions about its configuration
enum PROTOCOL_TYPE { PROTOCOL_IPV6, PROTOCOL_IPV4, PROTOCOL_ALL}; 

char *netio_return_binded_sockets();
/**************************************************************************/
#ifdef __SEE_NETIO_INTERNAL_STRUCTURES__
// only seen netio.cpp, hreboot.cpp and dawnstat.cpp 
// __SEE_NETIO_INTERNAL_STRUCTURES__ is defined within these functions
struct listen_on_type 
{
	PROTOCOL_TYPE protocol;
	int parsed_port_offset;
	int parsed_port;		// the port number read in

	CONNECTION_TYPE contype; // telnet, http, irc, mudftp

	char *psz_bound_pair; // what we actually ended up binding to according to OS in "address:port" format
	char *psz_bind_address;
	int bind_port;	// the port we actually bind to	

	dawn_socket listening_socket;
	bool listening;
	int listening_exception_count;

	listen_on_type *next;
};	

extern listen_on_type *listen_on_first;
extern listen_on_type *listen_on_last;

struct _contype_lookup_types{
	char * name;
	CONNECTION_TYPE contype_enum;
};

extern _contype_lookup_types CONTYPE_table[];
CONNECTION_TYPE loparse_connection_type_lookup( char * contype);

/**************************************************************************/
#ifndef IPV6_SUPPORT_ENABLED
struct ipv4only_addrinfo { // based on addrinfo, used to make the code more portable
	int ai_family;             // PF_xxx.
	int ai_socktype;           // SOCK_xxx.
	int ai_protocol;           // 0 or IPPROTO_xxx for IPv4 and IPv6.
	int ai_addrlen;			   // Length of ai_addr.
	struct sockaddr *ai_addr;  // Binary address.
	struct ipv4only_addrinfo *ai_next;  // Next structure in linked list.
};
#endif


#endif // __SEE_NETIO_INTERNAL_STRUCTURES__

/**************************************************************************/

#endif // __NETIO_H