/* $Id: host.h 6648 2004-01-25 20:07:11Z rra $ ** ** The public interface to the Host class. ** ** Written by James Brister ** ** The Host class represents the remote news system that we're feeding. A ** Host object has possibly multiple connections to the remote system which ** it sends articles down. It is given the articles by other objects ** (typically the InnListener), and once taken it assumes all responsibility ** for transmission or temporary storage on network failures etc. */ #if ! defined ( host_h__ ) #define host_h__ #include #include "misc.h" /* * Functions from elsewhere used by host.c */ extern void mainLogStatus (FILE *fp) ; /* * Functions used by the InnListener */ /* * Create a new Host object. * * NAME is the name that INN uses. * IPNAME is the name the networking code uses (or the ascii dotted quad * IP address). * ARTTIMEOUT is the max amount of time we'll wait for a new article * from INN before considering the connection unused and we'll close * down. * RESPTIMEOUT is the max amount of time we'll wait for any reponse * from a remote. Past this we'll close down the network connection. * INITIALCXNS is the number of Connections to create at Host creation time. * MAXCXNS is the maximum number of parallel connections to the * remote host we can run at any one time. * MAXCHECK is the maximum number of nntp CHECK commands to be outstanding * on a connection before opening up a new connection (or refusing * new articles if we get to MAXCXNS). * PORTNUM is the port number on the remote host we should talk to. * CLOSEPERIOD is the number of seconds after connecting that the * connections should be closed down and reinitialized (due to problems * with old NNTP servers that hold history files open. Value of 0 means * dont close down. * STREAMING is a boolean flag to tell if the Host wants its Connections to * do streaming or not. * LOWPASSHIGH is the high value for the low-pass filter. * LOWPASSLOW is the low value for the low-pass filter. */ void configHosts (bool talkSelf) ; /* print some debugging info. */ void gPrintHostInfo (FILE *fp, unsigned int indentAmt) ; void printHostInfo (Host host, FILE *fp, unsigned int indentAmt) ; /* Delete the host object. Drops all the active connections immediately (i.e. no QUIT) . */ void delHost (Host host) ; /* Get a new default host object */ Host newDefaultHost (InnListener listener, const char *name); /* gently close down all the host's connections (issue QUITs). */ void hostClose (Host host) ; /* gently close down all active connections (issue QUITs) and recreate them immediately */ void hostFlush (Host host) ; /* have the HOST transmit the ARTICLE, or, failing that, store article information for later attempts. */ void hostSendArticle (Host host, Article article) ; /* return an IP address for the host */ struct sockaddr *hostIpAddr (Host host) ; /* mark the current IP address as failed and rotate to the next one */ void hostIpFailed (Host host) ; /* * Functions used by the Connection to indicate Connection state. */ /* called by the Host's connection when the remote is refusing postings. Code 400 in the banner */ void hostCxnBlocked (Host host, Connection cxn, char *reason) ; /* called by the Connection when it has determined if the remote supports the streaming extension or not. */ void hostRemoteStreams (Host host, Connection cxn, bool doesStream) ; /* Called by the connection when it is no longer connected to the remote. Perhaps due to getting a code 400 to an IHAVE. */ void hostCxnDead (Host host, Connection cxn) ; /* Called when the Connection deletes itself */ bool hostCxnGone (Host host, Connection cxn) ; /* Called when the Connection goes to sleep. */ void hostCxnSleeping (Host host, Connection cxn) ; /* Called when the Connection starts waiting for articles. */ void hostCxnWaiting (Host host, Connection cxn) ; /* Called when the connection has sent an IHAVE or a CHECK, or a TAKETHIS when in no-check mode.*/ void hostArticleOffered (Host host, Connection cxn) ; /* called by the Connection when the article was transferred. */ void hostArticleAccepted (Host host, Connection cxn, Article article) ; /* Called by the connection when the remote answered 435 or 438 */ void hostArticleNotWanted (Host host, Connection cxn, Article article) ; /* Called by the connection when the remote answered 437 or 439 */ void hostArticleRejected (Host host, Connection cxn, Article article) ; /* Called when the connection when the remote answered 400 or 431 or 436 */ void hostArticleDeferred (Host host, Connection cxn, Article article) ; /* Called by the connection if it discovers the file is gone. */ void hostArticleIsMissing (Host host, Connection cxn, Article article) ; /* Called by the connection when it wants to defer articles, but it doesn't want the Host to queue any news on it. */ void hostTakeBackArticle (Host host, Connection cxn, Article article) ; /* called by the Connection when it is idle and wants to get things moving. Returns true if there was something to do and the Host called cxnQueueArticle() . */ bool hostGimmeArticle (Host host, Connection cxn) ; /* get the name that INN uses for this host */ const char *hostPeerName (Host host) ; /* get the username and password for authentication */ const char *hostUsername (Host host) ; const char *hostPassword (Host host) ; /* if VAL is true then each time the host logs its stats all its connections will too. */ void hostLogConnectionStats (bool val) ; bool hostLogConnectionStatsP (void) ; #if 0 /* Set the frequency (in seconds) with which we log statistics */ void hostSetStatsPeriod (unsigned int period) ; #endif /* return whether or not the Connections should attempt to stream. */ bool hostWantsStreaming (Host host) ; /* return maxChecks */ unsigned int hostmaxChecks (Host host); /* return if we should drop deferred articles */ bool hostDropDeferred (Host host); /* return the maximum number of CHECKs that can be outstanding */ unsigned int hostMaxChecks (Host host) ; /* Called by the Host's connections when they go into (true) or out of (false) no-CHECK mode. */ void hostLogNoCheckMode (Host host, bool on, double low, double cur, double high) ; /* calculate host backlog statistics */ void gCalcHostBlStat (void) ; /* calculate host global statistics */ void gHostStats (void) ; /* set the pathname of the file to use instead of innfeed.status */ void hostSetStatusFile (const char *filename) ; /* function called when config file is loaded. */ int hostConfigLoadCbk (void *data) ; void hostChkCxns(TimeoutId tid, void *data); #endif /* host_h__ */