Version 0.25: EMSI-II compliance (FTS-0088), send TZUTC, protocol order
This commit is contained in:
parent
2c58629de4
commit
8fff29b28a
22
CHANGES
22
CHANGES
@ -228,9 +228,27 @@ Alexey Khromov (zx@zxalexis.ru)
|
|||||||
+ Added pre-init debugging (primarily of config readout) to stderr by -v
|
+ Added pre-init debugging (primarily of config readout) to stderr by -v
|
||||||
option. Vanished out errorful calls to "log" and "debug" before log and
|
option. Vanished out errorful calls to "log" and "debug" before log and
|
||||||
debug files initialization.
|
debug files initialization.
|
||||||
+ As of bison is default yacc for (almost) every foss system - fix
|
|
||||||
warning of yacc compliance (delete -y flag in Makefile.in)
|
|
||||||
+ Fixed build on 64-bit systems (amd64 and aarch64)
|
+ Fixed build on 64-bit systems (amd64 and aarch64)
|
||||||
+ Initially added config options incpkt_flag and incbdl_flag to raise
|
+ Initially added config options incpkt_flag and incbdl_flag to raise
|
||||||
up flag-driven tosser manipulation
|
up flag-driven tosser manipulation
|
||||||
|
|
||||||
|
0.24.2
|
||||||
|
+ Fixed environment when calling external utilities to preserve OS
|
||||||
|
environment
|
||||||
|
+ Flag work checked
|
||||||
|
|
||||||
|
0.25
|
||||||
|
+ EMSI session logic corrected to fully accomplish FTS-0088 EMSI-II
|
||||||
|
standart.
|
||||||
|
New option: proto_order - order in which EMSI proposes protocols
|
||||||
|
to callee
|
||||||
|
example:
|
||||||
|
proto_order HYD,ZMO,ZAP,DZA
|
||||||
|
If answering - final proto rely on EMSI version:
|
||||||
|
if caller is EMSI-II - in order caller asks
|
||||||
|
if caller is IMSI-I - as we suppose among our supported
|
||||||
|
+ Config example extended: added environment vars sent to external
|
||||||
|
utils
|
||||||
|
+ Changed ifcico proto port from "fido" to numbered default 60179:
|
||||||
|
modern /etc/services does not include it by default anyways
|
||||||
|
+ New option: emsi_send_tz - send TZUTC in EMSI handshake
|
||||||
|
33
INSTALL.ru
33
INSTALL.ru
@ -1,10 +1,10 @@
|
|||||||
В этом файле описывается процесс установки и настройки
|
В этом файле описывается процесс установки и настройки
|
||||||
фидонет-совместимого мейлера bforce 0.22.8.ugenk1.
|
фидонет-совместимого мейлера bforce 0.24.x
|
||||||
|
|
||||||
В данном документе приняты следующие обозначения:
|
В данном документе приняты следующие обозначения:
|
||||||
|
|
||||||
<SRCDIR> - путь, куда вы распаковали тарболл с исходными
|
<SRCDIR> - путь, куда вы распаковали тарболл с исходными
|
||||||
текстами bforce 0.22.8.ugenk1 (далее bforce)
|
текстами bforce 0.24.x (далее bforce)
|
||||||
Тарболл - файл с расширением tar.gz, или tar.bz2
|
Тарболл - файл с расширением tar.gz, или tar.bz2
|
||||||
|
|
||||||
|
|
||||||
@ -24,14 +24,12 @@ gmake
|
|||||||
|
|
||||||
Распакуйте тарболл следующими командами:
|
Распакуйте тарболл следующими командами:
|
||||||
|
|
||||||
gzip -d bforce-0.22.8.ugenk1.tar.gz
|
gzip -d bforce-master.tar.gz
|
||||||
или
|
или
|
||||||
bzip2 -d bforce-0.22.8.ugenk1.tar.bz2
|
bzip2 -d bforce-master.tar.bz2
|
||||||
|
|
||||||
tar -xvf bforce-0.22.8.ugenk1.tar
|
Перейдите в директорию bforce/source:
|
||||||
|
cd <SRCDIR>/bforce/source
|
||||||
Перейдите в директорию bforce-0.22.8.ugenk1/source:
|
|
||||||
cd <SRCDIR>/bforce-0.22.8.ugenk1/source
|
|
||||||
|
|
||||||
Для создания Makefile, который наиболее подходит к вашей
|
Для создания Makefile, который наиболее подходит к вашей
|
||||||
системе, наберите:
|
системе, наберите:
|
||||||
@ -39,22 +37,25 @@ cd <SRCDIR>/bforce-0.22.8.ugenk1/source
|
|||||||
./configure --help
|
./configure --help
|
||||||
|
|
||||||
и внимательно прочитайте предлагаемую справку.
|
и внимательно прочитайте предлагаемую справку.
|
||||||
|
В большинстве случаев вам необходимо будет указать опции
|
||||||
|
--prefix=<installroot> - базовый каталог дерева установки
|
||||||
|
Для работы в режиме демона:
|
||||||
|
--with-owner=<username> для установки имени пользователя, от которого
|
||||||
|
работает демон или создаются временные файлы.
|
||||||
|
--with-group=<groupname> для установки группы, от которой работает демон
|
||||||
|
или создаются временные файлы.
|
||||||
|
--disable-syslog для использования текстовых логов вместо syslog/journal
|
||||||
Если вам не понятна предлагаемая справка, то просто запустите:
|
Если вам не понятна предлагаемая справка, то просто запустите:
|
||||||
|
|
||||||
./configure
|
./configure
|
||||||
|
|
||||||
## WARNING! Внимание!
|
|
||||||
## Новые версии bforce собираются с поддержкой syslog по умолчанию.
|
|
||||||
## Если вы не знаете что это/зачем вам это нужно - тогда делайте
|
|
||||||
## ./configure --disable-syslog
|
|
||||||
|
|
||||||
При необходимости исправьте Makefile для ваших нужд.
|
При необходимости исправьте Makefile для ваших нужд.
|
||||||
Запустите команду make (для bsd - gmake):
|
Запустите команду make (для bsd - gmake):
|
||||||
|
|
||||||
make
|
make
|
||||||
|
|
||||||
В случае ошибок при выполнении команды make пишите bugreport на
|
В случае ошибок при выполнении команды make пишите bugreport
|
||||||
e.kozhuhovskiy@gmail.com или в эхоконференцию ru.unix.ftn
|
на электронную почту или в эхоконференцию ru.ftn.develop
|
||||||
|
|
||||||
Возможно, прийдется пересоздать configure с помощью autoconf
|
Возможно, прийдется пересоздать configure с помощью autoconf
|
||||||
|
|
||||||
@ -71,8 +72,6 @@ gmake install
|
|||||||
что бы создать необходимые директории. Для установки дополнительных
|
что бы создать необходимые директории. Для установки дополнительных
|
||||||
скриптов, выполните make install-contrib
|
скриптов, выполните make install-contrib
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Настройка
|
Настройка
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
@ -63,6 +63,13 @@ address 20:26/100.0@easynet
|
|||||||
#
|
#
|
||||||
options NoDirZap NoJanus NoChat
|
options NoDirZap NoJanus NoChat
|
||||||
|
|
||||||
|
|
||||||
|
# Protocol order for outgoing EMSI calls
|
||||||
|
# Tolerant to Options (i.e. you can order all kind of protos
|
||||||
|
# as of TZA,KER,JAN and SLK are not supported at all
|
||||||
|
# Default: HYD,JAN,DZA,ZAP,ZMO,TZA,SLK,KER
|
||||||
|
proto_order HYD,ZMO,ZAP,DZA,JAN,TZA,KER,SLK
|
||||||
|
|
||||||
#
|
#
|
||||||
# Domain outbounds
|
# Domain outbounds
|
||||||
# Domain <domain_name> <outbound_dir> <zone>
|
# Domain <domain_name> <outbound_dir> <zone>
|
||||||
@ -109,17 +116,17 @@ split_inbound yes
|
|||||||
#
|
#
|
||||||
# Path to your 4D outbound (use zone as extension)
|
# Path to your 4D outbound (use zone as extension)
|
||||||
#
|
#
|
||||||
#outbound_directory /var/spool/fido/bt/out
|
outbound_directory /var/spool/fido/bt/out
|
||||||
|
|
||||||
#
|
#
|
||||||
# Path to your AmigaDos style 4D outbound.
|
# Path to your AmigaDos style 4D outbound.
|
||||||
# (You can use all outbound styles at the same time)
|
# (You can use all outbound styles at the same time)
|
||||||
#
|
#
|
||||||
amiga_outbound_directory /var/spool/fido/bt/out
|
# amiga_outbound_directory /var/spool/fido/bt/out
|
||||||
|
|
||||||
#
|
#
|
||||||
# Directory with your nodelists (for nodelist without full path)
|
# Directory with your nodelists (for nodelist without full path)
|
||||||
#
|
# Do not forget to make indexes for your nodelists with bfindex
|
||||||
nodelist_directory /var/spool/fido/ndl
|
nodelist_directory /var/spool/fido/ndl
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -132,6 +139,9 @@ status_directory /var/spool/fido/bforce
|
|||||||
#
|
#
|
||||||
history_file /var/log/bforce/history
|
history_file /var/log/bforce/history
|
||||||
|
|
||||||
|
# Modem lock directory (/var/lock by default - you must have write perm)
|
||||||
|
# uucp_lock_directory /tmp
|
||||||
|
|
||||||
#
|
#
|
||||||
# Minimal connect speeds for incoming/outgoing sessions
|
# Minimal connect speeds for incoming/outgoing sessions
|
||||||
#
|
#
|
||||||
@ -342,6 +352,8 @@ max_speed 57600
|
|||||||
flags XW,V34B,IDC,LMD
|
flags XW,V34B,IDC,LMD
|
||||||
emsi_OH_time 22:00-07:30
|
emsi_OH_time 22:00-07:30
|
||||||
emsi_FR_time 22:30-05:30
|
emsi_FR_time 22:30-05:30
|
||||||
|
emsi_send_tz no
|
||||||
|
emsi_send_time no
|
||||||
|
|
||||||
#
|
#
|
||||||
# Our receiver buffer size [bytes]
|
# Our receiver buffer size [bytes]
|
||||||
@ -442,6 +454,23 @@ skip_files_recv *.pif *.swp
|
|||||||
# setsid - run command in a new session
|
# setsid - run command in a new session
|
||||||
# useshell - run command by calling a shell (/bin/sh)
|
# useshell - run command by calling a shell (/bin/sh)
|
||||||
#
|
#
|
||||||
|
# Bforce will make environment for external programs
|
||||||
|
# which include these variables:
|
||||||
|
# $REM_ADDR_FTN - remote ftn address
|
||||||
|
# $REM_ADDR_INET - remote inet address
|
||||||
|
# $LOC_ADDR_FTN - local ftn address
|
||||||
|
# $LOC_ADDR_INET - local inet address
|
||||||
|
# $PASSWORD - session password
|
||||||
|
# $MAILER - remote mailer
|
||||||
|
# $LOCATION - remote location
|
||||||
|
# $SYSOP - remote SysOp name
|
||||||
|
# $SYSTEM_NAME - remote station name
|
||||||
|
# $PHONE - remote phone
|
||||||
|
# $FLAGS - remote flags
|
||||||
|
# $PROTECTED - password protected on both sides
|
||||||
|
# $LISTED - present in nodelist
|
||||||
|
# $INBOUND - current inbound path for this remote
|
||||||
|
#
|
||||||
#run_after_handshake [logout]/bin/echo "Hello, world!"
|
#run_after_handshake [logout]/bin/echo "Hello, world!"
|
||||||
#run_after_session [nowait,setsid]/usr/local/lib/ftp/run-in
|
#run_after_session [nowait,setsid]/usr/local/lib/ftp/run-in
|
||||||
#
|
#
|
||||||
|
@ -1 +1 @@
|
|||||||
0.24.2
|
0.25
|
||||||
|
@ -84,6 +84,8 @@ s_conf_entry bforce_config[BFORCE_NUMBER_OF_KEYWORDS+1] = {
|
|||||||
CONF_KEY(emsi_FR_time, CT_STRING),
|
CONF_KEY(emsi_FR_time, CT_STRING),
|
||||||
CONF_KEY(emsi_OH_time, CT_STRING),
|
CONF_KEY(emsi_OH_time, CT_STRING),
|
||||||
CONF_KEY(emsi_slave_sends_nak, CT_BOOLEAN),
|
CONF_KEY(emsi_slave_sends_nak, CT_BOOLEAN),
|
||||||
|
CONF_KEY(emsi_send_tz, CT_BOOLEAN),
|
||||||
|
CONF_KEY(emsi_send_time, CT_BOOLEAN),
|
||||||
CONF_KEY(filebox, CT_FILEBOX),
|
CONF_KEY(filebox, CT_FILEBOX),
|
||||||
CONF_KEY(filebox_directory, CT_PATH),
|
CONF_KEY(filebox_directory, CT_PATH),
|
||||||
CONF_KEY(flags, CT_STRING),
|
CONF_KEY(flags, CT_STRING),
|
||||||
@ -140,6 +142,7 @@ s_conf_entry bforce_config[BFORCE_NUMBER_OF_KEYWORDS+1] = {
|
|||||||
CONF_KEY(nodial_flag, CT_STRING),
|
CONF_KEY(nodial_flag, CT_STRING),
|
||||||
CONF_KEY(override, CT_OVERRIDE),
|
CONF_KEY(override, CT_OVERRIDE),
|
||||||
CONF_KEY(options, CT_OPTIONS),
|
CONF_KEY(options, CT_OPTIONS),
|
||||||
|
CONF_KEY(proto_order, CT_STRING),
|
||||||
CONF_KEY(outbound_directory, CT_PATH),
|
CONF_KEY(outbound_directory, CT_PATH),
|
||||||
CONF_KEY(password, CT_PASSWORD),
|
CONF_KEY(password, CT_PASSWORD),
|
||||||
CONF_KEY(phone, CT_STRING),
|
CONF_KEY(phone, CT_STRING),
|
||||||
|
@ -120,11 +120,12 @@ int tcpip_connect(const char *hostname, e_tcpmode tcpmode)
|
|||||||
if( p )
|
if( p )
|
||||||
{ *p++ = '\0'; port = p; }
|
{ *p++ = '\0'; port = p; }
|
||||||
else if( tcpmode == TCPMODE_BINKP )
|
else if( tcpmode == TCPMODE_BINKP )
|
||||||
port = "binkp";
|
port = "binkp"; // Well-known
|
||||||
else if( tcpmode == TCPMODE_TELNET )
|
else if( tcpmode == TCPMODE_TELNET )
|
||||||
port = "telnet";
|
port = "telnet"; // Well-known
|
||||||
else /* Default service name is "fido" */
|
else /* TCPMODE_IFCICO Default service name is "fido"
|
||||||
port = "fido";
|
* BUGGY - simpler to place exact port number */
|
||||||
|
port = "60179";
|
||||||
|
|
||||||
if( ISDEC(port) )
|
if( ISDEC(port) )
|
||||||
server.sin_port = htons(atoi(port));
|
server.sin_port = htons(atoi(port));
|
||||||
|
@ -77,7 +77,7 @@ static char *lock_getname(const char *lockdir, const s_modemport *modemport)
|
|||||||
|
|
||||||
ASSERT(modemport != NULL);
|
ASSERT(modemport != NULL);
|
||||||
|
|
||||||
if( lockdir && *lockdir )
|
if( *lockdir )
|
||||||
lckname = (char *)xstrcpy(lockdir);
|
lckname = (char *)xstrcpy(lockdir);
|
||||||
else
|
else
|
||||||
lckname = (char *)xstrcpy(BFORCE_LOCK_DIR);
|
lckname = (char *)xstrcpy(BFORCE_LOCK_DIR);
|
||||||
@ -314,7 +314,7 @@ int port_lock(const char *lockdir, const s_modemport *modemport)
|
|||||||
char *lckname;
|
char *lckname;
|
||||||
char *tmpname, *p_tmpname;
|
char *tmpname, *p_tmpname;
|
||||||
|
|
||||||
if( lockdir && *lockdir )
|
if( *lockdir )
|
||||||
tmpname = xstrcpy(lockdir);
|
tmpname = xstrcpy(lockdir);
|
||||||
else
|
else
|
||||||
tmpname = xstrcpy(BFORCE_LOCK_DIR);
|
tmpname = xstrcpy(BFORCE_LOCK_DIR);
|
||||||
|
@ -80,7 +80,7 @@ static int state_machine(s_states *sm, void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
/* Transmite EMSI_DAT packet state machine routines */
|
/* Transmit EMSI_DAT packet state machine routines */
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
/* SM0 */
|
/* SM0 */
|
||||||
@ -741,7 +741,7 @@ void emsi_set_sysinfo(s_emsi *emsi, s_emsi *remote_emsi, int hrc,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( (remote_emsi->compcodes.EII == 1)
|
if( (remote_emsi->compcodes.EII == 1)
|
||||||
&& (options & OPTIONS_NO_EMSI_II) != OPTIONS_NO_EMSI_II )
|
&& ((options & OPTIONS_NO_EMSI_II) != OPTIONS_NO_EMSI_II) )
|
||||||
{
|
{
|
||||||
/* EMSI-II */
|
/* EMSI-II */
|
||||||
emsi->compcodes.EII = 1;
|
emsi->compcodes.EII = 1;
|
||||||
@ -813,6 +813,20 @@ void emsi_set_sysinfo(s_emsi *emsi, s_emsi *remote_emsi, int hrc,
|
|||||||
strnxcpy(emsi->flags, p_flags ? p_flags : "MO", sizeof(emsi->flags));
|
strnxcpy(emsi->flags, p_flags ? p_flags : "MO", sizeof(emsi->flags));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------- */
|
||||||
|
/* Data for TZUTC and date fields */
|
||||||
|
/* ----------------------------------------------------------------- */
|
||||||
|
tzset();
|
||||||
|
if (conf_boolean(cf_emsi_send_tz)) {
|
||||||
|
emsi->have_tzutc = 1;
|
||||||
|
emsi->tzutc = -(timezone/3600);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (conf_boolean(cf_emsi_send_time)) {
|
||||||
|
emsi->have_xdatetime = 1;
|
||||||
|
emsi->time = ;
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------- */
|
/* ----------------------------------------------------------------- */
|
||||||
/* Data for {OHFR} field */
|
/* Data for {OHFR} field */
|
||||||
/* ----------------------------------------------------------------- */
|
/* ----------------------------------------------------------------- */
|
||||||
|
@ -134,6 +134,7 @@ int emsi_incoming(s_handshake_protocol *THIS)
|
|||||||
int rc = HRC_OK;
|
int rc = HRC_OK;
|
||||||
s_emsi *remote_emsi = NULL;
|
s_emsi *remote_emsi = NULL;
|
||||||
s_emsi *local_emsi = NULL;
|
s_emsi *local_emsi = NULL;
|
||||||
|
char * p = NULL;
|
||||||
|
|
||||||
ASSERT(THIS);
|
ASSERT(THIS);
|
||||||
ASSERT(THIS->remote_data);
|
ASSERT(THIS->remote_data);
|
||||||
@ -198,7 +199,34 @@ int emsi_incoming(s_handshake_protocol *THIS)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Set protocol that we will use
|
* Set protocol that we will use
|
||||||
|
* DONE: This is EMSI-II compatible.
|
||||||
*/
|
*/
|
||||||
|
if (remote_emsi->compcodes.EII) {
|
||||||
|
/* EMSI-II uses protocol order
|
||||||
|
* If first proto is compatible - use it
|
||||||
|
* or check one by one to minimal compatible ZMO */
|
||||||
|
//p = xmalloc(sizeof(emsi->proto_order)+1);
|
||||||
|
p = xstrcpy(remote_emsi->proto_order);
|
||||||
|
THIS->protocol = PROT_NOPROT;
|
||||||
|
for( p = strtok(p, ","); p; p=strtok(NULL, ",") ) {
|
||||||
|
if( !strcmp(p, "ZMO") && !(options & OPTIONS_NO_ZMODEM)) {
|
||||||
|
if (THIS->protocol == PROT_NOPROT) THIS->protocol = PROT_ZMODEM;
|
||||||
|
}
|
||||||
|
if( !strcmp(p, "HYD") && !(options & OPTIONS_NO_HYDRA)) {
|
||||||
|
if (THIS->protocol == PROT_NOPROT) THIS->protocol = PROT_HYDRA;
|
||||||
|
}
|
||||||
|
if( !strcmp(p, "ZAP") && !(options & OPTIONS_NO_ZEDZAP)) {
|
||||||
|
if (THIS->protocol == PROT_NOPROT) THIS->protocol = PROT_ZEDZAP;
|
||||||
|
}
|
||||||
|
if( !strcmp(p, "DZA") && !(options & OPTIONS_NO_DIRZAP)) {
|
||||||
|
if (THIS->protocol == PROT_NOPROT) THIS->protocol = PROT_DIRZAP;
|
||||||
|
}
|
||||||
|
if( !strcmp(p, "JAN") && !(options & OPTIONS_NO_JANUS)) {
|
||||||
|
if (THIS->protocol == PROT_NOPROT) THIS->protocol = PROT_JANUS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
if( remote_emsi->compcodes.HYD && !(options & OPTIONS_NO_HYDRA) )
|
if( remote_emsi->compcodes.HYD && !(options & OPTIONS_NO_HYDRA) )
|
||||||
THIS->protocol = PROT_HYDRA;
|
THIS->protocol = PROT_HYDRA;
|
||||||
else if( remote_emsi->compcodes.ZAP && !(options & OPTIONS_NO_ZEDZAP) )
|
else if( remote_emsi->compcodes.ZAP && !(options & OPTIONS_NO_ZEDZAP) )
|
||||||
@ -208,8 +236,10 @@ int emsi_incoming(s_handshake_protocol *THIS)
|
|||||||
else /* NCP */
|
else /* NCP */
|
||||||
{
|
{
|
||||||
THIS->protocol = PROT_NOPROT;
|
THIS->protocol = PROT_NOPROT;
|
||||||
rc = HRC_NO_PROTOS;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (THIS->protocol == PROT_NOPROT) rc = HRC_NO_PROTOS;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check EMSI flags and set corresponding local HOLD flags
|
* Check EMSI flags and set corresponding local HOLD flags
|
||||||
|
@ -103,7 +103,10 @@ char *emsi_createdat(s_emsi *emsi)
|
|||||||
char *tmp = NULL;
|
char *tmp = NULL;
|
||||||
char buf[100];
|
char buf[100];
|
||||||
char abuf[BF_MAXADDRSTR+1];
|
char abuf[BF_MAXADDRSTR+1];
|
||||||
|
char * p_order = NULL;
|
||||||
|
char * ord = NULL;
|
||||||
|
|
||||||
|
ord = malloc(4);
|
||||||
tmp = (char *)xstrcpy("**EMSI_DAT0000");
|
tmp = (char *)xstrcpy("**EMSI_DAT0000");
|
||||||
|
|
||||||
/* {EMSI} indentifier
|
/* {EMSI} indentifier
|
||||||
@ -179,14 +182,79 @@ char *emsi_createdat(s_emsi *emsi)
|
|||||||
tmp = add_char(tmp, '}');
|
tmp = add_char(tmp, '}');
|
||||||
}
|
}
|
||||||
|
|
||||||
/* compatibility_codes */
|
/* compatibility_codes
|
||||||
|
* TODO: This is EMSI-I behaviour, not EMSI-II
|
||||||
|
* */
|
||||||
tmp = add_char(tmp, '{');
|
tmp = add_char(tmp, '{');
|
||||||
if( emsi->compcodes.NCP ) tmp = add_str(tmp, "NCP,");
|
|
||||||
if( emsi->compcodes.ZMO ) tmp = add_str(tmp, "ZMO,");
|
p_order = conf_string(cf_proto_order);
|
||||||
if( emsi->compcodes.ZAP ) tmp = add_str(tmp, "ZAP,");
|
|
||||||
if( emsi->compcodes.DZA ) tmp = add_str(tmp, "DZA,");
|
if ( !p_order ) {
|
||||||
if( emsi->compcodes.JAN ) tmp = add_str(tmp, "JAN,");
|
DEB((D_HSHAKE, "Protocol order not found, use defaults"));
|
||||||
|
/* OLD Behaviour */
|
||||||
if( emsi->compcodes.HYD ) tmp = add_str(tmp, "HYD,");
|
if( emsi->compcodes.HYD ) tmp = add_str(tmp, "HYD,");
|
||||||
|
if( emsi->compcodes.JAN ) tmp = add_str(tmp, "JAN,");
|
||||||
|
if( emsi->compcodes.DZA ) tmp = add_str(tmp, "DZA,");
|
||||||
|
if( emsi->compcodes.ZAP ) tmp = add_str(tmp, "ZAP,");
|
||||||
|
if( emsi->compcodes.ZMO ) tmp = add_str(tmp, "ZMO,");
|
||||||
|
if( emsi->compcodes.TZA ) tmp = add_str(tmp, "TZA,");
|
||||||
|
if( emsi->compcodes.SLK ) tmp = add_str(tmp, "SLK,");
|
||||||
|
if( emsi->compcodes.KER ) tmp = add_str(tmp, "KER,");
|
||||||
|
if( emsi->compcodes.NCP ) tmp = add_str(tmp, "NCP,");
|
||||||
|
} else {
|
||||||
|
DEB((D_HSHAKE, "Protocol order found, %s", p_order));
|
||||||
|
ord = strncpy(ord, p_order, 3);
|
||||||
|
ord[3]='\0';
|
||||||
|
DEB((D_HSHAKE, "EMSI create ord: %s", ord));
|
||||||
|
if (ord == NULL)
|
||||||
|
DEB((D_HSHAKE, "EMSI create order error"));
|
||||||
|
if( !strcmp(ord,"HYD") )
|
||||||
|
if( emsi->compcodes.HYD ) tmp = add_str(tmp, "HYD,");
|
||||||
|
if( !strcmp(ord,"JAN") )
|
||||||
|
if( emsi->compcodes.JAN ) tmp = add_str(tmp, "JAN,");
|
||||||
|
if( !strcmp(ord,"DZA") )
|
||||||
|
if( emsi->compcodes.DZA ) tmp = add_str(tmp, "DZA,");
|
||||||
|
if( !strcmp(ord,"ZAP") )
|
||||||
|
if( emsi->compcodes.ZAP ) tmp = add_str(tmp, "ZAP,");
|
||||||
|
if( !strcmp(ord,"ZMO") )
|
||||||
|
if( emsi->compcodes.ZMO ) tmp = add_str(tmp, "ZMO,");
|
||||||
|
if( !strcmp(ord,"TZA") )
|
||||||
|
if( emsi->compcodes.TZA ) tmp = add_str(tmp, "TZA,");
|
||||||
|
if( !strcmp(ord,"SLK") )
|
||||||
|
if( emsi->compcodes.SLK ) tmp = add_str(tmp, "SLK,");
|
||||||
|
if( !strcmp(ord,"KER") )
|
||||||
|
if( emsi->compcodes.NCP ) tmp = add_str(tmp, "NCP,");
|
||||||
|
p_order = strchr(p_order,',');
|
||||||
|
if (p_order) p_order = p_order+1;
|
||||||
|
DEB((D_HSHAKE, "EMSI mix p_order: %s", p_order));
|
||||||
|
while (p_order) {
|
||||||
|
ord = strncpy(ord, p_order, 3);
|
||||||
|
ord[3]='\0';
|
||||||
|
DEB((D_HSHAKE, "EMSI create ord: %s", ord));
|
||||||
|
if (ord == NULL)
|
||||||
|
DEB((D_HSHAKE, "EMSI create order error"));
|
||||||
|
if( !strcmp(ord,"HYD") )
|
||||||
|
if( emsi->compcodes.HYD ) tmp = add_str(tmp, "HYD,");
|
||||||
|
if( !strcmp(ord,"JAN") )
|
||||||
|
if( emsi->compcodes.JAN ) tmp = add_str(tmp, "JAN,");
|
||||||
|
if( !strcmp(ord,"DZA") )
|
||||||
|
if( emsi->compcodes.DZA ) tmp = add_str(tmp, "DZA,");
|
||||||
|
if( !strcmp(ord,"ZAP") )
|
||||||
|
if( emsi->compcodes.ZAP ) tmp = add_str(tmp, "ZAP,");
|
||||||
|
if( !strcmp(ord,"ZMO") )
|
||||||
|
if( emsi->compcodes.ZMO ) tmp = add_str(tmp, "ZMO,");
|
||||||
|
if( !strcmp(ord,"TZA") )
|
||||||
|
if( emsi->compcodes.TZA ) tmp = add_str(tmp, "TZA,");
|
||||||
|
if( !strcmp(ord,"SLK") )
|
||||||
|
if( emsi->compcodes.SLK ) tmp = add_str(tmp, "SLK,");
|
||||||
|
if( !strcmp(ord,"KER") )
|
||||||
|
if( emsi->compcodes.NCP ) tmp = add_str(tmp, "NCP,");
|
||||||
|
p_order = strchr(p_order,',');
|
||||||
|
if (p_order) p_order = p_order+1;
|
||||||
|
DEB((D_HSHAKE, "EMSI mix p_order: %s", p_order));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Options */
|
||||||
if( emsi->compcodes.FRQ ) tmp = add_str(tmp, "FRQ,");
|
if( emsi->compcodes.FRQ ) tmp = add_str(tmp, "FRQ,");
|
||||||
if( emsi->compcodes.NRQ ) tmp = add_str(tmp, "NRQ,");
|
if( emsi->compcodes.NRQ ) tmp = add_str(tmp, "NRQ,");
|
||||||
if( emsi->compcodes.ARC ) tmp = add_str(tmp, "ARC,");
|
if( emsi->compcodes.ARC ) tmp = add_str(tmp, "ARC,");
|
||||||
@ -367,7 +435,7 @@ char *emsi_createdat(s_emsi *emsi)
|
|||||||
*/
|
*/
|
||||||
sprintf(buf, "%04hX", (short unsigned)strlen(tmp+14));
|
sprintf(buf, "%04hX", (short unsigned)strlen(tmp+14));
|
||||||
memcpy(tmp+10, buf, 4);
|
memcpy(tmp+10, buf, 4);
|
||||||
|
free (ord);
|
||||||
return(tmp);
|
return(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -449,7 +517,7 @@ static int nflgcmp(const char *p, const char *name)
|
|||||||
int emsi_parsedat(char *emsi_dat, s_emsi *emsi)
|
int emsi_parsedat(char *emsi_dat, s_emsi *emsi)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
char *tmp, *p, *q, *n;
|
char *tmp, *p, *q, *n, *otmp;
|
||||||
|
|
||||||
while( (tmp=get_field(&emsi_dat, '{', '}')) != NULL )
|
while( (tmp=get_field(&emsi_dat, '{', '}')) != NULL )
|
||||||
{
|
{
|
||||||
@ -522,16 +590,56 @@ int emsi_parsedat(char *emsi_dat, s_emsi *emsi)
|
|||||||
state.remoteaddrs[i].flags |= EMSI_FLAG_HR;
|
state.remoteaddrs[i].flags |= EMSI_FLAG_HR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* compatibility codes */
|
/* compatibility codes
|
||||||
|
* DONE: we Must preserve Protocol ORDER if there is EII flag
|
||||||
|
* */
|
||||||
if( (p=get_field(&emsi_dat, '{', '}')) == NULL ) return(1);
|
if( (p=get_field(&emsi_dat, '{', '}')) == NULL ) return(1);
|
||||||
DEB((D_HSHAKE, "parse_emsidat: compatibility codes: %s", p));
|
DEB((D_HSHAKE, "parse_emsidat: compatibility codes: %s", p));
|
||||||
|
emsi->proto_order[0] = '\0';
|
||||||
for( p = strtok(p, ","); p; p=strtok(NULL, ",") )
|
for( p = strtok(p, ","); p; p=strtok(NULL, ",") )
|
||||||
{
|
{
|
||||||
if( !strcmp(p, "ZMO") ) emsi->compcodes.ZMO = 1;
|
if( !strcmp(p, "ZMO") ) {
|
||||||
else if( !strcmp(p, "ZAP") ) emsi->compcodes.ZAP = 1;
|
emsi->compcodes.ZMO = 1;
|
||||||
else if( !strcmp(p, "DZA") ) emsi->compcodes.DZA = 1;
|
otmp = strcat(emsi->proto_order,"ZMO,");
|
||||||
else if( !strcmp(p, "JAN") ) emsi->compcodes.JAN = 1;
|
strcpy(emsi->proto_order, otmp);
|
||||||
else if( !strcmp(p, "HYD") ) emsi->compcodes.HYD = 1;
|
DEB((D_HSHAKE, "parse_emsidat: order added: %s", otmp));
|
||||||
|
}
|
||||||
|
else if( !strcmp(p, "ZAP") ) {
|
||||||
|
emsi->compcodes.ZAP = 1;
|
||||||
|
otmp = strcat(emsi->proto_order,"ZAP,");
|
||||||
|
strcpy(emsi->proto_order, otmp);
|
||||||
|
DEB((D_HSHAKE, "parse_emsidat: order added: %s", otmp));
|
||||||
|
}
|
||||||
|
else if( !strcmp(p, "DZA") ) {
|
||||||
|
emsi->compcodes.DZA = 1;
|
||||||
|
strcpy(emsi->proto_order, add_str(emsi->proto_order,"DZA,"));
|
||||||
|
}
|
||||||
|
else if( !strcmp(p, "JAN") ) {
|
||||||
|
emsi->compcodes.JAN = 1;
|
||||||
|
otmp = strcat(emsi->proto_order,"JAN,");
|
||||||
|
strcpy(emsi->proto_order, otmp);
|
||||||
|
}
|
||||||
|
else if( !strcmp(p, "HYD") ) {
|
||||||
|
emsi->compcodes.HYD = 1;
|
||||||
|
otmp = strcat(emsi->proto_order,"HYD,");
|
||||||
|
strcpy(emsi->proto_order, otmp);
|
||||||
|
DEB((D_HSHAKE, "parse_emsidat: order added: %s", otmp));
|
||||||
|
}
|
||||||
|
else if( !strcmp(p, "KER") ) {
|
||||||
|
emsi->compcodes.KER = 1;
|
||||||
|
otmp = strcat(emsi->proto_order,"KER,");
|
||||||
|
strcpy(emsi->proto_order, otmp);
|
||||||
|
}
|
||||||
|
else if( !strcmp(p, "TZA") ) {
|
||||||
|
emsi->compcodes.TZA = 1;
|
||||||
|
otmp = strcat(emsi->proto_order,"TZA,");
|
||||||
|
strcpy(emsi->proto_order, otmp);
|
||||||
|
}
|
||||||
|
else if( !strcmp(p, "SLK") ) {
|
||||||
|
emsi->compcodes.SLK = 1;
|
||||||
|
otmp = strcat(emsi->proto_order,"SLK,");
|
||||||
|
strcpy(emsi->proto_order, otmp);
|
||||||
|
}
|
||||||
else if( !strcmp(p, "NCP") ) emsi->compcodes.NCP = 1;
|
else if( !strcmp(p, "NCP") ) emsi->compcodes.NCP = 1;
|
||||||
else if( !strcmp(p, "NRQ") ) emsi->compcodes.NRQ = 1;
|
else if( !strcmp(p, "NRQ") ) emsi->compcodes.NRQ = 1;
|
||||||
else if( !strcmp(p, "ARC") ) emsi->compcodes.ARC = 1;
|
else if( !strcmp(p, "ARC") ) emsi->compcodes.ARC = 1;
|
||||||
@ -542,6 +650,9 @@ int emsi_parsedat(char *emsi_dat, s_emsi *emsi)
|
|||||||
else if( !strcmp(p, "BBS") ) emsi->compcodes.BBS = 1;
|
else if( !strcmp(p, "BBS") ) emsi->compcodes.BBS = 1;
|
||||||
else if( !strcmp(p, "HFR") ) emsi->compcodes.HFR = 1;
|
else if( !strcmp(p, "HFR") ) emsi->compcodes.HFR = 1;
|
||||||
}
|
}
|
||||||
|
/* delete last ',' from proto_order */
|
||||||
|
emsi->proto_order[strlen(emsi->proto_order)-1]='\0';
|
||||||
|
DEB((D_HSHAKE, "parse_emsidat: ordered compatibility codes: %s", emsi->proto_order));
|
||||||
|
|
||||||
/* mailer information */
|
/* mailer information */
|
||||||
if( (p=get_field(&emsi_dat, '{', '}')) == NULL ) return(1);
|
if( (p=get_field(&emsi_dat, '{', '}')) == NULL ) return(1);
|
||||||
|
@ -88,6 +88,11 @@ int answ_system(e_session type, char *connstr, int inetd)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( inetd == 0)
|
||||||
|
{
|
||||||
|
log("answering modem call");
|
||||||
|
}
|
||||||
|
|
||||||
if( inetd == 0 && state.cidstr )
|
if( inetd == 0 && state.cidstr )
|
||||||
{
|
{
|
||||||
setproctitle("bforce answering, CID: %.32s",
|
setproctitle("bforce answering, CID: %.32s",
|
||||||
@ -116,8 +121,9 @@ int answ_system(e_session type, char *connstr, int inetd)
|
|||||||
port_carrier(0, TRUE);
|
port_carrier(0, TRUE);
|
||||||
|
|
||||||
rc = session();
|
rc = session();
|
||||||
|
log("Session ended up, inetd= %d", inetd);
|
||||||
|
|
||||||
if( ( !inetd ) )
|
if ( inetd == 0 )
|
||||||
{
|
{
|
||||||
port_deinit(0, &oldtio);
|
port_deinit(0, &oldtio);
|
||||||
port_close();
|
port_close();
|
||||||
|
@ -521,8 +521,7 @@ defalt:
|
|||||||
(state.node.name && *state.node.name ) ? state.node.name : "<none>",
|
(state.node.name && *state.node.name ) ? state.node.name : "<none>",
|
||||||
(state.node.host && *state.node.host) ? state.node.host : "<none>");
|
(state.node.host && *state.node.host) ? state.node.host : "<none>");
|
||||||
|
|
||||||
if( (rc = tcpip_connect(state.node.host, state.tcpmode)) == 0
|
if( (rc = tcpip_connect(state.node.host, state.tcpmode)) == 0 )
|
||||||
&& (rc = tcpip_init() == 0) )
|
|
||||||
{
|
{
|
||||||
TTYSTATUS(1);
|
TTYSTATUS(1);
|
||||||
rc = session();
|
rc = session();
|
||||||
|
@ -182,6 +182,7 @@ typedef struct {
|
|||||||
extern const char *BFERR[];
|
extern const char *BFERR[];
|
||||||
|
|
||||||
extern char * mainenv[];
|
extern char * mainenv[];
|
||||||
|
extern long timezone;
|
||||||
|
|
||||||
int daemon_run(const char *confname, const char *incname, bool quit);
|
int daemon_run(const char *confname, const char *incname, bool quit);
|
||||||
|
|
||||||
|
@ -179,6 +179,8 @@ typedef enum {
|
|||||||
cf_emsi_FR_time,
|
cf_emsi_FR_time,
|
||||||
cf_emsi_OH_time,
|
cf_emsi_OH_time,
|
||||||
cf_emsi_slave_sends_nak,
|
cf_emsi_slave_sends_nak,
|
||||||
|
cf_emsi_send_tz,
|
||||||
|
cf_emsi_send_time,
|
||||||
cf_filebox,
|
cf_filebox,
|
||||||
cf_filebox_directory,
|
cf_filebox_directory,
|
||||||
cf_flags,
|
cf_flags,
|
||||||
@ -235,6 +237,7 @@ typedef enum {
|
|||||||
cf_nodial_flag,
|
cf_nodial_flag,
|
||||||
cf_override,
|
cf_override,
|
||||||
cf_options,
|
cf_options,
|
||||||
|
cf_proto_order,
|
||||||
cf_outbound_directory,
|
cf_outbound_directory,
|
||||||
cf_password,
|
cf_password,
|
||||||
cf_phone,
|
cf_phone,
|
||||||
|
@ -116,7 +116,10 @@ struct compcodes
|
|||||||
ZAP:1, /* ZedZap (Zmodem variant) */
|
ZAP:1, /* ZedZap (Zmodem variant) */
|
||||||
DZA:1, /* DirectZAP (Zmodem variant) */
|
DZA:1, /* DirectZAP (Zmodem variant) */
|
||||||
JAN:1, /* Janus */
|
JAN:1, /* Janus */
|
||||||
HYD:1; /* Hydra */
|
HYD:1, /* Hydra */
|
||||||
|
KER:1, /* Kermit (Only EMSI-I) NO SUPPORT */
|
||||||
|
SLK:1, /* SEALink - NO SUPPORT */
|
||||||
|
TZA:1; /* TrapDoor DirectZAP - NO SUPPORT */
|
||||||
|
|
||||||
UINT16 FRQ:1, /* The system will accept and process FREQs */
|
UINT16 FRQ:1, /* The system will accept and process FREQs */
|
||||||
NRQ:1, /* No file requests accepted by this system */
|
NRQ:1, /* No file requests accepted by this system */
|
||||||
@ -148,6 +151,7 @@ struct emsi
|
|||||||
char passwd[EMSI_MAXPASSWD+1];
|
char passwd[EMSI_MAXPASSWD+1];
|
||||||
s_linkcodes linkcodes; /* XXn linkcodes contained in eaddr */
|
s_linkcodes linkcodes; /* XXn linkcodes contained in eaddr */
|
||||||
s_compcodes compcodes;
|
s_compcodes compcodes;
|
||||||
|
char proto_order[EMSI_MAXADDONS+1];
|
||||||
char m_pid[EMSI_MAXMPID+1];
|
char m_pid[EMSI_MAXMPID+1];
|
||||||
char m_name[EMSI_MAXMNAME+1];
|
char m_name[EMSI_MAXMNAME+1];
|
||||||
char m_ver[EMSI_MAXMVER+1];
|
char m_ver[EMSI_MAXMVER+1];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user