287 lines
9.1 KiB
C
287 lines
9.1 KiB
C
|
// This may look like C code, but it is really -*- C++ -*-
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
// The Goldware Library
|
||
|
// Copyright (C) 1990-1999 Odinn Sorensen
|
||
|
// Copyright (C) 1999-2000 Alexander S. Aganichev
|
||
|
// ------------------------------------------------------------------
|
||
|
// This library is free software; you can redistribute it and/or
|
||
|
// modify it under the terms of the GNU Library General Public
|
||
|
// License as published by the Free Software Foundation; either
|
||
|
// version 2 of the License, or (at your option) any later version.
|
||
|
//
|
||
|
// This library is distributed in the hope that it will be useful,
|
||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
// Library General Public License for more details.
|
||
|
//
|
||
|
// You should have received a copy of the GNU Library General Public
|
||
|
// License along with this program; if not, write to the Free
|
||
|
// Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||
|
// MA 02111-1307, USA
|
||
|
// ------------------------------------------------------------------
|
||
|
// $Id$
|
||
|
// ------------------------------------------------------------------
|
||
|
// AdeptXBBS structures.
|
||
|
// ------------------------------------------------------------------
|
||
|
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
// Only include once!
|
||
|
|
||
|
#ifndef __GMXBBS_H
|
||
|
#define __GMXBBS_H
|
||
|
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
// Required
|
||
|
|
||
|
#include <gmoarea.h>
|
||
|
#include <gusrxbbs.h>
|
||
|
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
|
||
|
#if defined(GOLD_CANPACK)
|
||
|
#pragma pack(1)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
// Bitmaps for the header.fflags
|
||
|
|
||
|
#define FFLAGS_MSGPRIVATE 0x0001 // private message,
|
||
|
#define FFLAGS_MSGCRASH 0x0002 // accept for forwarding
|
||
|
#define FFLAGS_MSGREAD 0x0004 // read by addressee
|
||
|
#define FFLAGS_MSGSENT 0x0008 // sent OK (remote)
|
||
|
#define FFLAGS_MSGFILE 0x0010 // file attached to msg
|
||
|
#define FFLAGS_MSGFWD 0x0020 // being forwarded
|
||
|
#define FFLAGS_MSGORPHAN 0x0040 // unknown dest node
|
||
|
#define FFLAGS_MSGKILL 0x0080 // kill after mailing
|
||
|
#define FFLAGS_MSGLOCAL 0x0100 // FidoNet vs. local
|
||
|
#define FFLAGS_MSGXX1 0x0200 //
|
||
|
#define FFLAGS_MSGXX2 0x0400 // STRIPPED by FidoNet<tm>
|
||
|
#define FFLAGS_MSGFRQ 0x0800 // file request
|
||
|
#define FFLAGS_MSGRRQ 0x1000 // receipt requested
|
||
|
#define FFLAGS_MSGCPT 0x2000 // is a return receipt
|
||
|
#define FFLAGS_MSGARQ 0x4000 // audit trail requested
|
||
|
#define FFLAGS_MSGURQ 0x8000 // update request
|
||
|
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
// Bitmaps for the header.xflags
|
||
|
|
||
|
#define XFLAGS_MSGDELETED 0x0001 // deleted message,
|
||
|
#define XFLAGS_MSGANON 0x0002 // anonymous message
|
||
|
#define XFLAGS_MSGECHO 0x0004 // unmoved echo message
|
||
|
#define XFLAGS_MSGNET 0x0008 // unmoved net message
|
||
|
|
||
|
#define XFLAGS_MSGHOLD 0x0010 // file attached to msg
|
||
|
#define XFLAGS_MSGHOST 0x0020 // being forwarded
|
||
|
#define XFLAGS_MSGSCANNED 0x0040 // Fidonet scanned
|
||
|
#define XFLAGS_MSGKEEP 0x0080 // don't delete
|
||
|
|
||
|
#define XFLAGS_MSGTREATED 0x0100 // soft cr's & lf's removed
|
||
|
#define XFLAGS_MSGPACKED 0x0200 // message LZSS compressed
|
||
|
#define XFLAGS_MSGGSCAN 0x0400 // GroupMail scanned
|
||
|
#define XFLAGS_MSGRSCAN 0x0800 // rfc0822 scanned
|
||
|
|
||
|
#define XFLAGS_MSGARCHIVED 0x4000 // Message stored
|
||
|
#define XFLAGS_MSGTAGGED 0x8000 // used by offline readers
|
||
|
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
// AdeptXBBS Message Header (*.Data)
|
||
|
|
||
|
struct XbbsHdr {
|
||
|
char majorversion; // Minor revision number of this message style
|
||
|
char minorversion; // Minor revision number of this message style
|
||
|
ushort structlen; // The length of this data structure
|
||
|
char from[60]; // Who the message is from
|
||
|
char to[60]; // Who the message is to
|
||
|
char subj[70]; // The subject of the message
|
||
|
char date[35]; // Date the message was written
|
||
|
char indate[4]; // Import date
|
||
|
ulong msgnum; // Current message number
|
||
|
ulong timesread; // Number of times the message has been read
|
||
|
time_t timerecv; // Time user received this message
|
||
|
ulong length; // Length of message stored in .Text Data file
|
||
|
long start; // Pointer to starting byte in .Text Data file
|
||
|
ulong extra1; // Extra space // Was going to be for reply
|
||
|
ulong extra2; // Extra space // linking instead came up with
|
||
|
ulong extra3; // Extra space // a better method
|
||
|
Addr origaddr; // Messages origin
|
||
|
Addr destaddr; // Messages destination
|
||
|
ushort cost; // Cost to send this message
|
||
|
ushort fflags; // Fidonet related flags
|
||
|
ushort xflags; // XBBS related flags
|
||
|
ulong iflags; // Internet related flags
|
||
|
ulong oflags; // Other network related flags
|
||
|
};
|
||
|
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
// AdeptXBBS Message Index (*.Index)
|
||
|
|
||
|
struct XbbsIdx {
|
||
|
ushort to; // Checksum of the to field
|
||
|
ushort from; // Checksum of the from field
|
||
|
ushort subj; // Checksum of the subject field
|
||
|
ulong msgidcrc; // MSGID 32-bit CRC of address field (starting value 0xFFFFFFFF)
|
||
|
ulong msgidserialno; // MSGID Serial number field
|
||
|
ulong replycrc; // REPLY 32-bit CRC of address field (starting value 0xFFFFFFFF)
|
||
|
ulong replyserialno; // REPLY Serial number field
|
||
|
};
|
||
|
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
// AdeptXBBS Personal Mail Index
|
||
|
|
||
|
struct XbbsPmi {
|
||
|
long areanumber;
|
||
|
long msgnumber;
|
||
|
char from[60];
|
||
|
char subject[70];
|
||
|
char date[20];
|
||
|
};
|
||
|
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
|
||
|
#if defined(GOLD_CANPACK)
|
||
|
#pragma pack()
|
||
|
#endif
|
||
|
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
|
||
|
struct XbbsData {
|
||
|
int fhdata;
|
||
|
int fhindex;
|
||
|
int fhlmr;
|
||
|
int fhtext;
|
||
|
int islocked;
|
||
|
XbbsIdx* idx;
|
||
|
uint idx_size;
|
||
|
};
|
||
|
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
|
||
|
struct XbbsWide {
|
||
|
int fhpmi;
|
||
|
int userno;
|
||
|
XbbsUser* user;
|
||
|
XbbsPmi* pmi;
|
||
|
int isopen;
|
||
|
const char* path;
|
||
|
};
|
||
|
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
|
||
|
class XbbsArea : public gmo_area {
|
||
|
|
||
|
protected:
|
||
|
|
||
|
XbbsWide* wide;
|
||
|
XbbsData* data;
|
||
|
|
||
|
void data_open();
|
||
|
void data_close();
|
||
|
|
||
|
void raw_open();
|
||
|
void raw_close();
|
||
|
void refresh();
|
||
|
int load_message(int __mode, gmsg* __msg, XbbsHdr& __hdr);
|
||
|
|
||
|
void lock_file(int handle, long position, long length);
|
||
|
void unlock_file(int handle, long position, long length);
|
||
|
|
||
|
int test_open(const char* __file, int sharemode=-1);
|
||
|
void save_lastread();
|
||
|
void raw_scan(int __keep_index, int __scanpm=false);
|
||
|
void save_message(int __mode, gmsg* __msg, XbbsHdr& __hdr);
|
||
|
|
||
|
void update_personal_mail(gmsg* __msg, XbbsHdr& __hdr, int __status);
|
||
|
|
||
|
public:
|
||
|
|
||
|
XbbsArea() { wide = NULL; data = NULL; }
|
||
|
virtual ~XbbsArea() {}
|
||
|
|
||
|
// ----------------------------------------------------------------
|
||
|
// Messagebase member functions
|
||
|
|
||
|
void open();
|
||
|
void close();
|
||
|
|
||
|
void suspend();
|
||
|
void resume();
|
||
|
|
||
|
void lock();
|
||
|
void unlock();
|
||
|
|
||
|
void scan();
|
||
|
void scan_area();
|
||
|
void scan_area_pm();
|
||
|
|
||
|
int load_hdr(gmsg* msg);
|
||
|
int load_msg(gmsg* msg);
|
||
|
|
||
|
void save_hdr(int mode, gmsg* msg);
|
||
|
void save_msg(int mode, gmsg* msg);
|
||
|
|
||
|
void del_msg(gmsg* msg);
|
||
|
|
||
|
void new_msgno(gmsg* msg);
|
||
|
char* user_lookup(char* lookfor);
|
||
|
int renumber();
|
||
|
|
||
|
void update_timesread(gmsg* msg);
|
||
|
|
||
|
Line* make_dump_msg(Line*& lin, gmsg* msg, char* lng_head);
|
||
|
};
|
||
|
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
|
||
|
extern XbbsWide* xbbswide;
|
||
|
extern XbbsData* xbbsdata;
|
||
|
extern int xbbsdatano;
|
||
|
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
|
||
|
#if not defined(__OS2__)
|
||
|
inline void XbbsArea::open() { }
|
||
|
inline void XbbsArea::save_lastread() { }
|
||
|
inline void XbbsArea::close() { }
|
||
|
inline void XbbsArea::suspend() { }
|
||
|
inline void XbbsArea::resume() { }
|
||
|
inline void XbbsArea::scan() { }
|
||
|
inline void XbbsArea::scan_area() { }
|
||
|
inline void XbbsArea::scan_area_pm() { }
|
||
|
inline int XbbsArea::load_message(int, gmsg*, XbbsHdr&) { return false; }
|
||
|
inline int XbbsArea::load_hdr(gmsg*) { return false; }
|
||
|
inline int XbbsArea::load_msg(gmsg*) { return false; }
|
||
|
inline void XbbsArea::lock() { }
|
||
|
inline void XbbsArea::unlock() { }
|
||
|
inline void XbbsArea::save_message(int, gmsg*, XbbsHdr&) { }
|
||
|
inline void XbbsArea::save_hdr(int, gmsg*) { }
|
||
|
inline void XbbsArea::save_msg(int, gmsg*) { }
|
||
|
inline void XbbsArea::del_msg(gmsg*) { }
|
||
|
inline void XbbsArea::new_msgno(gmsg*) { }
|
||
|
inline char* XbbsArea::user_lookup(char*) { return NULL; }
|
||
|
inline int XbbsArea::renumber() { return false; }
|
||
|
inline void XbbsArea::update_timesread(gmsg*) { }
|
||
|
inline Line* XbbsArea::make_dump_msg(Line*&, gmsg*, char* lng_head) { return NULL; }
|
||
|
#endif
|
||
|
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
|
||
|
#endif
|
||
|
|
||
|
// ------------------------------------------------------------------
|