You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bforce/source/include/nodelist.h

177 lines
3.8 KiB
C

/*
* binkleyforce -- unix FTN mailer project
*
* Copyright (c) 1998-2000 Alexander Belkin, 2:5020/1398.11
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* $Id$
*/
#ifndef _NODELIST_H_
#define _NODELIST_H_
#define MAX_NAME 255
/*
* Each nodelist has corresponding index file. Index file name is the
* same as nodelist, but extension is changed to the ".bni", so index
* file to the nodelist "net5020.ndl" will be called "net5020.bni"
*
* Nodelist index header:
*
* Offset Size Description
* -------------------------------
* 0x0000 4 bytes Nodelist file date
* 0x0004 4 bytes Nodelist file size
* 0x0008 4 bytes Total number of entries in index file
* 0x000c 4 bytes Unused
*
* Nodelist index is an array of next entries:
*
* Offset Size Description
* -------------------------------
* 0x0010 2 bytes Zone number
* 0x0012 2 bytes Net number
* 0x0014 2 bytes Node number
* 0x0016 2 bytes Point number
* 0x0018 2 bytes HUB number (I hope HUB is in the same zone:net)
* 0x001a 4 bytes Offset of string in nodelist file
*
*/
enum
{
NODELIST_HDRSIZE = 16, /* Don't change! */
NODELIST_ENTRYSIZE = 14, /* Don't change! */
NODELIST_READAHEAD = 50
};
/*
* Modes for nodelist_opendindex()
*/
enum nodelist_iomode
{
NODELIST_READ,
NODELIST_WRITE
};
/*
* Positions of <...> in nodelist strings
*/
enum nodelist_positon
{
NODELIST_POSKEYWORD = 0,
NODELIST_POSNUMBER = 1,
NODELIST_POSNAME = 2,
NODELIST_POSLOCATION = 3,
NODELIST_POSSYSOP = 4,
NODELIST_POSPHONE = 5,
NODELIST_POSSPEED = 6,
NODELIST_POSFLAGS = 7
};
/*
* Storage sizes for node structure
*/
enum nodelist_limit
{
BNI_MAXNAME = 48,
BNI_MAXLOCATION = 48,
BNI_MAXSYSOP = 48,
BNI_MAXPHONE = 48,
BNI_MAXHOST = 200,
BNI_MAXFLAGS = 200
};
/*
* node->keyword values
*/
enum nodelist_keyword
{
KEYWORD_EMPTY,
KEYWORD_ZONE,
KEYWORD_REGION,
KEYWORD_HOST,
KEYWORD_HUB,
KEYWORD_PVT,
KEYWORD_HOLD,
KEYWORD_DOWN,
KEYWORD_BOSS,
KEYWORD_POINT
};
/*
* Nodelist procedures error codes
*/
enum nodelist_error
{
BNIERR_NOERROR = 0,
BNIERR_NODENOTFOUND = 1,
BNIERR_IDXIOERR = 2,
BNIERR_NDLIOERR = 3,
BNIERR_BADINDEX = 4,
BNIERR_NONODELIST = 5
};
typedef struct nodelist
{
FILE *fp_index;
FILE *fp_nodelist;
char name_index[BF_MAXPATH+1];
char name_nodelist[BF_MAXPATH+1];
long entries;
}
s_nodelist;
typedef struct bni
{
int zone;
int net;
int node;
int point;
int hub;
long offset;
}
s_bni;
typedef struct node
{
s_faddr addr;
s_faddr addr_hub;
enum nodelist_keyword keyword;
bool listed;
char name[BNI_MAXNAME+1];
char location[BNI_MAXLOCATION+1];
char sysop[BNI_MAXSYSOP+1];
char phone[BNI_MAXPHONE+1];
long speed;
char flags[BNI_MAXFLAGS+1];
bool do_binkp;
bool do_ifcico;
bool do_telnet;
char host[BNI_MAXHOST+1];
s_timevec worktime;
}
s_node;
int nodelist_checkflag(const char *nodeflags, const char *flag);
int nodelist_keywordval(const char *keyword);
int nodelist_parsestring(s_node *node, char *str);
s_nodelist *nodelist_open(const char *dir, char *name, int mode);
int nodelist_checkheader(s_nodelist *nlp);
int nodelist_createheader(s_nodelist *nlp);
int nodelist_close(s_nodelist *nlp);
int nodelist_putindex(s_nodelist *nlp, const s_bni *bni);
int nodelist_findindex(s_nodelist *nlp, s_bni *bni, s_faddr addr);
int nodelist_getstr(s_nodelist *nlp, size_t offset, char *buffer, size_t buflen);
int nodelist_lookup_string(char *buffer, size_t buflen, s_faddr addr);
int nodelist_lookup(s_node *node, s_faddr addr);
void nodelist_initnode(s_node *node, s_faddr addr);
#endif /* _NODELIST_H_ */