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.
210 lines
5.6 KiB
C
210 lines
5.6 KiB
C
20 years ago
|
/*
|
||
|
* 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 _OUTBOUND_H_
|
||
|
#define _OUTBOUND_H_
|
||
|
|
||
|
#include "nodelist.h"
|
||
|
|
||
|
#define FLAVOR_NONE 0x000
|
||
|
#define FLAVOR_HOLD 0x001
|
||
|
#define FLAVOR_NORMAL 0x002
|
||
|
#define FLAVOR_DIRECT 0x004
|
||
|
#define FLAVOR_IMMED 0x008
|
||
|
#define FLAVOR_CRASH 0x010
|
||
|
|
||
|
#define ACTION_NOTHING 0x000 /* Do nothing with file after ses. */
|
||
|
#define ACTION_UNLINK 0x001 /* Unlink file if send successful */
|
||
|
#define ACTION_TRUNCATE 0x002 /* Truncate file if send successful */
|
||
|
#define ACTION_FORCEUNLINK 0x004 /* Unlink file in any case after ses.*/
|
||
|
|
||
|
#define TYPE_UNKNOWN 0x000
|
||
|
#define TYPE_NETMAIL 0x001
|
||
|
#define TYPE_ARCMAIL 0x002
|
||
|
#define TYPE_TICFILE 0x004
|
||
|
#define TYPE_FILEECHO 0x008
|
||
|
#define TYPE_FILEBOX 0x010
|
||
|
#define TYPE_FROMFLO 0x020
|
||
|
#define TYPE_REQUEST 0x040
|
||
|
#define TYPE_REQANSW 0x080 /* Our answer on incoming file req. */
|
||
|
#define TYPE_FLOFILE 0x100
|
||
|
#define TYPE_ASONAME 0x200 /* File with AmigaDOS Style Outbound */
|
||
|
/* name (e.g. 2.5020.1398.11.out) */
|
||
|
|
||
|
#define STATUS_WILLSEND 0
|
||
|
#define STATUS_SKIP 1
|
||
|
#define STATUS_SENDING 2
|
||
|
#define STATUS_SENT 3
|
||
|
|
||
|
#define QUEUE_SORT_ADDRESS 0x01
|
||
|
#define QUEUE_SORT_SIZE 0x02
|
||
|
#define QUEUE_SORT_REVERSE 0x04
|
||
|
|
||
|
typedef struct {
|
||
|
FILE *fp;
|
||
|
char att_path[BFORCE_MAX_PATH+1];
|
||
|
int att_action;
|
||
|
int att_offs; /* offset of the curent line */
|
||
|
} s_FLO;
|
||
|
|
||
|
enum { OUTB_TYPE_BSO,
|
||
|
OUTB_TYPE_DOMAIN,
|
||
|
OUTB_TYPE_ASO,
|
||
|
OUTB_TYPE_FBOX };
|
||
|
|
||
|
typedef struct outbound_callback_data {
|
||
|
int (*callback)(struct outbound_callback_data *);
|
||
|
void *dest;
|
||
|
s_faddr addr;
|
||
|
char *path;
|
||
|
int flavor; /* Force this flavor for file */
|
||
|
unsigned short type;
|
||
|
} s_outbound_callback_data;
|
||
|
|
||
|
typedef struct filelist {
|
||
|
struct filelist *next;
|
||
|
char *fname;
|
||
|
size_t size;
|
||
|
unsigned short type;
|
||
|
unsigned short status;
|
||
|
unsigned short action;
|
||
|
unsigned short flavor;
|
||
|
short flodsc;
|
||
|
} s_filelist;
|
||
|
|
||
|
typedef struct flofile {
|
||
|
char *fname;
|
||
|
short flavor;
|
||
|
time_t mtime;
|
||
|
} s_flofile;
|
||
|
|
||
|
typedef struct fsqueue {
|
||
|
s_flofile *flotab;
|
||
|
s_filelist *fslist;
|
||
|
int flonum; /* Number of items in .?LO files table */
|
||
|
} s_fsqueue;
|
||
|
|
||
|
#define TRIES_RESET -1 /* Use this macro to reset tries counter */
|
||
|
#define HOLD_RESET 1 /* Use this macro to reset hold timer */
|
||
|
|
||
|
typedef struct sess_stat {
|
||
|
bool undialable;
|
||
|
int tries;
|
||
|
int tries_noconn;
|
||
|
int tries_nodial;
|
||
|
int tries_noansw;
|
||
|
int tries_hshake;
|
||
|
int tries_sessns;
|
||
|
unsigned long hold_until;
|
||
|
unsigned long hold_freqs;
|
||
|
unsigned long last_success;
|
||
|
unsigned long last_success_in;
|
||
|
unsigned long last_success_out;
|
||
|
} s_sess_stat;
|
||
|
|
||
|
typedef struct sysentry {
|
||
|
s_node node;
|
||
|
bool lookedup;
|
||
|
const s_override *overrides; /* List of all overrides */
|
||
|
const s_override *lineptr; /* List of all overrides */
|
||
|
s_sess_stat stat;
|
||
|
int line; /* Current line number */
|
||
|
bool tcpip; /* Call to the current line via TCP/IP? */
|
||
|
bool busy; /* Address is busy [in an another queue, etc.] */
|
||
|
time_t lastcall; /* Last call _finish_ time */
|
||
|
time_t mailage; /* The oldest file modification time */
|
||
|
size_t netmail_size;
|
||
|
size_t arcmail_size;
|
||
|
size_t request_size;
|
||
|
size_t files_size;
|
||
|
int flavors;
|
||
|
int types;
|
||
|
} s_sysentry;
|
||
|
|
||
|
typedef struct sysqueue {
|
||
|
s_sysentry *systab;
|
||
|
int sysnum;
|
||
|
time_t holduntil;
|
||
|
int current_modem;
|
||
|
int current_tcpip;
|
||
|
int next_modem;
|
||
|
int next_tcpip;
|
||
|
} s_sysqueue;
|
||
|
|
||
|
typedef struct exttab {
|
||
|
const char *ext;
|
||
|
int type;
|
||
|
int flavor;
|
||
|
int action;
|
||
|
} s_exttab;
|
||
|
|
||
|
extern s_exttab outtab[];
|
||
|
extern s_exttab exttab[];
|
||
|
extern int (*sysqueue_add_callback)(s_sysentry *);
|
||
|
extern int (*sysqueue_rem_callback)(s_sysentry *);
|
||
|
extern bool sysqueue_dont_count_sizes;
|
||
|
|
||
|
/* outb_bsy.c */
|
||
|
int out_bsy_check(s_faddr addr);
|
||
|
#ifdef BFORCE_USE_CSY
|
||
|
int out_bsy_lock(s_faddr addr, bool csy_locks);
|
||
|
#else
|
||
|
int out_bsy_lock(s_faddr addr);
|
||
|
#endif
|
||
|
int out_bsy_unlock(s_faddr addr);
|
||
|
int out_bsy_unlockall(void);
|
||
|
|
||
|
/* outb_flo.h */
|
||
|
s_FLO *flo_open(const char *path, const char *mode);
|
||
|
int flo_next(s_FLO *FLO);
|
||
|
int flo_mark_sent(s_FLO *FLO);
|
||
|
int flo_eof(s_FLO *FLO);
|
||
|
int flo_close(s_FLO *FLO);
|
||
|
bool out_flo_isempty(const char *path);
|
||
|
int out_flo_marksent(const char *fname, const char *floname);
|
||
|
int out_flo_getsizes(const char *floname, size_t *arcmail, size_t *files);
|
||
|
int out_flo_unlinkempty(const s_flofile *flotab, int flonum);
|
||
|
|
||
|
/* outb_getname.c */
|
||
|
char *out_getname_4d(s_faddr addr);
|
||
|
char *out_getname_domain(s_faddr addr);
|
||
|
char *out_getname_amiga(s_faddr addr);
|
||
|
|
||
|
/* outb_queue.c */
|
||
|
int out_filetype(const char *fname);
|
||
|
int out_handle_fsqueue(s_outbound_callback_data *callback);
|
||
|
void deinit_filelist(s_filelist *filelist);
|
||
|
void deinit_fsqueue(s_fsqueue *q);
|
||
|
#ifdef DEBUG
|
||
|
void log_filelist(const s_filelist *filelist);
|
||
|
void log_fsqueue(const s_fsqueue *q);
|
||
|
#endif
|
||
|
|
||
|
/* outb_main.c */
|
||
|
int out_get_root(const char *outbound, char **out_root, char **out_main);
|
||
|
int out_parse_name_aso(s_faddr *addr, const char *name);
|
||
|
int out_scan(s_outbound_callback_data *callback, const s_falist *fa_list);
|
||
|
|
||
|
/* outb_sysqueue.c */
|
||
|
void out_reset_trycounters(s_sysentry *syst);
|
||
|
void out_reset_sysqueue(s_sysqueue *q);
|
||
|
void out_sysqueue_sort(s_sysqueue *q, int opts);
|
||
|
void out_remove_from_sysqueue(s_sysqueue *q, int pos);
|
||
|
int out_handle_sysqueue(s_outbound_callback_data *callback);
|
||
|
void deinit_sysqueue(s_sysqueue *q);
|
||
|
#ifdef DEBUG
|
||
|
void log_sysqueue(const s_sysqueue *q);
|
||
|
#endif
|
||
|
|
||
|
#endif
|