/*
 * $LynxId: HTTCP.h,v 1.24 2014/12/03 00:27:57 tom Exp $
 *
 *                               /Net/dxcern/userd/timbl/hypertext/WWW/Library/src/HTTCP.html
 *                             GENERIC TCP/IP COMMUNICATION
 *
 * This module has the common code for handling TCP/IP connections etc.
 */
#ifndef HTTCP_H
#define HTTCP_H

#ifndef HTUTILS_H
#include <HTUtils.h>
#endif

#ifdef __cplusplus
extern "C" {
#endif
/*      Produce a string for an internet address
 *      ---------------------------------------
 *
 * On exit:
 *           returns a pointer to a static string which must be copied if
 *                it is to be kept.
 */
#ifdef INET6
    extern const char *HTInetString(SockA * mysin);

#else
    extern const char *HTInetString(struct sockaddr_in *mysin);
#endif				/* INET6 */

/*      Encode INET status (as in sys/errno.h)                    inet_status()
 *      ------------------
 *
 * On entry:
 *              where gives a description of what caused the error
 *      global errno gives the error number in the unix way.
 *
 * On return:
 *      returns a negative status in the unix way.
 */
    extern int HTInetStatus(const char *where);

/*      Publicly accessible variables
*/
/* extern struct sockaddr_in HTHostAddress; */
    /* The internet address of the host */
    /* Valid after call to HTHostName() */

/*      Parse a cardinal value                                 parse_cardinal()
 *      ----------------------
 *
 * On entry:
 *      *pp points to first character to be interpreted, terminated by
 *      non 0..9 character.
 *      *pstatus points to status already valid,
 *      maxvalue gives the largest allowable value.
 *
 * On exit:
 *      *pp points to first unread character,
 *      *pstatus points to status updated iff bad
 */

    extern unsigned int HTCardinal(int *pstatus,
				   char **pp,
				   unsigned int max_value);

/*	Check whether string is a valid Internet hostname
 *	-------------------------------------------------
 */

    extern BOOL valid_hostname(char *name);

/*	Resolve an internet hostname, like gethostbyname
 *	------------------------------------------------
 *
 *  On entry,
 *	str	points to the given host name, not numeric address,
 *		without colon or port number.
 *
 *  On exit,
 *	returns a pointer to a struct hostent in static storage,
 *	or NULL in case of error or user interruption.
 *
 *  The interface is intended to be the same as for gethostbyname(),
 *  but additional status is returned in lynx_nsl_status.
 */
    extern int lynx_nsl_status;

#ifndef LYNX_HOSTENT
#define LYNX_HOSTENT void
#endif

    extern LYNX_HOSTENT *LYGetHostByName(char *host);

#ifdef INET6
#ifndef LYNX_ADDRINFO
#define LYNX_ADDRINFO void
#endif
    extern LYNX_ADDRINFO *HTGetAddrInfo(const char *str, const int defport);
#endif

/*      Get Name of This Machine
 *      ------------------------
 *
 */

    extern const char *HTHostName(void);

    extern int HTDoConnect(const char *url,
			   const char *protocol,
			   int default_port,
			   int *s);

    extern int HTDoRead(int fildes,
			void *buf,
			unsigned nbyte);

#ifdef __cplusplus
}
#endif
#endif				/* HTTCP_H */
