chiark / gitweb /
REORG Delete everything that's not innduct or build system or changed for innduct
[inn-innduct.git] / innd / innd.h
diff --git a/innd/innd.h b/innd/innd.h
deleted file mode 100644 (file)
index d8b60f0..0000000
+++ /dev/null
@@ -1,858 +0,0 @@
-/*  $Id: innd.h 7858 2008-06-05 18:51:20Z iulius $
-**
-**  Many of the data types used here have abbreviations, such as CT
-**  for CHANNELTYPE.  Here are a list of the conventions and meanings:
-**
-**    ART   A news article
-**    CHAN  An I/O channel
-**    CS    Channel state
-**    CT    Channel type
-**    FNL   Funnel, into which other feeds pour
-**    FT    Feed type -- how a site gets told about new articles
-**    ICD   In-core data (primarily the active and sys files)
-**    LC    Local NNTP connection-receiving channel
-**    CC    Control channel (used by ctlinnd)
-**    NC    NNTP client channel
-**    NG    Newsgroup
-**    NGH   Newgroup hashtable
-**    PROC  A process (used to feed a site)
-**    PS    Process state
-**    RC    Remote NNTP connection-receiving channel
-**    RCHAN A channel in "read" state
-**    SITE  Something that gets told when we get an article
-**    WCHAN A channel in "write" state
-**    WIP   Work-In-Progress, keeps track of articles before committed.
-*/
-
-#ifndef INND_H
-#define INND_H 1
-
-#include "config.h"
-#include "portable/time.h"
-#include "portable/socket.h"
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <syslog.h> 
-#include <sys/stat.h>
-
-#include "inn/buffer.h"
-#include "inn/history.h"
-#include "inn/messages.h"
-#include "inn/timer.h"
-#include "libinn.h"
-#include "nntp.h"
-#include "paths.h"
-#include "storage.h"
-
-/* TCL defines EXTERN, so undef it after inclusion since we use it. */
-#if DO_TCL
-# include <tcl.h>
-# undef EXTERN
-#endif
-
-BEGIN_DECLS
-
-typedef short  SITEIDX;
-#define NOSITE ((SITEIDX) -1)
-
-/*
-**  Various constants.
-*/
-
-/* Used for storing group subscriptions for feeds. */
-#define SUB_DEFAULT            false
-#define SUB_NEGATE             '!'
-#define SUB_POISON             '@'
-
-/* Special characters for newsfeeds entries. */
-#define NF_FIELD_SEP            ':'
-#define NF_SUBFIELD_SEP         '/'
-
-
-/*
-**  Server's operating mode.
-*/
-typedef enum _OPERATINGMODE {
-  OMrunning,
-  OMpaused,
-  OMthrottled
-} OPERATINGMODE;
-
-
-typedef struct _LISTBUFFER {
-  char *   Data;
-  int      DataLength;
-  char  **  List;
-  int      ListLength;
-} LISTBUFFER;
-
-/*
-**  What program to handoff a connection to.
-*/
-typedef enum _HANDOFF {
-  HOnnrpd,
-  HOnntpd
-} HANDOFF;
-
-
-/*
-**  Header types.
-*/
-typedef enum _ARTHEADERTYPE {
-  HTreq,  /* Drop article if this is missing             */
-  HTobs,  /* obsolete header but keep untouched                  */
-  HTstd,  /* Standard optional header                    */
-  HTsav          /* Save header, but may be deleted from article */
-} ARTHEADERTYPE;
-
-
-/*
-**  Entry in the header table.
-*/
-typedef struct _ARTHEADER {
-  const char     *  Name;
-  ARTHEADERTYPE            Type;
-  int              Size;  /* Length of Name. */
-} ARTHEADER;
-
-
-/*
-**  Header content
-*/
-typedef struct _HDRCONTENT {
-  char  *  Value;   /* don't copy, shows where it begins */
-  int     Length;  /* Length of Value(tailing CRLF is not
-                          included.  -1 if duplicated */
-} HDRCONTENT;
-
-
-/*
-**  A way to index into the header table.
-*/
-#define HDR_FOUND(_x)          (hc[(_x)].Length > 0)
-#define HDR_PARSE_START(_x)    hc[(_x)].Value[hc[_x].Length] = '\0'
-#define HDR(_x)                        (hc[(_x)].Value)
-/* HDR_LEN does not includes trailing "\r\n" */
-#define HDR_LEN(_x)            (hc[(_x)].Length)
-#define HDR_PARSE_END(_x)      hc[(_x)].Value[hc[_x].Length] = '\r'
-
-
-#define HDR__APPROVED          0
-#define HDR__CONTROL           1
-#define HDR__DATE              2
-#define HDR__DISTRIBUTION      3
-#define HDR__EXPIRES           4
-#define HDR__FROM              5
-#define HDR__LINES             6
-#define HDR__MESSAGE_ID                7
-#define HDR__NEWSGROUPS                8
-#define HDR__PATH              9
-#define HDR__REPLY_TO          10
-#define HDR__SENDER            11
-#define HDR__SUBJECT           12
-#define HDR__SUPERSEDES                13
-#define HDR__BYTES             14
-#define HDR__ALSOCONTROL       15
-#define HDR__REFERENCES                16
-#define HDR__XREF              17
-#define HDR__KEYWORDS          18
-#define HDR__XTRACE            19
-#define HDR__DATERECEIVED      20
-#define HDR__POSTED            21
-#define HDR__POSTINGVERSION    22
-#define HDR__RECEIVED          23
-#define HDR__RELAYVERSION      24
-#define HDR__NNTPPOSTINGHOST   25
-#define HDR__FOLLOWUPTO                26
-#define HDR__ORGANIZATION      27
-#define HDR__CONTENTTYPE       28
-#define HDR__CONTENTBASE       29
-#define HDR__CONTENTDISPOSITION        30
-#define HDR__XNEWSREADER       31
-#define HDR__XMAILER           32
-#define HDR__XNEWSPOSTER       33
-#define HDR__XCANCELLEDBY      34
-#define HDR__XCANCELEDBY       35
-#define HDR__CANCELKEY         36
-#define HDR__USER_AGENT                37
-#define HDR__X_ORIGINAL_MESSAGE_ID     38
-#define HDR__CANCEL_LOCK       39
-#define HDR__CONTENT_TRANSFER_ENCODING 40
-#define HDR__FACE              41
-#define HDR__INJECTION_INFO    42
-#define HDR__LIST_ID           43
-#define HDR__MIME_VERSION      44
-#define HDR__ORIGINATOR                45
-#define HDR__X_AUTH            46
-#define HDR__X_COMPLAINTS_TO   47
-#define HDR__X_FACE            48
-#define HDR__X_HTTP_USERAGENT  49
-#define HDR__X_HTTP_VIA                50
-#define HDR__X_MODBOT          51
-#define HDR__X_MODTRACE                52
-#define HDR__X_NO_ARCHIVE      53
-#define HDR__X_ORIGINAL_TRACE  54
-#define HDR__X_ORIGINATING_IP  55
-#define HDR__X_PGP_KEY         56
-#define HDR__X_PGP_SIG         57
-#define HDR__X_POSTER_TRACE    58
-#define HDR__X_POSTFILTER      59
-#define HDR__X_PROXY_USER      60
-#define HDR__X_SUBMISSIONS_TO  61
-#define HDR__X_USENET_PROVIDER 62
-#define HDR__IN_REPLY_TO       63
-#define HDR__INJECTION_DATE    64
-#define HDR__NNTP_POSTING_DATE 65
-
-#define MAX_ARTHEADER           66
-
-/*
-**  Miscellaneous data we want to keep on an article.  All the fields
-**  are not always valid.
-*/
-typedef struct _ARTDATA {
-  int            Body;                 /* where body begins in article
-                                          it indicates offset from bp->Data */
-  char       *   Poster;               /* Sender otherwise From in article */
-  char       *   Replyto;              /* Reply-To otherwise From in article */
-  time_t         Posted;               /* when article posted */
-  time_t         Arrived;              /* when article arrived */
-  time_t         Expires;              /* when article should be expired */
-  int            Lines;                /* number of body lines */
-  int            HeaderLines;          /* number of header lines */
-  long           BytesValue;           /* size of stored article, "\r\n" is
-                                          counted as 1 byte */
-  char           Bytes[16];            /* generated Bytes header */
-  int            BytesLength;          /* generated Bytes header length */
-  char       *   BytesHeader;          /* where Bytes header begins in
-                                          received article */
-  char           TokenText[(sizeof(TOKEN) * 2) + 3];
-                                       /* token of stored article */
-  LISTBUFFER     Newsgroups;           /* newsgroup list */
-  int            Groupcount;           /* number of newsgroups */
-  int            Followcount;          /* number of folloup to newsgroups */
-  char       *   Xref;                 /* generated Xref header */
-  int            XrefLength;           /* generated Xref header length */
-  int            XrefBufLength;        /* buffer length of generated Xref
-                                          header */
-  LISTBUFFER     Distribution;         /* distribution list */
-  const char  *   Feedsite;            /* who gives me this article */
-  int            FeedsiteLength;       /* length of Feedsite */
-  LISTBUFFER     Path;                 /* path name list */
-  int            StoredGroupLength;    /* 1st newsgroup name in Xref */
-  char       *   Replic;               /* replication data */
-  int            ReplicLength;         /* length of Replic */
-  HASH       *   Hash;                 /* Message-ID hash */
-  struct buffer          Headers;              /* buffer for headers which will be sent
-                                          to site */
-  struct buffer          Overview;             /* buffer for overview data */
-  int            CRwithoutLF;          /* counter for '\r' without '\n' */
-  int            LFwithoutCR;          /* counter for '\n' without '\r' */
-  long           CurHeader;            /* where current header starts.
-                                          this is used for folded header
-                                          it indicates offset from bp->Data */
-  bool           NullHeader;           /* contains NULL in current header    */
-  long           LastTerminator;       /* where last '.' exists.  only set if
-                                          it exists at the begining of line
-                                          it indicates offset from bp->Data */
-  long           LastCR;               /* where last CR exists
-                                          it indicates offset from bp->Data */
-  long           LastCRLF;             /* where last CRLF exists.
-                                          indicates where last LF exists
-                                          it indicates offset from bp->Data */
-  HDRCONTENT     HdrContent[MAX_ARTHEADER];
-                                       /* includes system headers info */
-  bool            AddAlias;             /* Whether Pathalias should be added
-                                           to this article */
-  bool            Hassamepath;          /* Whether this article matches Path */
-  bool            Hassamecluster;       /* Whether this article matches 
-                                           Pathcluster */
-} ARTDATA;
-
-/*
-**  Set of channel types.
-*/
-typedef enum _CHANNELTYPE {
-  CTany,
-  CTfree,
-  CTremconn,
-  CTreject,
-  CTnntp,
-  CTlocalconn,
-  CTcontrol,
-  CTfile,
-  CTexploder,
-  CTprocess
-} CHANNELTYPE;
-
-
-/*
-**  The state a channel is in.  Interpretation of this depends on the
-**  channel's type.  Used mostly by CTnntp channels.
-*/
-typedef enum _CHANNELSTATE {
-  CSerror,
-  CSwaiting,
-  CSgetcmd,
-  CSgetauth,
-  CSwritegoodbye,
-  CSwriting,
-  CSpaused,
-  CSgetheader,
-  CSgetbody,
-  CSgotarticle,
-  CSgotlargearticle,
-  CSnoarticle,
-  CSeatarticle,
-  CSeatcommand,
-  CSgetxbatch,
-  CScancel
-} CHANNELSTATE;
-
-#define SAVE_AMT       10      /* used for eating article/command */
-
-/*
-**  I/O channel, the heart of the program.  A channel has input and output
-**  buffers, and functions to call when there is input to be read, or when
-**  all the output was been written.  Many callback functions take a
-**  pointer to a channel, so set up a typedef for that.
-*/
-#define PRECOMMITCACHESIZE 128
-struct _CHANNEL;
-typedef void (*innd_callback_t)(struct _CHANNEL *);
-
-typedef struct _CHANNEL {
-  CHANNELTYPE         Type;
-  CHANNELSTATE        State;
-  int                 fd;
-  bool                Skip;
-  bool                Streaming;
-  bool                NoResendId;
-  bool                privileged;
-  bool                Nolist;
-  unsigned long               Duplicate;
-  unsigned long               Unwanted_s;
-  unsigned long               Unwanted_f;
-  unsigned long               Unwanted_d;
-  unsigned long               Unwanted_g;
-  unsigned long               Unwanted_u;
-  unsigned long               Unwanted_o;
-  float                       Size;
-  float                       DuplicateSize;
-  unsigned long               Check;
-  unsigned long               Check_send;
-  unsigned long               Check_deferred;
-  unsigned long               Check_got;
-  unsigned long               Check_cybercan;
-  unsigned long               Takethis;
-  unsigned long               Takethis_Ok;
-  unsigned long               Takethis_Err;
-  unsigned long               Ihave;
-  unsigned long               Ihave_Duplicate;
-  unsigned long               Ihave_Deferred;
-  unsigned long               Ihave_SendIt;
-  unsigned long               Ihave_Cybercan;
-  int                 Reported;
-  long                Received;
-  long                Refused;
-  long                Rejected;
-  int                 BadWrites;
-  int                 BadReads;
-  int                 BlockedWrites;
-  int                 BadCommands;
-  time_t              LastActive;
-  time_t              NextLog;
-  struct sockaddr_storage Address;
-  innd_callback_t      Reader;
-  innd_callback_t      WriteDone;
-  time_t              Waketime;
-  time_t              Started;
-  innd_callback_t      Waker;
-  void             *  Argument;
-  void             *  Event;
-  struct buffer               In;
-  struct buffer               Out;
-  bool                Tracing;
-  struct buffer               Sendid;
-  HASH                CurrentMessageIDHash;
-  struct _WIP      *  PrecommitWIP[PRECOMMITCACHESIZE];
-  int                 PrecommitiCachenext;
-  int                 XBatchSize;
-  int                 LargeArtSize;
-  int                 LargeCmdSize;
-  int                 ActiveCnx;
-  int                 MaxCnx;
-  int                 HoldTime;
-  time_t              ArtBeg;
-  int                 ArtMax;
-  long                Start;           /* where current cmd/article starts
-                                          it indicates offset from bp->Data */
-  long                Next;            /* next pointer to read
-                                          it indicates offset from bp->Data */
-  char                Error[SMBUF];    /* error buffer */
-  ARTDATA             Data;            /* used for processing article */
-  struct _CHANNEL      *nextcp;                /* linked list for each incoming site */
-} CHANNEL;
-
-#define        DEFAULTNGBOXSIZE        64
-
-/*
-**  A newsgroup has a name in different formats, and a high-water count,
-**  also kept in different formats.  It also has a list of sites that
-**  get this group.
-*/
-typedef struct _NEWSGROUP {
-  long                 Start;       /* Offset into the active file  */
-  char              *  Name;
-  int                  NameLength;
-  ARTNUM               Last;
-  ARTNUM               Filenum;     /* File name to use             */
-  int                  Lastwidth;
-  int                  PostCount;   /* Have we already put it here? */
-  char              *  LastString;
-  char              *  Rest;        /* Flags, NOT NULL TERMINATED   */
-  SITEIDX              nSites;
-  int               *  Sites;
-  SITEIDX              nPoison;
-  int               *  Poison;
-  struct _NEWSGROUP  *  Alias;
-} NEWSGROUP;
-
-
-/*
-**  How a site is fed.
-*/
-typedef enum _FEEDTYPE {
-  FTerror,
-  FTfile,
-  FTchannel,
-  FTexploder,
-  FTfunnel,
-  FTlogonly,
-  FTprogram
-} FEEDTYPE;
-
-
-/*
-**  Diablo-style hashed feeds or hashfeeds.
-*/
-#define HASHFEED_QH    1
-#define HASHFEED_MD5   2
-
-typedef struct _HASHFEEDLIST {
-  int                  type;
-  unsigned int         begin;
-  unsigned int         end;
-  unsigned int         mod;
-  unsigned int         offset;
-  struct _HASHFEEDLIST *next;
-} HASHFEEDLIST;
-
-
-/*
-**  A site may reject something in its subscription list if it has
-**  too many hops, or a bad distribution.
-*/
-typedef struct _SITE {
-  const char  *   Name;
-  char       *   Entry;
-  int            NameLength;
-  char       **  Exclusions;
-  char       **  Distributions;
-  char       **  Patterns;
-  bool           Poison;
-  bool           PoisonEntry;
-  bool           Sendit;
-  bool           Seenit;
-  bool           IgnoreControl;
-  bool           DistRequired;
-  bool           IgnorePath;
-  bool           ControlOnly;
-  bool           DontWantNonExist;
-  bool           NeedOverviewCreation;
-  bool           FeedwithoutOriginator;
-  bool           DropFiltered;
-  int            Hops;
-  int            Groupcount;
-  int            Followcount;
-  int            Crosscount;
-  FEEDTYPE       Type;
-  NEWSGROUP   *   ng;
-  bool           Spooling;
-  char       *   SpoolName;
-  bool           Working;
-  long           StartWriting;
-  long           StopWriting;
-  long           StartSpooling;
-  char       *   Param;
-  char           FileFlags[FEED_MAXFLAGS + 1];
-  long           MaxSize;
-  long           MinSize;
-  int            Nice;
-  CHANNEL     *   Channel;
-  bool           IsMaster;
-  int            Master;
-  int            Funnel;
-  bool           FNLwantsnames;
-  struct buffer          FNLnames;
-  int            Process;
-  pid_t                  pid;
-  long           Flushpoint;
-  struct buffer          Buffer;
-  bool           Buffered;
-  char       **  Originator;
-  HASHFEEDLIST *  HashFeedList;
-  int            Next;
-  int            Prev;
-} SITE;
-
-
-/*
-**  A process is something we start up to send articles.
-*/
-typedef enum _PROCSTATE {
-  PSfree,
-  PSrunning,
-  PSdead
-} PROCSTATE;
-
-
-/*
-**  We track our children and collect them synchronously.
-*/
-typedef struct _PROCESS {
-  PROCSTATE    State;
-  pid_t                Pid;
-  int          Status;
-  time_t       Started;
-  time_t       Collected;
-  int          Site;
-} PROCESS;
-
-/*
-**  A work in progress entry, an article that we've been offered but haven't
-**  received yet.
-*/
-typedef struct _WIP {
-  HASH         MessageID;      /* Hash of the messageid.  Doing it like
-                                  this saves us from haveing to allocate
-                                  and deallocate memory a lot, and also
-                                  means lookups are faster. */ 
-  time_t       Timestamp;      /* Time we last looked at this MessageID */
-  CHANNEL      *Chan;          /* Channel that this message is associated
-                                  with */
-  struct _WIP  *Next;          /* Next item in this bucket */
-} WIP;
-
-/*
-**  Supported timers.  If you add new timers to this list, also add them to
-**  the list of tags in chan.c.
-*/
-enum timer {
-    TMR_IDLE = TMR_APPLICATION, /* Server is completely idle. */
-    TMR_ARTCLEAN,               /* Analyzing an incoming article. */
-    TMR_ARTWRITE,               /* Writing an article. */
-    TMR_ARTCNCL,                /* Processing a cancel message. */
-    TMR_SITESEND,               /* Sending an article to feeds. */
-    TMR_OVERV,                  /* Generating overview information. */
-    TMR_PERL,                   /* Perl filter. */
-    TMR_PYTHON,                 /* Python filter. */
-    TMR_NNTPREAD,               /* Reading NNTP data from the network. */
-    TMR_ARTPARSE,               /* Parsing an article. */
-    TMR_ARTLOG,                 /* Logging article disposition. */
-    TMR_DATAMOVE,               /* Moving data. */
-    TMR_MAX
-};
-
-\f
-
-/*
-**  In-line macros for efficiency.
-**
-**  Set or append data to a channel's output buffer.
-*/
-#define WCHANset(cp, p, l)      buffer_set(&(cp)->Out, (p), (l))
-#define WCHANappend(cp, p, l)   buffer_append(&(cp)->Out, (p), (l))
-
-/*
-**  Mark that an I/O error occurred, and block if we got too many.
-*/
-#define IOError(WHEN, e)                    \
-  do {                                      \
-    if (--ErrorCount <= 0 || (e) == ENOSPC) \
-      ThrottleIOError(WHEN);                \
-  } while (0)
-\f
-
-/*
-**  Global data.
-**
-** Do not change "extern" to "EXTERN" in the Global data.  The ones
-** marked with "extern" are initialized in innd.c.  The ones marked
-** with "EXTERN" are not explicitly initialized in innd.c.
-*/
-#if defined(DEFINE_DATA)
-# define EXTERN                /* NULL */
-#else
-# define EXTERN                extern
-#endif
-extern const ARTHEADER ARTheaders[MAX_ARTHEADER];
-extern bool            BufferedLogs;
-EXTERN bool            AnyIncoming;
-extern bool            Debug;
-EXTERN bool            ICDneedsetup;
-EXTERN bool            NeedHeaders;
-EXTERN bool            NeedOverview;
-EXTERN bool            NeedPath;
-EXTERN bool            NeedStoredGroup;
-EXTERN bool            NeedReplicdata;
-extern bool            NNRPTracing;
-extern bool            StreamingOff;
-extern bool            Tracing;
-EXTERN struct buffer   Path;
-EXTERN struct buffer   Pathalias;
-EXTERN struct buffer    Pathcluster;
-EXTERN char         *  ModeReason;     /* NNTP reject message   */
-EXTERN char         *  NNRPReason;     /* NNRP reject message   */
-EXTERN char         *  Reservation;    /* Reserved lock message */
-EXTERN char         *  RejectReason;   /* NNTP reject message   */
-EXTERN FILE         *  Errlog;
-EXTERN FILE         *  Log;
-extern char            LogName[];
-extern int             ErrorCount;
-EXTERN int             ICDactivedirty;
-EXTERN int             MaxOutgoing;
-EXTERN int             nGroups;
-EXTERN SITEIDX         nSites;
-EXTERN int             PROCneedscan;
-EXTERN NEWSGROUP    ** GroupPointers;
-EXTERN NEWSGROUP    *  Groups;
-extern OPERATINGMODE   Mode;
-EXTERN sig_atomic_t    GotTerminate;
-EXTERN SITE        *   Sites;
-EXTERN SITE            ME;
-EXTERN struct timeval  TimeOut;
-EXTERN TIMEINFO                Now;            /* Reasonably accurate time     */
-EXTERN bool            ThrottledbyIOError;
-EXTERN char        *   NCgreeting;
-EXTERN struct history   *History;
-
-/*
-** Table size for limiting incoming connects.  Do not change the table
-** size unless you look at the code manipulating it in rc.c.
-*/
-#define REMOTETABLESIZE        128
-
-/*
-** Setup the default values.  The REMOTETIMER being zero turns off the
-** code to limit incoming connects.
-*/
-#define REMOTELIMIT    2
-#define REMOTETIMER    0
-#define REMOTETOTAL    60
-#define REJECT_TIMEOUT 10
-extern int             RemoteLimit;    /* Per host limit. */
-extern time_t          RemoteTimer;    /* How long to remember connects. */
-extern int             RemoteTotal;    /* Total limit. */
-
-
-/*
-**  Function declarations.
-*/
-extern void            InndHisOpen(void);
-extern void             InndHisClose(void);
-extern bool             InndHisWrite(const char *key, time_t arrived,
-                                    time_t posted, time_t expires,
-                                    TOKEN *token);
-extern bool             InndHisRemember(const char *key);
-extern void             InndHisLogStats(void);
-extern bool            FormatLong(char *p, unsigned long value, int width);
-extern bool            NeedShell(char *p, const char **av, const char **end);
-extern char        **  CommaSplit(char *text);
-extern void            SetupListBuffer(int size, LISTBUFFER *list);
-extern char         *  MaxLength(const char *p, const char *q);
-extern pid_t           Spawn(int niceval, int fd0, int fd1, int fd2,
-                             char * const av[]);
-extern void            CleanupAndExit(int x, const char *why);
-extern void            FileGlue(char *p, const char *n1, char c, const char *n2);
-extern void            JustCleanup(void);
-extern void            ThrottleIOError(const char *when);
-extern void            ThrottleNoMatchError(void);
-extern void            ReopenLog(FILE *F);
-extern void            xchown(char *p);
-
-extern bool            ARTidok(const char *MessageID);
-extern bool            ARTreadschema(void);
-extern const char   *  ARTreadarticle(char *files);
-extern char        *   ARTreadheader(char *files);
-extern bool            ARTpost(CHANNEL *cp);
-extern void            ARTcancel(const ARTDATA *Data,
-                                 const char *MessageID, bool Trusted);
-extern void            ARTclose(void);
-extern void            ARTsetup(void);
-extern void            ARTprepare(CHANNEL *cp);
-extern void            ARTparse(CHANNEL *cp);
-
-extern bool            CHANsleeping(CHANNEL *cp);
-extern CHANNEL      *  CHANcreate(int fd, CHANNELTYPE Type,
-                                  CHANNELSTATE State,
-                                  innd_callback_t Reader,
-                                  innd_callback_t WriteDone);
-extern CHANNEL      *  CHANiter(int *cp, CHANNELTYPE Type);
-extern CHANNEL      *  CHANfromdescriptor(int fd);
-extern char        *   CHANname(const CHANNEL *cp);
-extern int             CHANreadtext(CHANNEL *cp);
-extern void            CHANclose(CHANNEL *cp, const char *name);
-extern void            CHANreadloop(void);
-extern void            CHANsetup(int i);
-extern void            CHANshutdown(void);
-extern void            CHANtracing(CHANNEL *cp, bool Flag);
-extern void            CHANsetActiveCnx(CHANNEL *cp);
-
-extern void            RCHANadd(CHANNEL *cp);
-extern void            RCHANremove(CHANNEL *cp);
-
-extern void            SCHANadd(CHANNEL *cp, time_t Waketime, void *Event,
-                                innd_callback_t Waker, void *Argument);
-extern void            SCHANremove(CHANNEL *cp);
-extern void            SCHANwakeup(void *Event);
-
-extern bool            WCHANflush(CHANNEL *cp);
-extern void            WCHANadd(CHANNEL *cp);
-extern void            WCHANremove(CHANNEL *cp);
-extern void            WCHANsetfrombuffer(CHANNEL *cp, struct buffer *bp);
-
-extern void            CCcopyargv(char *av[]);
-extern const char   *  CCaddhist(char *av[]);
-extern const char   *  CCblock(OPERATINGMODE NewMode, char *reason);
-extern const char   *  CCcancel(char *av[]);
-extern const char   *  CCcheckfile(char *av[]);
-
-extern bool            ICDnewgroup(char *Name, char *Rest);
-extern char        *   ICDreadactive(char **endp);
-extern bool            ICDchangegroup(NEWSGROUP *ngp, char *Rest);
-extern void            ICDclose(void);
-extern bool            ICDrenumberactive(void);
-extern bool            ICDrmgroup(NEWSGROUP *ngp);
-extern void            ICDsetup(bool StartSites);
-extern void            ICDwrite(void);
-extern void            ICDwriteactive(void);
-
-extern void            CCclose(void);
-extern void            CCsetup(void);
-
-extern void             KEYgenerate(HDRCONTENT *, const char *body,
-                                    const char *orig, size_t length);
-
-extern void            LCclose(void);
-extern void            LCsetup(void);
-
-extern int             NGsplit(char *p, int size, LISTBUFFER *List);
-extern NEWSGROUP    *  NGfind(const char *Name);
-extern void            NGclose(void);
-extern CHANNEL     *   NCcreate(int fd, bool MustAuthorize, bool IsLocal);
-extern void            NGparsefile(void);
-extern bool            NGrenumber(NEWSGROUP *ngp);
-extern bool            NGlowmark(NEWSGROUP *ngp, long lomark);
-
-extern void            NCclearwip(CHANNEL *cp);
-extern void            NCclose(void);
-extern void            NCsetup(void);
-extern void            NCwritereply(CHANNEL *cp, const char *text);
-extern void            NCwriteshutdown(CHANNEL *cp, const char *text);
-
-/* perl.c */
-extern char        *   PLartfilter(const ARTDATA *Data, char *artBody, long artLen, int lines);
-extern char        *   PLmidfilter(char *messageID);
-extern void            PLmode(OPERATINGMODE mode, OPERATINGMODE NewMode,
-                              char *reason);
-extern char         *   PLstats(void);
-extern void            PLxsinit(void);
-
-extern int             PROCwatch(pid_t pid, int site);
-extern void            PROCunwatch(int process);
-/* extern void         PROCclose(bool Quickly); */
-extern void            PROCscan(void);
-extern void            PROCsetup(int i);
-
-extern int             RClimit(CHANNEL *cp);
-extern bool            RCnolimit(CHANNEL *cp);
-extern bool            RCauthorized(CHANNEL *cp, char *pass);
-extern int             RCcanpost(CHANNEL *cp, char *group);
-extern char        *   RChostname(const CHANNEL *cp);
-extern char        *   RClabelname(CHANNEL *cp);
-extern void            RCclose(void);
-extern void            RChandoff(int fd, HANDOFF h);
-extern void            RCreadlist(void);
-extern void            RCsetup(int i);
-
-extern bool            SITEfunnelpatch(void);
-extern bool            SITEsetup(SITE *sp);
-extern bool            SITEwantsgroup(SITE *sp, char *name);
-extern bool            SITEpoisongroup(SITE *sp, char *name);
-extern char        **  SITEreadfile(const bool ReadOnly);
-extern SITE        *   SITEfind(const char *p);
-extern SITE        *   SITEfindnext(const char *p, SITE *sp);
-extern const char   *  SITEparseone(char *Entry, SITE *sp,
-                                    char *subbed, char *poison);
-extern void            SITEchanclose(CHANNEL *cp);
-extern void            SITEdrop(SITE *sp);
-extern void            SITEflush(SITE *sp, const bool Restart);
-extern void            SITEflushall(const bool Restart);
-extern void            SITEforward(SITE *sp, const char *text);
-extern void            SITEfree(SITE *sp);
-extern void            SITEinfo(struct buffer *bp, SITE *sp, bool Verbose);
-extern void            SITEparsefile(bool StartSite);
-extern void            SITEprocdied(SITE *sp, int process, PROCESS *pp);
-extern void            SITEsend(SITE *sp, ARTDATA *Data);
-extern void            SITEwrite(SITE *sp, const char *text);
-
-extern void            STATUSinit(void);
-extern void            STATUSmainloophook(void);
-
-extern void            WIPsetup(void);
-extern WIP         *   WIPnew(const char *messageid, CHANNEL *cp);
-extern void            WIPprecomfree(CHANNEL *cp);
-extern void            WIPfree(WIP *wp);
-extern bool            WIPinprogress(const char *msgid, CHANNEL *cp,
-                                     bool Add);
-extern WIP         *   WIPbyid(const char *mesageid);
-extern WIP         *   WIPbyhash(const HASH hash);
-
-/*
-**  TCL globals and functions
-*/
-#if DO_TCL
-extern Tcl_Interp   *  TCLInterpreter;
-extern bool            TCLFilterActive;
-extern struct buffer * TCLCurrArticle;
-extern ARTDATA     *   TCLCurrData;
-
-extern void            TCLfilter(bool value);
-extern void            TCLreadfilter(void);
-extern void            TCLsetup(void);
-extern void            TCLclose(void);
-#endif /* DO_TCL */
-
-/*
-**  Python globals and functions
-*/
-#if DO_PYTHON
-extern bool            PythonFilterActive;
-
-void                   PYfilter(bool value);
-extern const char   *  PYcontrol(char **av);
-extern int             PYreadfilter(void);
-extern char        *   PYartfilter(const ARTDATA *Data, char *artBody, long artLen, int lines);
-extern char        *   PYmidfilter(char *messageID, int msglen);
-extern void            PYmode(OPERATINGMODE mode, OPERATINGMODE newmode,
-                              char *reason);
-extern void            PYsetup(void);
-extern void            PYclose(void);
-#endif /* DO_PYTHON */
-
-END_DECLS
-
-#endif /* INND_H */