# Private Net Definition

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */

This is the private definition of the Net Class. Please look in the public Net Class for more documentation

This module is implemented by HTNet.c, and it is a part of the W3C Sample Code Library.

    #ifndef HTNETMAN_H
    #define HTNETMAN_H
    #include "HTNet.h"
    #include "HTDNS.h"
    #include "HTEvent.h"
    #include "HTProt.h"

The `HTNet` object is the core of the request queue management. This object contains information about the socket descriptor, the input read buffer etc. required to identify and service a request.

    struct _HTNet {
        int                 hash;                                  /* Hash value */

        /* Link to other objects */
        HTRequest *		request;		   /* Link to request object */
        HTHost *		host;	       /* What we know about the remote host */
        HTProtocol *	protocol;		 /* Protocol to this request */
        HTTransport *	transport;	       /* Transport for this request */
        int                 session;

        /* For progress notifications */
        long		bytesRead;			    /* Bytes in body */
        long		headerLength;		     /* Bytes read in header */
        long		bytesWritten;		 /* Bytes written to network */

    #if 0
        int			retry;		     /* Counting attempts to connect */
        int 		home;			 /* Current home if multiple */
    #endif

        time_t		connecttime;		 /* Used on multihomed hosts */
        BOOL		preemptive;  /* Eff result from Request and Protocol */

        HTEvent		event;
        HTStream *		readStream;    /* host's input stream puts data here */

        /* User specific stuff */
        void *		context;		/* Protocol Specific context */

        /* Eric's sleezoid cheat - should go to extra pipeline object */
        HTEventType		registeredFor;
    };

    extern SOCKET HTNet_socket(HTNet * me);

    #define HTNet_setBytesRead(me,l)	((me) ? (me->bytesRead=(l)) : -1)
    #define HTNet_setBytesWritten(me,l)	((me) ? (me->bytesWritten=(l)) :-1)
    #define HTNet_setHeaderLength(me,l)	((me) ? (me->headerLength=(l)) :-1)

    #define HTNet_bytesRead(me)		((me) ? (me)->bytesRead : -1)
    #define HTNet_bytesWritten(me)		((me) ? (me)->bytesWritten : -1)
    #define HTNet_headerLength(me)		((me) ? (me)->headerLength : -1)

    #define HTNet_addBytesRead(me,l)        ((me) ? (me->bytesRead+=(l)) : -1)
    #define HTNet_addBytesWritten(me,l)     ((me) ? (me->bytesWritten+=(l)) : -1)
    #define HTNet_addHeaderLength(me,l)     ((me) ? (me->headerLength+=(l)) : -1)

    extern BOOL HTNet_setEventParam(HTNet * net, void * eventParam);
    extern void* HTNet_eventParam(HTNet * net);
    extern BOOL HTNet_setEventCallback(HTNet * net, HTEventCallback * cbf);
    extern HTEventCallback * HTNet_eventCallback(HTNet * net);
    extern BOOL HTNet_setEventPriority(HTNet * net, HTPriority priority);
    extern HTPriority HTNet_eventPriority(HTNet * net);

    #endif /* HTNETMAN_H */