/********************************************************
 * File: cfg.h
 * Created at Sun Jan 28 22:10:29 MSK 2001 by raorn // raorn@binec.ru
 *
 * $Id: cfg.h,v 1.12 2002/02/11 13:25:30 raorn Exp $
 *******************************************************/
#ifndef CONFIG_H
#define CONFIG_H

#define READCONFIG_NOT_FOUND  1
#define READCONFIG_INVALID    2
#define READCONFIG_NO_MEM     3

#define CFG_CHECKSEENBY            (1L<<0)
#define CFG_CHECKPKTDEST           (1L<<1)
#define CFG_ALLOWNULLPASSWORDS     (1L<<2)
#define CFG_STRIPRE                (1L<<3)
#define CFG_FORCEINTL              (1L<<4)
#define CFG_KEEPAREAFIX            (1L<<5)
#define CFG_KEEPRECEIPT            (1L<<6)
#define CFG_AREAFIXREMOVE          (1L<<7)
#define CFG_WEEKDAYNAMING          (1L<<8)
#define CFG_ADDTID                 (1L<<9)
#define CFG_ALLOWRESCAN            (1L<<10)
#define CFG_FORWARDPASSTHRU        (1L<<11)
#define CFG_REMOVEWHENFEED         (1L<<12)
#define CFG_INCLUDEFORWARD         (1L<<13)
#define CFG_NOMAXOUTBOUNDZONE      (1L<<14)
#define CFG_ALLOWKILLSENT          (1L<<15)
#define CFG_USEASO                 (1L<<16)
#define CFG_LOCKBYLINK             (1L<<17)
#define CFG_CCONSCAN               (1L<<18)

#define CFG_MSG_HIGHWATER         (1L<<1)

#ifdef MSGBASE_JAM
#define CFG_JAM_HIGHWATER     (1L<<0)
#define CFG_JAM_HARDDELETE    (1L<<1)
#endif

#define AREA_UNCONFIRMED  1
#define AREA_MANDATORY    2
#define AREA_DEFREADONLY  4
#define AREA_IGNOREDUPES  8
#define AREA_IGNORESEENBY 16
#define AREA_IMPORTSEENBY 32

#define AREATYPE_NETMAIL  1
#define AREATYPE_ECHOMAIL 2
#define AREATYPE_DEFAULT  3
#define AREATYPE_BAD      4
#define AREATYPE_LOCAL    5
#define AREATYPE_DELETED  6

struct Area {
  struct Area *Next;
  bool changed;
  struct Aka *Aka;
  uchar Flags;
  uchar AreaType;
  uchar Tagname[80];
  uchar Description[80];
  struct Messagebase *Messagebase;
  uchar Path[200];
  uchar Group;
  ulong Expires;
  ulong Removed;

  struct jbList TossNodes;
  struct jbList BannedNodes;

  /* Maint */
  ulong KeepNum, KeepDays;

  /* Stats */
  ulong Texts;
  ulong NewTexts;
  ulong Dupes;
  ulong NewDupes;
  ushort Last8Days[8];
  time_t FirstTime;
  time_t LastTime;
};

struct Aka {
  struct Aka *Next;
  struct Node4D Node;
  uchar Domain[20];
  struct jbList AddList;
  struct jbList RemList;
};

#define TOSSNODE_READONLY   1
#define TOSSNODE_WRITEONLY  2
#define TOSSNODE_FEED       4

struct TossNode {
  struct TossNode *Next;
  struct ConfigNode *ConfigNode;
  ushort Flags;
};

struct ImportNode {
  struct ImportNode *Next;
  struct Node4D Node;
};

struct BannedNode {
  struct BannedNode *Next;
  struct ConfigNode *ConfigNode;
};

#define NODE_AUTOADD      1
#define NODE_PASSIVE      2
#define NODE_TINYSEENBY   4
#define NODE_NOSEENBY     8
#define NODE_FORWARDREQ   16
#define NODE_NOTIFY       32
#define NODE_SENDAREAFIX  64
#define NODE_SENDTEXT     128

struct RemoteAFCommand {
  struct RemoteAFCommand *Next;
  uchar Command[80];
};

struct ConfigNode {
  struct ConfigNode *Next;
  bool changed;
  struct Node4D Node;
  struct Aka *Aka;
  uchar PacketPW[9];
  struct Packer *Packer;
  bool IsInSeenBy;
  uchar AreafixPW[40];
  uchar Groups[30];
  uchar ReadOnlyGroups[30];
  uchar AddGroups[30];
  uchar DefaultGroup;
  ulong Flags;
  uchar SysopName[36];
  uchar EchomailPri;

