2 Commits
Author SHA1 Message Date
zx de81a82f43 Version 0.25. EMSI-II compliant, TZUTC fixed, protocol order for outgoing 2024-05-28 20:49:18 +03:00
zx 721fa8fdf1 Update to 0.24.2 2024-05-20 23:52:02 +03:00
45 changed files with 301 additions and 1684 deletions
-25
View File
@@ -250,28 +250,3 @@ Alexey Khromov (zx@zxalexis.ru)
/etc/services line (as of abscence of latter) /etc/services line (as of abscence of latter)
+ Config example reworked to include new options + Config example reworked to include new options
+ New option: emsi_send_tz - to send TZUTC EMSI-handshake part. + New option: emsi_send_tz - to send TZUTC EMSI-handshake part.
0.25.1
+ Added testing script for PSTN comms (tests folder).
0.25.2
+ Adopted for outgoing IPv6 communication
0.25.3
+ Fixed IPv6 address logging in inetd connections
+ Fixed outgoing proto detection and order - as Direct, BinkP, Ifcico,
Telnet, Modem first allowed to connect. You may change this order
individually by override flags.
+ Daemon mode now tries to make outgoing tcp calls prior to modem
+ Daemon mode - fixed working time for tcp nodes (CM)
+ Fixed some x64 errors in comparisons to integers
+ Added systemd and xinetd service files to contrib folder
+ Fixed flag files creation
+ Added flags for TIC files (inctic_flag) and files (incfile_flag)
+ Fixed nodelist index creation for root nodes
+ Added support for TCP port description in IBN/IFC/ITN flags
0.26
+ Added option binkp_waitaka - wait on caller AKA on incoming sessions
and switch self AKA with the hideAKA config
+ Initial nodelist change detection for daemon mode
+3 -20
View File
@@ -1,26 +1,10 @@
BinkleyForce FTN mailer BinkleyForce FTN mailer
----------------------- -----------------------
BinkleyForce is a simple ifcico like FTN mailer. It can work via BinkleyForce is a simple ifcico like FTN mailer. It can works via
TCP/IP as well as on modem links. Look sample configs for more TCP/IP as well as on modem links. Look sample configs for more
information. information.
Supported Features
------------------
- PSTN dial-out with EMSI-II/EMSI/YooHoo handshake
- PSTN protocols: Hydra, ZedZap, ZModem
- PSTN dial-in through mgetty
- TCP/IP dial-out through IPv4 and IPv6 networks
- TCP/IP protocols - ifcico / BinkP 1.1
- TCP/IP dial-in through xinetd/inetd
- Daemon mode for outbound queue managing
Linux 2.4.11+, FreeBSD (6+ AFAIR) compatible.
Licence
-------
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option) the Free Software Foundation; either version 2, or (at your option)
@@ -28,9 +12,8 @@ any later version. See the COPYING file for further information.
Known Bugs Known Bugs
---------- ----------
- BinkleyForce has no support (yet) for multiple INA: addresses - BinkD use and expect local file time at BinkP sessions, but
- Can not rotate hidden lines BinkleyForce always use UTC time (?)
- Can not rotate supported IP protocols in case of failure
Bug Reports Bug Reports
----------- -----------
-58
View File
@@ -1,58 +0,0 @@
pkgname=bforce
_gitname=binkleyforce
pkgver=r197.ad1776c
pkgrel=1
pkgdesc="binkleyforce FTN mailer"
arch=('i686' 'x86_64' 'aarch64')
url="http://binkleyforce.sourceforge.net/"
license=('GPL2')
source=(
"${pkgname}::git+https://github.com/zotrix/binkleyforce.git"
)
makedepends=('git' 'gcc' 'make' 'glibc')
provides=('bforce')
build() {
cd "${srcdir}/${pkgname}/source"
./configure --prefix=/
make
}
prepare() {
cd "${pkgname}"
printf "$( pwd )\n"
}
pkgver() {
cd "$pkgname"
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
package() {
cd ${pkgdir}
mkdir -p ${pkgdir}/etc
mkdir -p ${pkgdir}/usr/bin
mkdir -p ${pkgdir}/usr/local/bin
mkdir -p ${pkgdir}/usr/share/doc/bforce
mkdir -p ${pkgdir}/var/log/bforce
mkdir -p ${pkgdir}/var/spool/bforce
mkdir -p ${pkgdir}/var/spool/bforce/bt/in
mkdir -p ${pkgdir}/var/spool/bforce/bt/pin
mkdir -p ${pkgdir}/var/spool/bforce/bt/out
mkdir -p ${pkgdir}/var/spool/bforce/ndl
mkdir -p ${pkgdir}/var/spool/bforce/bforce
/usr/bin/install -c ${srcdir}/${pkgname}/source/bin/bforce ${pkgdir}/usr/bin/bforce
/usr/bin/install -c ${srcdir}/${pkgname}/source/bin/bfindex ${pkgdir}/usr/bin/bfindex
/usr/bin/install -c ${srcdir}/${pkgname}/source/bin/bfstat ${pkgdir}/usr/bin/bfstat
/usr/bin/install -c ${srcdir}/${pkgname}/source/bin/nlookup ${pkgdir}/usr/bin/nlookup
/usr/bin/install -c -m 644 ${srcdir}/${pkgname}/examples/bforce.conf ${pkgdir}/etc/bforce.conf.sample
/usr/bin/install -c -m 644 ${srcdir}/${pkgname}/examples/bforce.subst ${pkgdir}/etc/bforce.subst.sample
/usr/bin/install -c -m 644 ${srcdir}/${pkgname}/examples/bforce.passwd ${pkgdir}/etc/bforce.passwd.sample
/usr/bin/install -c -m 644 ${srcdir}/${pkgname}/examples/freq.aliases ${pkgdir}/etc/freq.aliases.sample
/usr/bin/install -c -m 644 ${srcdir}/${pkgname}/examples/freq.dirs ${pkgdir}/etc/freq.dirs.sample
/usr/bin/install -c ${srcdir}/${pkgname}/contrib/outman ${pkgdir}/usr/local/bin/outman
echo "Please, edit /usr/local/bin/outman"
cp ${srcdir}/${pkgname}/docs/* ${pkgdir}/usr/share/doc/bforce/
}
sha256sums=('SKIP')
-7
View File
@@ -1,7 +0,0 @@
post_install() {
chmod
}
post_upgrade() {
post_install
}
-92
View File
@@ -1,92 +0,0 @@
#!/bin/sh
# Directories and static values
DEFZONE=2
# Default outbound
# OUTBOUND="."
# Our AKA
# AKA="2:5030/723@fidonet"
# FLO Extension
FLOEXT="dlo"
# BFCONFIG=/opt/fidonms/etc/bforce.conf
if [ "${BFCONFIG}" == "" ]; then
BFCONF="/etc/bforce/bforce.conf"
else
BFCONF=${BFCONFIG}
fi
if [ "$1" == "" ]; then
echo "No FTN provided. Usage: mkpoll <address>"
exit 1
fi
# Address to create poll
FTNA=$1
# Outbound address
OUTB=""
if [ -f "${BFCONF}" ]; then
# We have config!
OUTB=$(grep -E "^outbound_directory" ${BFCONF} | awk '{print $2}')
else
OUTB=${OUTBOUND}
fi
#echo "FTNA: ${FTNA} OUTB: ${OUTB}"
FZONE=$(echo -n ${FTNA}| awk -F':' '{print $1}')
FNET=$(echo -n ${FTNA} | awk -F':' '{print $2}' | awk -F'/' '{ print $1 }')
FNODE=$(echo -n ${FTNA}| awk -F'/' '{print $2}' | awk -F'@' '{ print $1 }'| awk -F'.' '{ print $1 }')
FPNT=$(echo -n ${FTNA} | awk -F'/' '{print $2}' | awk -F'@' '{ print $1 }'| awk -F'.' '{ print $2 }')
FDOM=$(echo -n ${FTNA} | awk -F'@' '{print $2}')
# echo "Dest ZONE: ${FZONE}, NET: ${FNET}, NODE: ${FNODE}, PNT: ${FPNT} DOM: ${FDOM}"
# Our AKA
FAKA=""
if [ -f "${BFCONF}" ]; then
# We have config!
FAKA=$(grep -E "^address" ${BFCONF} | awk '{print $2}')
else
FAKA=${AKA}
fi
AZONE=$(echo -n ${FAKA}| awk -F':' '{print $1}')
ANET=$(echo -n ${FAKA} | awk -F':' '{print $2}' | awk -F'/' '{ print $1 }')
ANODE=$(echo -n ${FAKA}| awk -F'/' '{print $2}' | awk -F'@' '{ print $1 }'| awk -F'.' '{ print $1 }')
APNT=$(echo -n ${FAKA} | awk -F'/' '{print $2}' | awk -F'@' '{ print $1 }'| awk -F'.' '{ print $2 }')
ADOM=$(echo -n ${FAKA} | awk -F'@' '{print $2}')
# echo "Our ZONE: ${AZONE}, NET: ${ANET}, NODE: ${ANODE}, PNT: ${APNT} DOM: ${ADOM}"
FTNB=$( printf "%04x%04x" ${FNET} ${FNODE} )
if [ "${FPNT}" == "" ]; then
FPNT="0"
fi
FFLO=""
if [ "${AZONE}" == "${FZONE}" ] && [ "${FNET}" == "${ANET}" ] && [ "${FNODE}" == "${ANODE}" ] && [ ! "${FPNT}" == "0" ]; then
# echo "Point operations!"
FLOFIL=$( printf "%08x.${FLOEXT}" ${FPNT} )
PNTDIR=$( echo -n "${OUTB}/${FTNB}.pnt")
FFLO=$( echo -n "${PNTDIR}/${FLOFIL}" )
elif [ ! "${DEFZONE}" == "${FZONE}" ]; then
# Interzonal poll
FLOFIL=$( echo -n "${FTNB}.${FLOEXT}" )
FDIR=$( printf "%03x" ${FZONE} )
FFLO=$( echo -n "${OUTB}.${FDIR}/${FLOFIL}" )
else
# Normal in-zone poll
FLOFIL=$( echo -n "${FTNB}.${FLOEXT}" )
FFLO=$( echo -n "${OUTB}/${FLOFIL}" )
fi
# echo "FloFile: ${FFLO}"
if [ ! -f "${FFLO}" ]; then
touch "${FFLO}"
fi
-13
View File
@@ -1,13 +0,0 @@
[Unit]
Description=Binkleyforce Outbound server
[Service]
Type=forking
PIDFile=/tmp/bforce.pid
User=fido
Group=fido
ExecStart=/usr/bin/bforce -d -C /opt/fidonms/etc/bforce.conf
ExecStop=/usr/bin/bforce -q
[Install]
WantedBy=multi-user.target
-13
View File
@@ -1,13 +0,0 @@
#binkleyforce ifc (port 60179) EMSI-over-ip
service binkp
{
disable = no
socket_type = stream
# flags = IPv4
protocol = tcp
port = 24554
wait = no
user = fido
server = /usr/bin/bforce
server_args = -C /opt/fidonms/etc/bforce.conf -i binkp
}
-13
View File
@@ -1,13 +0,0 @@
#binkleyforce ifc (port 60179) EMSI-over-ip
service ifc
{
disable = no
socket_type = stream
# flags = IPv4
protocol = tcp
port = 60179
wait = no
user = fido
server = /usr/bin/bforce
server_args = -C /opt/fidonms/etc/bforce.conf -i auto
}
-5
View File
@@ -103,11 +103,6 @@ nodial_flag /etc/nodial
#incnet_flag /var/spool/fido/flags/mail #incnet_flag /var/spool/fido/flags/mail
# Arcmail: # Arcmail:
#incarc_flag /var/spool/fido/flags/echo #incarc_flag /var/spool/fido/flags/echo
# FileEcho TIC
#inctic_flag /var/spool/fido/flags/tick
# Regular file recieve
#incfile_flag /var/spool/fido/flags/alert
# #
# Inbound directories # Inbound directories
+1 -1
View File
@@ -1 +1 @@
0.26 0.25
+138
View File
@@ -0,0 +1,138 @@
2006-10-27 Evgeniy Kozhuhovskiy <ugenk@mgts.by>
* bforce/nodelist.c (nodelist_open): some fixes
2006-02-05 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@gmail.com>
* bforce/logger.c: trying to fix broken syslog.
2006-01-04 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@gmail.com>
* bforce/daemon_call.c (daemon_call_branch): if phone ==
00-00-000000, we call via ip
2005-10-24 Evgeniy Kozhuhovskiy <ugenk@mgts.by>
* bforce/sess_call.c (call_system): added possibility to run
external script for each line in override
2005-09-03 Andrey Slusar <anray@users.sourceforge.net>
* bforce/prot_emsi_misc.c (emsi_parsedat): correct time_t arg
size.
* bforce/prot_zmrecv.c (zmodem_proc_ZFILE): correct time_t arg
size.
2005-09-03 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@gmail.com>
* bforce/prot_hydra.c: added patch to fix problems while sending
files from ?lo on hydra, by anray
2005-06-23 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@gmail.com>
* bforce/prot_emsi.c (sm_rx_waitseq): reviewed code for buggy-emsi option
* configure.in: added --disable-buggy-emsi option for stupid mailers
2005-06-05 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@gmail.com>
* configure.in: added logdir and spooldir to ./configure
(thnx to max boyarov)
2005-06-03 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@generation-p.com>
* configure.in: fixed warnings under *bsd (removed sys/mount.h
from the list of checking headers)
* configure.in: syslog disabled by default
2005-05-08 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@generation-p.com>
* bfutil/nlookup.c (print_nodeinfo): added "Type" entry to the
nlookup output
2005-05-08 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@generation-p.com>
* configure.in: Some changes
* configure.in: Now default prefix is /usr/local/fido (as in fidogate)
2005-03-26 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@generation-p.com>
* bforce/nodelist.c (nodelist_open): fixed compilation with gcc-2.95
2005-03-22 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@gmail.com>
* INSTALL.ru: added some information
2005-02-21 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@generation-p.com>
* bforce/sess_answ.c (answ_system): fixed deiniting of tcpip port
2005-02-20 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@generation-p.com>
* bforce/sess_answ.c (answ_system): fixed bug with loggin inbound
tcpip sessions
* bforce/logger.c (log_getfilename): fixed possible bug
2005-02-17 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@generation-p.com>
* configure.in: fixed --with-owner and --with-group
2005-02-16 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@gmail.com>
* bforce/prot_emsi.c (sm_rx_waitseq): fixed unexpected emsi
sequence
2005-02-13 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@gmail.com>
* bforce/sess_call.c (call_system_quiet): added run_before_session
2005-02-12 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@gmail.com>
* outman: added bso support
2005-02-10 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@gmail.com>
* bforce.conf: added nodelist mask examples
2005-02-09 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@gmail.com>
* bforce/nodelist.c (nodelist_open): fixed stupid memory leak.
2005-01-16 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@gmail.com>
* bforce/nodelist.c (nodelist_open): fixed mask detection
* bforce/nodelist.c (nodelist_open): added tmpseekdir, contains
full path to currently seeked nodelist
2005-01-12 Andrey Slusar <anray@users.sourceforge.net>
* Makefile.in (installdirs): fix compiling when use a bsd
chown.
* Makefile.in (bforce/expression.c): fix compiling when use
a bsd make.
2005-01-12 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@generation-p.com>
* bforce/nodelist.c (nodelist_open): rewritten logic
* bforce/logger.c (log): fixed working with --enable-syslog
* include/logger.h: fixed some warnings
2005-01-11 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@generation-p.com>
* bforce/nodelist.c (nodelist_open): fixed warnings
2005-01-11 Andrey Slusar <anray@users.sourceforge.net>
* Makefile.in (CFLAGS): added -fno-builtin.
* bforce/nodelist.c (nodelist_checkheader): small fixes.
2005-01-10 Evgeniy Kozhuhovskiy <e.kozhuhovskiy@generation-p.com>
* bforce/nodelist.c (nodelist_open): added mask detection.
-3
View File
@@ -67,7 +67,6 @@ s_conf_entry bforce_config[BFORCE_NUMBER_OF_KEYWORDS+1] = {
CONF_KEY(address, CT_ADDRESS), CONF_KEY(address, CT_ADDRESS),
CONF_KEY(amiga_outbound_directory, CT_PATH), CONF_KEY(amiga_outbound_directory, CT_PATH),
CONF_KEY(binkp_timeout, CT_NUMBER), CONF_KEY(binkp_timeout, CT_NUMBER),
CONF_KEY(binkp_waitaka, CT_BOOLEAN),
CONF_KEY(daemon_circle, CT_NUMBER), CONF_KEY(daemon_circle, CT_NUMBER),
CONF_KEY(daemon_circle_crash, CT_NUMBER), CONF_KEY(daemon_circle_crash, CT_NUMBER),
CONF_KEY(daemon_circle_direct, CT_NUMBER), CONF_KEY(daemon_circle_direct, CT_NUMBER),
@@ -101,8 +100,6 @@ s_conf_entry bforce_config[BFORCE_NUMBER_OF_KEYWORDS+1] = {
CONF_KEY(freq_srif_command, CT_STRING), CONF_KEY(freq_srif_command, CT_STRING),
CONF_KEY(incnet_flag, CT_STRING), CONF_KEY(incnet_flag, CT_STRING),
CONF_KEY(incarc_flag, CT_STRING), CONF_KEY(incarc_flag, CT_STRING),
CONF_KEY(inctic_flag, CT_STRING),
CONF_KEY(incfile_flag, CT_STRING),
CONF_KEY(hide_our_aka, CT_ADDRESS), CONF_KEY(hide_our_aka, CT_ADDRESS),
CONF_KEY(history_file, CT_STRING), CONF_KEY(history_file, CT_STRING),
CONF_KEY(hydra_options, CT_OPTIONS), CONF_KEY(hydra_options, CT_OPTIONS),
+7 -80
View File
@@ -112,7 +112,6 @@ static RETSIGTYPE daemon_sighandler(int signum)
static int daemon_sysentry_init(s_sysentry *sysent) static int daemon_sysentry_init(s_sysentry *sysent)
{ {
int res = -1;
s_override *p; s_override *p;
char msg[64] = ""; char msg[64] = "";
char abuf[BF_MAXADDRSTR+1]; char abuf[BF_MAXADDRSTR+1];
@@ -121,12 +120,7 @@ static int daemon_sysentry_init(s_sysentry *sysent)
(void)session_stat_get(&sysent->stat, &sysent->node.addr); (void)session_stat_get(&sysent->stat, &sysent->node.addr);
/* Lookup node in nodelist */ /* Lookup node in nodelist */
res = nodelist_lookup(&sysent->node, sysent->node.addr); (void)nodelist_lookup(&sysent->node, sysent->node.addr);
if (res == -1) {
log("QUEUE: nodelist error for %s", ftn_addrstr(abuf, sysent->node.addr));
log("QUEUE: try to re-read config!");
}
/* Set overrides */ /* Set overrides */
if( (p = conf_override(cf_override, sysent->node.addr)) ) if( (p = conf_override(cf_override, sysent->node.addr)) )
@@ -167,7 +161,7 @@ static int daemon_sysentry_init(s_sysentry *sysent)
strcpy(msg, "freqs holded"); strcpy(msg, "freqs holded");
} }
if( *msg ) if( msg && *msg )
log("QUEUE: add %s (%s)", ftn_addrstr(abuf, sysent->node.addr), msg); log("QUEUE: add %s (%s)", ftn_addrstr(abuf, sysent->node.addr), msg);
else else
log("QUEUE: add %s", ftn_addrstr(abuf, sysent->node.addr)); log("QUEUE: add %s", ftn_addrstr(abuf, sysent->node.addr));
@@ -184,7 +178,7 @@ static int daemon_sysentry_deinit(s_sysentry *sysent)
return 0; return 0;
} }
static int daemon_node_cancall_line(const s_node *node, const s_override *ovrd) static bool daemon_node_cancall_line(const s_node *node, const s_override *ovrd)
{ {
bool good_phone = FALSE; bool good_phone = FALSE;
bool good_host = FALSE; bool good_host = FALSE;
@@ -200,7 +194,7 @@ static int daemon_node_cancall_line(const s_node *node, const s_override *ovrd)
if( modem_isgood_phone(ovrd->sPhone) ) if( modem_isgood_phone(ovrd->sPhone) )
good_phone = TRUE; good_phone = TRUE;
} }
else if( node && *node->phone ) else if( node && node->phone && *node->phone )
{ {
if( modem_isgood_phone(node->phone) ) if( modem_isgood_phone(node->phone) )
good_phone = TRUE; good_phone = TRUE;
@@ -214,11 +208,6 @@ static int daemon_node_cancall_line(const s_node *node, const s_override *ovrd)
if( tcpip_isgood_host(ovrd->sIpaddr) ) if( tcpip_isgood_host(ovrd->sIpaddr) )
good_host = TRUE; good_host = TRUE;
} }
else if ( node && *node->host )
{
if( tcpip_isgood_host(node->host) )
good_host = TRUE;
}
/* /*
* Check work time * Check work time
@@ -242,16 +231,6 @@ static int daemon_node_cancall_line(const s_node *node, const s_override *ovrd)
good_time = TRUE; good_time = TRUE;
} }
// Must be more complicated, i.e. call to IP even if modem is not good time
if ( good_host )
{
good_time = TRUE;
}
DEB((D_DAEMON, "daemon: node_cancall_line good_phone: %d, good_time:%d, good_host:%d",
good_phone, good_time, good_host));
if( good_time ) if( good_time )
{ {
if( good_host ) if( good_host )
@@ -344,23 +323,9 @@ static bool daemon_node_cancall(s_sysentry *syst, bool ign_wtime, bool tcpip)
return FALSE; return FALSE;
} }
/* Make check for tcpip out */
if ( tcpip )
{
rc = daemon_node_cancall_line(&syst->node, NULL);
DEB((D_DAEMON, "daemon tcpip: node_cancall rc=%d", rc));
if ( rc == 2 )
{
syst->tcpip = TRUE;
return TRUE;
}
}
/* Make checks for all lines */ /* Make checks for all lines */
if( syst->overrides ) if( syst->overrides )
{ {
DEB((D_DAEMON, "daemon: node_cancall OVR-IN"));
if( syst->lineptr && syst->lineptr->hidden ) if( syst->lineptr && syst->lineptr->hidden )
{ {
line = syst->line + 1; line = syst->line + 1;
@@ -398,18 +363,11 @@ static bool daemon_node_cancall(s_sysentry *syst, bool ign_wtime, bool tcpip)
} }
line++; line++;
} }
} }
else /* Node without overriden parameters */ else /* Node without overriden parameters */
{ {
syst->line = line = 0; syst->line = line = 0;
rc = daemon_node_cancall_line(&syst->node, NULL); return daemon_node_cancall_line(&syst->node, NULL);
DEB((D_DAEMON, "daemon: node_cancall rc=%d", rc));
if ( rc )
{
syst->tcpip = (rc == 2) ? TRUE : FALSE;
return TRUE;
}
} }
return FALSE; return FALSE;
@@ -729,8 +687,6 @@ int daemon_rescan_sysqueue(s_sysqueue *q, s_daemon_queue dqs[])
#ifdef DEBUG #ifdef DEBUG
log_sysqueue(q); log_sysqueue(q);
DEB((D_DAEMON, "daemon rescan_sysqueue daemon queue: MODEM: %d, %d; TCPIP: %d, %d",
dqs[MODEM_QUEUE].circle, dqs[MODEM_QUEUE].current, dqs[TCPIP_QUEUE].circle, dqs[TCPIP_QUEUE].current));
#endif #endif
return 0; return 0;
@@ -1040,28 +996,6 @@ int daemon_run(const char *confname, const char *incname, bool quit)
*/ */
if( !timer_running(timer_rescan) || timer_expired(timer_rescan) ) if( !timer_running(timer_rescan) || timer_expired(timer_rescan) )
{ {
//Check the presence of nodelist index.
s_faddr locaddr;
char * wcard;
s_node * mynode;
wcard = xstrcpy('\0');
DEB((D_DAEMON,"daemon: chk nodelist"));
if (!ftn_addrparse(&locaddr, conf_string(cf_address), wcard) )
{
//Check the presence of nodelist index.
if (!nodelist_lookup(mynode, locaddr)) {
// All OK
DEB((D_DAEMON,"daemon: chk nodelist OK"));
} else {
// All NOT OK
DEB((D_DAEMON,"daemon: chk nodelist FAILED"));
dmstate = DM_Restart;
break;
}
}
// End checkpresense
(void)daemon_rescan_sysqueue(&daemon_sys_queue, (void)daemon_rescan_sysqueue(&daemon_sys_queue,
daemon_queues); daemon_queues);
timer_set(&timer_rescan, circle_rescan); timer_set(&timer_rescan, circle_rescan);
@@ -1076,17 +1010,10 @@ int daemon_run(const char *confname, const char *incname, bool quit)
timer_set(&timer_alive, DAEMON_ALIVE_TIMER); timer_set(&timer_alive, DAEMON_ALIVE_TIMER);
} }
if( max_tcpip > 0 )
{
DEB((D_DAEMON,"daemon: daemon_tcpip_queue"));
daemon_queue_do(&daemon_queues[TCPIP_QUEUE]);
}
if( max_modem > 0 ) if( max_modem > 0 )
{
DEB((D_DAEMON,"daemon: daemon_modem_queue"));
daemon_queue_do(&daemon_queues[MODEM_QUEUE]); daemon_queue_do(&daemon_queues[MODEM_QUEUE]);
} if( max_tcpip > 0 )
daemon_queue_do(&daemon_queues[TCPIP_QUEUE]);
(void)sleep(DAEMON_IDLE_SLEEP); (void)sleep(DAEMON_IDLE_SLEEP);
break; break;
+5 -17
View File
@@ -39,8 +39,8 @@ static s_modemport *daemon_getfree_port(const char *lockdir)
static int daemon_call_branch(s_sysentry *syst, const char *lockdir, s_modemport *port) static int daemon_call_branch(s_sysentry *syst, const char *lockdir, s_modemport *port)
{ {
//int rc = BFERR_NOERROR; int rc = BFERR_NOERROR;
//char abuf[BF_MAXADDRSTR+1]; char abuf[BF_MAXADDRSTR+1];
/* /*
* First of all restore the default signal handlers * First of all restore the default signal handlers
@@ -54,12 +54,7 @@ static int daemon_call_branch(s_sysentry *syst, const char *lockdir, s_modemport
s_bforce_opts opts; s_bforce_opts opts;
// TODO: add hiddenline round-robin // TODO: add hiddenline round-robin
memset(&opts, '\0', sizeof(s_bforce_opts)); opts.hiddline=0;
opts.hiddline = 0;
if ( syst->tcpip )
opts.runmode = MODE_CALL_IP;
else
opts.runmode = MODE_CALL_DEFAULT; opts.runmode = MODE_CALL_DEFAULT;
opts.ipproto = NULL; opts.ipproto = NULL;
opts.phone = NULL; opts.phone = NULL;
@@ -67,7 +62,7 @@ static int daemon_call_branch(s_sysentry *syst, const char *lockdir, s_modemport
opts.inetd = 0; opts.inetd = 0;
opts.connect = NULL; opts.connect = NULL;
opts.device = NULL; opts.device = NULL;
DEB((D_DAEMON, "daemon_call: calling call_system from branch"));
// log("doing call_system"); // log("doing call_system");
return call_system(syst->node.addr, &opts); return call_system(syst->node.addr, &opts);
} }
@@ -93,10 +88,7 @@ int daemon_call(s_sysentry *syst)
* Check whether this node is allready locked * Check whether this node is allready locked
*/ */
if( out_bsy_check(syst->node.addr) ) if( out_bsy_check(syst->node.addr) )
{
DEB((D_DAEMON, "daemon_call: node locked by .bsy file"));
return 0; return 0;
}
/* /*
* Set state structure to make expressions works properly now * Set state structure to make expressions works properly now
@@ -109,7 +101,6 @@ int daemon_call(s_sysentry *syst)
if( syst->tcpip == FALSE ) if( syst->tcpip == FALSE )
{ {
DEB((D_DAEMON, "daemon_call: tcpip false - prep modem line"));
if( (p_lockdir = conf_string(cf_uucp_lock_directory)) == NULL ) if( (p_lockdir = conf_string(cf_uucp_lock_directory)) == NULL )
p_lockdir = BFORCE_LOCK_DIR; p_lockdir = BFORCE_LOCK_DIR;
@@ -119,9 +110,6 @@ int daemon_call(s_sysentry *syst)
return 1; return 1;
} }
} }
DEB((D_DAEMON, "call %s line %d via %s",
ftn_addrstr(abuf, syst->node.addr), syst->line,
syst->tcpip ? "TCP/IP" : modemport->name));
log("call %s line %d via %s", log("call %s line %d via %s",
ftn_addrstr(abuf, syst->node.addr), syst->line, ftn_addrstr(abuf, syst->node.addr), syst->line,
@@ -150,7 +138,7 @@ int daemon_call(s_sysentry *syst)
} }
/* Now we are in child process */ /* Now we are in child process */
DEB((D_DAEMON, "daemon_call: fork success - calling..."));
exit(daemon_call_branch(syst, p_lockdir, modemport)); exit(daemon_call_branch(syst, p_lockdir, modemport));
} }
+1 -2
View File
@@ -68,8 +68,7 @@ int req_createsrif(char *sname, char *req, char *rsp)
else else
fprintf(fp, "Sysop SysOp\n"); fprintf(fp, "Sysop SysOp\n");
aptr = session_1remote_address(); if( aptr = session_1remote_address() )
if( aptr )
fprintf(fp, "AKA %s\n", ftn_addrstr(abuf, *aptr)); fprintf(fp, "AKA %s\n", ftn_addrstr(abuf, *aptr));
else else
return -1; return -1;
+20 -71
View File
@@ -19,49 +19,29 @@
#define DEFAULT_PORT 60179 /* Birthday .. mother fucker :) */ #define DEFAULT_PORT 60179 /* Birthday .. mother fucker :) */
struct addrinfo *ai = NULL;
static RETSIGTYPE tcpip_interrupt(int sig) static RETSIGTYPE tcpip_interrupt(int sig)
{ {
tty_abort = TRUE; tty_abort = TRUE;
(void)log("terminating on signal %d", sig); log("terminating on signal %d", sig);
} }
static RETSIGTYPE tcpip_brokenpipe(int sig) static RETSIGTYPE tcpip_brokenpipe(int sig)
{ {
tty_abort = TRUE; tty_abort = TRUE;
if( tty_online ) if( tty_online )
(void)log("connection closed"); log("connection closed");
else else
(void)log("terminating on signal %d", sig); log("terminating on signal %d", sig);
} }
static int tcpip_connect2(struct addrinfo *ai) static int tcpip_connect2(struct sockaddr_in server)
{ {
int fd = -1; int fd;
char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
struct addrinfo *rai; DEB((D_INFO, "tcpip_connect2: trying \"%s\" at port %d",
inet_ntoa(server.sin_addr), (int)ntohs(server.sin_port)));
for (rai = ai; rai != NULL; rai = rai->ai_next) if( (fd = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
{
if (getnameinfo(rai->ai_addr, rai->ai_addrlen, hbuf, sizeof(hbuf), sbuf,
sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0)
DEB((D_INFO, "tcpip_connect2: trying host=%s, serv=%s", hbuf, sbuf));
fd = socket (rai->ai_family, rai->ai_socktype, rai->ai_protocol);
if ( fd == -1 )
{
DEB((D_INFO, "tcpip_connect2: socket error"));
}
else break;
hbuf[0]='\0';
sbuf[0]='\0';
}
DEB((D_INFO, "tcpip_connect2: socket success: %d", fd));
if (fd < 0 )
{ {
logerr("can't create socket"); logerr("can't create socket");
return(1); return(1);
@@ -104,9 +84,9 @@ static int tcpip_connect2(struct addrinfo *ai)
clearerr(stdout); clearerr(stdout);
clearerr(stderr); clearerr(stderr);
if( connect(0, rai->ai_addr, rai->ai_addrlen) == -1 ) if( connect(0, (struct sockaddr*)&server, sizeof(server)) == -1 )
{ {
logerr("can't connect to %s", hbuf); logerr("can't connect to %s", inet_ntoa(server.sin_addr));
close(0); close(0);
close(1); close(1);
close(2); close(2);
@@ -119,7 +99,8 @@ static int tcpip_connect2(struct addrinfo *ai)
return 1; return 1;
} }
(void)log("TCP/IP connect success to %s on service %s", hbuf, sbuf); log("TCP/IP connect to %s on port %d",
inet_ntoa(server.sin_addr), (int)ntohs(server.sin_port));
return(0); return(0);
} }
@@ -127,23 +108,14 @@ static int tcpip_connect2(struct addrinfo *ai)
int tcpip_connect(const char *hostname, e_tcpmode tcpmode) int tcpip_connect(const char *hostname, e_tcpmode tcpmode)
{ {
int rc = 0; int rc = 0;
//struct hostent *he = NULL; struct hostent *he = NULL;
//struct servent *se = NULL; struct servent *se = NULL;
//struct sockaddr_in server; struct sockaddr_in server;
//struct sockaddr_storage server;
struct addrinfo *aisave = NULL;
struct addrinfo aihints;
int nameres = 0;
char *host = xstrcpy(hostname); char *host = xstrcpy(hostname);
char *p = strrchr(host, ':'); char *p = strrchr(host, ':');
const char *port = NULL; const char *port = NULL;
server.sin_family = AF_INET;
// AF_INET - only IPv4
//server.sin_family = AF_INET;
if( p ) if( p )
{ *p++ = '\0'; port = p; } { *p++ = '\0'; port = p; }
@@ -154,31 +126,15 @@ int tcpip_connect(const char *hostname, e_tcpmode tcpmode)
else /* Can not rely on /etc/services - it is not well-known port */ else /* Can not rely on /etc/services - it is not well-known port */
port = "60179"; port = "60179";
// Do not need it
/*
if( ISDEC(port) ) if( ISDEC(port) )
server.sin_port = htons(atoi(port)); server.sin_port = htons(atoi(port));
else if( (se = getservbyname(port, "tcp")) ) else if( (se = getservbyname(port, "tcp")) )
server.sin_port = se->s_port; server.sin_port = se->s_port;
else else
{ log("invalid port or service name \"%s\"", port); rc = 1; } { log("invalid port or service name \"%s\"", port); rc = 1; }
*/
//if( rc == 0 )
//{
DEB((D_INFO, "tcpip_connect: port is %s", port));
memset( &aihints, 0, sizeof( aihints) );
aihints.ai_family = AF_UNSPEC;
//aihints.ai_socktype = SOCK_STREAM;
aihints.ai_protocol = IPPROTO_TCP;
nameres = getaddrinfo ( host, port, &aihints, &ai ); if( rc == 0 )
if ( nameres != 0 )
{ {
rc = 1;
log("Resolver error for host %s, port %s: \"%s\".", host, port, gai_strerror(nameres));
}
// GetHostByName works with IPv4 only and *deprecated*
/*
if( (he = gethostbyname(host)) ) if( (he = gethostbyname(host)) )
{ {
memcpy(&server.sin_addr, he->h_addr, he->h_length); memcpy(&server.sin_addr, he->h_addr, he->h_length);
@@ -203,19 +159,12 @@ int tcpip_connect(const char *hostname, e_tcpmode tcpmode)
log("unknown error while resolving host \"%s\"", host); log("unknown error while resolving host \"%s\"", host);
break; break;
} }
} */ }
//} }
if( host ) { free(host); host = NULL; } if( host ) { free(host); host = NULL; }
DEB((D_INFO, "tcpip_connect: resolver got result!"));
aisave = ai;
if (rc == 0 ) return rc ? rc : tcpip_connect2(server);
rc = tcpip_connect2(ai);
freeaddrinfo( aisave );
return rc;
} }
int tcpip_init(void) int tcpip_init(void)
+1 -7
View File
@@ -118,9 +118,6 @@ int tio_get(int fd, TIO *tio)
{ {
#ifdef HAVE_TERMIOS_H #ifdef HAVE_TERMIOS_H
return tcgetattr(fd, tio); return tcgetattr(fd, tio);
#else
DEB(("io_unix_tio: TERMIOS not supported!"));
return -1;
#endif #endif
} }
@@ -130,9 +127,6 @@ int tio_set(int fd, TIO *tio)
{ {
#ifdef HAVE_TERMIOS_H #ifdef HAVE_TERMIOS_H
return tcsetattr(fd, TCSANOW, tio); return tcsetattr(fd, TCSANOW, tio);
#else
DEB(("io_unix_tio: TERMIOS not supported!"));
return -1;
#endif #endif
} }
@@ -183,7 +177,7 @@ int tio_get_speed(TIO *tio)
return speedtab[i].nspeed; return speedtab[i].nspeed;
} }
return -1; return-1;
} }
int tio_set_flow_control(int fd, TIO *tio, int flow) int tio_set_flow_control(int fd, TIO *tio, int flow)
+1 -1
View File
@@ -307,7 +307,7 @@ int tty_putc(unsigned char ch, int timeout)
int tty_puts(const unsigned char *s, int timeout) int tty_puts(const unsigned char *s, int timeout)
{ {
return tty_write_timeout(s, strlen((char *)s), timeout); return tty_write_timeout(s, strlen(s), timeout);
} }
int tty_getc(int timeout) int tty_getc(int timeout)
+1 -7
View File
@@ -106,15 +106,11 @@ int log_open(const char *logname, const char *ext, const char *tty)
if( logname ) if( logname )
{ {
DEB((D_INFO,"log_open: Opening log file %s", logname));
strnxcpy(log_name, logname, sizeof(log_name)); strnxcpy(log_name, logname, sizeof(log_name));
// May be NULL, so check both
if( tty && *tty ) if( tty && *tty )
strnxcpy(log_ttyname, tty, sizeof(log_ttyname)); strnxcpy(log_ttyname, tty, sizeof(log_ttyname));
// May be NULL, so check both
if( ext && *ext ) if( ext && *ext )
{ {
strnxcpy(log_extension, ext, sizeof(log_extension)); strnxcpy(log_extension, ext, sizeof(log_extension));
@@ -146,9 +142,7 @@ int log_close(void)
if( log_fp ) if( log_fp )
{ {
rc = fclose(log_fp); rc = fclose(log_fp); log_fp = NULL;
DEB((D_INFO,"Closing log file."));
log_fp = NULL;
} }
return rc; return rc;
+2 -5
View File
@@ -243,7 +243,7 @@ int nodelist_parsestring(s_node *node, char *str)
strnxcpy(node->phone, argv[NODELIST_POSPHONE], sizeof(node->phone)); strnxcpy(node->phone, argv[NODELIST_POSPHONE], sizeof(node->phone));
strnxcpy(node->flags, argv[NODELIST_POSFLAGS], sizeof(node->flags)); strnxcpy(node->flags, argv[NODELIST_POSFLAGS], sizeof(node->flags));
node->speed = atoi(argv[NODELIST_POSSPEED]); node->speed = atoi(argv[NODELIST_POSSPEED]);
DEB((D_NODELIST, "nodelist: Parsed common values SYS: %s, ZYZ: %s, LOC: %s, PHONE: %s", node->name, node->sysop, node->location, node->phone));
/* /*
* Replace all '_' by space character * Replace all '_' by space character
*/ */
@@ -291,11 +291,8 @@ int nodelist_parsestring(s_node *node, char *str)
node->do_ifcico = nodelist_checkflag(node->flags, "IFC") == 0; node->do_ifcico = nodelist_checkflag(node->flags, "IFC") == 0;
node->do_telnet = nodelist_checkflag(node->flags, "ITN") == 0; node->do_telnet = nodelist_checkflag(node->flags, "ITN") == 0;
//TODO: Add more INA flags to array
nodelist_flagvalue(node->flags, "INA", node->host); nodelist_flagvalue(node->flags, "INA", node->host);
DEB((D_NODELIST, "nodelist: Parsed inet values IBN: %d, IFC: %d, ITN: %d, INA: %s", node->do_binkp, node->do_ifcico, node->do_telnet, node->host));
return 0; return 0;
} }
@@ -572,7 +569,7 @@ int nodelist_close(s_nodelist *nlp)
logerr("cannot close nodelist index \"%s\"", nlp->name_index); logerr("cannot close nodelist index \"%s\"", nlp->name_index);
rc = 1; rc = 1;
} }
memset(nlp,'\0',sizeof(s_nodelist));
free(nlp); free(nlp);
return rc; return rc;
-8
View File
@@ -31,7 +31,6 @@ int out_filetype(const char *fname)
else else
p_nam = fname; p_nam = fname;
DEB((D_EVENT, "outb_fsqueue: getting type of file %s", p_nam));
/* /*
* Get file name extension * Get file name extension
*/ */
@@ -40,19 +39,12 @@ int out_filetype(const char *fname)
for( i = 0; outtab[i].ext; i++ ) for( i = 0; outtab[i].ext; i++ )
if( strcasemask(p_ext, outtab[i].ext) == 0 ) if( strcasemask(p_ext, outtab[i].ext) == 0 )
{
DEB((D_EVENT, "outb_fsqueue: got type %d from outtab ext %s", outtab[i].type, p_ext ));
return outtab[i].type; return outtab[i].type;
}
for( i = 0; exttab[i].ext; i++ ) for( i = 0; exttab[i].ext; i++ )
if( strcasemask(p_ext, exttab[i].ext) == 0 ) if( strcasemask(p_ext, exttab[i].ext) == 0 )
{
DEB((D_EVENT, "outb_fsqueue: got type %d from exttab ext %s", exttab[i].type, p_ext ));
return exttab[i].type; return exttab[i].type;
}
DEB((D_EVENT, "outb_fsqueue: got type UNKNOWN", exttab[i].type, p_ext ));
return TYPE_UNKNOWN; return TYPE_UNKNOWN;
} }
+18 -59
View File
@@ -124,7 +124,7 @@ int binkp_loop(s_binkp_state *bstate) {
bstate->continuesend = false; bstate->continuesend = false;
} }
if (have_to_write==0 && (!no_more_to_send || bstate->extracmd[0]!=(char)-1)) { if (have_to_write==0 && (!no_more_to_send || bstate->extracmd[0]!=-1)) {
m = binkp_getforsend(bstate, writebuf+BINKP_HEADER, &block_type, &block_length); m = binkp_getforsend(bstate, writebuf+BINKP_HEADER, &block_type, &block_length);
if(m==1 || m==3) { if(m==1 || m==3) {
//DEB((D_24554, "got block for sending %d %hu", block_type, block_length)); //DEB((D_24554, "got block for sending %d %hu", block_type, block_length));
@@ -339,10 +339,8 @@ int binkp_transfer(s_binkp_sysinfo *local_data, s_binkp_sysinfo *remote_data, s_
int binkp_getforsend(s_binkp_state *bstate, char *buf, int *block_type, unsigned short *block_length) int binkp_getforsend(s_binkp_state *bstate, char *buf, int *block_type, unsigned short *block_length)
{ {
int my_sf, wr_pos; int my_sf, wr_pos;
s_faddr *bestaddr;
int n; // read file int n; // read file
if (bstate->extracmd[0]!=(char)-1) { if (bstate->extracmd[0]!=-1) {
DEB((D_24554, "Send cmd to remote %d %s", bstate->extracmd[0], bstate->extracmd+1)); DEB((D_24554, "Send cmd to remote %d %s", bstate->extracmd[0], bstate->extracmd+1));
buf[0] = bstate->extracmd[0]; buf[0] = bstate->extracmd[0];
strcpy(buf+1, bstate->extracmd+1); strcpy(buf+1, bstate->extracmd+1);
@@ -436,40 +434,10 @@ case 7:
// p // p
case 2: case 2:
DEB((D_24554, "WaitAKA: phase 2, mode=%d, waitaka %d, address_est %d",bstate->mode, cf_binkp_waitaka, bstate->address_established)); DEB((D_24554, "send address"));
if ( (bstate->mode==bmode_incoming_handshake) && (conf_boolean(cf_binkp_waitaka)) && (!(bstate->address_established)) )
{
DEB((D_24554, "send address paused - waitaka option present"));
return 0;
}
else
{
DEB((D_24554, "Send address - begin"));
bstate->phase += 1; bstate->phase += 1;
buf[0] = BPMSG_ADR; buf[0] = BPMSG_ADR;
wr_pos = 1; wr_pos = 1;
if (conf_boolean(cf_binkp_waitaka))
{
// Sending bestAKA:
DEB((D_24554, "Binkp - getting best aka - waitaka option present"));
bestaddr = session_get_bestaka(state.remoteaddrs[0].addr);
if (bestaddr->point) {
wr_pos += sprintf(buf+wr_pos, "%d:%d/%d.%d@%s",
bestaddr->zone, bestaddr->net,
bestaddr->node, bestaddr->point,
bestaddr->domain);
}
else {
wr_pos += sprintf(buf+wr_pos, "%d:%d/%d@%s",
bestaddr->zone, bestaddr->net,
bestaddr->node,
bestaddr->domain);
}
}
else
{
// Sending all adresses:
int i; int i;
for( i = 0; i < state.n_localaddr; i++ ) for( i = 0; i < state.n_localaddr; i++ )
{ {
@@ -487,12 +455,10 @@ case 2:
state.localaddrs[i].addr.domain); state.localaddrs[i].addr.domain);
} }
} }
}
*block_type = BINKP_BLK_CMD; *block_type = BINKP_BLK_CMD;
*block_length = wr_pos; *block_length = wr_pos;
DEB((D_24554, "send address: %s", buf+1)); DEB((D_24554, "send address: %s", buf+1));
return 1; return 1;
}
case 3: // send password on outgoing or pw confirmation on incoming case 3: // send password on outgoing or pw confirmation on incoming
// special empty password is sent if there is no password for the remote addr // special empty password is sent if there is no password for the remote addr
@@ -551,7 +517,6 @@ case 3: // send password on outgoing or pw confirmation on incoming
case 4: case 4:
if (bstate->mode==bmode_incoming_handshake) { if (bstate->mode==bmode_incoming_handshake) {
int i = 0;
DEB((D_24554, "incoming handshake is complete")); DEB((D_24554, "incoming handshake is complete"));
bstate->complete = true; bstate->complete = true;
char *p; char *p;
@@ -703,12 +668,12 @@ case BPMSG_ADR: /* List of addresses */
if (bstate->address_established) { if (bstate->address_established) {
PROTO_ERROR("remote tries to change address"); PROTO_ERROR("remote tries to change address");
} }
if( bstate->extracmd[0] != (char)-1 ) return 0; // suspend !!! if( bstate->extracmd[0] !=-1 ) return 0; // suspend !!!
binkp_process_ADR(buf+1); binkp_process_ADR(buf+1);
if( !state.n_remoteaddr ) { if( !state.n_remoteaddr ) {
log("error: remote did not supplied any addresses"); log("error: remote did not supplied any addresses");
if( bstate->extracmd[0] != (char)-1 ) return 0; // suspend if( bstate->extracmd[0] !=-1 ) return 0; // suspend
bstate->extracmd[0] = BPMSG_BSY; bstate->extracmd[0] = BPMSG_BSY;
strcpy(bstate->extracmd+1, "No addresses was presented"); strcpy(bstate->extracmd+1, "No addresses was presented");
bstate->extraislast = true; bstate->extraislast = true;
@@ -775,7 +740,7 @@ case BPMSG_PWD: /* Session password */
/* Do authorization */ /* Do authorization */
if( binkp_auth_incoming(bstate->remote_data) ) { if( binkp_auth_incoming(bstate->remote_data) ) {
log("error: invalid password"); log("error: invalid password");
if( bstate->extracmd[0] != (char)-1 ) return 0; // suspend if extra is occupied if( bstate->extracmd[0] !=-1 ) return 0; // suspend if extra is occupied
bstate->extracmd[0] = BPMSG_ERR; bstate->extracmd[0] = BPMSG_ERR;
strcpy(bstate->extracmd+1, "Security violation"); strcpy(bstate->extracmd+1, "Security violation");
bstate->extraislast = true; bstate->extraislast = true;
@@ -784,7 +749,7 @@ case BPMSG_PWD: /* Session password */
// lock addresses // lock addresses
if( session_addrs_lock(state.remoteaddrs, state.n_remoteaddr) ) { if( session_addrs_lock(state.remoteaddrs, state.n_remoteaddr) ) {
log("error locking addresses of the remote"); log("error locking addresses of the remote");
if( bstate->extracmd[0] != (char)-1 ) return 0; // suspend if extra is occupied if( bstate->extracmd[0] !=-1 ) return 0; // suspend if extra is occupied
bstate->extracmd[0] = BPMSG_BSY; bstate->extracmd[0] = BPMSG_BSY;
strcpy(bstate->extracmd+1, "All addresses are busy"); strcpy(bstate->extracmd+1, "All addresses are busy");
bstate->extraislast = true; bstate->extraislast = true;
@@ -805,7 +770,6 @@ case BPMSG_FILE: /* File information */
s_bpfinfo recvfi; s_bpfinfo recvfi;
if( binkp_parsfinfo(buf+1, &recvfi, true) ) { if( binkp_parsfinfo(buf+1, &recvfi, true) ) {
log ("M_FILE parse error: %s", buf + 1); log ("M_FILE parse error: %s", buf + 1);
DEB((D_24554, "M_FILE parse error: %s", buf + 1 ));
PROTO_ERROR("invalid M_FILE"); PROTO_ERROR("invalid M_FILE");
} }
bstate->batch_recv_count += 1; bstate->batch_recv_count += 1;
@@ -822,9 +786,9 @@ case BPMSG_FILE: /* File information */
return 1; return 1;
} }
DEB((D_24554, "no, skipping; TODO: accept it")); DEB((D_24554, "no, skipping; TODO: accept it"));
if( bstate->extracmd[0] != (char)-1 ) return 0; if( bstate->extracmd[0] != -1 ) return 0;
bstate->extracmd[0] = BPMSG_SKIP; bstate->extracmd[0] = BPMSG_SKIP;
sprintf(bstate->extracmd+1, "%s %ld %ld %ld", recvfi.fn, recvfi.sz, recvfi.tm, recvfi.offs); sprintf(bstate->extracmd+1, "%s %ld %ld %ld", recvfi.fn, recvfi.sz, recvfi.tm);
bstate->extraislast = false; bstate->extraislast = false;
return 1; return 1;
} }
@@ -834,7 +798,7 @@ case BPMSG_FILE: /* File information */
PROTO_ERROR("invalid mode for M_FILE"); PROTO_ERROR("invalid mode for M_FILE");
} }
if( bstate->extracmd[0] != (char)-1 ) return 0; if( bstate->extracmd[0] != -1 ) return 0;
switch(p_rx_fopen(bstate->pi, recvfi.fn, recvfi.sz, recvfi.tm, 0)) { switch(p_rx_fopen(bstate->pi, recvfi.fn, recvfi.sz, recvfi.tm, 0)) {
case 0: case 0:
if (bstate->pi->recv->bytes_skipped == recvfi.offs) { if (bstate->pi->recv->bytes_skipped == recvfi.offs) {
@@ -880,7 +844,7 @@ case BPMSG_OK: /* Password was acknowleged (data ignored) */
} }
if (session_addrs_lock(state.remoteaddrs, state.n_remoteaddr)) { if (session_addrs_lock(state.remoteaddrs, state.n_remoteaddr)) {
log("error: unable to lock"); log("error: unable to lock");
if (bstate->extracmd[0]!= (char)-1) return 0; if (bstate->extracmd[0]!=-1) return 0;
bstate->extracmd[0] = BPMSG_BSY; bstate->extracmd[0] = BPMSG_BSY;
strcpy(bstate->extracmd+1, "All addresses are busy"); strcpy(bstate->extracmd+1, "All addresses are busy");
bstate->extraislast = true; bstate->extraislast = true;
@@ -990,7 +954,7 @@ case BPMSG_GET: /* Get a file from offset */
} }
DEB((D_24554, "M_GET file %s size %d time %d offset %d", getfi.fn, getfi.sz, getfi.tm, getfi.offs)); DEB((D_24554, "M_GET file %s size %d time %d offset %d", getfi.fn, getfi.sz, getfi.tm, getfi.offs));
if (bstate->extracmd[0] != (char)-1) return 0; if (bstate->extracmd[0] != -1) return 0;
if (bstate->pi->send) if (p_compfinfo(bstate->pi->send, getfi.fn, getfi.sz, getfi.tm)==0) { if (bstate->pi->send) if (p_compfinfo(bstate->pi->send, getfi.fn, getfi.sz, getfi.tm)==0) {
DEB((D_24554, "M_GET for currently transmitted file")); DEB((D_24554, "M_GET for currently transmitted file"));
@@ -1080,14 +1044,14 @@ case BINKP_BLK_DATA:
return 1; return 1;
} }
if (bstate->extracmd[0] != (char)-1) return 0; if (bstate->extracmd[0] != -1) return 0;
long int n; long int n;
n = p_rx_writefile(buf, block_length, bstate->pi); n = p_rx_writefile(buf, block_length, bstate->pi);
if( n < 0 ) { if( n < 0 ) {
log("error writing local file"); log("error writing local file");
if( n == (long int)-2 ) { if( n == -2 ) {
bstate->extracmd[0] = BPMSG_GOT; bstate->extracmd[0] = BPMSG_GOT;
sprintf(bstate->extracmd+1, "%s %ld %ld", bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total, sprintf(bstate->extracmd+1, "%s %ld %ld", bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total,
(long)bstate->pi->recv->mod_time); (long)bstate->pi->recv->mod_time);
@@ -1116,13 +1080,11 @@ case BINKP_BLK_DATA:
p_rx_fclose(bstate->pi); p_rx_fclose(bstate->pi);
PROTO_ERROR("extra data for file") PROTO_ERROR("extra data for file")
} }
else if( bstate->pi->recv->bytes_received == bstate->pi->recv->bytes_total ) else if( bstate->pi->recv->bytes_received == bstate->pi->recv->bytes_total ) {
{
DEB((D_24554, "receive completed")); DEB((D_24554, "receive completed"));
bstate->frs = frs_nothing; bstate->frs = frs_nothing;
bstate->pi->recv->status = FSTAT_SUCCESS; bstate->pi->recv->status = FSTAT_SUCCESS;
if( !p_rx_fclose(bstate->pi) ) if( !p_rx_fclose(bstate->pi) ) {
{
bstate->extracmd[0] = BPMSG_GOT; bstate->extracmd[0] = BPMSG_GOT;
sprintf(bstate->extracmd+1, "%s %ld %ld", sprintf(bstate->extracmd+1, "%s %ld %ld",
bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total, bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total,
@@ -1130,8 +1092,7 @@ case BINKP_BLK_DATA:
bstate->extraislast = false; bstate->extraislast = false;
return 1; return 1;
} }
else else {
{
DEB((D_24554, "some error committing file")); DEB((D_24554, "some error committing file"));
bstate->extracmd[0] = BPMSG_SKIP; bstate->extracmd[0] = BPMSG_SKIP;
sprintf(bstate->extracmd+1, "%s %ld %ld", sprintf(bstate->extracmd+1, "%s %ld %ld",
@@ -1140,9 +1101,7 @@ case BINKP_BLK_DATA:
bstate->extraislast = false; bstate->extraislast = false;
return 1; return 1;
} }
} } else {
else
{
DEB((D_24554, "data block accepted")); DEB((D_24554, "data block accepted"));
return 1; return 1;
} }
-5
View File
@@ -415,7 +415,6 @@ int p_tx_rewind(s_protinfo *pi, size_t pos)
void prot_traffic_update(s_traffic *traf, size_t size, int xtime, int type) void prot_traffic_update(s_traffic *traf, size_t size, int xtime, int type)
{ {
DEB((D_EVENT, "prot_common: Adding type %d with size %ld to stats", type, size));
if( type & TYPE_REQANSW ) if( type & TYPE_REQANSW )
{ {
traf->freqed_size += size; traf->freqed_size += size;
@@ -434,10 +433,6 @@ void prot_traffic_update(s_traffic *traf, size_t size, int xtime, int type)
traf->arcmail_time += xtime; traf->arcmail_time += xtime;
traf->arcmail_num++; traf->arcmail_num++;
} }
else if( type & TYPE_TICFILE )
{
traf->ticfile_num++;
}
else else
{ {
traf->files_size += size; traf->files_size += size;
+11 -21
View File
@@ -22,16 +22,8 @@
int answ_system(e_session type, char *connstr, int inetd) int answ_system(e_session type, char *connstr, int inetd)
{ {
TIO oldtio; TIO oldtio;
union { struct sockaddr_in client;
struct sockaddr a;
struct sockaddr_in in;
struct sockaddr_in6 in6;
} client;
//struct sockaddr_storage client;
int clientlen = sizeof(client); int clientlen = sizeof(client);
char clienthost[NI_MAXHOST];
char clientport[NI_MAXSERV];
int clientres = 0;
int rc = 0; int rc = 0;
char *p; char *p;
@@ -82,20 +74,18 @@ int answ_system(e_session type, char *connstr, int inetd)
log("Answering TCPIP call..."); log("Answering TCPIP call...");
if( connstr && *connstr ) if( connstr && *connstr )
state.connstr = (char*)xstrcpy(connstr); state.connstr = (char*)xstrcpy(connstr);
else if( getpeername(0, (struct sockaddr*)&client, &clientlen) == -1 )
logerr("can't get client address");
else else
{ {
if(getpeername(0, &client.a, &clientlen)) #ifdef IPV6
log("sess_answ: can't detrmine socket client"); >char addr_str[INET6_ADDRSTRLEN+1];
clientres = getnameinfo( &client.a, clientlen, state.peername = (char*)xstrcpy(inet_ntop(AF_INET6, client.sin6_addr, addr_str, INET6_ADDRSTRLEN));
clienthost, sizeof(clienthost), clientport, state.peerport = (long)ntohs(client.sin6_port);
sizeof(clientport), NI_NUMERICHOST | NI_NUMERICSERV); #else
if ( clientres == 0 ) state.peername = (char*)xstrcpy(inet_ntoa(client.sin_addr));
{ state.peerport = (long)ntohs(client.sin_port);
state.peername = (char*)xstrcpy(clienthost); #endif
state.peerport = (long)atol(clientport);
}
else
log("sess_answ: can't get client address: ", gai_strerror(clientres));
} }
} }
+32 -101
View File
@@ -480,15 +480,10 @@ int call_system_tcpip(int callwith) // only TCPIP values
{ {
char abuf[BF_MAXADDRSTR+1]; char abuf[BF_MAXADDRSTR+1];
int rc = BFERR_NOERROR; int rc = BFERR_NOERROR;
char * pbuf;
char * target;
int resflg;
/* /*
* Set verbal line name to "tcpip" value * Set verbal line name to "tcpip" value
*/ */
memset(abuf, '\0', BF_MAXADDRSTR+1);
target = xmalloc(1024);
memset(target, '\0', 1024);
state.linename = xstrcpy("tcpip"); state.linename = xstrcpy("tcpip");
state.inet = TRUE; state.inet = TRUE;
@@ -507,17 +502,14 @@ int call_system_tcpip(int callwith) // only TCPIP values
case CALL_TCPIP_BINKP: case CALL_TCPIP_BINKP:
state.tcpmode = TCPMODE_BINKP; state.tcpmode = TCPMODE_BINKP;
state.session = SESSION_BINKP; state.session = SESSION_BINKP;
target = xstrcpy("IBN");
break; break;
case CALL_TCPIP_IFCICO: case CALL_TCPIP_IFCICO:
state.tcpmode = TCPMODE_RAW; state.tcpmode = TCPMODE_RAW;
state.session = SESSION_UNKNOWN; state.session = SESSION_UNKNOWN;
target = xstrcpy("IFC");
break; break;
case CALL_TCPIP_TELNET: case CALL_TCPIP_TELNET:
state.tcpmode = TCPMODE_TELNET; state.tcpmode = TCPMODE_TELNET;
state.session = SESSION_UNKNOWN; state.session = SESSION_UNKNOWN;
target = xstrcpy("ITN");
break; break;
defalt: defalt:
log("invalid protocol for TCP/IP module"); log("invalid protocol for TCP/IP module");
@@ -529,44 +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>");
memset(abuf, '\0', BF_MAXADDRSTR+1); if( (rc = tcpip_connect(state.node.host, state.tcpmode)) == 0
pbuf = xmalloc(1024);
resflg = nodelist_lookup_string(pbuf, 1024, state.node.addr);
if ( ! resflg )
{
char *p = strcasestr(pbuf, target);
if ( p )
{
target = strchr(p, ',');
if ( target ) target[0] = '\0';
target = strrchr(p, ':');
if ( target ) {
target++;
strcpy(abuf,target);
}
}
}
free(pbuf);
pbuf = xstrcpy(state.node.host);
if ( ! resflg )
{
if ( abuf[0] != '\0' )
{
// port not empty
DEB((D_EVENT, "Modifying host address %s with port %s", pbuf, abuf));
pbuf = xstrcat(pbuf, ":");
pbuf = xstrcat(pbuf, abuf);
}
}
if( (rc = tcpip_connect(pbuf, state.tcpmode)) == 0
&& (rc = tcpip_init() == 0) ) && (rc = tcpip_init() == 0) )
{ {
TTYSTATUS(1); TTYSTATUS(1);
@@ -577,7 +532,7 @@ defalt:
{ {
rc = BFERR_CANT_CONNECT10; rc = BFERR_CANT_CONNECT10;
} }
free(pbuf);
return rc; return rc;
} }
@@ -588,7 +543,7 @@ int call_system(s_faddr addr, const s_bforce_opts *opts)
char s[300]; char s[300];
snprintf(s, 299, "bforce calling system %d:%d/%d.%d", addr.zone, addr.net, addr.node, addr.point ); snprintf(s, 299, "bforce calling system %d:%d/%d.%d", addr.zone, addr.net, addr.node, addr.point );
log(s); log(s);
DEB((D_EVENT, s));
// find suitable way of connection and try to make session // find suitable way of connection and try to make session
int rc = 0; int rc = 0;
@@ -613,13 +568,12 @@ int call_system(s_faddr addr, const s_bforce_opts *opts)
} }
state.listed = state.node.listed; state.listed = state.node.listed;
//DEB((D_EVENT, "Calling init, listed=%d", state.listed));
state.node.addr.domain[0] = '\0'; /* Discard domain for node address */ state.node.addr.domain[0] = '\0'; /* Discard domain for node address */
// 1. If call method specified in cmdline, do use it // 1. If call method specified in cmdline, do use it
// 2. If not, use nodelist data and overrides and call all available methods // 2. If not, use nodelist data and overrides and call all available methods
// If override contains Phone or IP flags, ignore nodelist connect methods (but save INA if not overrided) // If override contains Phone or IP flags, ignore nodelist connect methods (but save INA if not overrided)
DEB((D_EVENT, "Calling init, runmode=%d", opts->runmode));
// 1st - get all allowed call ways // 1st - get all allowed call ways
// 2nd - gather information reqired to call and remove unavailable ways (no info, node does not support) // 2nd - gather information reqired to call and remove unavailable ways (no info, node does not support)
@@ -627,7 +581,7 @@ int call_system(s_faddr addr, const s_bforce_opts *opts)
if( opts->runmode == MODE_CALL_DEFAULT ) if( opts->runmode == MODE_CALL_DEFAULT )
{ {
call_mustuse = CALL_MODEM | CALL_TCPIP_ANY; call_mayuse = CALL_MODEM | CALL_TCPIP_ANY;
} }
else if( opts->runmode == MODE_CALL_STDIO ) else if( opts->runmode == MODE_CALL_STDIO )
{ {
@@ -639,14 +593,7 @@ int call_system(s_faddr addr, const s_bforce_opts *opts)
} }
else if( opts->runmode == MODE_CALL_IP ) else if( opts->runmode == MODE_CALL_IP )
{ {
DEB((D_EVENT, "Calling init, MODE_CALL_IP")); if( strcasecmp(opts->ipproto, "binkp") == 0 )
if( !(opts->ipproto) ) // determine from nodelist/override
{
DEB((D_EVENT, "ipproto not set"));
call_mayuse = CALL_TCPIP_ANY;
call_mustuse = 0;
}
else if( strcasecmp(opts->ipproto, "binkp") == 0 )
{ {
call_mustuse = CALL_TCPIP_BINKP; call_mustuse = CALL_TCPIP_BINKP;
} }
@@ -658,17 +605,20 @@ int call_system(s_faddr addr, const s_bforce_opts *opts)
{ {
call_mustuse = CALL_TCPIP_TELNET; call_mustuse = CALL_TCPIP_TELNET;
} }
else if( opts->ipproto == NULL ) // determine from nodelist/override
{
call_mayuse = CALL_TCPIP_ANY;
call_mustuse = 0;
}
else else
{ {
DEB((D_EVENT, "Unknown protocol %s", opts->ipproto));
log("Unknown protocol"); log("Unknown protocol");
return -1; return -1;
} }
} }
else else
{ {
DEB((D_EVENT, "Unknown runmode %d", opts->runmode)); log("Unknown protocol");
log("Unknown runmode");
return -1; return -1;
} }
@@ -677,10 +627,9 @@ int call_system(s_faddr addr, const s_bforce_opts *opts)
//char s[300]; //char s[300];
//snprintf(s, 299, "initial: may use %d must use %d", call_mayuse, call_mustuse); //snprintf(s, 299, "initial: may use %d must use %d", call_mayuse, call_mustuse);
//log(s); //log(s);
//DEB((D_EVENT, s));
if( (call_mayuse & CALL_MODEM) ) if( call_mayuse & CALL_MODEM )
{ {
// 1. use phone from opts // 1. use phone from opts
// 2. use overrides // 2. use overrides
@@ -701,7 +650,7 @@ int call_system(s_faddr addr, const s_bforce_opts *opts)
{ {
log("bad phone, excluding modem"); log("bad phone, excluding modem");
call_mayuse &= ~CALL_MODEM; call_mayuse &= ~CALL_MODEM;
if( !(call_mayuse) ) if( call_mustuse & CALL_MODEM )
{ {
errmsg = "don't know phone number"; errmsg = "don't know phone number";
gotoexit(BFERR_PHONE_UNKNOWN); gotoexit(BFERR_PHONE_UNKNOWN);
@@ -735,7 +684,7 @@ int call_system(s_faddr addr, const s_bforce_opts *opts)
{ {
call_mayuse &= ~CALL_MODEM; call_mayuse &= ~CALL_MODEM;
log("bad worktime, excluding modem"); log("bad worktime, excluding modem");
if( !(call_mayuse) ) if( call_mustuse & CALL_MODEM )
{ {
errmsg = "not works now, try later"; errmsg = "not works now, try later";
gotoexit(BFERR_NOTWORKING); gotoexit(BFERR_NOTWORKING);
@@ -744,9 +693,9 @@ int call_system(s_faddr addr, const s_bforce_opts *opts)
} }
} }
//snprintf(s, 299, "after phone check: may use %d must use %d", call_mayuse, call_mustuse); // snprintf(s, 299, "after phone check: may use %d must use %d", call_mayuse, call_mustuse);
//log(s); // log(s);
//DEB((D_EVENT, s));
/* /*
* Apply overrides to the node information * Apply overrides to the node information
*/ */
@@ -765,8 +714,7 @@ int call_system(s_faddr addr, const s_bforce_opts *opts)
if( !(call_mustuse & CALL_TCPIP_BINKP) && (call_mayuse & CALL_TCPIP_BINKP) ) if( !(call_mustuse & CALL_TCPIP_BINKP) && (call_mayuse & CALL_TCPIP_BINKP) )
{ {
//if( nodelist_checkflag(state.node.flags, "BINKP") != 0 && nodelist_checkflag(state.node.flags, "IBN") != 0 ) if( nodelist_checkflag(state.node.flags, "BINKP") != 0 && nodelist_checkflag(state.node.flags, "IBN") != 0 )
if( state.node.do_binkp == 0 )
{ {
call_mayuse &= ~CALL_TCPIP_BINKP; call_mayuse &= ~CALL_TCPIP_BINKP;
} }
@@ -774,8 +722,7 @@ int call_system(s_faddr addr, const s_bforce_opts *opts)
if( !(call_mustuse & CALL_TCPIP_IFCICO) && (call_mayuse & CALL_TCPIP_IFCICO) ) if( !(call_mustuse & CALL_TCPIP_IFCICO) && (call_mayuse & CALL_TCPIP_IFCICO) )
{ {
//if( nodelist_checkflag(state.node.flags, "IFC") != 0 && nodelist_checkflag(state.node.flags, "IFC") != 0 ) if( nodelist_checkflag(state.node.flags, "IFC") != 0 && nodelist_checkflag(state.node.flags, "IFC") != 0 )
if( state.node.do_ifcico == 0 )
{ {
call_mayuse &= ~CALL_TCPIP_IFCICO; call_mayuse &= ~CALL_TCPIP_IFCICO;
} }
@@ -783,8 +730,7 @@ int call_system(s_faddr addr, const s_bforce_opts *opts)
if( !(call_mustuse & CALL_TCPIP_TELNET) && (call_mayuse & CALL_TCPIP_TELNET) ) if( !(call_mustuse & CALL_TCPIP_TELNET) && (call_mayuse & CALL_TCPIP_TELNET) )
{ {
//if( nodelist_checkflag(state.node.flags, "TELN") != 0 && nodelist_checkflag(state.node.flags, "TLN") != 0 ) if( nodelist_checkflag(state.node.flags, "TELN") != 0 && nodelist_checkflag(state.node.flags, "TLN") != 0 )
if( state.node.do_telnet == 0 )
{ {
call_mayuse &= ~CALL_TCPIP_TELNET; call_mayuse &= ~CALL_TCPIP_TELNET;
} }
@@ -800,12 +746,7 @@ int call_system(s_faddr addr, const s_bforce_opts *opts)
state.override.sIpaddr, sizeof(state.node.host)); state.override.sIpaddr, sizeof(state.node.host));
} }
//DEB((D_EVENT, "Calling init, IPHOST", state.node.host)); if( call_mayuse & CALL_TCPIP_ANY && !tcpip_isgood_host(state.node.host) ) {
// We have at least one protocol and not valid address - try to
// find INA with through Fidonet DNS
if( (call_mayuse & CALL_TCPIP_ANY) && !tcpip_isgood_host(state.node.host) )
{
char *fidodnszone = conf_string(cf_fidodnszone); char *fidodnszone = conf_string(cf_fidodnszone);
if (fidodnszone) { if (fidodnszone) {
if (addr.point) { if (addr.point) {
@@ -820,21 +761,17 @@ int call_system(s_faddr addr, const s_bforce_opts *opts)
} }
} }
// We have no valid tcpip protocols OR not valid address if( call_mayuse & CALL_TCPIP_ANY && !tcpip_isgood_host(state.node.host) )
if( !(call_mayuse & CALL_TCPIP_ANY) || !tcpip_isgood_host(state.node.host) )
{ {
call_mayuse &= ~CALL_TCPIP_ANY; call_mayuse &= ~CALL_TCPIP_ANY;
log("bad host, exclude IP"); log("bad host, exclude IP");
DEB((D_EVENT, "bad host or proto -> exclude IP, mayuse=%d", call_mayuse)); if( call_mustuse & CALL_TCPIP_ANY )
// If we had ONLY tcpip command - go out with error
if( !(call_mayuse) )
{ {
errmsg = "Aborting, don't know host name"; errmsg = "don't know host name";
gotoexit(BFERR_PHONE_UNKNOWN); gotoexit(BFERR_PHONE_UNKNOWN);
} }
} }
DEB((D_EVENT,"sess_call: may use %d must use %d", call_mayuse, call_mustuse));
// snprintf(s, 299, "after IP check: may use %d must use %d", call_mayuse, call_mustuse); // snprintf(s, 299, "after IP check: may use %d must use %d", call_mayuse, call_mustuse);
// log(s); // log(s);
@@ -871,33 +808,28 @@ int call_system(s_faddr addr, const s_bforce_opts *opts)
// try allowed methods and break if rc == 0 // try allowed methods and break if rc == 0
rc = -1; rc = -1;
if( rc && (call_mayuse & CALL_STDIO) ) if( rc && call_mayuse & CALL_STDIO )
{ {
DEB((D_EVENT,"sess_call: calling stdio"));
rc = call_system_quiet(opts->connect, opts->inetd); rc = call_system_quiet(opts->connect, opts->inetd);
} }
if( rc && (call_mayuse & CALL_TCPIP_BINKP) ) if( rc && call_mayuse & CALL_TCPIP_BINKP )
{ {
DEB((D_EVENT,"sess_call: calling binkp"));
rc = call_system_tcpip(CALL_TCPIP_BINKP); rc = call_system_tcpip(CALL_TCPIP_BINKP);
} }
if( rc && (call_mayuse & CALL_TCPIP_IFCICO) ) if( rc && call_mayuse & CALL_TCPIP_IFCICO )
{ {
DEB((D_EVENT,"sess_call: calling ifcico"));
rc = call_system_tcpip(CALL_TCPIP_IFCICO); rc = call_system_tcpip(CALL_TCPIP_IFCICO);
} }
if( rc && (call_mayuse & CALL_TCPIP_TELNET) ) if( rc && call_mayuse & CALL_TCPIP_TELNET )
{ {
DEB((D_EVENT,"sess_call: calling telnet"));
rc = call_system_tcpip(CALL_TCPIP_TELNET); rc = call_system_tcpip(CALL_TCPIP_TELNET);
} }
if( rc && (call_mayuse & CALL_MODEM) ) if( rc && call_mayuse & CALL_MODEM )
{ {
DEB((D_EVENT,"sess_call: calling MODEM"));
setproctitle("bforce calling %.32s, %.32s", setproctitle("bforce calling %.32s, %.32s",
ftn_addrstr(abuf, state.node.addr), state.node.phone); ftn_addrstr(abuf, state.node.addr), state.node.phone);
rc = -1; rc = -1;
@@ -918,7 +850,6 @@ int call_system(s_faddr addr, const s_bforce_opts *opts)
if( port_lock(p_lockdir, state.modemport) == 0 ) /* Successfuly locked port */ if( port_lock(p_lockdir, state.modemport) == 0 ) /* Successfuly locked port */
{ {
DEB((D_EVENT,"sess_call: call_system_modem running"));
rc = call_system_modem(); rc = call_system_modem();
port_unlock(p_lockdir, state.modemport); port_unlock(p_lockdir, state.modemport);
} }
+2 -38
View File
@@ -897,20 +897,11 @@ int session(void)
p_log_txrxstat(&pi); p_log_txrxstat(&pi);
// Protocol info - real info from protocol
DEB((D_EVENT,"sess_main: Pi stats> Net: %d, Arc: %d, Fil: %d, Tic: %d",
pi.traffic_rcvd.netmail_num, pi.traffic_rcvd.arcmail_num,
pi.traffic_rcvd.files_num, pi.traffic_rcvd.ticfile_num));
// Session info - HANDSHAKE info for traffic
DEB((D_EVENT,"sess_main: Sess stats> Net: %d, Arc: %d, Fil: %d, Tic: %d",
state.traff_recv.netmail_num, state.traff_recv.arcmail_num,
state.traff_recv.files_num, state.traff_recv.ticfile_num));
/* /*
* Raise flags if session incoming traffic was not empty * Raise flags if session incoming traffic was not empty
*/ */
if ( (p = conf_string(cf_incnet_flag)) ) if ( (p = conf_string(cf_incnet_flag)) )
if (pi.traffic_rcvd.netmail_size > 0) { if (state.traff_recv.netmail_size > 0) {
DEB((D_EVENT, "Incoming netmail > 0, raising flag")); DEB((D_EVENT, "Incoming netmail > 0, raising flag"));
log("Raising flag for netmail in %s", p); log("Raising flag for netmail in %s", p);
fd = open(p, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP ); fd = open(p, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP );
@@ -924,7 +915,7 @@ int session(void)
} }
if ( (p = conf_string(cf_incarc_flag)) ) if ( (p = conf_string(cf_incarc_flag)) )
if (pi.traffic_rcvd.arcmail_size > 0) { if (state.traff_recv.arcmail_size > 0) {
DEB((D_EVENT, "Incoming arcmail > 0, raising flag")); DEB((D_EVENT, "Incoming arcmail > 0, raising flag"));
log("Raising flag for arcmail in %s", p); log("Raising flag for arcmail in %s", p);
fd = open(p, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); fd = open(p, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
@@ -937,33 +928,6 @@ int session(void)
} }
} }
if ( (p = conf_string(cf_inctic_flag)) )
if (pi.traffic_rcvd.ticfile_num > 0) {
DEB((D_EVENT, "Incoming TIC files > 0, raising flag"));
log("Raising flag for TIC in %s", p);
fd = open(p, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
if (fd == -1) {
DEB((D_EVENT, "Error raising ticfiles flag"));
log("Error creating flag for ticfiles in %s", p);
} else {
/* all ok - closing file */
close(fd);
}
}
if ( (p = conf_string(cf_incfile_flag)) )
if (pi.traffic_rcvd.files_size > 0) {
DEB((D_EVENT, "Incoming FILES > 0, raising flag"));
log("Raising flag for files in %s", p);
fd = open(p, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
if (fd == -1) {
DEB((D_EVENT, "Error raising files flag"));
log("Error creating flag for files in %s", p);
} else {
/* all ok - closing file */
close(fd);
}
}
/* /*
* Save session traffic before deiniting * Save session traffic before deiniting
*/ */
+1 -3
View File
@@ -189,8 +189,7 @@ static int ftn_addrparse_fido(s_faddr *addr, const char *s, bool wildcard)
{ {
strnxcpy(addr->domain, string_printable(p), sizeof(addr->domain)); strnxcpy(addr->domain, string_printable(p), sizeof(addr->domain));
} }
DEB((D_INFO,"u_ftn: Parsed ftn address z:%d, net:%d, node:%d, point:%d",
addr->zone, addr->net, addr->node, addr->point));
return badaddr; return badaddr;
} }
@@ -327,7 +326,6 @@ int ftn_addrparse(s_faddr *addr, const char *s, bool wildcard)
addr->node = DEFAULT_NODE; addr->node = DEFAULT_NODE;
addr->point = 0; addr->point = 0;
DEB((D_INFO, "u_ftn: parsing ftnaddr %s", s));
if( addr->inetform ) if( addr->inetform )
badaddr = ftn_addrparse_inet(addr, s, wildcard); badaddr = ftn_addrparse_inet(addr, s, wildcard);
else else
-1
View File
@@ -81,7 +81,6 @@ void *xrealloc(void *buf, size_t size)
else if( (tmp = (char*)(buf ? realloc(buf, size) : malloc(size))) == NULL ) else if( (tmp = (char*)(buf ? realloc(buf, size) : malloc(size))) == NULL )
{ {
log("failed to reallocate %ld bytes -> abort", size); log("failed to reallocate %ld bytes -> abort", size);
if( buf ) free(buf);
abort(); abort();
} }
+7 -9
View File
@@ -173,20 +173,18 @@ long time_gmtoffset(void)
time_t tt = time(NULL); time_t tt = time(NULL);
struct tm local = *localtime(&tt); struct tm local = *localtime(&tt);
struct tm gmt = *gmtime(&tt); struct tm gmt = *gmtime(&tt);
long tz = 0; /* = local.tm_yday - gmt.tm_yday; long tz = local.tm_yday - gmt.tm_yday;
if( tz > 1 ) if( tz > 1 )
tz = -24; tz = 24;
else if( tz < -1 ) else if( tz < -1 )
tz = +24; tz = -24;
else else
tz *= 24; */ tz *= 24;
/*tz += gmt.tm_hour - local.tm_hour; tz += local.tm_hour - gmt.tm_hour;
tz *= 60; tz *= 60;
tz += gmt.tm_min - local.tm_min;*/ tz += local.tm_min - gmt.tm_min;
tz = (gmt.tm_hour*60+gmt.tm_min) - (local.tm_hour*60+local.tm_min);
return tz; return tz;
} }
@@ -202,7 +200,7 @@ long time_gmtoffset(void)
*/ */
char *time_string_gmtoffset(char *buffer) char *time_string_gmtoffset(char *buffer)
{ {
long tz = -time_gmtoffset(); long tz = time_gmtoffset();
char sign = (tz > 0)?'+':'-'; char sign = (tz > 0)?'+':'-';
tz = abs(tz); tz = abs(tz);
unsigned int hour = tz/60; unsigned int hour = tz/60;
+1 -1
View File
@@ -127,7 +127,7 @@ static int nodelist_makeindex(s_nodelist *nlp, s_faddr addr)
switch(keyword) { switch(keyword) {
case KEYWORD_ZONE: case KEYWORD_ZONE:
bni.zone = value; bni.zone = value;
bni.net = value; // zxalexis bni.net = 0;
bni.node = 0; bni.node = 0;
bni.point = 0; bni.point = 0;
bni.hub = 0; bni.hub = 0;
-3
View File
@@ -162,7 +162,6 @@ typedef enum {
cf_address, cf_address,
cf_amiga_outbound_directory, cf_amiga_outbound_directory,
cf_binkp_timeout, cf_binkp_timeout,
cf_binkp_waitaka,
cf_daemon_circle, cf_daemon_circle,
cf_daemon_circle_crash, cf_daemon_circle_crash,
cf_daemon_circle_direct, cf_daemon_circle_direct,
@@ -196,8 +195,6 @@ typedef enum {
cf_freq_srif_command, cf_freq_srif_command,
cf_incnet_flag, cf_incnet_flag,
cf_incarc_flag, cf_incarc_flag,
cf_inctic_flag,
cf_incfile_flag,
cf_hide_our_aka, cf_hide_our_aka,
cf_history_file, cf_history_file,
cf_hydra_options, cf_hydra_options,
-1
View File
@@ -44,7 +44,6 @@ typedef struct traffic {
int freqed_num; int freqed_num;
int freqed_time; int freqed_time;
size_t freqed_size; size_t freqed_size;
int ticfile_num;
} s_traffic; } s_traffic;
/* /*
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-199
View File
@@ -1,199 +0,0 @@
address 99:1/1@testzone
options NoDirZap NoJanus NoChat
proto_order ZMO,ZAP,HYD,SLK,KER,DZA,JAN,TZA
#domain medianet /var/spool/ftn/medianet/ 776
#domain schoolnet /var/spool/ftn/schoolnet/ 461
log_file %TESTZONE%/logsA/bf-log
debug_file %TESTZONE%/logsA/bf-debug
debug_level modem hshake event freq prot
nodial_flag %TESTZONE%/etc/nodial
inbound_directory (Protected) %TESTZONE%/inboundA
inbound_directory %TESTZONE%/inbound-unsecureA
# incnet_flag %TESTZONE%/flags/toss
# incarc_flag %TESTZONE%/flags/toss
outbound_directory %TESTZONE%/outboundA
#amiga_outbound_directory /var/spool/fido/bt/out
nodelist_directory %TESTZONE%/nodelist
status_directory %TESTZONE%/logsA
history_file %TESTZONE%/historyA
#min_speed_in 1200
#min_speed_out 1200
#session_limit_in 1800
#session_limit_out 1800
#min_cps_time 120
# min_cps_recv (2:5020/1398) 2100
# min_cps_recv (2:5020/1682) 3000
# min_cps_recv (2:5020/1811) 1400
zmodem_mincps_recv 300 15
zmodem_mincps_recv 1200 90
zmodem_mincps_recv 2400 120
zmodem_mincps_recv 4800 240
zmodem_mincps_recv 7200 360
zmodem_mincps_recv 9600 480
zmodem_mincps_recv 12000 600
zmodem_mincps_recv 14400 720
zmodem_mincps_recv 16800 840
zmodem_mincps_recv 19200 960
zmodem_mincps_recv 21600 1080
zmodem_mincps_recv 23600 1180
zmodem_mincps_recv 24000 1200
zmodem_mincps_recv 26400 1320
zmodem_mincps_recv 28800 1440
zmodem_mincps_recv 31200 1600
zmodem_mincps_recv 33600 1700
zmodem_mincps_send 300 15
zmodem_mincps_send 1200 90
zmodem_mincps_send 2400 120
zmodem_mincps_send 4800 240
zmodem_mincps_send 7200 360
zmodem_mincps_send 9600 480
zmodem_mincps_send 12000 600
zmodem_mincps_send 14400 720
zmodem_mincps_send 16800 840
zmodem_mincps_send 19200 960
zmodem_mincps_send 21600 1080
zmodem_mincps_send 23600 1180
zmodem_mincps_send 24000 1200
zmodem_mincps_send 26400 1320
zmodem_mincps_send 28800 1440
zmodem_mincps_send 31200 1600
zmodem_mincps_send 33600 1700
hydra_mincps_recv 300 15
hydra_mincps_recv 1200 90
hydra_mincps_recv 2400 120
hydra_mincps_recv 4800 240
hydra_mincps_recv 7200 360
hydra_mincps_recv 9600 480
hydra_mincps_recv 12000 600
hydra_mincps_recv 14400 720
hydra_mincps_recv 16800 840
hydra_mincps_recv 19200 960
hydra_mincps_recv 21600 1080
hydra_mincps_recv 23600 1180
hydra_mincps_recv 24000 1200
hydra_mincps_recv 26400 1320
hydra_mincps_recv 28800 1440
hydra_mincps_recv 31200 1600
hydra_mincps_recv 33600 1700
hydra_mincps_send 300 15
hydra_mincps_send 1200 90
hydra_mincps_send 2400 120
hydra_mincps_send 4800 240
hydra_mincps_send 7200 360
hydra_mincps_send 9600 480
hydra_mincps_send 12000 600
hydra_mincps_send 14400 720
hydra_mincps_send 16800 840
hydra_mincps_send 19200 960
hydra_mincps_send 21600 1080
hydra_mincps_send 23600 1180
hydra_mincps_send 24000 1200
hydra_mincps_send 26400 1320
hydra_mincps_send 28800 1440
hydra_mincps_send 31200 1600
hydra_mincps_send 33600 1700
#
mode_default 100666
mode_arcmail 100666
mode_netmail 100666
mode_request 100666
#modem_port /dev/ttyUSB0:57600
modem_reset_command ATE0M0|
modem_dial_prefix ATDT
modem_dial_suffix |
modem_hangup_command v~^~ATH0|
#modem_stat_command AT%S|
#modem_stat_command AT|
modem_stat_command AT&V1|
modem_dial_response "CONNECT" connect
modem_dial_response "BUSY" busy
modem_dial_response "NO CARRIER" nocarrier
modem_dial_response "NO DIAL" nodialTone
modem_dial_response "NO ANSWER" noanswer
modem_dial_response "VOICE" noanswer
modem_dial_response "ERROR" error
nodelist NODELIST.999 *:*/*.0
#nodelist 450_256.pnt 2:450/256.*
#nodelist easynet.ndl 20:26/*.0
#nodelist *:*/*.*
phone_translate 7-813-78
phone_translate 7- 8
#phone_translate 375- 8
system_name TestZoneA
location TestZone
sysop_name TestZoneA User
phone -Unpublished-
max_speed 9600
emsi_OH_time 00:00-24:00
emsi_FR_time 00:00-24:00
emsi_send_tz yes
emsi_send_time yes
recv_buffer_size 65536
wait_carrier_out 120
#freq_srif_command /usr/local/lib/u-srif/u-srif
freq_alias_list %TESTZONE%/freq.aliases
freq_dir_list %TESTZONE%/freq.dirs
freq_limit_number 10
freq_limit_size 6000000
freq_limit_time 1200
freq_ignore_masks \\* \\*.\\* \\*.zip \\*.rar \\*.exe \\*.mp3 \\*.avi \\*.mp4 \\*.tgz
#zmodem_skip_by_pos yes
zmodem_send_dummy_pkt no
#zmodem_start_block_size 512
#zmodem_tx_window 32768
skip_files_recv *.pif *.swp
#delay_files_recv !%arcmail !%netmail # We will refuse all except mail
#delay_files_send !%netmail # We will send only netmail
#delay_files_recv (2:450/102) !%netmail
#min_free_space 20000
#recode_file_out /usr/local/fido/etc/koi82alt.tbl
#recode_file_in /usr/local/fido/etc/alt2koi8.tbl
#run_after_handshake [logout]/bin/echo "Hello, world!"
#run_after_session [nowait,setsid]/usr/local/lib/ftp/run-in
#run_after_handshake [setsid,useshell,logout]/usr/bin/nlookup $REM_ADDR_FTN
#run_after_session [logout,useshell]/usr/bin/hpt toss && /usr/bin/hpt link && /usr/bin/htick toss
#run_after_handshake [setsid,useshell,logout]/usr/bin/nlookup $REM_ADDR_FTN
#filebox_directory /var/spool/fido/bt/fbox
#filebox /var/spool/ftn/fbox/adb 2:5020/2120.1 hold
#filebox /var/spool/ftn/fbox/pvc 2:5020/2091 normal
#flo_translate C:\\fido\\spool\\outbound /var/spool/ftn/out
#flo_translate \\ /
maxtries 200 Undialable # Be carefull.. =)
maxtries_noansw 5 Hold 7200 # Call two hours later
maxtries_noconn 40 Hold 10800 # Don't call 3 hours
maxtries_hshake 10 Hold 86400 # 1 day delay
maxtries_sessions 10 Hold 3600 # Don't annoy uplinks
maxtries_nodial 1 Hold 1200 # Call 20 min later
daemon_circle_modem 40
daemon_circle_rescan 60
daemon_circle_normal 80
daemon_circle_direct 40
daemon_circle_crash 20
daemon_circle_immed 10
daemon_maxclients_tcpip 2
daemon_maxclients_modem 1
daemon_pid_file /var/run/bforce.pid
#syslog_facility 64
#nomail_flag /home/zx/fido/ftnroot/flags/nomail
#run_before_session /usr/local/bin/call_inet.sh
recieved_to_lower yes
# That's all!
-202
View File
@@ -1,202 +0,0 @@
address 99:1/1@testzone
options NoDirZap NoJanus NoChat
#proto_order ZMO,ZAP,HYD,SLK,KER,DZA,JAN,TZA
proto_order %PROTO%
#domain medianet /var/spool/ftn/medianet/ 776
#domain schoolnet /var/spool/ftn/schoolnet/ 461
log_file %TESTZONE%/logsA/bf-log
debug_file %TESTZONE%/logsA/bf-debug
debug_level modem hshake event freq
nodial_flag %TESTZONE%/etc/nodial
inbound_directory (Protected) %TESTZONE%/inboundA
inbound_directory %TESTZONE%/inbound-unsecureA
# incnet_flag %TESTZONE%/flags/toss
# incarc_flag %TESTZONE%/flags/toss
outbound_directory %TESTZONE%/outboundA
#amiga_outbound_directory /var/spool/fido/bt/out
nodelist_directory %TESTZONE%/nodelist
status_directory %TESTZONE%/logsA
history_file %TESTZONE%/logsA/history
password 99:1/2 testpwd1
#min_speed_in 1200
#min_speed_out 1200
#session_limit_in 1800
#session_limit_out 1800
#min_cps_time 120
# min_cps_recv (2:5020/1398) 2100
# min_cps_recv (2:5020/1682) 3000
# min_cps_recv (2:5020/1811) 1400
zmodem_mincps_recv 300 15
zmodem_mincps_recv 1200 90
zmodem_mincps_recv 2400 120
zmodem_mincps_recv 4800 240
zmodem_mincps_recv 7200 360
zmodem_mincps_recv 9600 480
zmodem_mincps_recv 12000 600
zmodem_mincps_recv 14400 720
zmodem_mincps_recv 16800 840
zmodem_mincps_recv 19200 960
zmodem_mincps_recv 21600 1080
zmodem_mincps_recv 23600 1180
zmodem_mincps_recv 24000 1200
zmodem_mincps_recv 26400 1320
zmodem_mincps_recv 28800 1440
zmodem_mincps_recv 31200 1600
zmodem_mincps_recv 33600 1700
zmodem_mincps_send 300 15
zmodem_mincps_send 1200 90
zmodem_mincps_send 2400 120
zmodem_mincps_send 4800 240
zmodem_mincps_send 7200 360
zmodem_mincps_send 9600 480
zmodem_mincps_send 12000 600
zmodem_mincps_send 14400 720
zmodem_mincps_send 16800 840
zmodem_mincps_send 19200 960
zmodem_mincps_send 21600 1080
zmodem_mincps_send 23600 1180
zmodem_mincps_send 24000 1200
zmodem_mincps_send 26400 1320
zmodem_mincps_send 28800 1440
zmodem_mincps_send 31200 1600
zmodem_mincps_send 33600 1700
hydra_mincps_recv 300 15
hydra_mincps_recv 1200 90
hydra_mincps_recv 2400 120
hydra_mincps_recv 4800 240
hydra_mincps_recv 7200 360
hydra_mincps_recv 9600 480
hydra_mincps_recv 12000 600
hydra_mincps_recv 14400 720
hydra_mincps_recv 16800 840
hydra_mincps_recv 19200 960
hydra_mincps_recv 21600 1080
hydra_mincps_recv 23600 1180
hydra_mincps_recv 24000 1200
hydra_mincps_recv 26400 1320
hydra_mincps_recv 28800 1440
hydra_mincps_recv 31200 1600
hydra_mincps_recv 33600 1700
hydra_mincps_send 300 15
hydra_mincps_send 1200 90
hydra_mincps_send 2400 120
hydra_mincps_send 4800 240
hydra_mincps_send 7200 360
hydra_mincps_send 9600 480
hydra_mincps_send 12000 600
hydra_mincps_send 14400 720
hydra_mincps_send 16800 840
hydra_mincps_send 19200 960
hydra_mincps_send 21600 1080
hydra_mincps_send 23600 1180
hydra_mincps_send 24000 1200
hydra_mincps_send 26400 1320
hydra_mincps_send 28800 1440
hydra_mincps_send 31200 1600
hydra_mincps_send 33600 1700
#
mode_default 100666
mode_arcmail 100666
mode_netmail 100666
mode_request 100666
#modem_port /dev/ttyUSB0:57600
modem_reset_command ATE0M0|
modem_dial_prefix ATDT
modem_dial_suffix |
modem_hangup_command v~^~ATH0|
#modem_stat_command AT%S|
#modem_stat_command AT|
modem_stat_command AT&V1|
modem_dial_response "CONNECT" connect
modem_dial_response "BUSY" busy
modem_dial_response "NO CARRIER" nocarrier
modem_dial_response "NO DIAL" nodialTone
modem_dial_response "NO ANSWER" noanswer
modem_dial_response "VOICE" noanswer
modem_dial_response "ERROR" error
nodelist NODELIST.999 *:*/*.0
#nodelist 450_256.pnt 2:450/256.*
#nodelist easynet.ndl 20:26/*.0
#nodelist *:*/*.*
phone_translate 7-813-78
phone_translate 7- 8
#phone_translate 375- 8
system_name TestZoneA
location TestZone
sysop_name TestZoneA User
phone -Unpublished-
max_speed 9600
emsi_OH_time 00:00-24:00
emsi_FR_time 00:00-24:00
emsi_send_tz yes
emsi_send_time yes
recv_buffer_size 65536
wait_carrier_out 120
#freq_srif_command /usr/local/lib/u-srif/u-srif
freq_alias_list %TESTZONE%/etc/freq.aliases
freq_dir_list %TESTZONE%/etc/freq.dirs
freq_limit_number 10
freq_limit_size 6000000
freq_limit_time 1200
freq_ignore_masks \\* \\*.\\* \\*.zip \\*.rar \\*.exe \\*.mp3 \\*.avi \\*.mp4 \\*.tgz
#zmodem_skip_by_pos yes
zmodem_send_dummy_pkt no
#zmodem_start_block_size 512
#zmodem_tx_window 32768
skip_files_recv *.pif *.swp
#delay_files_recv !%arcmail !%netmail # We will refuse all except mail
#delay_files_send !%netmail # We will send only netmail
#delay_files_recv (2:450/102) !%netmail
#min_free_space 20000
#recode_file_out /usr/local/fido/etc/koi82alt.tbl
#recode_file_in /usr/local/fido/etc/alt2koi8.tbl
#run_after_handshake [logout]/bin/echo "Hello, world!"
#run_after_session [nowait,setsid]/usr/local/lib/ftp/run-in
#run_after_handshake [setsid,useshell,logout]/usr/bin/nlookup $REM_ADDR_FTN
#run_after_session [logout,useshell]/usr/bin/hpt toss && /usr/bin/hpt link && /usr/bin/htick toss
#run_after_handshake [setsid,useshell,logout]/usr/bin/nlookup $REM_ADDR_FTN
#filebox_directory /var/spool/fido/bt/fbox
#filebox /var/spool/ftn/fbox/adb 2:5020/2120.1 hold
#filebox /var/spool/ftn/fbox/pvc 2:5020/2091 normal
#flo_translate C:\\fido\\spool\\outbound /var/spool/ftn/out
#flo_translate \\ /
maxtries 200 Undialable # Be carefull.. =)
maxtries_noansw 5 Hold 7200 # Call two hours later
maxtries_noconn 40 Hold 10800 # Don't call 3 hours
maxtries_hshake 10 Hold 86400 # 1 day delay
maxtries_sessions 10 Hold 3600 # Don't annoy uplinks
maxtries_nodial 1 Hold 1200 # Call 20 min later
daemon_circle_modem 40
daemon_circle_rescan 60
daemon_circle_normal 80
daemon_circle_direct 40
daemon_circle_crash 20
daemon_circle_immed 10
daemon_maxclients_tcpip 2
daemon_maxclients_modem 1
daemon_pid_file %TESTZONE%/run/bforceA.pid
#syslog_facility 64
#nomail_flag /home/zx/fido/ftnroot/flags/nomail
#run_before_session /usr/local/bin/call_inet.sh
recieved_to_lower yes
# That's all!
-202
View File
@@ -1,202 +0,0 @@
address 99:1/2@testzone
options NoDirZap NoJanus NoChat
#proto_order ZMO,ZAP,HYD,SLK,KER,DZA,JAN,TZA
proto_order %PROTO%
#domain medianet /var/spool/ftn/medianet/ 776
#domain schoolnet /var/spool/ftn/schoolnet/ 461
log_file %TESTZONE%/logsB/bf-log
debug_file %TESTZONE%/logsB/bf-debug
debug_level modem hshake event freq
nodial_flag %TESTZONE%/etc/nodial
inbound_directory (Protected) %TESTZONE%/inboundB
inbound_directory %TESTZONE%/inbound-unsecureB
# incnet_flag %TESTZONE%/flags/toss
# incarc_flag %TESTZONE%/flags/toss
outbound_directory %TESTZONE%/outboundB
#amiga_outbound_directory /var/spool/fido/bt/out
nodelist_directory %TESTZONE%/nodelist
status_directory %TESTZONE%/logsB
history_file %TESTZONE%/logsB/history
password 99:1/1 testpwd1
#min_speed_in 1200
#min_speed_out 1200
#session_limit_in 1800
#session_limit_out 1800
#min_cps_time 120
# min_cps_recv (2:5020/1398) 2100
# min_cps_recv (2:5020/1682) 3000
# min_cps_recv (2:5020/1811) 1400
zmodem_mincps_recv 300 15
zmodem_mincps_recv 1200 90
zmodem_mincps_recv 2400 120
zmodem_mincps_recv 4800 240
zmodem_mincps_recv 7200 360
zmodem_mincps_recv 9600 480
zmodem_mincps_recv 12000 600
zmodem_mincps_recv 14400 720
zmodem_mincps_recv 16800 840
zmodem_mincps_recv 19200 960
zmodem_mincps_recv 21600 1080
zmodem_mincps_recv 23600 1180
zmodem_mincps_recv 24000 1200
zmodem_mincps_recv 26400 1320
zmodem_mincps_recv 28800 1440
zmodem_mincps_recv 31200 1600
zmodem_mincps_recv 33600 1700
zmodem_mincps_send 300 15
zmodem_mincps_send 1200 90
zmodem_mincps_send 2400 120
zmodem_mincps_send 4800 240
zmodem_mincps_send 7200 360
zmodem_mincps_send 9600 480
zmodem_mincps_send 12000 600
zmodem_mincps_send 14400 720
zmodem_mincps_send 16800 840
zmodem_mincps_send 19200 960
zmodem_mincps_send 21600 1080
zmodem_mincps_send 23600 1180
zmodem_mincps_send 24000 1200
zmodem_mincps_send 26400 1320
zmodem_mincps_send 28800 1440
zmodem_mincps_send 31200 1600
zmodem_mincps_send 33600 1700
hydra_mincps_recv 300 15
hydra_mincps_recv 1200 90
hydra_mincps_recv 2400 120
hydra_mincps_recv 4800 240
hydra_mincps_recv 7200 360
hydra_mincps_recv 9600 480
hydra_mincps_recv 12000 600
hydra_mincps_recv 14400 720
hydra_mincps_recv 16800 840
hydra_mincps_recv 19200 960
hydra_mincps_recv 21600 1080
hydra_mincps_recv 23600 1180
hydra_mincps_recv 24000 1200
hydra_mincps_recv 26400 1320
hydra_mincps_recv 28800 1440
hydra_mincps_recv 31200 1600
hydra_mincps_recv 33600 1700
hydra_mincps_send 300 15
hydra_mincps_send 1200 90
hydra_mincps_send 2400 120
hydra_mincps_send 4800 240
hydra_mincps_send 7200 360
hydra_mincps_send 9600 480
hydra_mincps_send 12000 600
hydra_mincps_send 14400 720
hydra_mincps_send 16800 840
hydra_mincps_send 19200 960
hydra_mincps_send 21600 1080
hydra_mincps_send 23600 1180
hydra_mincps_send 24000 1200
hydra_mincps_send 26400 1320
hydra_mincps_send 28800 1440
hydra_mincps_send 31200 1600
hydra_mincps_send 33600 1700
#
mode_default 100666
mode_arcmail 100666
mode_netmail 100666
mode_request 100666
#modem_port /dev/ttyUSB0:57600
modem_reset_command ATE0M0|
modem_dial_prefix ATDT
modem_dial_suffix |
modem_hangup_command v~^~ATH0|
#modem_stat_command AT%S|
#modem_stat_command AT|
modem_stat_command AT&V1|
modem_dial_response "CONNECT" connect
modem_dial_response "BUSY" busy
modem_dial_response "NO CARRIER" nocarrier
modem_dial_response "NO DIAL" nodialTone
modem_dial_response "NO ANSWER" noanswer
modem_dial_response "VOICE" noanswer
modem_dial_response "ERROR" error
nodelist NODELIST.999 *:*/*.0
#nodelist 450_256.pnt 2:450/256.*
#nodelist easynet.ndl 20:26/*.0
#nodelist *:*/*.*
phone_translate 7-813-78
phone_translate 7- 8
#phone_translate 375- 8
system_name TestZoneB
location TestZone
sysop_name TestZoneB User
phone -Unpublished-
max_speed 9600
emsi_OH_time 00:00-24:00
emsi_FR_time 00:00-24:00
emsi_send_tz yes
emsi_send_time yes
recv_buffer_size 65536
wait_carrier_out 120
#freq_srif_command /usr/local/lib/u-srif/u-srif
freq_alias_list %TESTZONE%/etc/freq.aliases
freq_dir_list %TESTZONE%/etc/freq.dirs
freq_limit_number 10
freq_limit_size 6000000
freq_limit_time 1200
freq_ignore_masks \\* \\*.\\* \\*.zip \\*.rar \\*.exe \\*.mp3 \\*.avi \\*.mp4 \\*.tgz
#zmodem_skip_by_pos yes
zmodem_send_dummy_pkt no
#zmodem_start_block_size 512
#zmodem_tx_window 32768
skip_files_recv *.pif *.swp
#delay_files_recv !%arcmail !%netmail # We will refuse all except mail
#delay_files_send !%netmail # We will send only netmail
#delay_files_recv (2:450/102) !%netmail
#min_free_space 20000
#recode_file_out /usr/local/fido/etc/koi82alt.tbl
#recode_file_in /usr/local/fido/etc/alt2koi8.tbl
#run_after_handshake [logout]/bin/echo "Hello, world!"
#run_after_session [nowait,setsid]/usr/local/lib/ftp/run-in
#run_after_handshake [setsid,useshell,logout]/usr/bin/nlookup $REM_ADDR_FTN
#run_after_session [logout,useshell]/usr/bin/hpt toss && /usr/bin/hpt link && /usr/bin/htick toss
#run_after_handshake [setsid,useshell,logout]/usr/bin/nlookup $REM_ADDR_FTN
#filebox_directory /var/spool/fido/bt/fbox
#filebox /var/spool/ftn/fbox/adb 2:5020/2120.1 hold
#filebox /var/spool/ftn/fbox/pvc 2:5020/2091 normal
#flo_translate C:\\fido\\spool\\outbound /var/spool/ftn/out
#flo_translate \\ /
maxtries 200 Undialable # Be carefull.. =)
maxtries_noansw 5 Hold 7200 # Call two hours later
maxtries_noconn 40 Hold 10800 # Don't call 3 hours
maxtries_hshake 10 Hold 86400 # 1 day delay
maxtries_sessions 10 Hold 3600 # Don't annoy uplinks
maxtries_nodial 1 Hold 1200 # Call 20 min later
daemon_circle_modem 40
daemon_circle_rescan 60
daemon_circle_normal 80
daemon_circle_direct 40
daemon_circle_crash 20
daemon_circle_immed 10
daemon_maxclients_tcpip 2
daemon_maxclients_modem 1
daemon_pid_file %TESTZONE%/run/bforceB.pid
#syslog_facility 64
#nomail_flag /home/zx/fido/ftnroot/flags/nomail
#run_before_session /usr/local/bin/call_inet.sh
recieved_to_lower yes
# That's all!
-6
View File
@@ -1,6 +0,0 @@
#!/bin/bash
txt2pkt -nf "TestZone UserB" -xf "99:1/1" -xt "99:1/2" -t "Binkleyforce testzone" -o "fido.zxalexis.ru" -s "Test Message from TestNodeA to TestNodeB" -d ./msgAtoB ./testtextA.cp866
txt2pkt -nf "TestZone UserA" -xf "99:1/2" -xt "99:1/1" -t "Binkleyforce testzone" -o "fido.zxalexis.ru" -s "Test Message from TestNodeB to TestNodeA" -d ./msgBtoA ./testtextB.cp866
Binary file not shown.
Binary file not shown.
-50
View File
@@ -1,50 +0,0 @@
‚®â, ­ ¢¥ï«®:
‡¢¥§¤ë ®âà ¦ «¨áì ¢ ¥ñ £« § å.  ­ìè¥, ¥é¥ ¬¥áïæ ­ § ¤ ¨å ­¥ ¡ë«® ¢¨¤­® ¢ ç¥à⥠£®à®¤ . ‘¢¥â ä®­ à¥© ¨ ᬮ£ § £«ãè «¨ ¨å á« ¡®¥ ¬¥àæ ­¨¥. ‚ᥠ¨§¬¥­¨«®áì. ˆ ®¤­¨¬ ¨§ ­¥¬­®£¨å ¯«îᮢ á«®¦¨¢è¥©áï á¨âã æ¨¨ ¡ë«® ¬¥àæ ­¨¥ §¢¥§¤ ¢ ¥ñ £« § å, ¨ ¢®§¤ãå, ª ¦¥âáï áâ « ç¨é¥. “ ¢á¥å ã ­ á ª®£¤  â® ¡ë«  à ¡®â , ¨ ¡ë« ¤®¬. “ ­¥ª®â®àëå ¡ë«¨ ¤¥â¨. “ ‹¥­ë ¡ë«  ¤®çª . Ž­  à ¡®â «  ¡ à¬¥­è®©,   ¯® ¢¥ç¥à ¬ ¯®¤à ¡ â뢠«  ¢ "ª«ã¡¥ §­ ª®¬áâ¢". ®¯à®áâã £®¢®àï - ¡ë«  ¯à®áâ¨âã⪮©. ’¥¯¥àì ¥© 㦥 ­¥ ¯à¨å®¤¨âáï ¥§¤¨âì ¯® ­¥§­ ª®¬ë¬ ª«¨¥­â ¬, ª ¦¤ë© à § ¯¥à¥¤ ¤¢¥àìî ª¢ àâ¨àë ªà¥áâ¨âìáï, ¨ ¬®«¨âìáï, çâ® ¡ë ¢á¥ ¯à®è«® ª ª ­ ¤®. ⮠⮦¥ ¯«îá. ® ⥯¥àì ã ­¥ñ ­¥â ¤®çª¨. Ž­  ¯®â¥àï« áì ¢ ¯¥à¢ë¥ ¤­¨, ª ª ⮫쪮 ¢á¥ íâ® ­ ç¨­ «®áì.
‹¥­  ¡ë«  "­  ¢ë§®¢¥", ª®£¤  ¨á祧«® í«¥ªâà¨ç¥á⢮. ¨ªâ® ¥é¥ ­¥ §­ «, çâ® íâ® á¥à쥧­®. Œ®¡¨«ì­ ï á¢ï§ì ­¥ à ¡®â « , £®à®¤ ¯®£à㧨«áï ¢® âì¬ã §  ®ª­ ¬¨ ®¤­ ª®¬­ â­®© ª¢ àâ¨àë, ¢ ª®â®à®© ¢®§¡ã¦¤¥­­ë© ¬ã¦ç¨­  ª®­ç « ¢ ¯à¥§¥à¢ â¨¢,   ‹¥­  áç¨â «  á¥ªã­¤ë ¤® ®ç¥à¥¤­®£® ¢ë§®¢ . Ž­  ­¥ ¬®£«  ª ª ®¡ëç­® ¯à¨­ïâì ¤ãè, ¨ ¢ë§¢ âì â ªá¨, ¨ ¯®á«¥ ®á®§­ ­¨ï í⮣®, ¯à®áâ® ­ ç «  ®¤¥¢ âìáï. ¥«ì¥ ¯® ¯à¨¢ë窥 ¡ë«® á«®¦¥­® ®¤­®© ªã窮© à冷¬ á ªà®¢ âìî. Œã¦ç¨­ , ¨¬ï ª®â®à®£® ®­  ­¥ § å®â¥«  § ¯®¬¨­ âì ᪠§ « ¥© ᯠᨡ® ¨ ®âªàë« ¤¢¥àì, çâ® â® ¯à®¢®àç ¢ ­ ¯®á«¥¤®ª ­  "¤®«¡ ­­ëå í«¥ªâਪ®¢"...
‹¥­¥ ¡ë«® ®ç¥­ì ¯à¨ïâ­® ¢ë©â¨ ­  ᢥ¦¨© ¢®§¤ãå, ¯®á«¥ ¯à®¯ å襩 ¯¥à¥£ à®¬ ª®¬­ âã誨. Ž­  è«  ¯® ⥬­ë¬ 㫨栬 £®à®¤ , è«  ­  "¡ §ã" ¯¥èª®¬, ¨ íâ  ­¥¯à®£«ï¤­ ï â쬠 ¢®ªà㣠¤«ï ­¥ñ ᥩç á ¡ë«  ®âà ¦¥­¨¥¬ ¢­ãâ७­¥£® á®áâ®ï­¨ï, ¨ ¯®í⮬㠮­  ­ á« ¦¤ « áì í⮩ ¯à®£ã«ª®©. Ž­  ¥é¥ ­¥ §­ « , çâ® í«¥ªâà¨ç¥á⢮ ¨ ¢®¤®á­ ¡¦¥­¨¥ 㦥 ­¥ ¢®ááâ ­®¢ïâ. Ž­  ­¥ ¬®£«  ¯®¤ã¬ âì, çâ® ç¥à¥§ âਠç á  ¥ñ ¯ï⨫¥â­ïï ¤®çª , ¨á¯ã£ ¢è¨áì ⥬­®âë ¨ ®¤¨­®ç¥á⢠, ¢ë©¤¥â ¨§ ª¢ àâ¨àë, ¨ ¯à®¯ ¤¥â ­ ¢á¥£¤ . Ž­  ¥é¥ ­¥ §­ « , çâ® ¥ñ ¯®¨áª¨ ¡ã¤ãâ ¡¥á¯®«¥§­ë ¨ ®¯ á­ë... Ž­  ¯à®áâ® è«  ¯® 㫨æ¥.
‘¥©ç á ¬ë á⮨¬ ª®«ì殬, à¥è ¥¬ çâ® ¤¥« âì. „¬¨â਩ ˆ¢ ­®¢¨ç á«¥¢  ®â ¬¥­ï, ¤¯«¥¥ ‘ è®ª, ‹¥­  ¨ „¨¬ .   ᪠¬¥©ª¥ ­¥¤ «¥ª® ᨤïâ ‹¥à  ¨ Ž«ï. ‹¨æ  ¢® â쬥 ¥«¥ à §«¨ç¨¬ë. “ ¬ã¦ç¨­ - ¯®ªàëâë é¥â¨­®©, ã ¤¥¢ã襪 ®áã­ã«¨áì ¨ ãáâ «¨..
-   Š¨à®¢  ï á«ëè « ¢ëáâ५ë. ’㤠 ¨¤â¨ ¡¥á¯®«¥§­®. - „¬¨â਩ ˆ¢ ­®¢¨ç ¡ë« ® ­ ¯ã£ ­.
- „  ­¨ªâ® ⥡ï â㤠 ­¥ § áâ ¢«ï¥â ¨¤â¨! - ᪠§ « ‘ è®ª.
- „ , ­® ­ ¬ ­ã¦­® ¤®áâ âì ¥é¥ ¥¤ë. - ®â¢¥â¨« ï.
“«¨æë £®à®¤  ¡ë«¨ ¯ãáâë ⮫쪮 á ¢¨¤ã.   á ¬®¬ ¤¥«¥ - ¢ ç¥à­ëå £« §­¨æ å §¤ ­¨© î⨫¨áì ãæ¥«¥¢è¨¥. €£à¥áᨢ­ë¥, ®§«®¡«¥­­ë¥, £®â®¢ë¥ ­  ¢á¥. ‹î¤¨ ªã窮¢ «¨áì ¯® á«ãç ©­®¬ã ¯à¨§­ ªã. ’ ª ¨ ­ è  £à㯯  ®¡à §®¢ « áì á«ãç ©­®. ޤ­®¬ã ᥩç á ­¥ ¢ë¦¨âì. ® ¯à®¡«¥¬  ¢ ⮬, çâ® ¬ë ­¥ ¤®¢¥à﫨 ¤à㣨¬. Š ª ¢¯à®ç¥¬ ¨ ®­¨ ­ ¬. “ ­ á ¥é¥ ¡ë«  ¥¤ , ¥ñ 墠⨫® ¡ë ­  ­¥¤¥«î ¬ ªá¨¬ã¬.
- Šâ® ­¨¡ãâì á«¥¤¨« §  í⨬ ¤®¬®¬? - ï 㪠§ « ­  ¤®¬ 20, ª®à¯ãá 1 ¯® ‹¥­¨­£à ¤áª®© ­ ¡¥à¥¦­®©. â® ¡ë«  ¯ïâ¨íâ ¦ª , ¨ ®­  £®à¥« . ƒ®à¥«  㦥 ¤ ¢­®. ˆ§ ®¤­®£® ¯®¤ê¥§¤  ¯®áâ®ï­­® ¢ «¨« ¤ë¬. —¥à­ë©, £ãá⮩. ® ¢á¯®«®å®¢ ¯« ¬¥­¨ ­¥ ¡ë«® ¢¨¤­®.
- Ÿ á«¥¤¨« , ­¨ªâ® ­¥ ¢å®¤¨«. Š®¬ã ­ã¦¥­ íâ® £®àï饥 ¯¥ª«®? - ‹¥à  ¯®¤ «  £®«®á ᮠ᪠¬¥©ª¨.
- ®©¤¥¬ â㤠. - ‘ è®ª ­¥ á¯à è¨¢ «, ®­ ¯à®áâ® ª®­áâ â¨à®¢ « ä ªâ.
¨ªâ® ­¥ ᯮਫ. ‚ᥠ®ç¥­ì ãáâ «¨. ˆ ¨¤¥ï ®¡è à¨âì £®àï騩 ¤®¬ ¢á¥¬ ¯®ª § « áì ¯à ¢¨«ì­®©. Œë ¯¥à¥¤¥à­ã«¨ § â¢®àë, ¯à®¢¥à¨«¨ £à ­ âë, ¨ ¯®è«¨.
„¬¨â਩ ˆ¢ ­®¢¨ç ¡ë« ãç¨â¥«¥¬ ¢ â¥å­¨ªã¬¥. ‚ â®â ¤¥­ì ®­ ¯à¨è¥« ¤®¬®©,  ªªãà â­® à ááâ ¢¨« ¢á¥ ¯à®¤ãªâë ¢ 宫®¤¨«ì­¨ª, ª®â®àë¥ ¯à¨­¥á ¢ á㬪¥.  áá⥫¨« ᪠â¥àâì ­  á⮫¥. „®áâ « äã¦¥à ¨§ á⥭­®£® 誠ä . 冷¬ ¯®«®¦¨« ¡«î¤æ¥ á ­ à¥§ ­­ë¬ áë஬. ãâ뫪㠢¨­  "Œ¥à«®", ªà¥¯ª®¥ ¯®«ãá« ¤ª®¥. ‚›ª«î稫 ᢥâ. ‚ª«î稫 ⥫¥¢¨§®à.  «¨« ¯®«­ë© ä㦥à. Ž­ ¯à¨£®â®¢¨«áï ¯à®¢¥á⨠®ç¥à¥¤­®© ¯à¨ïâ­ë© ¢¥ç¥à ¢ ¯®«­®¬ ®¤¨­®ç¥á⢥.
—¥à¥§ ­¥¤¥«î ¯®á«¥ ⮣® ª ª á«ã稫 áì ª â áâà®ä  ®­ 㦥 «¥£ª® १ « «î¤¥© ­®¦®¬, ª®â®àë¬ ª®£¤  ⮠१ « áëà. Ž­ 㦥 «¥£ª® ¯¨« ¢®¤ªã, ¨ § ¡ë« ­ §¢ ­¨¥ «î¡¨¬®© ⥫¥¯¥à¥¤ ç¨. € ª®¬ ­¤  "‡¥­¨â", §  ª®â®àãî ®­ ª®£¤  â® ¡®«¥« - ¤«ï ­¥£® áâ «  祬 â® ¬¨ä¨ç¥áª¨¬, ¨§ ¤à㣮£® ¬¨à . ˆ â¥å «î¤¥©, ª®â®àë¬ ®­ áâ ¢¨« ª®£¤  â® ®æ¥­ª¨ ¢ ª« áá¥, ®­ 㡨¢ « ­¥ § ¤ã¬ë¢ ïáì. ˆ ¤ ¦¥ á ª ª¨¬ ⮠㤮¢®«ìá⢨¥¬ ¨ á ­¥ª®â®à®© ¤®«¥© á ¬®®â¤ ç¨ ¨ ᬥª «ª¨...
ˆ ª®­¥ç­® ¦¥ ¨à®­¨¨. ¥§ ­¥ñ ᥩç á ­¥ ¯à®¦¨âì. ‚ ¯®¤ê¥§¤¥ ¯ïâ¨íâ ¦ª¨ ­¥á«® á¬à ¤®¬. Œë ¡ëáâà® ®¤¥«¨ ¬ à«¥¢ë¥ ¯®¢ï§ª¨. ‘¯ã᪠¢­¨§, ¯®¤¢ «, ¯à¥¢à é¥­­ë© ¢ ᪫ ¤ ¯à®¤ãªâ®¢®£® ¬ £ §¨­ . â® ¨ ¥áâì ­ è  楫ì. „¨¬ , ¤¥à¦  ¯¨á⮫¥â ­ £®â®¢¥ ¢áâ « ®â ¤¢¥à¨ á«¥¢ . ‘ è®ª á¯à ¢ . ã   ¬­¥ ­ã¦­® ¡ë«® ¢§«®¬ âì ¦¥«¥§­ãî ¤¢¥àì. Š ¦¤ë© ¨§ ­ á ⥯¥àì áâ « ¢ í⮬ ᯥ樠«¨á⮬. Ÿ ­¥ áâ « ¯®¤¡¨à âì ª«îç. Ÿ à §à廊« ®¡®©¬ã ᢮¥£® "¬ ª à®¢ " ¢®ªà㣠§ ¬ª . „¬¨â਩ ˆ¢ ­®¢¨ç, ¨­â¥««¨£¥­â­® ¯à¨«®¦¨«áï ­®£®© ¯® ¤¢¥à¨ ¨ ¯¥à¢ë© ¢®à¢ «áï ¢ ¯®¬¥é¥­¨¥. ®ª  ï ¯¥à¥§ à裂« ®¡®©¬ã, ï 㦥 ãá«ëè « ¢ëáâ५ë. Œë ¤¥©á⢮¢ «¨ ¡ëáâà® ¨ ¡¥§¦ «®áâ­®. „¥¢ã誨 áâ®ï«¨ á­ à㦨. ˆ¬ ®â¤ «¨ áâ àë© ª « è­¨ª®¢, ­  ¢á直© á«ãç ©.
‹¥à  •®â¥«  ¯à®áâ® ¯®¤®£à¥âì ¢®¤ã, çâ® ¡ë ¢ë¯¨âì £®àï祣® ç î. ‚¯¥à¢ë¥, á¯ãáâï ¤¢  ¤­ï ª ª ®âª«î稫¨ í«¥ªâà¨ç¥á⢮, ®­  ®áâ®à®¦­® ¢ëè«  ­  㫨æã. ‚ ®ª­® ®­  ¢¨¤¥« , ª ª ¢® ¤¢®à¥ ¤®¬  «î¤¨ à §®¦£«¨ ª®áâ¥à. ë«  ®á¥­ì, ¯®£®¤  ­¥ à ¤®¢ «  ⥯«®¬, ¨ à ááç¨â뢠âì ¡ë«® ®á®¡® ­¥ ­  çâ®. …ñ áã¯à㣠¡ë« ¢ ª®¬ ­¤¨à®¢ª¥ ¢ ¨â¥à¥, ¨ ®­  ­¥ å®â¥«  ­¨ç¥£® ¡¥§ ­¥£® ¯à¥¤¯à¨­¨¬ âì, ¯®ª  ®­ ­¥ ¢¥à­¥âáï. ‘®á¥¤ª , ¯®¦¨« ï ¦¥­é¨­ , ¡ë«  ¥¤¨­á⢥­­ë¬ 祫®¢¥ª®¬, á ª¥¬ ®­  ®¡é « áì ¢ íâ® ¢à¥¬ï. Ž­  à á᪠§ «  ¥©, çâ® í«¥ªâà¨ç¥á⢮ ¯®ç¨­¨âì ¯®ª  ­¥ 㤠¥âáï. —â® ¯® ­¥¯®­ïâ­ë¬ ¯à¨ç¨­ ¬ ­¥ à ¡®â îâ ¤ ¦¥ £¥­¥à â®àë ¢  ¢â®¬®¡¨«ïå. ˆ çâ® ¢à®¤¥ ¡ë íâ® ¯à®¡«¥¬  ­¥ ⮫쪮 ¢ Œ®­ç¥£®à᪥, ­® ¨ ¢® ¢á¥© ¬ãଠ­áª®© ®¡« áâ¨.
‚ ¯¥à¢ë© ¤¥­ì, ¯® 㫨栬 室¨«¨ ¬¨«¨æ¥©áª¨¥ ¯ âà㫨, £à®¬ª® £®¢®à¨«¨ çâ® ¡ë ¢á¥ ᮡ«î¤ «¨ ᯮª®©á⢨¥. —â® ¯¨â ­¨¥ ¡ã¤¥â ᪮஠¢®ááâ ­®¢«¥­® ¨ ­¥â ¯à¨ç¨­ ¤«ï ¯ ­¨ª¨. “â஬ ¯à®è¥« ¥é¥ ®¤¨­ ¯ âàã«ì, ®­ ®£« á¨« ¨­ä®à¬ æ¨î ® ­¥áª®«ìª¨å ¯ã­ªâ å ᪮ன ¯®¬®é¨, à §¢¥à­ãâëå ¢ £®à®¤¥.   業âà «ì­®© ¯«®é ¤¨, ­  ã«¨æ¥ Š«¨¬¥­â쥢 , ‹¥­¨­£à ¤áª®© ­ ¡¥à¥¦­®©, Œ®­ç¥, ¨ ã«¨æ¥ à¥¤®¢ . ’ ¬ ¬®¦­® ¯®«ãç¨âì ¥¤ã ¨ ¢®¤ã. ¥ª®â®àë¥ «î¤¨ ¢á¥ â ª¨ ¯®¤¤ «¨áì ¯ ­¨ª¥. Žá®¡¥­­® â¥, ª®â®àë¥ å®¤¨«¨ á ¬ «®«¥â­¨¬¨ ¤¥â쬨. Ž­¨ âॡ®¢ «¨ ®â ¯ âàã«¥© ¯®«­®© ¨­ä®¬ æ¨¨ ¨ ¢¥«¨ á¥¡ï ®ç¥­ì ­¥á¯®ª®©­®. ‚á«¥¤á⢨¨ 祣® ­¥ª®â®àë¥ ¡ë«¨  à¥á⮢ ­ë ¨ ¯®¬¥é¥­ë ¯®¤  à¥áâ.
‹¥à  ¢ëè«  á ª áâàî«¥© ¢®¤ë ¢® ¤¢®à. ‘®á¥¤¨ ¡¥§ ¯à®¬¥¤«¥­¨ï 㪠§ «¨ ­  áâ àë¥ ª ç¥«¨, ¯®¤ ª®â®à묨 £®à¥« ®£®­ì, ¨ ¢¨á¥«® ¥é¥ ­¥áª®«ìª® ª®â¥«ª®¢. ‹¥à  ¯®¢¥á¨«  ᢮©.
‹¨æ  㠫© ¢®ªà㣠ª®áâà ,   ¨å ¡ë«® ®ª®«® 50-⨠祫®¢¥ª. 뫨 ­ ¯à殮­ë. ƒ« §  ã ¬­®£¨å ¢®§¡ã¦¤¥­­® £®à¥«¨. Šâ® â® ¤ ¦¥ èã⨫. ’¨è¨­ã ¨ ¬¥à­ë© £®¬®­ £®«®á®¢ ¨­®£¤  ¯à¥à뢠« £à®¬ª¨© ᬥå.
‹¥à  ¯®£®¢®à¨«  ­¥¬­®£® á á®á¥¤ï¬¨. ¨ªâ® ­¥ §­ «, çâ® á«ã稫®áì...
¥¯«®å®. Ž­¨ ¢á¥ ᯠ«¨. Ž¡®è«®áì ¡¥§ ®á«®¦­¥­¨©. ’®«ìª® ®¤¨­ ¨§ ­¨å ¯ëâ «áï ®¡®à®­ïâìáï. Œ «ì稪, «¥â 15-â¨, ­¥ ¡®«ìè¥... ¯®¤­ï«  ¢â®¬ â ­  „¨¬ã. €¢â®¬ â ¡ë« ­  ¯à¥¤®åà ­¨â¥«¥, ¨ ¯®ª  ¬ «ì稪 ¤¥« « ¯®¯ë⪨ ¯®­ïâì, ¯®ç¥¬ã ­¥ à ¡®â ¥â á¯ã᪮¢®© ªàî箪 - „¨¬  ¢ë­¥á ¥¬ã ¬®§£¨ ­  ¯à®â¨¢®¯®«®¦­ãî á⥭ªã. ë«® ¥é¥ ¯ïâì 祫®¢¥ª ¢ ¯®¤¢ «¥. ’ਠ¤¥¢ã誨 ¨ ¤¢®¥ ¬ã¦ç¨­. ‚á¥å § áâ५«¨«¨ ¡¥§ ®á®¡ëå ¯à®¡«¥¬. Œë ¯®§¢ «¨ ¤¥¢ã襪. ‹¥­  ¨ ‹¥à  ­ ç «¨ 㡨à âì âàã¯ë ¢ ®¤­ã ª®¬­ âã. Ž«ï ®áâ « áì 㠢室 , á ª « è®¬ ­ £®â®¢¥. ‚ᥠ®áâ «ì­ë¥ ®æ¥­¨¢ «¨ § ¯ áë ¯à®¢¨ ­â . Š®­á¥à¢ë. ‘ã娥 ¯ ª¥âë á « ¯è®©. Ÿé¨ª¨ á «¨¬®­ ¤®¬, ¬¨­¥à «ª . ’ãâ ¡ë«® ¯à¨£®¤­®© ¥¤ë ­  ¤¢  ¬¥áïæ , ¥á«¨ à ááç¨â뢠âì ­  è¥áâ¥àëå. ஡«¥¬  ¡ë«  ⮫쪮 ¢ ⮬, £¤¥ ¢á¥ íâ® á¯àïâ âì.
- «ïâì! - ‹¥à  ¯®¤áª®«ì§­ã« áì ¨ 㯠«  ­  âà㯠¬ «ì稪  á ¯à®áâ५¥­­®© ¡ èª®©.
- ’ ¬ ¬®§£¨ ­  ¯®«ã, âë ç¥ ­¥ ¢¨¤¥« ? - ‹¥­  ᬥ﫠áì...
- ’ë à ­ìè¥ ­¥ ¬®£«  ᪠§ âì? - ¨ ‹¥à  ⮦¥ à áᬥ﫠áì...
- ’ ª, ¯®¤à㣨 è ¡ è ¢¥á¥«ìî, ¡«ïâì, ¥á«¨ ¢ ¬ § ­ïâìáï ­¥ç¥¬ - ¯¨§¤ã©â¥ á, ï ¢ ¬ ᥩç á § £àã¦ã ï騪 ¬¨!!! - Ÿ ¡ë« ­¥ ¢ ­ áâ஥­¨¨ èãâ¨âì.
- ã ¨ á㪠 âë Œ ªá...
- „  ¯®è¥« ®­ ­  åã©! - ¯®¤¤¥à¦ «  ‹¥à ...
- ¥ ¯¨§¤¥âì! ‚ᥬ á ­ åã©!!!!
‹¥­  ᨤ¥«  ­   ¢â®¡ãá­®© ®áâ ­®¢ª¥ ­ ¯à®â¨¢ ¬®¥£® ¤®¬ . Ž­  â¨å® ¯« ª « , ®¡å¢ â¨¢ à㪠¬¨ £®«®¢ã. “¦¥ ­¥¤¥«î ï ­¨ç¥£® £®àï祣® ­¥ ¥«. ‡ ¯ áë ¯à®¤ãªâ®¢ ª®­ç¨«¨áì, 㫨æë ®¯ãá⥫¨. ˆ «¨èì ­¥¬­®£¨¥ ¯à®å®¦¨¥ è â «¨áì ¯® £®à®¤ã ª ª §®¬¡¨, á«®¢­® ­¨ç¥£® ¯¥à¥¤ ᮡ®© ­¥ ¢¨¤¥«¨. Ž­¨ 諨 ª à §¤ â®ç­ë¬ ¯ã­ªâ ¬. ® á«ãå ¬ - â ¬ 㦥 ­ ç «¨áì ¡¥á¯®à浪¨. ¥ª®â®àë¥ ¤®¬  £®à¥«¨.
Œ­¥ ­ ¤®¥«® 室¨âì, ¬­¥ ¡ë«® ®¤¨­®ª®. Ÿ ᥫ à冷¬ á ­¥©.
- Š ª ¤¥« ?
- Ÿ ­¥ ¬®£ã ­ ©â¨ á¢®î ¤®çì. - ‹¥­  £®¢®à¨«  ¢ ¯ãáâ®âã ¯¥à¥¤ ᮡ®©.
- Š ª ¥ñ §®¢ãâ? - ï ¯®¯ëâ «áï § ¯®«­¨âì íâã ¯ãáâ®âã.
- „ è .
- —â® âë ᮡ¨à ¥èìáï ¤¥« âì?
- Ÿ å®çã ã©â¨ ¢á«¥¤ §  ­¥©.. - ¥ñ á«®¢  ¯à¥à뢠«¨áì áâ®­ ¬¨ ¨ ¯« ç¥¬.
- ®è«¨ §  ¬­®©.
Œë ­¥¯«®å® ¯®¦¨¢¨«¨áì. ‚áî ¯à¨£®¤­ãî ¥¤ã 㭥᫨ á ᮡ®©. ¥áª®«ìª®  ¢â®¬ â®¢ ¨ ¡®¥¯à¨¯ á®¢. “¤ ç . Žâªã¤  ¢ £®à®¤¥ ®ª § «®áì á⮫쪮 ®à㦨ï? ®ç¥¬ã ⥯¥àì ¬ë ¡®¨¬áï ᮫­¥ç­®£® ᢥâ ? •®«¥à  ª®á¨â «î¤¥© ¨ ¦¨¢®â­ëå.   㫨æ å, ¢® ¤¢®à å ¢¨¤­ë âàã¯ë «î¤¥©, ¤¥â¥©... Ž­¨ ¯®ªãá ­ë ᮡ ª ¬¨. Ž­¨ à á¯à®áâà ­ïîâ ­¥¢ë­®á¨¬ãî ¢®­ì. ‹î¤¨ 㬨à îâ ¢­¥§ ¯­®. Žâ ¡®«¥§­¥©. ®â ¯ã«¨, ¢ë¯ã饭­®© ¢ ᯨ­ã. Žâ ­®¦ , ª®â®àë© ª®£¤  ⮠१ « áëà,   ⥯¥àì ०¥â 祫®¢¥ç¥áªãî ¯«®âì. ƒ®á¯®¤ì § ¤ã¬ « £«®¡ «ì­ãî ç¨áâªã. â® ­¥  à¬ £¥¤¤®­. ‚릨¢è¨¥ ¨ ãá⠢訥. ‹î¤¨, ¯®å®¦¨¥ ¡®«ìè¥ ­  §¢¥à¥©. —¥«®¢¥ç¥á⢮ ¢ í⮬ £®à®¤¥ ¯¥à¥áâ «® áãé¥á⢮¢ âì. ‚ë¡à âìáï ¨§ ­¥£® ­¥à¥ «­® - â¥, ªâ® ¯ëâ «áï § ¬¥à§«¨ ¢ ¤®à®£¥. ˆ«¨ ¡ë«¨ 㡨âë. …¤¨­á⢥­­ë© ¢ë室 - 㡨¢ âì, £à ¡¨âì, ¢ë¦¨¢ âì. „¥à¦ âìáï £à㯯 ¬¨. „®¢¥àïâì «î¤ï¬, ª®â®àë¥ à冷¬, ­® ⮫쪮 ª®£¤  âë ®á®§­ ¥èì, çâ® ®­¨ ­ã¦¤ îâáï ¢ ⥡¥. ’®â, ªâ® ­¥ ­ã¦¥­ - ¡ã¤¥â 㡨â. ¥¤¥«î ­ § ¤, ­ è ⮢ à¨éì, ¬®© ¤à㣠¤¥âá⢠, ‚®¢ ... ®­ § ¡®«¥« 宫¥à®©. Š ª ⮫쪮 ¬ë íâ® ¯®­ï«¨ - ¬ë á¢ï§ «¨ ¥ã à㪨 ¨ ­®£¨, ®â­¥á«¨ ­  ®¡®ç¨­ã, ¨ ï ¯ãá⨫ ¥¬ã ¯ã«î ¢ «®¡.
Ž­  ¢á¯®¬¨­ «  ¤­¨, ª®£¤  §¢¥§¤ ­¥ ¡ë«® ¢¨¤­®. € §¢¥§¤ë ®âà ¦ «¨áì ¢ ¥ñ £« § å. Œë ¢á¥ ¡ë«¨ ¤à㣨¬¨. ’¥¯¥àì ï ¢¨¦ã çâ® ®­  áç á⫨¢ . Ž­  ¯®â¥àï«  ॡ¥­ª . Ž­  㡨¢ « , ¡ë«  ᢨ¤¥â¥«¥¬ ⮣®, ª ª 㡨¢ «¨ ¥ñ ¤àã§¥©. Ž­  ᬨਫ áì á ⥬, ç⮠㦥 ­¨ª®£¤  ­¥ ¡ã¤¥â ¢ ¥ñ ¦¨§­¨ ⥯«®£® ¤ãè , ª®ä¥, £®àï祩 ¬ ¬¨­®© ¯®å«¥¡ª¨. ‹¥­ . ˆ ï å®çã à §¤¥«¨âì ⢮¥ áç áâì¥. ’ë ¯®§¢®«ï¥èì ¬­¥ â¥¡ï ®¡­ïâì. ’ë 㦥 ­¥ ¤ã¬ ¥èì ® ¦¥á⮪®á⨠¦¨§­¨, § áâ ¢¨¢è¥© ¨¤â¨ â¥¡ï ­  ¯ ­¥«ì. ’ë ¤®¢®«ì­ . ’¢®ï ¬¥áâì ᢥà訫 áì. ’®à¦¥á⢮ ¡ëâ¨ï á⮨«® ¯®â¥à¨ ¤¥¢®çª¨, ª®â®àãî âë «î¡¨« . ’¥¯¥àì ¬ë á« ¢¨¬ ¡®£  §  â®, çâ® ®­ ¤ « ­ ¬ íâ®â ¬®¬¥­â áç áâìï. ’¥¯¥àì ¬ë ¢¥à¨¬ ¢ ­¥£®. ’¥¯¥àì ¬ë ­¥ áãé¥áâ¢ã¥¬. Œë ¦¨¢¥¬. Œë ¢á¥ ¯®â¥à﫨 ¤¥¢á⢥­­®áâì. Œë ¯®«ã稫¨ ®¯ëâ.  á ¨§­®á¨«®¢ « £®á¯®¤ì ¡®£! ® ¯®ç¥¬ã ¦¥ ¬ë ᥩç á â ª áç á⫨¢ë????
-184
View File
@@ -1,184 +0,0 @@
— ª €‹€ˆŠ
Šˆ˜Šˆ
‚¤®å­¨â¥.
 ¡¥à¨â¥ ª ª ¬®¦­® ¡®«ìè¥ ¢®§¤ãå .
â  ¨áâ®à¨ï § ­¨¬ ¥â ஢­® á⮫쪮 ¢à¥¬¥­¨, ­ áª®«ìª® ¢ë ¬®¦¥â¥ § ¤¥à¦ âì ¤ëå ­¨¥, ¨ ¥é¥ çãâì-çãâì. ’ ª çâ® á«ã蠩⥠ª ª ¬®¦­® ᪮॥.
ޤ¨­ ¬®© ¤àã£, ª®£¤  ¥¬ã ¡ë«® 13 «¥â, ãá«ëè « ® ¯¥££¨­£¥ . ¥££¨­£ íâ® ¯ à­ï âà å îâ ¢ § ¤­¨æã ¨áªãá⢥­­ë¬ ç«¥­®¬. ® á«ãå ¬, ¥á«¨ á⨬㫨஢ âì ¯à®áâ âã ¤®áâ â®ç­® ᨫ쭮, ¬®¦­® ¤®¡¨âìáï ¬­®¦¥á⢠ ïàª¨å ®à£ §¬®¢ ¡¥§ ¯®¬®é¨ àãª. ‚ ¢®§à á⥠13 «¥â íâ®â ¤à㣠¡ë« ¬ «¥­ìª¨¬ ᥪáã «ì­ë¬ ¬ ­ì类¬. Ž­ ¢¥ç­® ­®¢ë¥ ¯ã⨠¯®«ã祭¨ï ®ç¥à¥¤­®£® ®à£ §¬ . Ž­ ¨¤¥â ¢ á㯥ଠથâ, çâ®¡ë ªã¯¨âì ¬®àª®¢ì ¨ ¢ §¥«¨­. —â®¡ë ¯à®¢¥á⨠­¥¡®«ì讥 ­¥§ ¢¨á¨¬®¥ à áá«¥¤®¢ ­¨¥. ’®£¤  ®­ ¢¤à㣠¯à¥¤áâ ¢«ï¥â ᥡ¥, ª ª ¢á¥ íâ® ¡ã¤¥â ¢ë£«ï¤¥âì ã ª ááë ¢ á㯥ଠથâ¥, ®¤¨­®ª ï ¬®àª®¢ì ¨ ¡ ­®çª  ¢ §¥«¨­  ­  ¯®¤¢¨¦­®© «¥­â¥ ª ááë. ˆ ¢á¥ ᬮâàïâ. ‚ᥠ¯®­¨¬ îâ, çâ® ¯ à¥­ì à¥è¨« ¯®¤ à¨âì ᥡ¥ § ¬¥ç â¥«ì­ë© ¢¥ç¥à.
ˆâ ª, ¬®© ¤à㣠¯®ªã¯ ¥â ¬®«®ª® ¨ ï©æ  ¨ á å à ¨ ¬®àª®¢ì, ¢á¥ ¨­£à¥¤¨¥­âë ¤«ï ¬®àª®¢­®£® ¯¨à®£ . ˆ ¢ §¥«¨­.
Š ª ¡ã¤â® ¤®¬  ®­ ᮡࠫáï § áã­ãâì ᥡ¥ ¢ § ¤­¨æã ¬®àª®¢­ë© ¯¨à®£.
„®¬  ®­ ¢ë१ ¥â £àã¡®¢ âë© ¬®àª®¢­ë© ç«¥­. Ž­ ®¡¬ §ë¢ ¥â ¥£® ¢ §¥«¨­®¬ ¨ ãá¥à¤­® § á®¢ë¢ ¥â ¥£® ᥡ¥ ¢ § ¤­¨æã. ¨ç¥£® ­¥ ¯à®¨á室¨â. ¨ª ª®£® ®à£ §¬ . ¨ç¥£® ­¥ ¯à®¨á室¨â ªà®¬¥ ⮣®, çâ® § ¤­¨æ  ¡®«¨â.
’ãâ ¥£® ¬ âì §®¢¥â ¥£® 㦨­ âì. ˆ¤¨ á, ¯®à  ¥áâì, £®¢®à¨â ®­ .
Ž­ ¢ëâ áª¨¢ ¥â ¬®àª®¢ì ¨§ § ¤­¨æë ¨ ¯àïç¥â ᪮«ì§ªãî, £àï§­ãî ¬®àª®¢ì ¯®¤ ªà®¢ âìî á।¨ £àï§­®£® ¡¥«ìï.
®ã¦¨­ ¢, ®­ ¨¤¥â §  ¬®àª®¢ìî, ­® ¥¥ â ¬ ­¥â. ®ª  ®­ 㦨­ «, ¬ âì § ¡à «  ¥£® £àï§­®¥ ¡¥«ì¥, çâ®¡ë ¯®áâ¨à âì. Ž­  ­¥ ¬®£«  ­¥ § ¬¥â¨âì ¬®àª®¢ì, âé â¥«ì­® ®áâà㣠­­ãî ªãå®­­ë¬ ­®¦®¬, ¡¥«áâïéãî ®â ᬠ§ª¨, ¢®­îçãî.
‘«¥¤ãî騥 ¬¥áïæë íâ®â ¬®© ¤à㣠¦¨¢¥â ª ª ¯®¤ ç¥à­®© âã祩. Ž­ ®¦¨¤ ¥â ¢ëïá­¥­¨ï ®â­®è¥­¨©. ® í⮣® ­¥ ¯à®¨á室¨â. ¨ª®£¤ . „ ¦¥ ª®£¤  ®­ ¢ëà®á, íâ  ¬®àª®¢ì ­¥§à¨¬® ­ ¢¨á «  ­ ¤ ª ¦¤ë¬ ஦¤¥­á⢥­áª¨¬ 㦨­®¬, ­ ¤ ª ¦¤ë¬ ᥬ¥©­ë¬ ¯à §¤­¨ª®¬. Š ¦¤ ï ¯ áå , ª®£¤  ¥£® ᮡá⢥­­ë¥ ¤¥â¨, ¢­ãª¨ ¥£® த¨â¥«¥©, ¨éãâ á¯àïâ ­­ë¥ ¯ áå «ì­ë¥ ï©æ , íâ  ¬®àª®¢ì ­ ¢¨á ¥â ­¤ ­¨¬¨ ¢á¥¬¨.
‘«¨èª®¬ ®â¢à â¨â¥«ì­®, çâ®¡ë ¨¬¥âì ­ §¢ ­¨¥.
“ äà ­æã§®¢ ¥áâì ¢ëà ¦¥­¨¥: íä䥪⠫¥áâ­¨æë . ®-äà ­æã§áª¨ Esprit d Escalier, íá¯à¨ ¤ í᪠«ì¥. Ž­® ®â­®á¨âáï ª ¬®¬¥­âã, ª®£¤  âë ­ å®¤¨èì ¯à ¢¨«ì­ë© ®â¢¥â, ­® 㦥 ¯®§¤­®.  ¯à¨¬¥à, ­  ¢¥ç¥à¨­ª¥ â¥¡ï ªâ®-â® ®áª®à¡«ï¥â. ’ë ¤®«¦¥­ ª ª-â® ®â¢¥â¨âì. Š®£¤  ­  â¥¡ï ¢á¥ á¬®âà¨â, ª®£¤  ­  ⥡ï íâ® ¤ ¢¨â, âë £®¢®à¨èì çâ®-â® ­¥ã¡¥¤¨â¥«ì­®¥. ® ¢¥¤ì ¯®â®¬ âë ã室¨èì á ¢¥ç¥à¨­ª¨.
ˆ ¨¬¥­­® ¢ â®â ¬®¬¥­â, ª®£¤  ­ ç¨­ ¥èì á¯ã᪠âìáï ¯® «¥áâ­¨æ¥ ¢¤à㣠®, ç㤮. ’¥¡¥ ¯à¨å®¤¨â ¢ £®«®¢ã ¨¤¥ «ì­ë© ®â¢¥â. ˆ íâ® ®ª®­ç â¥«ì­®¥ ã­¨¦¥­¨¥.
‚®â çâ® â ª®¥ íä䥪⠫¥áâ­¨æë
஡«¥¬  ¢ ⮬, çâ® ¤ ¦¥ ã äà ­æã§®¢ ­¥â ­ §¢ ­¨© ¤«ï ­¥ª®â®àëå £«ã¯®á⥩, ª®â®àë¥ ¬ë ¤¥« ¥¬ ¯®¤ ¢«¨ï­¨¥¬ ¬®¬¥­â . ‚ᥠí⨠­ è¨ £«ã¯ë¥, ®âç ï­­ë¥ ¤¥©áâ¢¨ï ¨ ¯®áâ㯪¨.
¥ª®â®àë¥ ¯®áâ㯪¨ ᫨誮¬ ­¨§ª¨, çâ®¡ë ¨¬¥âì ­ §¢ ­¨¥. ‘«¨¦ª®¬ ­¨§ª¨, çâ®¡ë ¨å ®¡á㦤 âì.
‘¥©ç á ¬­®£¨¥ ¤¥â᪨¥ ¯á¨å®«®£¨ ¨ ¯¥¤ £®£¨ £®¢®àïâ, ¡®«ìè ï ç áâì ¯®¤à®á⪮¢ëå á ¬®ã¡¨©á⢠¯à®¨á室¨â ¢ १ã«ìâ â¥ ®­ ­¨§¬ , ª®£¤  ¯®¤à®á⮪ ¯à¨¤ã訢 ¥â á¥¡ï ¤«ï ®áâà®âë ®éã饭¨©. à¨å®¤ïâ த¨â¥«¨ ¨ ­ å®¤ïâ ॡ¥­ª  ¢ á⥭­®¬ èª ä¥ ¢ ᢮¥© ᯠ«ì­¥ á ¯®«®â¥­æ¥¬, ¯à¨¢ï§ ­­ë¬ ª ¯¥à¥ª« ¤¨­¥ ¤«ï ¢¥è «®ª. Œ¥à⢮£®. ‘ ¬¥à⢮© ᯥମ© ¯®¢áî¤ã. Š®­¥ç­®, த¨â¥«¨ ¯à¨¡¨à îâáï.  ¤¥¢ îâ ­  âà㯠èâ ­ë. ‘â à îâáï ᤥ« âì â ª, ç⮡ë íâ® ¢ë£«ï¤¥«® «ãçè¥. ‘â à îâáï, ¯® ªà ©­¥© ¬¥à¥. Ž¡ëç­®¥ ­¥áç áâ­®¥ ¯®¤à®á⪮¢®¥ á ¬®ã¡¨©á⢮.
„à㣮© ¬®© 誮«ì­ë© ¤àã£, ã ­¥£® ¡à â á«ã¦¨« ¢ ¢®¥­­®¬ ä«®â¥, íâ®â ¡à â à á᪠§ «, çâ® ¯ à­¨ ­  «¨¦­¥¬ ‚®á⮪¥ § ­¨¬ îâáï ®­ ­¨§¬®¬ ᮢᥬ ­¥ â ª, ª ª ¬ë. à â á«ã¦¨« ¢ ª ª®©-â® ¢¥à¡«î¦ì¥© áâà ­¥, £¤¥ ­  àë­ª å ¯à®¤ ¢ «®áì ­¥çâ®, ¯®å®¦¥¥ ­  ¯à¨ç㤫¨¢ë© ­®¦ ¤«ï ®âªà뢠­¨ï ¯¨á¥¬. ’®­ª¨© áâ¥à¦¥­ì ¨§ ¡à®­§ë ¨«¨ á¥à¥¡à , ¤«¨­®© ¯à¨¬¥à­® á « ¤®­ì á è à¨ª®¬ ­  ª®­æ¥ ¨ ªà á¨¢®© १­®© à㪮ï⪮©, ª ª ã ª¨­¦ « . â®â ¡à â-¬®àïª à á᪠§ «, ª ª ¯®á«¥ ⮣®, ª ª ç«¥­ ¢áâ ­¥â,  à ¡ë ¢â몠îâ íâ®â áâ¥à¦¥­ì ᥡ¥ ¢ ç«¥­ ­  ¢áî ¤«¨­ã. ®â®¬ ®­¨ ¤à®ç â, ¯®ª  áâ¥à¦¥­ì ¢­ãâà¨, ¨ ®â í⮣® «¤ãçè¥ ª®­ç îâ. ‘¨«ì­¥¥.
€ ¥é¥ íâ®â ¡à â ¥§¤¨â ¯® ¢á¥¬ã ¬¨àã, ¨ ¯à¨áë« ¥â äà ­æã§áª¨¥ äà §ë. ãá᪨¥ äà §ë. ®«¥§­ë¥ ¯®¤áª §ª¨.
®á«¥ í⮣® ¢ ®¤¨­ ¯à¥ªà á­ë© ¤¥­ì ¬®© ¤à㣠­¥ ¯à¨å®¤¨â ¢ 誮«ã. ‚¥ç¥à®¬ ®­ §¢®­¨â ¨ ¯à®á¨â ¬¥­ï ¯®«ãç âì ¥£® ¤®¬ è­¨¨ à ¡®âë, ¯ àã ­¥¤¥«ì. ®â®¬ã çâ® ®­ ¢ ¡®«ì­¨æ¥.
Ž­ ¢ ®¤­®© ª®¬­ â¥ á® áâ à¨ª ¬¨, ª®â®àë¬ à¥¦ãâ ª¨èª¨. Ž­ à á᪠§ë¢ ¥â, çâ® ¢ ¯ « â¥ ⮫쪮 ®¤¨­ ⥫¥¢¨§®à. —â® ¥£® «¨ç­®¥ ¯à®áâà ­á⢮ ®£®à®¦¥­® ¢á¥£® «¨èì § ­ ¢¥áª®©. —⮠த¨â¥«¨ ª ­¥¬ã ­¥ ¯à¨å®¤ïâ. ® ⥫¥ä®­ã ®­ à á᪠§ë¢ ¥â, ç⮠த¨â¥«¨ £®â®¢ë 㡨âì áâ à襣® ¡à â , ª®â®àë© á«ã¦¨â ¢ ¢®¥­­®¬ ä«®â¥.
® ⥫¥ä®­ã íâ®â ¯ æ ­ ¬­¥ à á᪠§ë¢ ¥â, çâ® ­ ª ­ã­¥ ®­ «¨èì ­¥¬­®£® ¢ë¯¨«. —â® ¢ «ï«áï ­  ªà®¢ â¨ ¢ ᢮¥© ª®¬­ â¥. —â® ®­ § ¦¥£ ᢥçªã ¨ «¥­¨¢® ¯à®á¬ âਢ « áâ àë¥ ¯®à­®¦ãà­ «ë, ᮡ¨à ïáì ¯®¤à®ç¨âì. â® ¯®á«¥ ⮣®, ª ª ®­ ¯à®ç¨â « ¯¨á쬮 ¡à â . ‘ ⥬ ¯®«¥§­ë¬ á¯®á®¡ë¬ ¯à¨¥¬®¬ ®­ ­¨§¬ .  æ ­ ®£«ï¤ë¢ ¥âáï ¢ ¯®¨áª å 祣®-­¨¡ã¤ì, çâ® ¬®¦­® ¨á¯®«ì§®¢ âì ¤«ï í⮩ 楫¨. ˜ à¨ª®¢ ï àã窠 ᫨誮¬ ⮫áâ ï. Š à ­¤ è ⮦¥ ᫨誮¬ ⮫áâë© ª ⮬㠦¥ £àã¡ë©.   ᢥ窥 ¯®â¥ª ¢®áª  â®­ª¨©, £« ¤¨© áâ¥à¦¥­ì ¨§ ¢®áª , ª®â®àë© ¢¯®«­¥ ¬®£ ¡ë ¯®¤®©â¨.  æ ­ ­®£â¥¬ ®âª®¢ëਢ ¥â ¤«¨­­ë© â®­ª¨© á⮫¡¨ª ¢®áª ¨ âà¥â ¬¥¦¤ã « ¤®­ï¬¨. „«¨­­ë© ¨ â®­ª¨© ¨ £« ¤ª¨©.
ìï­ë© ¨ ¢®§¡ã¦¤¥­­ë©, ®­ ¢áâ ¢«ï¥â ¢®áª®¢ë© áâ¥à¦¥­ì ᥡ¥ ¢ ¯¥à¥æ, ¢á¥ £«ã¡¦¥ ¨ £«ã¡¦¥ ¢ ª ­ «. — áâì áâ¥à¦­ï ®áâ ¥âáï â®àç âì á­ à㦨, ¨ ®­ ­ ç¨­ ¥â.
„ ¦¥ ᥩç á ®­ £®¢®à¨â, çâ®  à ¡ë ç¥à⮢᪨ ã¬­ë¥ à¥¡ïâ . Ž­¨ ¯à¨¤ã¬ «¨ ᮢᥬ ¤à㣮© ®­ ­¨§¬.  à¥­ì «¥¦¨â ­  ᯨ­¥, ¨ ¢á¥ ¯®«ãç ¥âáï â ª ªàãâ®, çâ® ®­ § ¡ë¢ ¥â ¯à® ¢®áª. …¬ã ®áâ ¥âáï ¤¥à­ãâì ¢á¥£® ®¤¨­ à §, çâ®¡ë ª®­ç¨âì, ª®£¤  ®ª §ë¢ ¥âáï, çâ® ¢®áª ¡®«ìè¥ ­¥ â®àç¨â ­ àã¦ã.
â®â â®­ª¨© ¢®áª®¢ë© á¥à¦¥­ì, ®­ ¯à®¢ «¨«áï ¢­ãâàì. ‘®¢á¥¬ ¢­ãâàì, ¤® ª®­æ . ’ ª £«ã¡®ª®, çâ® ®­ ­¥ ¬®¦¥â ¥£® ­ é㯠âì ¤ ¦¥ ¢ á ¬®¬ ­ ç «¥ ª ­ « .
ˆ§ ªãå­¨ ¬ âì §®¢¥â ¥£® 㦨­ âì. ˆ¤¨ á, ᥩç á ¦¥ £®¢®à¨â ®­ . â®â ¯ à¥­ì á ¢®áª®¬ ¨ ¯ à¥­ì á ¬®àª®¢ìî ᮢᥬ ­¥ ¯®å®¦¨ ¤à㣠­  ¤à㣠, ­® ¬ë ¢á¥ ¦¨¢¥¬ ¯à¨¬¥à­® ®¤¨­ ª®¢®.
ˆ ¯®á«¥ 㦨­  ã ¯ à­ï ­ ç¨­ ¥â ¡®«¥âì ¦¨¢®â. â® ¢®áª, ¨ ®­ à¥è ¥â, çâ® ¢®áª ¢á¥ à ¢­® à á⠥⠨ ¢ë©¤¥â ¢¬¥áâ¥ á ¬®ç®©. ’¥¯¥àì ã ­¥£® ¡®«¨â ¥é¥ ¨ ᯨ­ . ®«ïâ ¯®çª¨. Ž­ ­¥ ¬®¦¥â à á¯àﬨâìáï.
‚ᥠíâ® ®­ à á᪠§ë¢ ¥â ¯® ⥫¥ä®­ã á ¡®«ì­¨ç­®© ª®©ª¨, ¢¤ «¥ª¥ á«ëè¨âáï §¢ãª £®­£  ¨ ॢ ⮫¯ë. ‘¯®à⨢­ë© ¬ âç.
¥­â£¥­ ¯®ª §ë¢ ¥â ¯à ¢¤ã, çâ®-â® â®­ª®¥ ¨ ¤«¨­­®¥, ᮣ­ã⮥ ¢¤¢®¥ ¢ ¥£® ¬®ç¥¢®¬ ¯ã§ëà¥. â  ¤«¨­­ ï, â®­ª ï ¡ãª¢  V ᮡ¨à ¥â ­  ᥡ¥ ¢á¥ ¬¨­¥à «ë ¨§ ¥£® ¬®ç¨. Ž­  áâ ­®¢¨âáï â®«é¥ ¨ £àã¡¥¥, ¯®ªà뢠¥âáï ªà¨áâ «« ¬¨ ª «ìæ¨ï, ¡®«â ¥âáï â㤠-á, æ à ¯ ï ­¥¦­ãî ®¡®«®çªã ¬®ç¥¢®£® ¯ã§ëàï, ­¥ ¤ ¢ ï ¬®ç¥ ¢ë©â¨ ­ àã¦ã. …£® ¯®çª¨ ¯¥à¥£à㦥­ë. ’® ­¥¬­®£®¥, çâ® ¢ë⥪ ¥â ¨§ ¥£® ç«¥­  ªà á­®¥ ®â ªà®¢¨.
‘⮨⠯ à¥­ì ï ¥£® ᥬìï, ¨ ᬮâàïâ ­  ç¥à­®-¡¥«ë© á­¨¬®ª, à冷¬ ¤®ªâ®à ¨ ¬¥¤á¥áâàë, ¨ ¡ãª¢  V á¨ï¥â ¡¥«ë¬ ᢥ⮬ ã ¢á¥å ­  ¢¨¤ã, ¨ ¥¬ã ¯à¨å®¤¨âáï ᪠§ âì ¯à ¢¤ã. Ž â®¬, ª ª ª®­ç îâ  à ¡ë. Ž ç¥¬ ¥¬ã ­ ¯¨á « áâ à訩 ¡à â, ª®â®àë© á«ã¦¨â ­  ¢®¥­­®¬ ä«®â¥.
àאַ ᥩç á, ¯® ⥫¥ä®­ã, ®­ ­ ç¨­ ¥â ¯« ª âì.
®¤¨â¥«¨ § ¯« â¨«¨ §  ®¯¥à æ¨î ¤¥­ì£ ¬¨, ®â«®¦¥­­ë¬¨ ­  ¥£® ®¡à §®¢ ­¨¥ ¢ ª®««¥¤¦¥. ޤ­  £«ã¯®áâì, ¨ ®­ 㦥 ­¨ª®£¤  ­¥ áâ ­¥â îà¨á⮬.
‚¥é¨ ¢­ãâਠ⥡ï. ’ë ¢­ãâਠ¢¥é¥©. ‘¢¥çª  ¢ ç«¥­¥ ¨«¨ â¢®ï £®«®¢  ¢ ¯¥â«¥ ¬ë §­ «¨, çâ® ¢¥à­ë© ᯮᮡ ­ ¦¨âì ᥡ¥ £¥¬®àë.
Œ®¨ £¥¬®àë ­ ç «¨áì ¨§-§  ¦¥¬ç㦭®£® ­ëàï­¨ï , ª ª ï íâ® ­ §ë¢ « ï ¤à®ç¨« ¯®¤ ¢®¤®©, ­  ®¤­®¬ ¤ëå ­¨¨, á¨¤ï ­  ¤­¥ த¨â¥«ì᪮£® ¡ áᥩ­  ¢ á ¬®© £«ã¡®ª®© ¥£® ç áâ¨. ‚¤®å­ã¢ ¢®§¤ãå , ï ¡ëáâà® ­ëàï« ¨ áâ¢ « á ¥¡ï ¯« ¢ª¨. Ž¡ëç­® ï ᨤ¥« ­  ¤­¥ ¢ â¥ç¥­¨¥ ¤¢ãå, âà¥å, ç¥âëà¥å ¬¨­ãâ.
’®«ìª® ¨§-§  ᢮¥£® ®­ ­¨§¬  ï 㤨¢¨â¥«ì­ë¬ ®¡à §®¬ à §¢¨« ᯮᮡ­®á⨠᢮¨å «¥£ª¨å. …᫨ ï ®áâ ¢ «áï ®¤¨­, ª®£¤  ¢¥áì ¤®¬ ®áâ ¢ «áï ¢ ¬®¥¬ à á¯®à殮­¨¨, ï ®¡ëç­® § ­¨¬ «áï í⨬ ¢¥áì ¤¥­ì. ˆ ¯®á«¥ ⮣®, ª ª ï ¢ëª ç¨¢ « ¨§ ᥡï íâã èâãªã, ᯥà¬ã ®­  ¡®«â « áì ¢ ¢®¤¥ ¡®«ì訬¨ ¦¨à­ë¬¨, ¬®«®ç­®-¡¥«ë¬¨ ª®¬ª ¬¨.
®á«¥ í⮣® á­®¢  ¡ë«® ­ëàï­¨¥, ç⮡ë ᮡà âì í⨠ª®¬ª¨ ¨ ¢ëâ¥à¥âì ¨å ® ¯®«®â¥­æ¥. ®í⮬ã ï ¨ ­ §ë¢ « íâ® ¦¥¬çã¦­ë¬ ­ëàï­¨¥¬. „ ¦¥ å®âï ¢®¤  ¡ë«  å«®à¨à®¢ ­­ ï, ï ­¥ ¬®£ ­¥ ¡¥á¯®ª®¨âìáï ® á¥áâà¥. ˆ«¨, 㯠ᨠ¡®¦¥, ® ¬ ¬¥.
â® ¡ë« ¬®© á ¬ë© ¡®«ì让 ¢ ¦¨§­¨ áâà å: ¬®ï á¥áâà -¤¥¢âᢥ­­¨æ  ¤ã¬ ¥â çâ® ®­  ¯à®á⮠⮫á⥥â,   ¯®â®¬ ஦ ¥â ¤¢ã壮«®¢®£® ॡ¥­ª -®«¨£®ä७ . ˆ ®¡¥ £®«®¢ë ¢ë«¨âë© ï. Ÿ, ®â¥æ ¨ ®¤­®¢à¥¬¥­­® ¤ï¤ï.
® ®¡ëç­® á ⮡© á«ãç ¥âáï ᮢᥬ ­¥ â®, ® 祬 âë ¡¥á¯®ª®¨èìáï.
‹ãç訬 ¬®¬¥­â®¬ ¦¥¬ç㦭®£® ­ëàï­¨ï ¡ë«® ᫨¢­®¥ ®â¢¥àá⨥ ¡ áᥩ­  á 䨫ìâ஬ ¨ ­ á®á®¬ ¤«ï ®âª ç¨¢ ­¨ï ¢®¤ë. ‘ ¬ë© ª ©ä ¡ë« ¢ ⮬, ç⮡ë áâ é¨âì á ᥡï âàãáë ¨ á¥áâì ­  ­¥£®.
Š ª £®¢®àïâ äà ­æã§ë à §¢¥ å®âì ª®¬ã-â® ­¥ ­à ¢¨âáï, ª®£¤  ¥£® § ¤­¨æã ¢ë«¨§ë¢ îâ? ޤ­ ª® ¨­®£¤  âë ¯à®áâ® ®­ ­¨àãî騩 ¯®¤à®á⮪ ¨ ¢¤à㣠宯! ¨ ⥡¥ 㦥 ­¨ª®£¤  ­¥ áâ âì îà¨á⮬.
ޤ­ ¦¤ë ï ᨦ㠭  ¤­¥ ¡ áᥩ­ , ¨ ­ ¤® ¬­®© ¢®«­¨á⮥ ¢®¤ï­®¥ ­¥¡®, ¢®á¥¬ì äã⮢ ᢥ⫮-£®«ã¡®© ¢®¤ë ­ ¤ ¬®¥© £®«®¢®©. ‚ ¬¨à¥ æ à¨â â¨è¨­ , §  ¨áª«î祭¨¥¬ ¯ã«ìá  ¢ ¬®¨å ãè å. Œ®¨ ¦¥«âë¥ ¯®«®á âë¥ ¯« ¢ª¨ ®¡¬®â ­ë ¢®ªà㣠襨 ­  ¢á直© á«ãç ©: ¢¤ã࣠§ £«ï­¥â á®á¥¤, §­ ª®¬ë© ¨«¨, ­ ¯à¨¬¥à, 䨧àãª, ¦¥« î騩 ¯®¨­â¥à¥á®¢ âìáï ¯®ç¥¬ã ï ¯à®¯ãá⨫ äãâ¡®«ì­ãî â७¨à®¢ªã. ‘â ¡¨«ì­®¥ á®áã饥 â¥ç¥­¨¥ ᫨¢­®£® ®â¢¥àáâ¨ï « áª ¥â ¬®î ª®¦ã ¨ ï ¢¥àçã ᢮¥© ª®áâ«ï¢®© ¡«¥¤­®© § ¤­¨æ¥©, çâ®¡ë ¯®©¬ âì íâ® ®éã饭¨¥.
“ ¬¥­ï ¥é¥ ¤®áâ â®ç­® ¢®§¤ãå  ¢ «¥£ª¨å, ¨ à㪠 ᦨ¬ ¥â ç«¥­. ®¤¨â¥«¨ ­  à ¡®â¥,   á¥áâà  ­  § ­ïâ¨ïå ¡ «¥â­®© 誮«ë. „® ¯à¨å®¤  ¯à¥¤ª®¢ ®áâ ¥âáï ¥é¥ ­¥áª®«ìª® ç á®¢. Œ®ï à㪠 ¯à¨¡«¨¦ ¥â ¨ ¯à¨¡«¨¦ ¥â ®à£ §¬. Ÿ ®áâ ­ ¢«¨¢ îáì, ¢ë­¨à¨¢ î, çâ®¡ë ¢¤®å­ãâì ¢®§¤ãå , ¨ ­ëàïî ®¡à â­®, çâ®¡ë ¯à®¤®«¦¨âì.
Ÿ ¤¥« î íâ® á­®¢  ¨ á­®¢ .
‚®§¬®¦­®, ¯®í⮬㠤¥¢ã誨 â ª «î¡ïâ ᨤ¥âì ã â¥¡ï ­  «¨æ¥. Žéã饭¨¥ ¢á á뢠­¨ï ª ª ¬¨­¥â, ª®â®àë© ¨­ª®£¤  ­¥ ª®­ç ¥âáï. Š®£¤  ¬®© ç«¥­ á⮨â,   ¢®¤  ®¡«¨§ë¢ îâ ¬®î § ¤­¨æã, ¬­¥ ­¥ ­ã¦¥­ ¢®§¤ãå. ‘ ®£«ãè î騬 á¥à¤æ¥¡¨¥­¨¥¬ ¢ ãè å, ï ®áâ îáì ¯®¤ ¢®¤®© ¤® â¥å ¯®à, ¯®ª  ¯¥à¥¤ £« § ¬¨ ­¥ ¯®ï¢«ï¥âï ன ¬ «¥­ìª¨å ïàª¨å §¢¥§¤®ç¥ª. Ÿ ¢ë¯àשׂïî ­®£¨, ®¡à â­®© áâ®à®© ª®«¥­¥© ª á îáì ¡¥ââ®­®£® ¤­  ¡ áᥩ­ .  «ìæë ­  àãª å ¨ ­®£ å 㦥 ¯®á¨­¥«¨ ¨ ᬮà騫¨áì ®â ¤®«£®£® ¯à¥¡ë¢ ­¨ï ¢ ¢®¤¥.
ˆ âãâ ï ¯®§¢®«ïî í⮬ã á«ãç¨âìáï. ‚ ¢®¤¥ ¯®ï¢«ïîâáï ¡®«ì訥 ¡¥«ë¥ ª®¬ª¨. †¥¬ç㦨­ë.
’¥¯¥àì ¬­¥ ­ã¦¥­ ¢®§¤ãå. ® ª®£¤  ï ¯ëâ îáì ®â⮫ª­ãâìáï ®â ¤­ , ï ­¥ ¬®£ã. Ÿ ­¥ ¬®£ã ¯®¤®£­ãâì ¯®¤ á¥¡ï ­®£¨. Œ®ï § ¤­¨æ  § áâàï« .
‚à ç¨ ᪮ன ¯®¬®é¨ ¬®£ãâ à á᪠§ âì, çâ® ª ¦¤ë© £®¤ ®ª®«® 150 祫®¢¥ª § áâॢ ¥â ¯®¤®¡­ë¬ ®¡à §®¬, ¯à¨á®á ¢è¨áì ª ­ á®áã, ®âª ç¨¢ î饬㠢®¤ã ¨§ ¡ áᥩ­ . ˆ«¨ ­ á®á ­¥ ®â¯ã᪠¥â ¨å § ¤­¨æë ¨«¨ § â¢ ¥â ¨å ¤«¨­­ë¥ ¢®«®áë, ¨ ®­¨ § å«¥¡ë¢ îâáï. ®«ì設á⢮ íâ¨å á«ãç ¥¢ ¯à®¨á室¨â ¢ ”«®à¨¤¥.
¨ªâ® ®¡ í⮬ ­¥ £®¢®à¨â. „ ¦¥ äà ­æã§ë ­¥ £®¢®àïâ ® ­¥ª®â®àëå ¢¥é å.
ˆ§¢¥à­ã¢ ­®£¨, ¬­¥ 㤠¥âáï ᮣ­ãâì ¥¥ ¢ ª®«¥­¥ ¨ ®¯¥à¥âìáï ¢ ¤­®, ï ­ ¯®«®¢¨­ã ¢áâ î ¨ çã¢áâ¢ãî, ª ª çâ®-â® âﭥ⠬¥­ï §   ­ãá. ®¤áã­ã¢ ¯® á¥¡ï ¢â®àãî ­®£ã, ï ®ââ «ª¨¢ îáì ®â ¤­ . Ÿ ᢮¡®¤­® ¡®«â îáì ¨ «ï£ îáì ¢ ¢®¤¥, ­¥ § ¤¥¢ ï ¡¥â®­ , ­® ¨ ­¥ ¢á¯«ë¢ î.
à몠ïáì ¨§® ¢á¥å ᨫ, £à¥¡ï ®¡®¨¬¨ à㪠¬¨, ï ­  ¯®«¯ã⨠ª ¢®§¤ãåã, ­® ¡®«â îáì ­  ®¤­®¬ ¨ ⮬ ¦¥ ¬¥áâ¥. ‘â㪠á¥à¤æ  ¢ ãè å áâ ­®¢¨âáï £à®¬ç¥ ¨ ç é¥.
Ÿ ¨§¢®à ç¨¢ îáì ¨ ®£«ï¤ë¢ îáì, ᪢®§ì ¬¨à¨ ¤ë ïàª¨å §¢¥§¤®ç¥ª ¢ £« § å, ­® â® çâ® ï ¢¨¦ã, ­¥ ¯®¤¤ ¥âáï ¯®­¨¬ ­¨î. Š ª ï-⮠⮫áâ ï ¢¥à¥¢ª , ᨭ¥¢ â® ¡«¥¤­ ï, á ¯à®¦¨«ª ¬¨, âï­¥âáï ®â ᫨¢­®£® ®â¢¥àáâ¨ï ª ¬®¥© § ¤­¨æ¥ ¨ ­¥ ®â¯ã᪠¥â ¬¥­ï. ˆ§ ­¥ª®â®àëå ¯à®¦¨«®ª á®ç¨âáï ªà®¢ì,  « ï ªà®¢ì, ª®â®à ï ­  £«ã¡¨­¥ ª ¦¥âáï ç¥à­®©, ®­  áâà㪠¬¨ ¯®ï¢«ï¥âáï ¨§ ¬ «¥­ìª¨å à §à뢮¢ ¢ ¡«¥¤­®© ª®¦¥ í⮩ §¬¥¨. ⨠áâà㪨 ¯®á⥯¥­­® à áâ®àïîâáï ¢ ¢®¤¥;   ¢­ãâਠ§¬¥¨, ¯®¤ ¥¥ â®­ª®© ¡¥«¥á®© ª®¦¥©, ¢¨¤­¥îâáï ª®¬ª¨ ­ ¯®«®¢¨­ã ¯¥à¥¢ à¥­­®© ¥¤ë.
’®£¤  ï ­ ç¨­ î ¯®­¨¬ âì. Š ª®¥-â® ¦ã⪮¥ ¬®à᪮¥ ç㤮¢¨é¥, ¬®àáª ï §¬¥ï, ⢠àì, ­¨ à §ã ­¥ ¢¨¤¥¢è ï ᮫­¥ç­®£® ᢥâ , ¯àïâ « áì ¢ ª ­ «¨§ æ¨¨ ¨ ¯®¤¦¨¤ «  ¬®¬¥­â , çâ®¡ë ¢æ¥¯¨âìáï ¬­¥ ¢ § ¤­¨æã.
Ÿ ­ ç¨­ î «ï£ âì ¨ ¯¨­ âì íâã §¬¥î, ¥¥ ᪮«ì§ªãî १¨­®¢ãî ª®¦ã á í⨬¨ ¢¥­ ¬¨, ¨ ¬­¥ ª ¦¥âáï, çâ® ï á㬥« ¢ëâï­ãâì ¥¥ ¨§ ᫨¢­®£® ®â¢¥àáâ¨ï ¥é¥ ­¥¬­®£®. ’¥¯¥àì ®­  ¤«¨­®© ¯à¨¬¥à­® á ¬®î ­®£ã, ­® ¢á¥ à ¢­® ªà¥¯ª® ¤¥à¦¨âáï §  ¬®©  ­ãá. Ÿ ¯¨­ î ¥é¥, ¨ ¯®¤­¨¬ îáì ­  ¤î©¬, ­  ¤î©¬ ¡«¨¦¥ ª ¯®¢¥àå­®áâ¨. •®âï ï çã¢áâ¢ãî, çâ® §¬¥ï ¢á¥ ¥é¥ ¤¥à¦¨âáï §  ¬®î ¤ëàªã, ï ¥é¥ ­  ¤î©¬ ¡«¨¦¥ ª ᯠᥭ¨î.
‚­ãâਠ§¬¥¨ ¢¨¤­¥îâáï ªãá®çª¨ ªãªãàã§ë ¨ ®à¥å®¢. ‚¨¤­¥¥âáï ¯à®¤®«£®¢ â ï ®à ­¦¥¢ ï ª ¯áã« . â® ª ª®©-â® ¬ã«ì⨢¨â ¬¨­, ¨§ â¥å, çâ® ¤ ¥â ¬­¥ ¯ ¯ , ç⮡ë ï ­ ¡à « ¬ëè¥ç­ãî ¬ ááã. —⮡ë ï ¯®¯ « ¢ äãâ¡®«ì­ãî ª®¬ ­¤ã ¨ ¯®«ãç « ¤®¯®«­¨â¥«ì­ãî á⨯¥­¤¨î. Š ¯áã«  á ®¡®£ é¥­­ë¬ ¦¥«¥§®¬ ¨  ¬¨­®ª¨á«®â ¬¨.
Ÿ ¢¨¦ã íâã â ¡«¥âªã, ª®â®à ï ¤®«¦­  ᯠá⨠¬®î ¦¨§­ì.
â® ­¥ §¬¥ï. â® ¬®© ª¨è¥ç­¨ª, ¬®ï ¯àï¬ ï ª¨èª , ª®â®à ï ¢ë¢ «¨« áì ¨§ ¬¥­ï. ’®, çâ® ¢à ç¨ ­ §ë¢ î⠢믠¤¥­¨¥¬ ¯àאַ© ª¨èª¨ . Œ®¨ ª¨èª¨ § âï­ã«® ¢ ᫨¢­®¥ ®â¢¥àá⨥.
‚à ç¨ ᪮ன ¯®¬®é¨ ¬®£ãâ à á᪠§ âì ¢ ¬, çâ® ­ á®á ¤«ï ®âª çª¨ ¢®¤ë ¨§ ¡ áᥩ­  ¯à®¯ã᪠¥â ç¥à¥§ ᥡï 80 £ ««®­®¢ ¢®¤ë ¢ ¬¨­ãâã. —â® ¯® ¢¥áã à ¢­ï¥âáï 400 äã­â ¬. ®«ìè ï ¯à®¡«¥¬  ªà®¥âáï ¢ ⮬, çâ® ª®­æë ¢­ãâਠ­ á ᮥ¤¨­¥­ë, ¨ ⢮©  ­ãá íâ® ¤ «ì­¨© ª®­¥æ ⢮¥£® àâ . …᫨ ï ¯®§¢®«î, ¨ ­ á®á ¡ã¤¥â ¯à®¤®«¦ âì ®âª ç¨¢ âì ¢®¤ã ¢ëâ¢ âì ¨§ ¬¥­ï ¢­ãâ७­®á⨠®­ ¢ ª®­æ¥ ª®­æ®¢ § á®á¥â ¨ ¬®© ï§ëª. ।áâ ¢ì⥠ᥡ¥, çâ® ¢ë ¢ëáà «¨ ¨§ ᥡï 400 äã­â®¢, ¨ ¢ë ¯®©¬¥â¥, çâ® íâ® ¢á¥ à ¢­® çâ® â¥¡ï ¢ë¢¥à­ã«¨ ­ ¨§­ ­ªã.
Œ®£ã ¢ á ®¡à ¤®¢ âì ⥬, çâ® ª¨èª¨ ­¥ çã¢áâ¢ãîâ ¡®«¨. ® ªà ©­¥© ¬¥à¥ ­¥ â ª, ª ª ­ è  ª®¦ . ’®, çâ® ¬ë ¯¥à¥¢ à¨¢ ¥¬, ¢à ç¨ ­ §ë¢ îâ 䥪 «ì­ë¬¨ ¬ áá ¬¨. ‚ ¢¥àå­¥© ç á⨠ª¨èª¨ ï ¢¨¦ã ¦¨¤ªãî ¬ ááã, ¢ ª®â®à®© ¯« ¢ îâ §¥à­  ªãªãàã§ë,  à å¨§ ¨ ªà㣫ïè¨ §¥«¥­®£® £®à®èª .
ˆ ¢®â ¢®ªà㣠¬¥­ï ¯« ¢ ¥â ¢¥áì íâ®â á㯠¨§ ªà®¢¨ ¨ ªãªãàã§ë, ¤¥à쬠 ¨ ᯥà¬ë ¨  à å¨á . à¨ç¥¬ ¤ ¦¥ ª®£¤  ¨§ ¬¥­ï ¢ëâ¢ îâáï ¬®¨ ª¨èª¨, ¨ ï ¤¥à¦ãáì §  â®, çâ® ®áâ «®áì, ¤ ¦¥ ⮣¤  ¬®¥ £« ¢­®¥ ¦¥« ­¨¥ å®âì ª ª-­¨¡ã¤ì ­ âï­ãâì ¯« ¢ª¨.
¥ ¤ © ®£ ¯à¥¤ª¨ 㢨¤ïâ ¬®© ç«¥­.
ޤ­®© à㪮© ï ᦨ¬ î á¢®î ª¨èªã ¢ ªã« ª¥, ¤à㣮© ᤥࣨ¢ î ᢮¨ ¦¥«âë¥ ¯®«®á âë¥ ¯« ¢ª¨ á 襨. ® ­ âï­ãâì ¨å ¢á¥ à ¢­® ­¥¢®§¬®¦­®.
…᫨ ¢ë å®â¨â¥ §­ âì, ª ª ¢ è¨ ª¨èª¨ ¢ë£«ï¤ïâ ­  ®éã¯ì, ªã¯¨â¥ ¯à¥§¥à¢ â¨¢, ᤥ« ­­ë© ¨§ ¡ à ­ì¨å ª¨è®ª [1 - ‚ ‘˜€ ¯à®¤ îâáï ¯à¥§¥à¢ â¨¢ë, ᤥ« ­­ë¥ ¨§ ª¨è®ª ¦¨¢®â­ëå, å®âï ¨å ­ ¤¥¦­®áâì áç¨â ¥âáï £®à §¤® ­¨¦¥ ®¡ëç­ëå. (ਬ¥ç ­¨¥ ¯¥à¥¢®¤ç¨ª )]. ‚®§ì¬¨â¥ ¥£®, à áª â ©â¥.  ¯®«­¨â¥ ¥£®  à å¨á®¢ë¬ ¬ á«®¬. Ž¡¬ ¦ì⥠¥£® ¢ §¥«¨­®¬ ¨ ¯®â¨áª ©â¥ ¯®¤ ¢®¤®©. ®â®¬, ¯®¯ëâ ©â¥áì à §®à¢ âì ¥£®.  ¯®¯®« ¬. Ž­ ᫨誮¬ ¯à®ç­ë© ¨ í« áâ¨ç­ë©. Ž­ â ª®© ᪮«ì§ª¨©, çâ® §  ­¥£® ­¥¢®§¬®¦­® ª ª á«¥¤ã¥â ã墠â¨âìáï.
१¥à¢ â¨¢ ¨§ ¡ à ­ì¨å ª¨è®ª íâ® â®â ¦¥ áâ àë© ¤®¡àë© ª¨è¥ç­¨ª 祫®¢¥ª .
‚ë ¢¨¤¨â¥, ª 祬ã ï ¢¥¤ã.
‘⮨⠮â¯ãáâ¨âì ­  ᥪ㭤㠨 ã ¬¥­ï ¡®«ìè¥ ­¥â ª¨è®ª.
‘⮨⠯®¯«ëâì ­ ¢¥àå, ª ¢®§¤ãåã ¨ ã ¬¥­ï ¡®«ìè¥ ­¥â ª¨è®ª.
‘⮨⠮⪠§ âìáï ¯«ëâì ­ ¢¥àå ¨ ï ã⮯«¥­­¨ª.
â® ¢ë¡®à 㬥à¥âì ᥩç á ¨«¨ ­  ¬¨­ãâã ¯®§¦¥, 祬 ᥩç á.
Œ®¨ ¯à¥¤ª¨ ¢¥à­ãâáï á à ¡®âë ¨ ­ ©¤ãâ ¡®«ì让 £®«ë© í¬¡à¨®­, áªàî祭­ë© ¨ á¤ã¢è¨©áï. « ¢ î騩 ¢ ¬ãâ­®© ¢®¤¥ ¡ áᥩ­  ­  § ¤­¥¬ ¤¢®à¥. ‘த­¨¢è¨©áï á ¡ áᥩ­®¬ ç¥à¥§ ¯ã¯®¢¨­ã § ¯ãâ ­­ëå ª¨è®ª ¨ ¢¥­. ®«­ ï ¯à®â¨¢®¯®«®¦­®áâì ¯ à­î, á«ãç ©­® 㤠¢¨¢è¥¬ãáï ¢® ¢à¥¬ï ®­ ­¨§¬  ¢ á⥭­®¬ 誠äã. ˆ íâ® ¨å ॡ¥­®ª, ª®â®à®£® ®­¨ ¯à¨¢¥§«¨ ¨§ த¤®¬  13 «¥â ­ § ¤. ¥¡¥­®ª, ª®â®àë©, ª ª ®­¨ ­ ¤¥ï¤¨áì, ¤®«¦¥­ ¡ë« ¯®¯ áâì ¢ äãâ¡®«ì­ãî ª®¬ ­¤ã ¨ ¯®«ãç âì ¤®¯®«­¨â¥«ì­ãî á⨯¥­¤¨î ¨ ¯®«ãç¨âì á⥯¥­ì ¬ £¨áâà . ¥¡¥­®ª, ª®â®àë© § ¡®â¨«áï ¡ë ® ­¨å, ª®£¤  ®­¨ á®áâ àïâáï. ‚ᥠ¨å ­ ¤¥¦¤ë ¨ ¬¥çâë. ‚ ¡ áᥩ­¥, £®«ë© ¨ ¬¥àâ¢ë©. ˆ ¢®ªà㣠­¥£® ¡®«ì訥 ¬®«®ç­®-¡¥«ë¥ ª®¬ìï ᯥà¬ë.
Œ®¦¥â, â ª. € ¬®¦¥â, ¬®¨ ¯à¥¤ª¨ ­ ©¤ãâ ¬¥­ï, § ¢¥à­ã⮣® ¢ ®ªà®¢ ¢«¥­­®¥ ¯®«®â¥­æ¥, ᢠ«¨¢è¥£®áï ¡¥§ á®§­ ­¨ï ­  ¯ã⨠ª ⥫¥ä®­ã á ࢠ­ë¬¨ ®è¬¥âª ¬¨ ª¨è®ª, ¡®«â î騬¨áï ¨§-¯®¤ ¦¥«âëå ¯®«®á âëå ¯« ¢®ª.
’®, ® 祬 ­¥ £®¢®àïâ ¤ ¦¥ äà ­æã§ë.
‘â à訩 ¡à â ¢ ¢®¥­­®-¬®à᪮¬ 䫮⥠­ ã稫 ­ á ®¤­®© å®à®è¥© ¯®á«®¢¨æ¥. ãá᪮© ¯®á«®¢¨æ¥. ®á«®¢¨æ  ® ⮬, çâ® ¬ë,  ¬¥à¨ª ­æë, ­ §ë¢ ¥¬ íâ® ¬­¥ ­ã¦­®, ª ª ¤ëઠ ¢ £®«®¢¥ . ãá᪨¥ £®¢®àïâ: Œ­¥ íâ® ­ã¦­®, ª ª §ã¡ë ¢ § ¤­¨æ¥ .
Mnye etoh nadoh kahk zoobee v zadnetze. [2 - ãááª ï ¯®á«®¢¨æ  ¯¥à¥¤ ­  « â¨­¨æ¥© ¢ â®ç­®á⨠⠪, ª ª ¢ ®à¨£¨­ «¥. (ਬ¥ç ­¨¥ ¯¥à¥¢®¤ç¨ª )]
⨠¨áâ®à¨¨ ¯à® â®, ª ª ¯®¯ ¢è¨¥ ¢ ª ¯ª ­ §¢¥à¨ ®â£àë§ îâ ᥡ¥ ­®£ã. —â® ¦¥, «î¡®© ª®©®â à á᪠¦¥â ¢ ¬, çâ® ¯ à  ¬¨­ãâ ¡®«¨ ç¥à⮢᪨ ªàãç¥ á¬¥àâ¨.
—¥àâ, ¤ ¦¥ ¥á«¨ âë àãá᪨©, ¨­®£¤  ¬®¦¥â ­ áâ㯨âì ¬®¬¥­â, ª®£¤  âë § å®ç¥èì ¨¬¥âì §ã¡ë ¢ ⮬ á ¬®¬ ¬¥áâ¥.
€ ¥á«¨ ¨å ­¥â, ⥡¥ ¯à¨å®¤¨âáï ᤥ« âì ¢®â çâ® ¨§¢¥à­ãâìáï. ’ë æ¥¯«ï¥èì «®ªâ¥¬ á¥¡ï §  ª®«¥­ªã ¨ âï­¥èì á¢®î ­®£ã ª «¨æã. ’ë £àë§¥èì ¨ ªãá ¥èì ᮡá⢥­­ãî § ¤­¨æã. “ â¥¡ï ª®­ç¨«áï ¢®§¤ãå, ¨ âë ®â£àë§¥èì ¢á¥, ç⮠㣮¤­®, çâ®¡ë ¢¤®å­ãâì ¥£® ¥é¥ à §.
Ž¡ í⮬ ­¥ à §£®¢ à¨¢ îâ á ¤¥¢ã誮© ­  ¯¥à¢®¬ ᢨ¤ ­¨¨. ® ªà ©­¥© ¬¥à¥, ¥á«¨ ­  ¯à®é ­¨¥ âë ­ ¤¥¥èìáï ¥¥ ¯®æ¥«®¢ âì.
…᫨ ï ᪠¦ã ¢ ¬, ª ª®¢® íâ® ¡ë«® ­  ¢ªãá, ¢ë ¡ë ­¨ª®£¤  ¡®«ìè¥ ­¥ áâ «¨ ¡ë ¥áâì ª «ì¬ à®¢ ¨ ®á쬨­®£®¢, ­¨ª®£¤ .
’à㤭® ᪠§ âì, çâ® ¯®ª § «®áì ¬®¨ ¯à¥¤ª ¬ ¡®«¥¥ ®¬¥à§¨â¥«ì­ë¬ ª ª ï ¯®¯ « ¢ «®¢ãèªã ¨«¨ ª ª ï ¨§ ­¥¥ ¢ëࢠ«áï. Š®£¤  ¬¥­ï ¢ë¯¨á «¨ ¨§ ¡®«ì­¨æë, ¬ ¬  ᪠§ « : ‘ë­®ª, âë ­¥ §­ «, ç⮠⢮ਫ. ’ë ¡ë« ¢ 讪¥ . € ¯®â®¬ ®­  ­ ã稫 áì ¢ à¨âì ï©æ  ¡¥§ ᪮à«ã¯ë ï©æ® à §¡¨¢ ¥âáï ¢ ª¨¯ïéãî ᮫¥­ãî ¢®¤ã. [3 - ‚ à¥­®¥ ï©æ® ¡¥§ ᪮à«ã¯ë (poached egg, ¯®-àãá᪨ ï©æ®-¯ è®â ) ¨§¢¥áâ­® ¢ ¥¢à®¯¥©áª®© ªãå­¥, ­® ¯®ç⨠­¥¨§¢¥áâ­® ¢ àãá᪮© ªãå­¥, ¯®í⮬ã ï ªà âª® ãâ®ç­¨« ¢ ⥪áâ¥, çâ® íâ® â ª®¥. ‘®«¥­ ï ¢®¤  ¤®¢®¤¨âáï ¤® ª¨¯¥­¨ï ¨ à §¬¥è¨¢ ¥âáï â ª, çâ®¡ë ¯®«ã稫áï ¢®¤®¢®à®â. ’㤠 à §¡¨¢ ¥âáï ï©æ® (¬®¦­® ¤¢  ¨«¨ âà¨), ª ª ­  ᪮¢®à®¤ªã, ª®£¤  ¤¥« ¥âáï £« §ã­ìï. —¥à¥§ ¬¨­ãâã ¢®¤  ᫨¢ ¥âáï ç¥à¥§ á¨â®. ‚ १ã«ìâ â¥ ¯®«ãç ¥âï ®ç¥­ì ­¥¦­®¥, «¥£ª® ¯¥à¥¢ à¨¢ ¥¬®¥ ¡«î¤ . (ਬ¥ç ­¨¥ ¯¥à¥¢®¤ç¨ª )]
ˆ­â¥à¥á­®, ¢á¥ í⨠«î¤¨ ®­¨ ¬¥­ï ¦ «¥«¨ ¨«¨ ¨á¯ëâ뢠«¨ ®â¢à é¥­¨¥?
Ÿ å®çã íâ® §­ âì â ª ¦¥, ª ª ï å®çã ¨¬¥âì §ã¡ë ¢ ᢮¥© § ¤­¨æ¥.
‘¥©ç á «î¤¨ ¯®áâ®ï­­® £®¢®àïâ ¬­¥, çâ® ï ᫨誮¬ å㤮©. Š®£¤  ¬¥­ï ¯à¨£« è îâ ­  㦨­ ï ®âª §ë¢ îáì ¯à¨£®â®¢«¥­­®¥ ¨¬¨ ¦ àª®¥, ®­¨ 㤨¢«ïîâáï ¨ ­ ç¨­ îâ ­¥à¢­¨ç âì. † à¥­®¥ ¬ïá® ¬¥­ï 㡨¢ ¥â. ‡ ¯¥ç¥­­ ï ¢¥â稭 . ‹î¡ ï ¥¤ , ª®â®àãî ­¥«ì§ï ¯¥à¥¢ à¨âì §  ¯ àã ç á®¢, ¢ë室¨â ¨§ ¬¥­ï ª ª ¥¤ . ’ã襭 ï ä á®«ì, ªãá®çª¨ àë¡ë. Ÿ ¢áâ î á 㭨⠧  ¨ â ¬ ®­¨ ¢ «ïîâáï. Š ª ¡ë«¨.
®á«¥ à ¤¨ª «ì­®© ®¯¥à æ¨¨ ¯® 㪮à ç¨¢ ­¨î ª¨è¥ç­¨ª , ¯¥à¥¢ à¨¢ âì ¬ïá® áâ ­®¢¨âáï ­¥¬­®£® âà㤭®. “ ¡®«ì設á⢠ ¨§ ¢ á ¯ïâì äã⮢ ª¨è¥ç­¨ª . Ÿ áç á⫨¢ ¨¬¥âì ᢮¨ è¥áâì ¤î©¬®¢. ’ ª çâ® ï â ª ¨ ­¥ ¯®«ã稫 äãâ¡®«ì­ãî á⨯¥­¤¨î. ¨ª®£¤  ­¥ áâ « ¬ £¨áâ஬ ª ª¨å-«¨¡® ­ ãª. Ž¡  ¬®¨å ¤à㣠 ¯ æ ­ ᮠᢥ窮© ¨ ¯ æ ­ á ¬®àª®¢ìî ®­¨ ®¡  ¢ëà®á«¨, ¢ë諨 ¢ «î¤¨, ­® ï â ª ¨ ­¥ ¯à¨¡ ¢¨« ­¨ ®¤­®£® äã­â  á â¥å ¯®à, ª ª ¬­¥ ¨á¯®«­¨«®áì 13.
„àã£ ï ¯à®¡«¥¬  ¡ë«  ¢ ⮬, çâ® ¯à¥¤ª ¬ ¯à¨è«®áì ¢ë«®¦¨âì ®£à®¬­ë¥ ¤¥­ì£¨ §  â®â á ¬ë© ¡ áᥩ­. ‚ ª®­æ¥ ª®­æ®¢ ¯ ¯  ᪠§ « ¢®¤®¯à®¢®¤ç¨ªã, çâ® íâ® ¡ë«  ᮡ ª .  è  ᮡ ª  ᢠ«¨« áì ¢ ¡ áᥩ­ ¨ ãâ®­ã« . ’à㯠§ âï­ã«® ¢ ᫨¢­®¥ ®â¢¥àá⨥. „ ¦¥ ª®£¤  ¢®¤®¯à®¢®¤ç¨ª à §®¡à « ­ á®á ¨ ¢ë㤨« ¨§ ­¥£® ¡«¥¤­ãî १¨­®¯®¤®¡­ãî ª¨èªã, ¢®¤ï­¨áâë© ªã᮪ ª¨è¥ç­¨ª  á ¡®«ì让 ®à ­¦¥¢®© ¢¨â ¬¨­­®© â ¡«¥âª®© ¢­ãâà¨, ¤ ¦¥ ⮣¤  ¬®© ¯ ¯  ᪠§ « íâ  ç¥à⮢  ¡¥§¬®§£« ï ᮡ ª  .
„ ¦¥ ¨§ ®ª­  ᢮¥© ª®¬­ âë ï á«ëè «, ª ª ¯ ¯  ᪠§ «: âã ᮡ ªã ­¥«ì§ï ¡ë«® ®áâ ¢¨âì ¡¥§ ¯à¨á¬®âà  ­¨ ­  ᥪ㭤ã .
€ ¯®â®¬ ã á¥áâàë ¡ë«  § ¤¥à¦ª  ¬¥áïç­ëå.
„ ¦¥ ¯®á«¥ ⮣®, ª ª ¢ ¡ áᥩ­¥ ᬥ­¨«¨ ¢®¤ã, ¤ ¦¥ ¯®á«¥ ⮣®, ¬ë ¯à®¤ «¨ ¤®¬ ¨ ¯¥à¥¥å «¨, ¯®á«¥  ¡®àâ  á¥áâàë, ¤ ¦¥ ⮣¤  ¬®¨ ¯à¥¤ª¨ ­¨ à §ã í⮣® ­¥ 㯮¬¨­ «¨.
¨ª®£¤ . â® ­ è  ­¥¢¨¤¨¬ ï ¬®àª®¢ì.
€ ¢ë. ‚ë ¬®¦¥â¥ ⥯¥àì ᤥ« âì ¯®«­ë© ¢¤®å.
Ÿ ¨ ¤® á¨å ¯®à ­¥ ¬®£ã.
-102
View File
@@ -1,102 +0,0 @@
#!/bin/bash
# Making tests of BForce
CURDIR=$(pwd)
BFBIN=$(pwd)/../source/bin/bforce
function prepconfig() {
echo "Preparing configs with $1 as protocol..."
cp ${CURDIR}/configs/bforceA.conf ${CURDIR}/etc/bforceA.conf
sed -i -e "s/%PROTO%/$1/" ${CURDIR}/etc/bforceA.conf
sed -i -e "s#%TESTZONE%#${CURDIR}#" ${CURDIR}/etc/bforceA.conf
cp ${CURDIR}/configs/bforceB.conf ${CURDIR}/etc/bforceB.conf
sed -i -e "s/%PROTO%/$1/" ${CURDIR}/etc/bforceB.conf
sed -i -e "s#%TESTZONE%#${CURDIR}#" ${CURDIR}/etc/bforceB.conf
cp ${CURDIR}/configs/00010002.cut ${CURDIR}/outboundA/00010002.cut
cp ${CURDIR}/configs/00010001.cut ${CURDIR}/outboundB/00010001.cut
}
function testcomm() {
rm -rf ${CURDIR}/inboundA/*
rm -rf ${CURDIR}/inboundB/*
mkfifo ${CURDIR}/bforceAtoB
mkfifo ${CURDIR}/bforceBtoA
BFCFGA=${CURDIR}/etc/bforceA.conf
BFCFGB=${CURDIR}/etc/bforceB.conf
# Works for Linux
BFCONFIG=${BFCFGA}
BFCONFIG=${BFCFGA} ${BFBIN} -o 99:1/2 > ${CURDIR}/bforceAtoB < ${CURDIR}/bforceBtoA &
#
BFCONFIG=${BFCFGB}
BFCONFIG=${BFCFGB} ${BFBIN} -S"CONNECT 9600" auto < ${CURDIR}/bforceAtoB > ${CURDIR}/bforceBtoA
# For [Free]BSD it need to be replaced - pipes are bidirectional:
# ./ping <&1 | ./pong >&0
rm ${CURDIR}/{bforceAtoB,bforceBtoA}
## WE MUST CHECK THAT INBOUND ARE FULL!!! ##
FCNTA=$( find ${CURDIR}/inboundA -name *.pkt | wc -l )
FCNTB=$( find ${CURDIR}/inboundB -name *.pkt | wc -l )
DIFFA=$( diff ${CURDIR}/inboundA/*.pkt ${CURDIR}/configs/00010001.cut && echo $? )
DIFFB=$( diff ${CURDIR}/inboundB/*.pkt ${CURDIR}/configs/00010002.cut && echo $? )
if [[ "${DIFFA}" -eq "0" ]] && [[ "${FCNTA}" -eq "1" ]]
then
if [[ "${DIFFB}" -eq "0" ]] && [[ "${FCNTB}" -eq "1" ]]
then
echo "....Result: OK"
else
echo "....Failed DiffB"
fi
else
echo "....Failed DiffA"
fi
cat ${CURDIR}/logsA/bf-debug >> ${CURDIR}/debugA.log
cat ${CURDIR}/logsB/bf-debug >> ${CURDIR}/debugB.log
}
if [[ ! -d "${CURDIR}/inboundA" ]]
then
echo "All clear to begin"
else
echo "Dir exists!"
rm -rf {etc,inboundA,inboundB,inbound-unsecureA,inbound-unsecureB,logsA,logsB,outboundA,outboundB}
fi
mkdir -p "${CURDIR}"/{etc,inbound-unsecureA,inbound-unsecureB,inboundA,inboundB,logsA,logsB,outboundA,outboundB}
if [[ ! -f "${BFBIN}" ]]
then
# No executable to test!
echo "No executable to run! Aborting..."
else
# All doing here
echo "Bforce executable found"
prepconfig "ZMO"
echo -n "--> Running ZMO test..."
testcomm
prepconfig "ZAP"
echo -n "--> Running ZAP test..."
testcomm
prepconfig "HYD"
echo -n "--> Running Hydra test..."
testcomm
# TODO: make binkd test over netcat possibly
fi
rm -rf {etc,inboundA,inboundB,inbound-unsecureA,inbound-unsecureB,logsA,logsB,outboundA,outboundB}