/* * 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 _BFORCE_H_ #define _BFORCE_H_ /* * BinkleyForce limits */ #define BF_MAXCFGLINE 512 #define BF_MAXREQLINE 256 #define BF_MAXPATH 256 #define BF_MAXDOMAIN 40 #define BF_MAXADDRSTR 80 /* * Maximum length of file name (without path) */ #define BFORCE_MAX_NAME 128 /* * Maximum path length, including file name length */ #define BFORCE_MAX_PATH 256 /* * Maximum length of address string */ #define BFORCE_MAX_ADDRSTR 80 /* * Lock files type: * 1 - Ascii lock files * 2 - Binary lock files * 3 - SVR4 lock files (not implemented) */ #define BFORCE_LOCK_TYPE 1 /* * Maximum length of phone number string */ #define BFORCE_MAX_PHONE 80 /* * Maximum length of modem command string. Most modems * cannot handle strings longer 40 characters. */ #define MODEM_MAX_COMMAND 120 /* * Maximum length of modem response string */ #define MODEM_MAX_RESP 120 /* * Maximum number of characters that modem can response * on something command. Responses larger this will be * considered invalid, and mailer will return "modem not * response" without further waiting for "OK" or "ERROR" */ #define MODEM_MAX_RESP_SIZE 8128 /* * BinkleyForce return codes */ #define BFERR_NOERROR 0 #define BFERR_FATALERROR 1 #define BFERR_PHONE_UNKNOWN 2 #define BFERR_PORTBUSY 3 #define BFERR_SYSTEM_LOCKED 4 #define BFERR_TRY_LATER 5 #define BFERR_NOMODEM 6 #define BFERR_NOTWORKING 7 #define BFERR_CANT_CONNECT10 10 #define BFERR_CANT_CONNECT11 11 #define BFERR_CANT_CONNECT12 12 #define BFERR_CANT_CONNECT13 13 #define BFERR_CANT_CONNECT14 14 #define BFERR_CANT_CONNECT15 15 #define BFERR_CANT_CONNECT16 16 #define BFERR_CANT_CONNECT17 17 #define BFERR_CANT_CONNECT18 18 #define BFERR_CANT_CONNECT19 19 #define BFERR_CONNECT_TOOLOW 20 #define BFERR_HANDSHAKE_ERROR 21 #define BFERR_XMITERROR 22 #define BFERR_CPSTOOLOW 23 #define BFERR_STOPTIME 24 #define BFERR_MAXERRNO 24 /* Maximal error number */ #define BFERR_NAME(rc) ((rc >= 0) && (rc <= BFERR_MAXERRNO) ? BFERR[rc] : "Out of range") /* * Some most popular defines */ #define gotoexit(a) { rc = a; goto exit; } #ifdef __GNUC__ #define ASSERT_MSG() log("assertion failed: file: %s, line: %d, function: %s", \ __FILE__, __LINE__, __FUNCTION__); #else #define ASSERT_MSG() log("assertion failed: file: %s, line: %d", \ __FILE__, __LINE__); #endif #define ASSERT(expr) \ if( !(expr) ) \ { \ ASSERT_MSG(); \ abort(); \ } #define ISHEX(s) (strspn(s, "0123456790abcdefABCDEF") == strlen(s)) #define ISDEC(s) (strspn(s, "0123456789" ) == strlen(s)) #define ISOCT(s) (strspn(s, "01234567" ) == strlen(s)) /* * Some usable defines */ #define FALSE 0 #define TRUE 1 #define UNDEF -1 /* * Definition of new pretty types */ typedef unsigned long UINT32; typedef unsigned short UINT16; typedef unsigned char UINT8; typedef signed long SINT32; typedef signed short SINT16; typedef signed char SINT8; #include "confread.h" /* * Command line options */ typedef struct { bool daemon; /* Run as daemon? */ bool quit; /* Quit from daemon */ bool usestdio; /* Session on stdin and stdout */ bool earlydbg; /* Early debug on stderr */ int inetd; /* Called from inetd? */ int force; /* Force call? */ int hiddline; /* Hidden line number (0,1..) */ char *confname; /* Use this config instead def. */ char *incname; /* Include this config */ char *phone; /* Forced phone number */ char *connect; /* Connect string */ char *device; /* Forced device name */ char *iphost; /* Forced IP address */ char *ipproto; /* proto to use over TCP/IP */ int stype; /* Handshake type in slave (answer) mode */ int runmode; /* concluded runmode */ s_falist *addrlist; } s_bforce_opts; #define MODE_UNDEFINED (0) #define MODE_CALL_DEFAULT (1) #define MODE_CALL_MODEM (2) #define MODE_CALL_IP (3) #define MODE_CALL_STDIO (4) #define MODE_ANSWER (5) #define MODE_DAEMON (6) /* * Global variables */ extern const char *BFERR[]; extern char * mainenv[]; int daemon_run(const char *confname, const char *incname, bool quit); #endif