  uchar RemoteAFName[36];
  uchar RemoteAFPw[72];

  struct jbList RemoteAFList;

  uchar LastArcName[12];

  /* Stats */
  ulong GotNetmails;
  ulong GotNetmailBytes;
  ulong SentNetmails;
  ulong SentNetmailBytes;

  ulong GotEchomails;
  ulong GotEchomailBytes;
  ulong SentEchomails;
  ulong SentEchomailBytes;

  ulong Dupes;

  time_t FirstTime;
};

struct Packer {
  struct Packer *Next;
  uchar Name[10];
  uchar Packer[80];
  uchar Unpacker[80];
  uchar Recog[80];
};

struct AddNode {
  struct AddNode *Next;
  struct Node4D Node;
};

struct RemNode {
  struct RemNode *Next;
  struct Node2DPat NodePat;
};

#define PKTS_ECHOMAIL   0
#define PKTS_HOLD       1
#define PKTS_NORMAL     2
#define PKTS_DIRECT     3
#define PKTS_CRASH      4

#define CC_TO       1
#define CC_FROM     2
#define CC_SUBJ     3

struct Carbon {
  struct Carbon *Next;
  ushort CCType;
  uchar Pattern[200];
  uchar FromArea[200];
  uchar ToArea[80];
};

struct AreaFixName {
  struct AreaFixName *Next;
  uchar Name[36];
};

#define AREALIST_DESC       1
#define AREALIST_FORWARD    2

struct Arealist {
  struct Arealist *Next;
  struct ConfigNode *Node;
  uchar AreaFile[80];
  ushort Flags;
  uchar Group;
};

#define DUPE_IGNORE 0
#define DUPE_BAD    1
#define DUPE_KILL   2

struct Config {
  bool changed;
  uchar filename[100];
  uchar areafile[100];

  uchar cfg_Sysop[36];
  uchar cfg_Inbound[100];
  uchar cfg_ProtInbound[100];
  uchar cfg_TempInbound[100];
  uchar cfg_LocalInbound[100];
  uchar cfg_Outbound[100];
  uchar cfg_PacketCreate[100];
  uchar cfg_PacketDir[100];
  uchar cfg_LogFile[100];
  uchar cfg_StatsFile[100];
  uchar cfg_DupeFile[100];
  uchar cfg_AfterUnpack[80];
  uchar cfg_BeforePack[80];
  ulong cfg_LogLevel;
  ulong cfg_DupeSize;
  ulong cfg_MaxPktSize;
  ulong cfg_MaxBundleSize;
  uchar cfg_AreaFixHelp[100];
  ulong cfg_AreaFixMaxLines;
  uchar cfg_GroupNames[30][80];
  ulong cfg_Flags;
  ushort cfg_DupeMode;
  ulong cfg_DefaultZone;
  ulong cfg_FwdTimeout;
  ulong cfg_RemoveTimeout;
  mode_t cfg_MsgbaseUmask;
  struct Area Netmail;
  struct jbList AkaList;
  struct jbList AreaList;
  struct jbList CNodeList;
  struct jbList PackerList;
  struct jbList CarbonList;
  struct jbList AreaFixList;
  struct jbList ArealistList;

  ulong cfg_msg_Flags;

#ifdef MSGBASE_JAM
  uchar cfg_jam_FlagsDir[100];
  ulong cfg_jam_MaxOpen;
  ulong cfg_jam_Flags;
#endif
};

bool ReadConfig(uchar * filename, struct Config *cfg, short *seconderr, ulong * cfgline, uchar * cfgerr, size_t errlen);
bool ReadAreas(uchar * filename, struct Config * cfg, short *seconderr, ulong * cfgline, uchar * cfgerr, size_t errlen);
bool UpdateConfig(struct Config *cfg, uchar * cfgerr, size_t errlen);
bool UpdateAreas(struct Config *cfg, uchar * cfgerr, size_t errlen);
void InitConfig(struct Config *cfg);
void FreeConfig(struct Config *cfg);

bool CheckConfig(struct Config *cfg, uchar * cfgerr, size_t errlen);

#endif


syntax highlighted by Code2HTML, v. 0.9.1