14 Commits
42 changed files with 1437 additions and 122 deletions
+12
View File
@@ -0,0 +1,12 @@
*.o
debian/Makefile
source/Makefile
source/bin/
source/bforce/expression.c
source/config.log
source/config.status
source/include/config.h
bforce.geany
+25 -2
View File
@@ -228,9 +228,32 @@ Alexey Khromov (zx@zxalexis.ru)
+ Added pre-init debugging (primarily of config readout) to stderr by -v + Added pre-init debugging (primarily of config readout) to stderr by -v
option. Vanished out errorful calls to "log" and "debug" before log and option. Vanished out errorful calls to "log" and "debug" before log and
debug files initialization. debug files initialization.
+ As of bison is default yacc for (almost) every foss system - fix
warning of yacc compliance (delete -y flag in Makefile.in)
+ Fixed build on 64-bit systems (amd64 and aarch64) + Fixed build on 64-bit systems (amd64 and aarch64)
+ Initially added config options incpkt_flag and incbdl_flag to raise + Initially added config options incpkt_flag and incbdl_flag to raise
up flag-driven tosser manipulation up flag-driven tosser manipulation
0.24.2
+ Fixed environment variables while executing external programs
on handshake or session end
+ Fixed flags working on arcmail/netmail recieve
0.25
+ EMSI handshake logic reworked to comply with EMSI-II std (FTSC-0088)
+ New option: proto_order - dezired protocol order for outgoing calls
in EMSI session handshake
EMSI-II-compliance works as follows:
* if both (caller and callee) expose EII flag - selected proto
will be first in caller compat.options compatible with callee
* if caller is EMSI-I-compliant and does not show EII flad -
selection by callee internal order from compatible with caller
+ Changed ifcico protocol port hardcoded to num and not name from
/etc/services line (as of abscence of latter)
+ Config example reworked to include new options
+ 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
+26 -7
View File
@@ -1,10 +1,10 @@
В этом файле описывается процесс установки и настройки В этом файле описывается процесс установки и настройки
фидонет-совместимого мейлера bforce 0.22.8.ugenk1. фидонет-совместимого мейлера bforce 0.xx.
В данном документе приняты следующие обозначения: В данном документе приняты следующие обозначения:
<SRCDIR> - путь, куда вы распаковали тарболл с исходными <SRCDIR> - путь, куда вы распаковали тарболл с исходными
текстами bforce 0.22.8.ugenk1 (далее bforce) текстами bforce 0.xx (далее bforce)
Тарболл - файл с расширением tar.gz, или tar.bz2 Тарболл - файл с расширением tar.gz, или tar.bz2
@@ -24,14 +24,14 @@ gmake
Распакуйте тарболл следующими командами: Распакуйте тарболл следующими командами:
gzip -d bforce-0.22.8.ugenk1.tar.gz gzip -d bforce-master.tar.gz
или или
bzip2 -d bforce-0.22.8.ugenk1.tar.bz2 bzip2 -d bforce-master.tar.bz2
tar -xvf bforce-0.22.8.ugenk1.tar tar -xvf bforce-master.tar
Перейдите в директорию bforce-0.22.8.ugenk1/source: Перейдите в директорию bforce/source:
cd <SRCDIR>/bforce-0.22.8.ugenk1/source cd <SRCDIR>/bforce/source
Для создания Makefile, который наиболее подходит к вашей Для создания Makefile, который наиболее подходит к вашей
системе, наберите: системе, наберите:
@@ -76,6 +76,11 @@ gmake install
Настройка Настройка
========= =========
Рекомендуется установить системную переменную BFCONFIG,
указывающую на местоположение конфигурации bforce.
Проще всего через /etc/environment для общесистемной или
.profile для переменной пользователя.
Для нормальной работы вам нужно отредактировать конфигурационные файлы Для нормальной работы вам нужно отредактировать конфигурационные файлы
bforce. По умолчанию они находятся в /usr/local/fido/etc и называются bforce. По умолчанию они находятся в /usr/local/fido/etc и называются
bforce.conf - основной конфигурационный файл bforce bforce.conf - основной конфигурационный файл bforce
@@ -125,6 +130,19 @@ cat `which mgetty` |strings |grep FIDO |wc -l
где news - это пользователь, из-под которого у вас работает ftn-подсистема. где news - это пользователь, из-под которого у вас работает ftn-подсистема.
Bforce при ИСХОДЯЩИХ звонках использует файлы блокировки порта модема,
при несовпадении каталога или невозможности создания файла
mgetty сбросит модем во время звонка.
Поэтому настоятельно рекомендуется проверить права на папку /var/lock
и то, на какой ФС она расположенв.
Современные системы имеют тенденцию к применению /var/lock как ссылки
на /run/lock, а ФС /run монтируется и создается на tmpfs при каждой
загрузке с помощью systemd-tempfiles.
Для изменения поведения необходимо создать файл в /etc/tempfiles.d/,
совпадающим (за исключением части имени -part) c именем файла в
/usr/lib/systemd/systemd-tempfiles.d.
Рабочий пример legacy-part.conf в папке contrib.
Совместная работа с inetd/xinetd Совместная работа с inetd/xinetd
================================ ================================
К сожалению (или к счастью), bforce не умеет самостоятельно принимать входящие К сожалению (или к счастью), bforce не умеет самостоятельно принимать входящие
@@ -150,6 +168,7 @@ init.d/bforce - init-
bfha - bforce history analyzer (bfha) bfha - bforce history analyzer (bfha)
bfha/README - bfha README bfha/README - bfha README
bfha/bfha.pl - собственно, bfha bfha/bfha.pl - собственно, bfha
legacy-part.conf - файл для донастройки прав на /run/lock в systemd
u-srif - продвинутый freq-процессор u-srif - продвинутый freq-процессор
u-srif/u-srif-index.py \ с поддержой отчетов, u-srif/u-srif-index.py \ с поддержой отчетов,
u-srif/u-srif-lookup.py \ ограничений, u-srif/u-srif-lookup.py \ ограничений,
+19
View File
@@ -0,0 +1,19 @@
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
# See tmpfiles.d(5) for details
# These files are considered legacy and are unnecessary on legacy-free
# systems.
d /run/lock 0777 root lock -
L /var/lock - - - - ../run/lock
# /run/lock/subsys is used for serializing SysV service execution, and
# hence without use on SysV-less systems.
d /run/lock/subsys 0775 root lock -
+32 -2
View File
@@ -63,6 +63,12 @@ address 20:26/100.0@easynet
# #
options NoDirZap NoJanus NoChat options NoDirZap NoJanus NoChat
# Protocol order for outgoing EMSI calls
# Tolerant to Options (i.e. you can order all kind of protos
# as of TZA,KER,JAN and SLK are not supported at all
# Default: HYD,JAN,DZA,ZAP,ZMO,TZA,SLK,KER
proto_order HYD,ZMO,ZAP,DZA,JAN,TZA,KER,SLK
# #
# Domain outbounds # Domain outbounds
# Domain <domain_name> <outbound_dir> <zone> # Domain <domain_name> <outbound_dir> <zone>
@@ -109,13 +115,13 @@ split_inbound yes
# #
# Path to your 4D outbound (use zone as extension) # Path to your 4D outbound (use zone as extension)
# #
#outbound_directory /var/spool/fido/bt/out outbound_directory /var/spool/fido/bt/out
# #
# Path to your AmigaDos style 4D outbound. # Path to your AmigaDos style 4D outbound.
# (You can use all outbound styles at the same time) # (You can use all outbound styles at the same time)
# #
amiga_outbound_directory /var/spool/fido/bt/out #amiga_outbound_directory /var/spool/fido/bt/out
# #
# Directory with your nodelists (for nodelist without full path) # Directory with your nodelists (for nodelist without full path)
@@ -253,6 +259,10 @@ mode_request 100660
# '~' 1 second delay # '~' 1 second delay
# '`' 1/4 second delay # '`' 1/4 second delay
# Modem lock directory (/var/lock as in FHS-3.0
# if you have it on tmpfs by systemd - read INSTALL.ru)
# uucp_lock_directory /var/lock
# #
# Yor modem devices names (will use first not locked one) # Yor modem devices names (will use first not locked one)
# ModemDev <device>[<:lock_speed>] # ModemDev <device>[<:lock_speed>]
@@ -342,6 +352,9 @@ max_speed 57600
flags XW,V34B,IDC,LMD flags XW,V34B,IDC,LMD
emsi_OH_time 22:00-07:30 emsi_OH_time 22:00-07:30
emsi_FR_time 22:30-05:30 emsi_FR_time 22:30-05:30
#emsi_send_tz no
#emsi_send_time no
# #
# Our receiver buffer size [bytes] # Our receiver buffer size [bytes]
@@ -442,6 +455,23 @@ skip_files_recv *.pif *.swp
# setsid - run command in a new session # setsid - run command in a new session
# useshell - run command by calling a shell (/bin/sh) # useshell - run command by calling a shell (/bin/sh)
# #
# Bforce will make environment for external programs
# which include these variables:
# $REM_ADDR_FTN - remote ftn address
# $REM_ADDR_INET - remote inet address
# $LOC_ADDR_FTN - local ftn address
# $LOC_ADDR_INET - local inet address
# $PASSWORD - session password
# $MAILER - remote mailer
# $LOCATION - remote location
# $SYSOP - remote SysOp name
# $SYSTEM_NAME - remote station name
# $PHONE - remote phone
# $FLAGS - remote flags
# $PROTECTED - password protected on both sides
# $LISTED - present in nodelist
# $INBOUND - current inbound path for this remote
#
#run_after_handshake [logout]/bin/echo "Hello, world!" #run_after_handshake [logout]/bin/echo "Hello, world!"
#run_after_session [nowait,setsid]/usr/local/lib/ftp/run-in #run_after_session [nowait,setsid]/usr/local/lib/ftp/run-in
# #
+1 -1
View File
@@ -1 +1 @@
0.24.2 0.25.2
+8 -16
View File
@@ -23,6 +23,8 @@
/* PID of our child process (if use fork) */ /* PID of our child process (if use fork) */
pid_t child_pid = 0; pid_t child_pid = 0;
char * mainenv[EXEC_MAX_NUM_ENVS+1];
const char *BFERR[] = { const char *BFERR[] = {
/* 00 */ "Successfull", /* 00 */ "Successfull",
/* 01 */ "Fatal error occured", /* 01 */ "Fatal error occured",
@@ -54,9 +56,6 @@ const char *BFERR[] = {
/* 27 */ "Unused entry" /* 27 */ "Unused entry"
}; };
/* Main environment on startup (copied) for external processes */
char ** mainenv;
static void deinit_opts(s_bforce_opts *opts); static void deinit_opts(s_bforce_opts *opts);
/* /*
@@ -257,24 +256,18 @@ int main(int argc, char *argv[], char *envp[])
int ch = 0; int ch = 0;
opts.runmode = MODE_UNDEFINED; opts.runmode = MODE_UNDEFINED;
int i = 0; int i = 0;
int argsz = 0;
memset(&opts, '\0', sizeof(s_bforce_opts));
// Copying environment
argsz = 4096;
//argsz = sysconf(_SC_ARG_MAX);
DEB((D_CONFIG, "Limits: %d\n",argsz));
mainenv = malloc(sizeof(mainenv)*argsz);
mainenv[0] = NULL; mainenv[0] = NULL;
i=0; i=0;
while (envp[i]) { while (envp[i]) {
mainenv[i] = malloc(strlen(envp[i])+2); mainenv[i] = malloc(strlen(envp[i])+2);
strcpy(mainenv[i], envp[i]); strcpy(mainenv[i], envp[i]);
mainenv[++i] = NULL; mainenv[++i] = NULL;
//fprintf(stderr,"BF-DEBUG: ENV: %s\n", mainenv[(i-1)]); DEB((D_FREE, "Program ENV: %s\n", mainenv[(i-1)]));
} }
memset(&opts, '\0', sizeof(s_bforce_opts));
// parsing // parsing
while( (ch=getopt(argc, argv, "hfI:p:n:l:a:u:oivC:S:dq")) != (int)-1 ) while( (ch=getopt(argc, argv, "hfI:p:n:l:a:u:oivC:S:dq")) != (int)-1 )
@@ -507,6 +500,9 @@ default:
exit: exit:
deinit_conf();
deinit_opts(&opts);
/* de-init sessenv */ /* de-init sessenv */
i=0; i=0;
while(mainenv[i]) { while(mainenv[i]) {
@@ -514,10 +510,6 @@ exit:
free(mainenv[i++]); free(mainenv[i++]);
} }
deinit_conf();
deinit_opts(&opts);
/* Shutdown logging services */ /* Shutdown logging services */
if( log_isopened() ) log_close(); if( log_isopened() ) log_close();
DEB((D_FREE, "good exit")); DEB((D_FREE, "good exit"));
+3
View File
@@ -84,6 +84,8 @@ s_conf_entry bforce_config[BFORCE_NUMBER_OF_KEYWORDS+1] = {
CONF_KEY(emsi_FR_time, CT_STRING), CONF_KEY(emsi_FR_time, CT_STRING),
CONF_KEY(emsi_OH_time, CT_STRING), CONF_KEY(emsi_OH_time, CT_STRING),
CONF_KEY(emsi_slave_sends_nak, CT_BOOLEAN), CONF_KEY(emsi_slave_sends_nak, CT_BOOLEAN),
CONF_KEY(emsi_send_tz, CT_BOOLEAN),
CONF_KEY(emsi_send_time, CT_BOOLEAN),
CONF_KEY(filebox, CT_FILEBOX), CONF_KEY(filebox, CT_FILEBOX),
CONF_KEY(filebox_directory, CT_PATH), CONF_KEY(filebox_directory, CT_PATH),
CONF_KEY(flags, CT_STRING), CONF_KEY(flags, CT_STRING),
@@ -144,6 +146,7 @@ s_conf_entry bforce_config[BFORCE_NUMBER_OF_KEYWORDS+1] = {
CONF_KEY(password, CT_PASSWORD), CONF_KEY(password, CT_PASSWORD),
CONF_KEY(phone, CT_STRING), CONF_KEY(phone, CT_STRING),
CONF_KEY(phone_translate, CT_TRANSLATE), CONF_KEY(phone_translate, CT_TRANSLATE),
CONF_KEY(proto_order, CT_STRING),
CONF_KEY(recode_file_in, CT_STRING), CONF_KEY(recode_file_in, CT_STRING),
CONF_KEY(recode_file_out, CT_STRING), CONF_KEY(recode_file_out, CT_STRING),
CONF_KEY(recode_intro_in, CT_STRING), CONF_KEY(recode_intro_in, CT_STRING),
+2 -2
View File
@@ -161,7 +161,7 @@ static int daemon_sysentry_init(s_sysentry *sysent)
strcpy(msg, "freqs holded"); strcpy(msg, "freqs holded");
} }
if( msg && *msg ) if( *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));
@@ -194,7 +194,7 @@ static bool 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 && *node->phone ) else if( node && *node->phone )
{ {
if( modem_isgood_phone(node->phone) ) if( modem_isgood_phone(node->phone) )
good_phone = TRUE; good_phone = TRUE;
+2 -2
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
+2 -1
View File
@@ -68,7 +68,8 @@ int req_createsrif(char *sname, char *req, char *rsp)
else else
fprintf(fp, "Sysop SysOp\n"); fprintf(fp, "Sysop SysOp\n");
if( aptr = session_1remote_address() ) 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;
+74 -22
View File
@@ -19,29 +19,50 @@
#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;
log("terminating on signal %d", sig); (void)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 )
log("connection closed"); (void)log("connection closed");
else else
log("terminating on signal %d", sig); (void)log("terminating on signal %d", sig);
} }
static int tcpip_connect2(struct sockaddr_in server) static int tcpip_connect2(struct addrinfo *ai)
{ {
int fd; int fd = -1;
char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
DEB((D_INFO, "tcpip_connect2: trying \"%s\" at port %d", struct addrinfo *rai;
inet_ntoa(server.sin_addr), (int)ntohs(server.sin_port)));
if( (fd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) for (rai = ai; rai != NULL; rai = rai->ai_next)
{
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"));
continue;
}
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);
@@ -84,9 +105,9 @@ static int tcpip_connect2(struct sockaddr_in server)
clearerr(stdout); clearerr(stdout);
clearerr(stderr); clearerr(stderr);
if( connect(0, (struct sockaddr*)&server, sizeof(server)) == -1 ) if( connect(0, rai->ai_addr, rai->ai_addrlen) == -1 )
{ {
logerr("can't connect to %s", inet_ntoa(server.sin_addr)); logerr("can't connect to %s", hbuf);
close(0); close(0);
close(1); close(1);
close(2); close(2);
@@ -99,8 +120,7 @@ static int tcpip_connect2(struct sockaddr_in server)
return 1; return 1;
} }
log("TCP/IP connect to %s on port %d", (void)log("TCP/IP connect success to %s on service %s", hbuf, sbuf);
inet_ntoa(server.sin_addr), (int)ntohs(server.sin_port));
return(0); return(0);
} }
@@ -108,14 +128,23 @@ static int tcpip_connect2(struct sockaddr_in server)
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; }
@@ -123,18 +152,34 @@ int tcpip_connect(const char *hostname, e_tcpmode tcpmode)
port = "binkp"; port = "binkp";
else if( tcpmode == TCPMODE_TELNET ) else if( tcpmode == TCPMODE_TELNET )
port = "telnet"; port = "telnet";
else /* Default service name is "fido" */ else /* Can not rely on /etc/services - it is not well-known port */
port = "fido"; 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;
if( rc == 0 ) nameres = getaddrinfo ( host, port, &aihints, &ai );
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);
@@ -159,12 +204,19 @@ 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;
return rc ? rc : tcpip_connect2(server); if (rc == 0 )
rc = tcpip_connect2(ai);
freeaddrinfo( aisave );
return rc;
} }
int tcpip_init(void) int tcpip_init(void)
+2 -2
View File
@@ -77,7 +77,7 @@ static char *lock_getname(const char *lockdir, const s_modemport *modemport)
ASSERT(modemport != NULL); ASSERT(modemport != NULL);
if( lockdir && *lockdir ) if( *lockdir )
lckname = (char *)xstrcpy(lockdir); lckname = (char *)xstrcpy(lockdir);
else else
lckname = (char *)xstrcpy(BFORCE_LOCK_DIR); lckname = (char *)xstrcpy(BFORCE_LOCK_DIR);
@@ -314,7 +314,7 @@ int port_lock(const char *lockdir, const s_modemport *modemport)
char *lckname; char *lckname;
char *tmpname, *p_tmpname; char *tmpname, *p_tmpname;
if( lockdir && *lockdir ) if( *lockdir )
tmpname = xstrcpy(lockdir); tmpname = xstrcpy(lockdir);
else else
tmpname = xstrcpy(BFORCE_LOCK_DIR); tmpname = xstrcpy(BFORCE_LOCK_DIR);
+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(s), timeout); return tty_write_timeout(s, strlen((char *)s), timeout);
} }
int tty_getc(int timeout) int tty_getc(int timeout)
+11 -8
View File
@@ -26,7 +26,6 @@ static char log_name[BF_MAXPATH+1] = BFORCE_LOGFILE;
static char log_extension[32] = ""; static char log_extension[32] = "";
static char log_ident[32] = ""; static char log_ident[32] = "";
static char log_ttyname[32] = ""; static char log_ttyname[32] = "";
static int log_sl_opened = FALSE;
#ifdef DEBUG #ifdef DEBUG
/* /*
@@ -284,6 +283,8 @@ int logerr(const char *s, ...)
#ifdef USE_SYSLOG #ifdef USE_SYSLOG
bool slog_active = FALSE;
const char *log_getfilename(int whatfor) const char *log_getfilename(int whatfor)
{ {
const char *p = "/dev/null"; const char *p = "/dev/null";
@@ -292,25 +293,27 @@ const char *log_getfilename(int whatfor)
bool log_isopened(void) bool log_isopened(void)
{ {
return log_sl_opened; return slog_active;
} }
int log_open(const char *logname, const char *ext, const char *tty) int log_open(const char *logname, const char *ext, const char *tty)
{ {
char *p = "bforce"; char *p = "bforce ";
p = xstrcat(p, BF_VERSION);
int fac = conf_number(cf_syslog_facility); int fac = conf_number(cf_syslog_facility);
if( tty && *tty ) if( tty && *tty )
strncpy(tty, p, sizeof(p)); strncpy(p, tty, sizeof(p));
openlog(p, LOG_PID, fac); openlog(p, LOG_PID, fac);
log_sl_opened = TRUE; slog_active = TRUE;
return 0; return 0;
} }
int log_reopen(const char *logname, const char *ext, const char *tty) int log_reopen(const char *logname, const char *ext, const char *tty)
{ {
if (!log_sl_opened) { if ( !slog_active ) {
return log_open(logname, ext, tty); return (log_reopen(logname, ext, tty));
} else return 0; } else
return 0;
} }
int log_close(void) int log_close(void)
+7 -7
View File
@@ -74,16 +74,17 @@ int exec_options_parse(char *str)
void exec_options_init(s_exec_options *eopt) void exec_options_init(s_exec_options *eopt)
{ {
int i = 0; int i = 0;
memset(eopt, '\0', sizeof(s_exec_options)); memset(eopt, '\0', sizeof(s_exec_options));
eopt->umask = EXEC_DEFAULT_UMASK; eopt->umask = EXEC_DEFAULT_UMASK;
eopt->envp[0] = NULL; eopt->envp[0] = NULL;
i = 0;
while(mainenv[i]) { while(mainenv[i]) {
DEB((D_FREE, "EXEC: Added ENV variable: %s\n", mainenv[i])); DEB((D_FREE,"EXEC: Added ENV variable: %s\n", mainenv[i]));
eopt->envp[i] = xmalloc(strlen(mainenv[i]) + 2); eopt->envp[i] = xmalloc(strlen(mainenv[i]) + 2);
sprintf(eopt->envp[i], mainenv[i]); strcpy(eopt->envp[i],mainenv[i]);
eopt->envp[++i] = NULL; eopt->envp[++i] = NULL;
} }
} }
void exec_options_deinit(s_exec_options *eopt) void exec_options_deinit(s_exec_options *eopt)
@@ -109,7 +110,6 @@ void exec_env_add(s_exec_options *eopt, const char *name, const char *value)
{ {
eopt->envp[i] = xmalloc(strlen(name) + strlen(value) + 2); eopt->envp[i] = xmalloc(strlen(name) + strlen(value) + 2);
sprintf(eopt->envp[i], "%s=%s", name, value); sprintf(eopt->envp[i], "%s=%s", name, value);
DEB((D_FREE, "EXEC: Added ENV variable: %s=%s\n", name, value));
eopt->envp[i+1] = NULL; eopt->envp[i+1] = NULL;
} }
} }
+6 -4
View File
@@ -117,12 +117,13 @@ int binkp_loop(s_binkp_state *bstate) {
// session criterium handshake criterium // session criterium handshake criterium
while (!bstate->complete || bstate->waiting_got) { while (!bstate->complete || bstate->waiting_got) {
DEB((D_24554, "loop s: %d r: %d p: %d sp: %d", bstate->batchsendcomplete, bstate->batchreceivecomplete, DEB((D_24554, ">>> BinkP loop sendcpl: %d recvcpl: %d phase: %d subphase: %d", bstate->batchsendcomplete, bstate->batchreceivecomplete,
bstate->phase, bstate->subphase)); bstate->phase, bstate->subphase));
if (bstate->continuesend) { if (bstate->continuesend) {
no_more_to_send = false; no_more_to_send = false;
bstate->continuesend = false; bstate->continuesend = false;
} }
if (have_to_write==0 && (!no_more_to_send || bstate->extracmd[0]!=-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) {
@@ -267,6 +268,7 @@ int binkp_loop(s_binkp_state *bstate) {
have_to_write -= n; have_to_write -= n;
} }
} }
DEB((D_24554,"+++ BinkP Loop ended with rc=%d", bstate->rc));
return bstate->rc; return bstate->rc;
} }
@@ -339,7 +341,7 @@ int binkp_getforsend(s_binkp_state *bstate, char *buf, int *block_type, unsigned
int my_sf, wr_pos; int my_sf, wr_pos;
int n; // read file int n; // read file
if (bstate->extracmd[0]!=-1) { if (bstate->extracmd[0]!=-1) {
DEB((D_24554, "send command from receiver %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);
*block_type = BINKP_BLK_CMD; *block_type = BINKP_BLK_CMD;
@@ -625,7 +627,7 @@ case 4:
return 1; return 1;
case 5: case 5:
DEB((D_24554, "nothing to send")); DEB((D_24554, "BinkP_GetForSend: nothing to send"));
return 2; return 2;
@@ -804,7 +806,7 @@ case 0:
bstate->frs = frs_data; bstate->frs = frs_data;
return 1; return 1;
} }
DEB((D_24554, "making M_GET to skip downloaded part")); DEB((D_24554, "making M_GET to skip downloaded part, file: %s, size %ld, time %ld, mode 0",recvfi.fn,recvfi.sz, recvfi.tm ));
bstate->extracmd[0] = BPMSG_GET; bstate->extracmd[0] = BPMSG_GET;
sprintf(bstate->extracmd+1, "%s %ld %ld %ld", sprintf(bstate->extracmd+1, "%s %ld %ld %ld",
bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total, bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total,
+1 -1
View File
@@ -45,7 +45,7 @@ int binkp_parsfinfo(const char *str, s_bpfinfo *fi, bool with_offset)
return -1; return -1;
} }
DEB((D_24554, "info to parse: %s", str)); DEB((D_24554, "info to parse: %s", str));
r = sscanf(str, with_offset? "%s %d %d %d": "%s %d %d", &fi->fn, &fi->sz, &fi->tm, &fi->offs); r = sscanf(str, with_offset? "%s %ld %ld %ld": "%s %ld %ld", &fi->fn, &fi->sz, &fi->tm, &fi->offs);
chkslash = fi->fn; chkslash = fi->fn;
while (1) { while (1) {
chkslash = strchr(chkslash, '/'); chkslash = strchr(chkslash, '/');
+2
View File
@@ -860,6 +860,8 @@ int p_rx_fopen(s_protinfo *pi, char *fn, size_t sz, time_t tm, mode_t mode)
size_t minfree = 0; size_t minfree = 0;
size_t needed_bytes_total = 0; size_t needed_bytes_total = 0;
DEB((D_FREE, "P_RX_FOPEN: File: %s, Size: %ld", fn, sz));
/* /*
* Check. May be we are receiving this file allready * Check. May be we are receiving this file allready
*/ */
+22
View File
@@ -598,6 +598,8 @@ void emsi_set_sysinfo(s_emsi *emsi, s_emsi *remote_emsi, int hrc,
s_cval_entry *addr_ptr; s_cval_entry *addr_ptr;
s_cval_entry *hide_ptr; s_cval_entry *hide_ptr;
s_faddr *primary = NULL; s_faddr *primary = NULL;
char xdt[EMSI_MAXXDATETIME+1];
time_t xtm;
const long options = conf_options(cf_options); const long options = conf_options(cf_options);
const long speed = conf_number(cf_max_speed); const long speed = conf_number(cf_max_speed);
@@ -737,6 +739,10 @@ void emsi_set_sysinfo(s_emsi *emsi, s_emsi *remote_emsi, int hrc,
{ emsi->compcodes.JAN = 1; } { emsi->compcodes.JAN = 1; }
if( (options & OPTIONS_NO_HYDRA) != OPTIONS_NO_HYDRA ) if( (options & OPTIONS_NO_HYDRA) != OPTIONS_NO_HYDRA )
{ emsi->compcodes.HYD = 1; } { emsi->compcodes.HYD = 1; }
DEB((D_HSHAKE,"Generated compcodes for caller: NCP:%x.ZMO:%x.ZAP:%x.DZA:%x.JAN:%x.HYD:%x.KER:%x.SLK:%x.TZA:%x",
emsi->compcodes.NCP, emsi->compcodes.ZMO, emsi->compcodes.ZAP,
emsi->compcodes.DZA, emsi->compcodes.JAN, emsi->compcodes.HYD,
emsi->compcodes.KER, emsi->compcodes.SLK, emsi->compcodes.TZA));
} }
else else
{ {
@@ -813,6 +819,22 @@ void emsi_set_sysinfo(s_emsi *emsi, s_emsi *remote_emsi, int hrc,
strnxcpy(emsi->flags, p_flags ? p_flags : "MO", sizeof(emsi->flags)); strnxcpy(emsi->flags, p_flags ? p_flags : "MO", sizeof(emsi->flags));
} }
/* ----------------------------------------------------------------- */
/* Data for {TZUTC} and {XDATETIME} field */
/* ----------------------------------------------------------------- */
if ( conf_boolean(cf_emsi_send_tz) ) {
emsi->have_tzutc = 1;
emsi->tzutc = (int)(time_gmtoffset());
}
if ( conf_boolean(cf_emsi_send_time) ) {
emsi->have_xdatetime = 1;
strnxcpy(xdt,time_string_format(xdt, EMSI_MAXXDATETIME, "%d.%m.%Y %H:%M:%S %z", xtm),EMSI_MAXXDATETIME);
strnxcpy(emsi->xdatetime, xdt, sizeof(emsi->xdatetime));
}
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
/* Data for {OHFR} field */ /* Data for {OHFR} field */
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
+38 -9
View File
@@ -134,6 +134,7 @@ int emsi_incoming(s_handshake_protocol *THIS)
int rc = HRC_OK; int rc = HRC_OK;
s_emsi *remote_emsi = NULL; s_emsi *remote_emsi = NULL;
s_emsi *local_emsi = NULL; s_emsi *local_emsi = NULL;
char *p = NULL;
ASSERT(THIS); ASSERT(THIS);
ASSERT(THIS->remote_data); ASSERT(THIS->remote_data);
@@ -198,18 +199,46 @@ int emsi_incoming(s_handshake_protocol *THIS)
/* /*
* Set protocol that we will use * Set protocol that we will use
* EMSI-II compatible as of v0.25
*/ */
if( remote_emsi->compcodes.HYD && !(options & OPTIONS_NO_HYDRA) ) if ( remote_emsi->compcodes.EII ) {
THIS->protocol = PROT_HYDRA; /* EMSI-II relies on protocol order sent by CALLER
else if( remote_emsi->compcodes.ZAP && !(options & OPTIONS_NO_ZEDZAP) ) * we must agree on first matching protocol
THIS->protocol = PROT_ZEDZAP; */
else if( remote_emsi->compcodes.ZMO && !(options & OPTIONS_NO_ZMODEM) ) p = xstrcpy( remote_emsi->proto_order );
THIS->protocol = PROT_ZMODEM;
else /* NCP */
{
THIS->protocol = PROT_NOPROT; THIS->protocol = PROT_NOPROT;
rc = HRC_NO_PROTOS; for ( p = strtok( p, "," ); p ; p=strtok( NULL, "," ) ) {
if ( !strcmp(p, "ZMO") && !(options & OPTIONS_NO_ZMODEM)) {
if ( THIS->protocol == PROT_NOPROT ) THIS->protocol = PROT_ZMODEM;
}
if ( !strcmp(p, "HYD") && !(options & OPTIONS_NO_HYDRA)) {
if ( THIS->protocol == PROT_NOPROT ) THIS->protocol = PROT_HYDRA;
}
if ( !strcmp(p, "ZAP") && !(options & OPTIONS_NO_ZEDZAP)) {
if ( THIS->protocol == PROT_NOPROT ) THIS->protocol = PROT_ZEDZAP;
}
if ( !strcmp(p, "DZA") && !(options & OPTIONS_NO_DIRZAP)) {
if ( THIS->protocol == PROT_NOPROT ) THIS->protocol = PROT_DIRZAP;
}
/* if ( !strcmp(p, "JAN") && !(options & OPTIONS_NO_JANUS)) {
if ( THIS->protocol == PROT_NOPROT ) THIS->protocol = PROT_JANUS;
} */
}
} else {
/* EMSI-I relies on our self order, not the CALLER's */
if( remote_emsi->compcodes.HYD && !(options & OPTIONS_NO_HYDRA) )
THIS->protocol = PROT_HYDRA;
else if( remote_emsi->compcodes.ZAP && !(options & OPTIONS_NO_ZEDZAP) )
THIS->protocol = PROT_ZEDZAP;
else if( remote_emsi->compcodes.ZMO && !(options & OPTIONS_NO_ZMODEM) )
THIS->protocol = PROT_ZMODEM;
else /* NCP */
{
THIS->protocol = PROT_NOPROT;
}
} }
if ( THIS->protocol == PROT_NOPROT ) rc = HRC_NO_PROTOS;
/* /*
* Check EMSI flags and set corresponding local HOLD flags * Check EMSI flags and set corresponding local HOLD flags
+160 -12
View File
@@ -103,6 +103,10 @@ char *emsi_createdat(s_emsi *emsi)
char *tmp = NULL; char *tmp = NULL;
char buf[100]; char buf[100];
char abuf[BF_MAXADDRSTR+1]; char abuf[BF_MAXADDRSTR+1];
char *p_order = NULL;
char *ord = NULL;
tmp = (char *)xstrcpy("**EMSI_DAT0000"); tmp = (char *)xstrcpy("**EMSI_DAT0000");
@@ -179,14 +183,79 @@ char *emsi_createdat(s_emsi *emsi)
tmp = add_char(tmp, '}'); tmp = add_char(tmp, '}');
} }
/* compatibility_codes */ /* compatibility_codes (EMSI behavior as FTS-0088) */
tmp = add_char(tmp, '{'); tmp = add_char(tmp, '{');
if( emsi->compcodes.NCP ) tmp = add_str(tmp, "NCP,");
if( emsi->compcodes.ZMO ) tmp = add_str(tmp, "ZMO,"); p_order = conf_string(cf_proto_order);
if( emsi->compcodes.ZAP ) tmp = add_str(tmp, "ZAP,");
if( emsi->compcodes.DZA ) tmp = add_str(tmp, "DZA,"); if ( !p_order ) {
if( emsi->compcodes.JAN ) tmp = add_str(tmp, "JAN,"); if( emsi->compcodes.HYD ) tmp = add_str(tmp, "HYD,");
if( emsi->compcodes.HYD ) tmp = add_str(tmp, "HYD,"); if( emsi->compcodes.JAN ) tmp = add_str(tmp, "JAN,");
if( emsi->compcodes.DZA ) tmp = add_str(tmp, "DZA,");
if( emsi->compcodes.ZAP ) tmp = add_str(tmp, "ZAP,");
if( emsi->compcodes.ZMO ) tmp = add_str(tmp, "ZMO,");
if( emsi->compcodes.TZA ) tmp = add_str(tmp, "TZA,");
if( emsi->compcodes.SLK ) tmp = add_str(tmp, "SLK,");
if( emsi->compcodes.KER ) tmp = add_str(tmp, "KER,");
if( emsi->compcodes.NCP ) tmp = add_str(tmp, "NCP,");
} else {
ord = xmalloc(4);
DEB((D_HSHAKE,"Protocol order found: %s", p_order));
ord = strncpy(ord, p_order,3);
ord[3] = '\0';
DEB((D_HSHAKE,"Protocol order chunk: %s", ord));
if ( ord == NULL )
DEB((D_HSHAKE,"EMSI create order error"));
if ( !strcmp(ord,"HYD") )
if ( emsi->compcodes.HYD) tmp = add_str(tmp, "HYD,");
if ( !strcmp(ord,"JAN") )
if ( emsi->compcodes.JAN) tmp = add_str(tmp, "JAN,");
if ( !strcmp(ord,"DZA") )
if ( emsi->compcodes.DZA) tmp = add_str(tmp, "DZA,");
if ( !strcmp(ord,"ZAP") )
if ( emsi->compcodes.ZAP) tmp = add_str(tmp, "ZAP,");
if ( !strcmp(ord,"ZMO") )
if ( emsi->compcodes.ZMO) tmp = add_str(tmp, "ZMO,");
if ( !strcmp(ord,"TZA") )
if ( emsi->compcodes.TZA) tmp = add_str(tmp, "TZA,");
if ( !strcmp(ord,"SLK") )
if ( emsi->compcodes.SLK) tmp = add_str(tmp, "SLK,");
if ( !strcmp(ord,"KER") )
if ( emsi->compcodes.KER) tmp = add_str(tmp, "KER,");
if ( !strcmp(ord,"NCP") )
if ( emsi->compcodes.NCP) tmp = add_str(tmp, "NCP,");
p_order = strchr(p_order, ',');
if ( p_order ) p_order = p_order+1; /* skip ',' */
while ( p_order ) {
ord = strncpy(ord, p_order,3);
ord[3] = '\0';
DEB((D_HSHAKE,"Protocol order chunk: %s", ord));
if ( ord == NULL )
DEB((D_HSHAKE,"EMSI create order error"));
if ( !strcmp(ord,"HYD") )
if ( emsi->compcodes.HYD) tmp = add_str(tmp, "HYD,");
if ( !strcmp(ord,"JAN") )
if ( emsi->compcodes.JAN) tmp = add_str(tmp, "JAN,");
if ( !strcmp(ord,"DZA") )
if ( emsi->compcodes.DZA) tmp = add_str(tmp, "DZA,");
if ( !strcmp(ord,"ZAP") )
if ( emsi->compcodes.ZAP) tmp = add_str(tmp, "ZAP,");
if ( !strcmp(ord,"ZMO") )
if ( emsi->compcodes.ZMO) tmp = add_str(tmp, "ZMO,");
if ( !strcmp(ord,"TZA") )
if ( emsi->compcodes.TZA) tmp = add_str(tmp, "TZA,");
if ( !strcmp(ord,"SLK") )
if ( emsi->compcodes.SLK) tmp = add_str(tmp, "SLK,");
if ( !strcmp(ord,"KER") )
if ( emsi->compcodes.KER) tmp = add_str(tmp, "KER,");
if ( !strcmp(ord,"NCP") )
if ( emsi->compcodes.NCP) tmp = add_str(tmp, "NCP,");
p_order = strchr(p_order, ',');
if ( p_order ) p_order = p_order+1; /* skip ',' */
}
free(ord);
}
if( emsi->compcodes.FRQ ) tmp = add_str(tmp, "FRQ,"); if( emsi->compcodes.FRQ ) tmp = add_str(tmp, "FRQ,");
if( emsi->compcodes.NRQ ) tmp = add_str(tmp, "NRQ,"); if( emsi->compcodes.NRQ ) tmp = add_str(tmp, "NRQ,");
if( emsi->compcodes.ARC ) tmp = add_str(tmp, "ARC,"); if( emsi->compcodes.ARC ) tmp = add_str(tmp, "ARC,");
@@ -325,10 +394,15 @@ char *emsi_createdat(s_emsi *emsi)
tmp = add_char(tmp, '{'); tmp = add_char(tmp, '{');
tmp = add_char(tmp, '['); tmp = add_char(tmp, '[');
sprintf(buf, "+%04d", emsi->tzutc); /* BUGGY */
tmp = add_str(tmp, buf); // sprintf(buf, "+%04d", emsi->tzutc);
ord = xmalloc(6);
ord = xstrcpy(time_string_gmtoffset(ord));
ord[5] = '\0';
tmp = add_str(tmp, ord);
tmp = add_char(tmp, ']'); tmp = add_char(tmp, ']');
tmp = add_char(tmp, '}'); tmp = add_char(tmp, '}');
free(ord);
} }
/* {XDATE} indentifier.. What's the fucking invention :-/ /* {XDATE} indentifier.. What's the fucking invention :-/
@@ -450,6 +524,8 @@ int emsi_parsedat(char *emsi_dat, s_emsi *emsi)
{ {
int i; int i;
char *tmp, *p, *q, *n; char *tmp, *p, *q, *n;
unsigned int tzh, tzm,tzn ;
char *tzc, *otmp;
while( (tmp=get_field(&emsi_dat, '{', '}')) != NULL ) while( (tmp=get_field(&emsi_dat, '{', '}')) != NULL )
{ {
@@ -525,13 +601,64 @@ int emsi_parsedat(char *emsi_dat, s_emsi *emsi)
/* compatibility codes */ /* compatibility codes */
if( (p=get_field(&emsi_dat, '{', '}')) == NULL ) return(1); if( (p=get_field(&emsi_dat, '{', '}')) == NULL ) return(1);
DEB((D_HSHAKE, "parse_emsidat: compatibility codes: %s", p)); DEB((D_HSHAKE, "parse_emsidat: compatibility codes: %s", p));
emsi->proto_order[0] = '\0';
for( p = strtok(p, ","); p; p=strtok(NULL, ",") ) for( p = strtok(p, ","); p; p=strtok(NULL, ",") )
{ {
if( !strcmp(p, "ZMO") ) emsi->compcodes.ZMO = 1; /* if( !strcmp(p, "ZMO") ) emsi->compcodes.ZMO = 1;
else if( !strcmp(p, "ZAP") ) emsi->compcodes.ZAP = 1; else if( !strcmp(p, "ZAP") ) emsi->compcodes.ZAP = 1;
else if( !strcmp(p, "DZA") ) emsi->compcodes.DZA = 1; else if( !strcmp(p, "DZA") ) emsi->compcodes.DZA = 1;
else if( !strcmp(p, "JAN") ) emsi->compcodes.JAN = 1; else if( !strcmp(p, "JAN") ) emsi->compcodes.JAN = 1;
else if( !strcmp(p, "HYD") ) emsi->compcodes.HYD = 1; else if( !strcmp(p, "HYD") ) emsi->compcodes.HYD = 1;
*/
if ( !strcmp(p, "ZMO") ) {
emsi->compcodes.ZMO = 1;
otmp = strcat(emsi->proto_order,"ZMO,");
strcpy(emsi->proto_order, otmp);
DEB((D_HSHAKE,"Parse_emsidat: ordered proto added: %s", otmp));
}
else if ( !strcmp(p, "ZAP") ) {
emsi->compcodes.ZAP = 1;
otmp = strcat(emsi->proto_order,"ZAP,");
strcpy(emsi->proto_order, otmp);
DEB((D_HSHAKE,"Parse_emsidat: ordered proto added: %s", otmp));
}
else if ( !strcmp(p, "DZA") ) {
emsi->compcodes.DZA = 1;
otmp = strcat(emsi->proto_order,"DZA,");
strcpy(emsi->proto_order, otmp);
DEB((D_HSHAKE,"Parse_emsidat: ordered proto added: %s", otmp));
}
else if ( !strcmp(p, "JAN") ) {
emsi->compcodes.JAN = 1;
otmp = strcat(emsi->proto_order,"JAN,");
strcpy(emsi->proto_order, otmp);
DEB((D_HSHAKE,"Parse_emsidat: ordered proto added: %s", otmp));
}
else if ( !strcmp(p, "HYD") ) {
emsi->compcodes.HYD = 1;
otmp = strcat(emsi->proto_order,"HYD,");
strcpy(emsi->proto_order, otmp);
DEB((D_HSHAKE,"Parse_emsidat: ordered proto added: %s", otmp));
}
else if ( !strcmp(p, "KER") ) {
emsi->compcodes.KER = 1;
otmp = strcat(emsi->proto_order,"KER,");
strcpy(emsi->proto_order, otmp);
DEB((D_HSHAKE,"Parse_emsidat: ordered proto added: %s", otmp));
}
else if ( !strcmp(p, "TZA") ) {
emsi->compcodes.TZA = 1;
otmp = strcat(emsi->proto_order,"TZA,");
strcpy(emsi->proto_order, otmp);
DEB((D_HSHAKE,"Parse_emsidat: ordered proto added: %s", otmp));
}
else if ( !strcmp(p, "SLK") ) {
emsi->compcodes.SLK = 1;
otmp = strcat(emsi->proto_order,"SLK,");
strcpy(emsi->proto_order, otmp);
DEB((D_HSHAKE,"Parse_emsidat: ordered proto added: %s", otmp));
}
else if( !strcmp(p, "NCP") ) emsi->compcodes.NCP = 1; else if( !strcmp(p, "NCP") ) emsi->compcodes.NCP = 1;
else if( !strcmp(p, "NRQ") ) emsi->compcodes.NRQ = 1; else if( !strcmp(p, "NRQ") ) emsi->compcodes.NRQ = 1;
else if( !strcmp(p, "ARC") ) emsi->compcodes.ARC = 1; else if( !strcmp(p, "ARC") ) emsi->compcodes.ARC = 1;
@@ -542,6 +669,9 @@ int emsi_parsedat(char *emsi_dat, s_emsi *emsi)
else if( !strcmp(p, "BBS") ) emsi->compcodes.BBS = 1; else if( !strcmp(p, "BBS") ) emsi->compcodes.BBS = 1;
else if( !strcmp(p, "HFR") ) emsi->compcodes.HFR = 1; else if( !strcmp(p, "HFR") ) emsi->compcodes.HFR = 1;
} }
/* Delete last comma from order list */
emsi->proto_order[strlen(emsi->proto_order)-1] = '\0';
DEB((D_HSHAKE,"Ordered compcodes: %s",emsi->proto_order));
/* mailer information */ /* mailer information */
if( (p=get_field(&emsi_dat, '{', '}')) == NULL ) return(1); if( (p=get_field(&emsi_dat, '{', '}')) == NULL ) return(1);
@@ -646,13 +776,31 @@ int emsi_parsedat(char *emsi_dat, s_emsi *emsi)
} }
else if( strcmp(tmp, "TZUTC") == 0 ) else if( strcmp(tmp, "TZUTC") == 0 )
{ {
emsi->have_tzutc = 1;
if( (p=get_field(&emsi_dat, '{', '}')) == NULL ) return(1); if( (p=get_field(&emsi_dat, '{', '}')) == NULL ) return(1);
if( (p=get_field(&p, '[', ']')) == NULL ) return(1); if( (p=get_field(&p, '[', ']')) == NULL ) return(1);
/* Parse EMSI TZUTC in fmt (+|-)HHMM */
if( *p ) {
tzc = malloc(2);
DEB((D_HSHAKE, "Got TZUTC=%s for parsing", p));
tzn = sscanf( p, "%1c%02u%02u", tzc, &tzh, &tzm);
tzc[1] = '\0';
if ( tzn == 3) {
DEB((D_HSHAKE, "Got TZC=%s , H=%u, M=%u", tzc, tzh,tzm));
emsi->have_tzutc = 1;
if ( strcmp(tzc, "-") == 0 ) {
emsi->tzutc = -(tzh*60 + tzm);
} else {
emsi->tzutc = tzh*60 + tzm;
}
} else {
DEB((D_HSHAKE,"TZUTC value not parsed!"));
}
free(tzc);
}
} }
else else
{ {
DEB((D_HSHAKE, "Step - no known EMSI-part - got %s", tmp));
strnxcat(emsi->addons, "{", sizeof(emsi->addons)); strnxcat(emsi->addons, "{", sizeof(emsi->addons));
strnxcat(emsi->addons, tmp, sizeof(emsi->addons)); strnxcat(emsi->addons, tmp, sizeof(emsi->addons));
strnxcat(emsi->addons, "}", sizeof(emsi->addons)); strnxcat(emsi->addons, "}", sizeof(emsi->addons));
+4 -2
View File
@@ -71,6 +71,7 @@ int answ_system(e_session type, char *connstr, int inetd)
if( inetd ) if( inetd )
{ {
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 ) else if( getpeername(0, (struct sockaddr*)&client, &clientlen) == -1 )
@@ -116,9 +117,10 @@ int answ_system(e_session type, char *connstr, int inetd)
port_carrier(0, TRUE); port_carrier(0, TRUE);
rc = session(); rc = session();
log("Session ended up, rc=%d, inetd=%d", rc, inetd);
if( (inetd != 0) && (state.inet = FALSE) ) if( ( !inetd ) )
{ {
log("Deactivating modem port");
port_deinit(0, &oldtio); port_deinit(0, &oldtio);
port_close(); port_close();
} }
+1
View File
@@ -145,6 +145,7 @@ char *file_name_makesafe(char *filename)
char *file_getname(char *filename) char *file_getname(char *filename)
{ {
char *p = strrchr(filename, '/'); char *p = strrchr(filename, '/');
DEB((D_FREE, "File_getname: %s", (p ? p + 1 : filename) ));
return p ? p + 1 : filename; return p ? p + 1 : filename;
} }
+12 -9
View File
@@ -173,18 +173,20 @@ 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 = gmt.tm_yday - local.tm_yday; long tz = 0; /* = 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 += gmt.tm_hour - local.tm_hour;
tz *= 60; tz *= 60;
tz += gmt.tm_min - local.tm_min; tz += gmt.tm_min - local.tm_min;*/
tz = (gmt.tm_hour*60+gmt.tm_min) - (local.tm_hour*60+local.tm_min);
return tz; return tz;
} }
@@ -200,12 +202,13 @@ 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)?'+':'-';
int hour = tz/60; tz = abs(tz);
int mint = tz%60; unsigned int hour = tz/60;
unsigned int mint = tz%60;
sprintf(buffer, "%c%02d%02d", sign, hour, mint); sprintf(buffer, "%c%02u%02u", sign, hour, mint);
return buffer; return buffer;
} }
+2 -2
View File
@@ -181,8 +181,8 @@ typedef struct {
*/ */
extern const char *BFERR[]; extern const char *BFERR[];
extern char * mainenv[];
int daemon_run(const char *confname, const char *incname, bool quit); int daemon_run(const char *confname, const char *incname, bool quit);
extern char ** mainenv;
#endif #endif
+3
View File
@@ -179,6 +179,8 @@ typedef enum {
cf_emsi_FR_time, cf_emsi_FR_time,
cf_emsi_OH_time, cf_emsi_OH_time,
cf_emsi_slave_sends_nak, cf_emsi_slave_sends_nak,
cf_emsi_send_tz,
cf_emsi_send_time,
cf_filebox, cf_filebox,
cf_filebox_directory, cf_filebox_directory,
cf_flags, cf_flags,
@@ -239,6 +241,7 @@ typedef enum {
cf_password, cf_password,
cf_phone, cf_phone,
cf_phone_translate, cf_phone_translate,
cf_proto_order,
cf_recode_file_in, cf_recode_file_in,
cf_recode_file_out, cf_recode_file_out,
cf_recode_intro_in, cf_recode_intro_in,
+1 -1
View File
@@ -19,7 +19,7 @@
#define EXEC_OPT_LOGOUT 0x04 #define EXEC_OPT_LOGOUT 0x04
#define EXEC_OPT_USESHELL 0x08 #define EXEC_OPT_USESHELL 0x08
#define EXEC_MAX_NUM_ENVS 4096 #define EXEC_MAX_NUM_ENVS 4095
#define EXEC_MAX_NUM_ARGS 20 #define EXEC_MAX_NUM_ARGS 20
#define EXEC_DEFAULT_UMASK ~(S_IRUSR|S_IWUSR); #define EXEC_DEFAULT_UMASK ~(S_IRUSR|S_IWUSR);
+5 -1
View File
@@ -116,7 +116,10 @@ struct compcodes
ZAP:1, /* ZedZap (Zmodem variant) */ ZAP:1, /* ZedZap (Zmodem variant) */
DZA:1, /* DirectZAP (Zmodem variant) */ DZA:1, /* DirectZAP (Zmodem variant) */
JAN:1, /* Janus */ JAN:1, /* Janus */
HYD:1; /* Hydra */ HYD:1, /* Hydra */
KER:1, /* Kermit, not supported */
SLK:1, /* SEALink, not supported */
TZA:1; /* TrapDoor DirectZAP, not supported */
UINT16 FRQ:1, /* The system will accept and process FREQs */ UINT16 FRQ:1, /* The system will accept and process FREQs */
NRQ:1, /* No file requests accepted by this system */ NRQ:1, /* No file requests accepted by this system */
@@ -148,6 +151,7 @@ struct emsi
char passwd[EMSI_MAXPASSWD+1]; char passwd[EMSI_MAXPASSWD+1];
s_linkcodes linkcodes; /* XXn linkcodes contained in eaddr */ s_linkcodes linkcodes; /* XXn linkcodes contained in eaddr */
s_compcodes compcodes; s_compcodes compcodes;
char proto_order[EMSI_MAXADDONS+1];
char m_pid[EMSI_MAXMPID+1]; char m_pid[EMSI_MAXMPID+1];
char m_name[EMSI_MAXMNAME+1]; char m_name[EMSI_MAXMNAME+1];
char m_ver[EMSI_MAXMVER+1]; char m_ver[EMSI_MAXMVER+1];
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+199
View File
@@ -0,0 +1,199 @@
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
@@ -0,0 +1,202 @@
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
@@ -0,0 +1,202 @@
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
@@ -0,0 +1,6 @@
#!/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
@@ -0,0 +1,50 @@
‚®â, ­ ¢¥ï«®:
‡¢¥§¤ë ®âà ¦ «¨áì ¢ ¥ñ £« § å.  ­ìè¥, ¥é¥ ¬¥áïæ ­ § ¤ ¨å ­¥ ¡ë«® ¢¨¤­® ¢ ç¥à⥠£®à®¤ . ‘¢¥â ä®­ à¥© ¨ ᬮ£ § £«ãè «¨ ¨å á« ¡®¥ ¬¥àæ ­¨¥. ‚ᥠ¨§¬¥­¨«®áì. ˆ ®¤­¨¬ ¨§ ­¥¬­®£¨å ¯«îᮢ á«®¦¨¢è¥©áï á¨âã æ¨¨ ¡ë«® ¬¥àæ ­¨¥ §¢¥§¤ ¢ ¥ñ £« § å, ¨ ¢®§¤ãå, ª ¦¥âáï áâ « ç¨é¥. “ ¢á¥å ã ­ á ª®£¤  â® ¡ë«  à ¡®â , ¨ ¡ë« ¤®¬. “ ­¥ª®â®àëå ¡ë«¨ ¤¥â¨. “ ‹¥­ë ¡ë«  ¤®çª . Ž­  à ¡®â «  ¡ à¬¥­è®©,   ¯® ¢¥ç¥à ¬ ¯®¤à ¡ â뢠«  ¢ "ª«ã¡¥ §­ ª®¬áâ¢". ®¯à®áâã £®¢®àï - ¡ë«  ¯à®áâ¨âã⪮©. ’¥¯¥àì ¥© 㦥 ­¥ ¯à¨å®¤¨âáï ¥§¤¨âì ¯® ­¥§­ ª®¬ë¬ ª«¨¥­â ¬, ª ¦¤ë© à § ¯¥à¥¤ ¤¢¥àìî ª¢ àâ¨àë ªà¥áâ¨âìáï, ¨ ¬®«¨âìáï, çâ® ¡ë ¢á¥ ¯à®è«® ª ª ­ ¤®. ⮠⮦¥ ¯«îá. ® ⥯¥àì ã ­¥ñ ­¥â ¤®çª¨. Ž­  ¯®â¥àï« áì ¢ ¯¥à¢ë¥ ¤­¨, ª ª ⮫쪮 ¢á¥ íâ® ­ ç¨­ «®áì.
‹¥­  ¡ë«  "­  ¢ë§®¢¥", ª®£¤  ¨á祧«® í«¥ªâà¨ç¥á⢮. ¨ªâ® ¥é¥ ­¥ §­ «, çâ® íâ® á¥à쥧­®. Œ®¡¨«ì­ ï á¢ï§ì ­¥ à ¡®â « , £®à®¤ ¯®£à㧨«áï ¢® âì¬ã §  ®ª­ ¬¨ ®¤­ ª®¬­ â­®© ª¢ àâ¨àë, ¢ ª®â®à®© ¢®§¡ã¦¤¥­­ë© ¬ã¦ç¨­  ª®­ç « ¢ ¯à¥§¥à¢ â¨¢,   ‹¥­  áç¨â «  á¥ªã­¤ë ¤® ®ç¥à¥¤­®£® ¢ë§®¢ . Ž­  ­¥ ¬®£«  ª ª ®¡ëç­® ¯à¨­ïâì ¤ãè, ¨ ¢ë§¢ âì â ªá¨, ¨ ¯®á«¥ ®á®§­ ­¨ï í⮣®, ¯à®áâ® ­ ç «  ®¤¥¢ âìáï. ¥«ì¥ ¯® ¯à¨¢ë窥 ¡ë«® á«®¦¥­® ®¤­®© ªã窮© à冷¬ á ªà®¢ âìî. Œã¦ç¨­ , ¨¬ï ª®â®à®£® ®­  ­¥ § å®â¥«  § ¯®¬¨­ âì ᪠§ « ¥© ᯠᨡ® ¨ ®âªàë« ¤¢¥àì, çâ® â® ¯à®¢®àç ¢ ­ ¯®á«¥¤®ª ­  "¤®«¡ ­­ëå í«¥ªâਪ®¢"...
‹¥­¥ ¡ë«® ®ç¥­ì ¯à¨ïâ­® ¢ë©â¨ ­  ᢥ¦¨© ¢®§¤ãå, ¯®á«¥ ¯à®¯ å襩 ¯¥à¥£ à®¬ ª®¬­ âã誨. Ž­  è«  ¯® ⥬­ë¬ 㫨栬 £®à®¤ , è«  ­  "¡ §ã" ¯¥èª®¬, ¨ íâ  ­¥¯à®£«ï¤­ ï â쬠 ¢®ªà㣠¤«ï ­¥ñ ᥩç á ¡ë«  ®âà ¦¥­¨¥¬ ¢­ãâ७­¥£® á®áâ®ï­¨ï, ¨ ¯®í⮬㠮­  ­ á« ¦¤ « áì í⮩ ¯à®£ã«ª®©. Ž­  ¥é¥ ­¥ §­ « , çâ® í«¥ªâà¨ç¥á⢮ ¨ ¢®¤®á­ ¡¦¥­¨¥ 㦥 ­¥ ¢®ááâ ­®¢ïâ. Ž­  ­¥ ¬®£«  ¯®¤ã¬ âì, çâ® ç¥à¥§ âਠç á  ¥ñ ¯ï⨫¥â­ïï ¤®çª , ¨á¯ã£ ¢è¨áì ⥬­®âë ¨ ®¤¨­®ç¥á⢠, ¢ë©¤¥â ¨§ ª¢ àâ¨àë, ¨ ¯à®¯ ¤¥â ­ ¢á¥£¤ . Ž­  ¥é¥ ­¥ §­ « , çâ® ¥ñ ¯®¨áª¨ ¡ã¤ãâ ¡¥á¯®«¥§­ë ¨ ®¯ á­ë... Ž­  ¯à®áâ® è«  ¯® 㫨æ¥.
‘¥©ç á ¬ë á⮨¬ ª®«ì殬, à¥è ¥¬ çâ® ¤¥« âì. „¬¨â਩ ˆ¢ ­®¢¨ç á«¥¢  ®â ¬¥­ï, ¤¯«¥¥ ‘ è®ª, ‹¥­  ¨ „¨¬ .   ᪠¬¥©ª¥ ­¥¤ «¥ª® ᨤïâ ‹¥à  ¨ Ž«ï. ‹¨æ  ¢® â쬥 ¥«¥ à §«¨ç¨¬ë. “ ¬ã¦ç¨­ - ¯®ªàëâë é¥â¨­®©, ã ¤¥¢ã襪 ®áã­ã«¨áì ¨ ãáâ «¨..
-   Š¨à®¢  ï á«ëè « ¢ëáâ५ë. ’㤠 ¨¤â¨ ¡¥á¯®«¥§­®. - „¬¨â਩ ˆ¢ ­®¢¨ç ¡ë« ® ­ ¯ã£ ­.
- „  ­¨ªâ® ⥡ï â㤠 ­¥ § áâ ¢«ï¥â ¨¤â¨! - ᪠§ « ‘ è®ª.
- „ , ­® ­ ¬ ­ã¦­® ¤®áâ âì ¥é¥ ¥¤ë. - ®â¢¥â¨« ï.
“«¨æë £®à®¤  ¡ë«¨ ¯ãáâë ⮫쪮 á ¢¨¤ã.   á ¬®¬ ¤¥«¥ - ¢ ç¥à­ëå £« §­¨æ å §¤ ­¨© î⨫¨áì ãæ¥«¥¢è¨¥. €£à¥áᨢ­ë¥, ®§«®¡«¥­­ë¥, £®â®¢ë¥ ­  ¢á¥. ‹î¤¨ ªã窮¢ «¨áì ¯® á«ãç ©­®¬ã ¯à¨§­ ªã. ’ ª ¨ ­ è  £à㯯  ®¡à §®¢ « áì á«ãç ©­®. ޤ­®¬ã ᥩç á ­¥ ¢ë¦¨âì. ® ¯à®¡«¥¬  ¢ ⮬, çâ® ¬ë ­¥ ¤®¢¥à﫨 ¤à㣨¬. Š ª ¢¯à®ç¥¬ ¨ ®­¨ ­ ¬. “ ­ á ¥é¥ ¡ë«  ¥¤ , ¥ñ 墠⨫® ¡ë ­  ­¥¤¥«î ¬ ªá¨¬ã¬.
- Šâ® ­¨¡ãâì á«¥¤¨« §  í⨬ ¤®¬®¬? - ï 㪠§ « ­  ¤®¬ 20, ª®à¯ãá 1 ¯® ‹¥­¨­£à ¤áª®© ­ ¡¥à¥¦­®©. â® ¡ë«  ¯ïâ¨íâ ¦ª , ¨ ®­  £®à¥« . ƒ®à¥«  㦥 ¤ ¢­®. ˆ§ ®¤­®£® ¯®¤ê¥§¤  ¯®áâ®ï­­® ¢ «¨« ¤ë¬. —¥à­ë©, £ãá⮩. ® ¢á¯®«®å®¢ ¯« ¬¥­¨ ­¥ ¡ë«® ¢¨¤­®.
- Ÿ á«¥¤¨« , ­¨ªâ® ­¥ ¢å®¤¨«. Š®¬ã ­ã¦¥­ íâ® £®àï饥 ¯¥ª«®? - ‹¥à  ¯®¤ «  £®«®á ᮠ᪠¬¥©ª¨.
- ®©¤¥¬ â㤠. - ‘ è®ª ­¥ á¯à è¨¢ «, ®­ ¯à®áâ® ª®­áâ â¨à®¢ « ä ªâ.
¨ªâ® ­¥ ᯮਫ. ‚ᥠ®ç¥­ì ãáâ «¨. ˆ ¨¤¥ï ®¡è à¨âì £®àï騩 ¤®¬ ¢á¥¬ ¯®ª § « áì ¯à ¢¨«ì­®©. Œë ¯¥à¥¤¥à­ã«¨ § â¢®àë, ¯à®¢¥à¨«¨ £à ­ âë, ¨ ¯®è«¨.
„¬¨â਩ ˆ¢ ­®¢¨ç ¡ë« ãç¨â¥«¥¬ ¢ â¥å­¨ªã¬¥. ‚ â®â ¤¥­ì ®­ ¯à¨è¥« ¤®¬®©,  ªªãà â­® à ááâ ¢¨« ¢á¥ ¯à®¤ãªâë ¢ 宫®¤¨«ì­¨ª, ª®â®àë¥ ¯à¨­¥á ¢ á㬪¥.  áá⥫¨« ᪠â¥àâì ­  á⮫¥. „®áâ « äã¦¥à ¨§ á⥭­®£® 誠ä . 冷¬ ¯®«®¦¨« ¡«î¤æ¥ á ­ à¥§ ­­ë¬ áë஬. ãâ뫪㠢¨­  "Œ¥à«®", ªà¥¯ª®¥ ¯®«ãá« ¤ª®¥. ‚›ª«î稫 ᢥâ. ‚ª«î稫 ⥫¥¢¨§®à.  «¨« ¯®«­ë© ä㦥à. Ž­ ¯à¨£®â®¢¨«áï ¯à®¢¥á⨠®ç¥à¥¤­®© ¯à¨ïâ­ë© ¢¥ç¥à ¢ ¯®«­®¬ ®¤¨­®ç¥á⢥.
—¥à¥§ ­¥¤¥«î ¯®á«¥ ⮣® ª ª á«ã稫 áì ª â áâà®ä  ®­ 㦥 «¥£ª® १ « «î¤¥© ­®¦®¬, ª®â®àë¬ ª®£¤  ⮠१ « áëà. Ž­ 㦥 «¥£ª® ¯¨« ¢®¤ªã, ¨ § ¡ë« ­ §¢ ­¨¥ «î¡¨¬®© ⥫¥¯¥à¥¤ ç¨. € ª®¬ ­¤  "‡¥­¨â", §  ª®â®àãî ®­ ª®£¤  â® ¡®«¥« - ¤«ï ­¥£® áâ «  祬 â® ¬¨ä¨ç¥áª¨¬, ¨§ ¤à㣮£® ¬¨à . ˆ â¥å «î¤¥©, ª®â®àë¬ ®­ áâ ¢¨« ª®£¤  â® ®æ¥­ª¨ ¢ ª« áá¥, ®­ 㡨¢ « ­¥ § ¤ã¬ë¢ ïáì. ˆ ¤ ¦¥ á ª ª¨¬ ⮠㤮¢®«ìá⢨¥¬ ¨ á ­¥ª®â®à®© ¤®«¥© á ¬®®â¤ ç¨ ¨ ᬥª «ª¨...
ˆ ª®­¥ç­® ¦¥ ¨à®­¨¨. ¥§ ­¥ñ ᥩç á ­¥ ¯à®¦¨âì. ‚ ¯®¤ê¥§¤¥ ¯ïâ¨íâ ¦ª¨ ­¥á«® á¬à ¤®¬. Œë ¡ëáâà® ®¤¥«¨ ¬ à«¥¢ë¥ ¯®¢ï§ª¨. ‘¯ã᪠¢­¨§, ¯®¤¢ «, ¯à¥¢à é¥­­ë© ¢ ᪫ ¤ ¯à®¤ãªâ®¢®£® ¬ £ §¨­ . â® ¨ ¥áâì ­ è  楫ì. „¨¬ , ¤¥à¦  ¯¨á⮫¥â ­ £®â®¢¥ ¢áâ « ®â ¤¢¥à¨ á«¥¢ . ‘ è®ª á¯à ¢ . ã   ¬­¥ ­ã¦­® ¡ë«® ¢§«®¬ âì ¦¥«¥§­ãî ¤¢¥àì. Š ¦¤ë© ¨§ ­ á ⥯¥àì áâ « ¢ í⮬ ᯥ樠«¨á⮬. Ÿ ­¥ áâ « ¯®¤¡¨à âì ª«îç. Ÿ à §à廊« ®¡®©¬ã ᢮¥£® "¬ ª à®¢ " ¢®ªà㣠§ ¬ª . „¬¨â਩ ˆ¢ ­®¢¨ç, ¨­â¥««¨£¥­â­® ¯à¨«®¦¨«áï ­®£®© ¯® ¤¢¥à¨ ¨ ¯¥à¢ë© ¢®à¢ «áï ¢ ¯®¬¥é¥­¨¥. ®ª  ï ¯¥à¥§ à裂« ®¡®©¬ã, ï 㦥 ãá«ëè « ¢ëáâ५ë. Œë ¤¥©á⢮¢ «¨ ¡ëáâà® ¨ ¡¥§¦ «®áâ­®. „¥¢ã誨 áâ®ï«¨ á­ à㦨. ˆ¬ ®â¤ «¨ áâ àë© ª « è­¨ª®¢, ­  ¢á直© á«ãç ©.
‹¥à  •®â¥«  ¯à®áâ® ¯®¤®£à¥âì ¢®¤ã, çâ® ¡ë ¢ë¯¨âì £®àï祣® ç î. ‚¯¥à¢ë¥, á¯ãáâï ¤¢  ¤­ï ª ª ®âª«î稫¨ í«¥ªâà¨ç¥á⢮, ®­  ®áâ®à®¦­® ¢ëè«  ­  㫨æã. ‚ ®ª­® ®­  ¢¨¤¥« , ª ª ¢® ¤¢®à¥ ¤®¬  «î¤¨ à §®¦£«¨ ª®áâ¥à. ë«  ®á¥­ì, ¯®£®¤  ­¥ à ¤®¢ «  ⥯«®¬, ¨ à ááç¨â뢠âì ¡ë«® ®á®¡® ­¥ ­  çâ®. …ñ áã¯à㣠¡ë« ¢ ª®¬ ­¤¨à®¢ª¥ ¢ ¨â¥à¥, ¨ ®­  ­¥ å®â¥«  ­¨ç¥£® ¡¥§ ­¥£® ¯à¥¤¯à¨­¨¬ âì, ¯®ª  ®­ ­¥ ¢¥à­¥âáï. ‘®á¥¤ª , ¯®¦¨« ï ¦¥­é¨­ , ¡ë«  ¥¤¨­á⢥­­ë¬ 祫®¢¥ª®¬, á ª¥¬ ®­  ®¡é « áì ¢ íâ® ¢à¥¬ï. Ž­  à á᪠§ «  ¥©, çâ® í«¥ªâà¨ç¥á⢮ ¯®ç¨­¨âì ¯®ª  ­¥ 㤠¥âáï. —â® ¯® ­¥¯®­ïâ­ë¬ ¯à¨ç¨­ ¬ ­¥ à ¡®â îâ ¤ ¦¥ £¥­¥à â®àë ¢  ¢â®¬®¡¨«ïå. ˆ çâ® ¢à®¤¥ ¡ë íâ® ¯à®¡«¥¬  ­¥ ⮫쪮 ¢ Œ®­ç¥£®à᪥, ­® ¨ ¢® ¢á¥© ¬ãଠ­áª®© ®¡« áâ¨.
‚ ¯¥à¢ë© ¤¥­ì, ¯® 㫨栬 室¨«¨ ¬¨«¨æ¥©áª¨¥ ¯ âà㫨, £à®¬ª® £®¢®à¨«¨ çâ® ¡ë ¢á¥ ᮡ«î¤ «¨ ᯮª®©á⢨¥. —â® ¯¨â ­¨¥ ¡ã¤¥â ᪮஠¢®ááâ ­®¢«¥­® ¨ ­¥â ¯à¨ç¨­ ¤«ï ¯ ­¨ª¨. “â஬ ¯à®è¥« ¥é¥ ®¤¨­ ¯ âàã«ì, ®­ ®£« á¨« ¨­ä®à¬ æ¨î ® ­¥áª®«ìª¨å ¯ã­ªâ å ᪮ன ¯®¬®é¨, à §¢¥à­ãâëå ¢ £®à®¤¥.   業âà «ì­®© ¯«®é ¤¨, ­  ã«¨æ¥ Š«¨¬¥­â쥢 , ‹¥­¨­£à ¤áª®© ­ ¡¥à¥¦­®©, Œ®­ç¥, ¨ ã«¨æ¥ à¥¤®¢ . ’ ¬ ¬®¦­® ¯®«ãç¨âì ¥¤ã ¨ ¢®¤ã. ¥ª®â®àë¥ «î¤¨ ¢á¥ â ª¨ ¯®¤¤ «¨áì ¯ ­¨ª¥. Žá®¡¥­­® â¥, ª®â®àë¥ å®¤¨«¨ á ¬ «®«¥â­¨¬¨ ¤¥â쬨. Ž­¨ âॡ®¢ «¨ ®â ¯ âàã«¥© ¯®«­®© ¨­ä®¬ æ¨¨ ¨ ¢¥«¨ á¥¡ï ®ç¥­ì ­¥á¯®ª®©­®. ‚á«¥¤á⢨¨ 祣® ­¥ª®â®àë¥ ¡ë«¨  à¥á⮢ ­ë ¨ ¯®¬¥é¥­ë ¯®¤  à¥áâ.
‹¥à  ¢ëè«  á ª áâàî«¥© ¢®¤ë ¢® ¤¢®à. ‘®á¥¤¨ ¡¥§ ¯à®¬¥¤«¥­¨ï 㪠§ «¨ ­  áâ àë¥ ª ç¥«¨, ¯®¤ ª®â®à묨 £®à¥« ®£®­ì, ¨ ¢¨á¥«® ¥é¥ ­¥áª®«ìª® ª®â¥«ª®¢. ‹¥à  ¯®¢¥á¨«  ᢮©.
‹¨æ  㠫© ¢®ªà㣠ª®áâà ,   ¨å ¡ë«® ®ª®«® 50-⨠祫®¢¥ª. 뫨 ­ ¯à殮­ë. ƒ« §  ã ¬­®£¨å ¢®§¡ã¦¤¥­­® £®à¥«¨. Šâ® â® ¤ ¦¥ èã⨫. ’¨è¨­ã ¨ ¬¥à­ë© £®¬®­ £®«®á®¢ ¨­®£¤  ¯à¥à뢠« £à®¬ª¨© ᬥå.
‹¥à  ¯®£®¢®à¨«  ­¥¬­®£® á á®á¥¤ï¬¨. ¨ªâ® ­¥ §­ «, çâ® á«ã稫®áì...
¥¯«®å®. Ž­¨ ¢á¥ ᯠ«¨. Ž¡®è«®áì ¡¥§ ®á«®¦­¥­¨©. ’®«ìª® ®¤¨­ ¨§ ­¨å ¯ëâ «áï ®¡®à®­ïâìáï. Œ «ì稪, «¥â 15-â¨, ­¥ ¡®«ìè¥... ¯®¤­ï«  ¢â®¬ â ­  „¨¬ã. €¢â®¬ â ¡ë« ­  ¯à¥¤®åà ­¨â¥«¥, ¨ ¯®ª  ¬ «ì稪 ¤¥« « ¯®¯ë⪨ ¯®­ïâì, ¯®ç¥¬ã ­¥ à ¡®â ¥â á¯ã᪮¢®© ªàî箪 - „¨¬  ¢ë­¥á ¥¬ã ¬®§£¨ ­  ¯à®â¨¢®¯®«®¦­ãî á⥭ªã. ë«® ¥é¥ ¯ïâì 祫®¢¥ª ¢ ¯®¤¢ «¥. ’ਠ¤¥¢ã誨 ¨ ¤¢®¥ ¬ã¦ç¨­. ‚á¥å § áâ५«¨«¨ ¡¥§ ®á®¡ëå ¯à®¡«¥¬. Œë ¯®§¢ «¨ ¤¥¢ã襪. ‹¥­  ¨ ‹¥à  ­ ç «¨ 㡨à âì âàã¯ë ¢ ®¤­ã ª®¬­ âã. Ž«ï ®áâ « áì 㠢室 , á ª « è®¬ ­ £®â®¢¥. ‚ᥠ®áâ «ì­ë¥ ®æ¥­¨¢ «¨ § ¯ áë ¯à®¢¨ ­â . Š®­á¥à¢ë. ‘ã娥 ¯ ª¥âë á « ¯è®©. Ÿé¨ª¨ á «¨¬®­ ¤®¬, ¬¨­¥à «ª . ’ãâ ¡ë«® ¯à¨£®¤­®© ¥¤ë ­  ¤¢  ¬¥áïæ , ¥á«¨ à ááç¨â뢠âì ­  è¥áâ¥àëå. ஡«¥¬  ¡ë«  ⮫쪮 ¢ ⮬, £¤¥ ¢á¥ íâ® á¯àïâ âì.
- «ïâì! - ‹¥à  ¯®¤áª®«ì§­ã« áì ¨ 㯠«  ­  âà㯠¬ «ì稪  á ¯à®áâ५¥­­®© ¡ èª®©.
- ’ ¬ ¬®§£¨ ­  ¯®«ã, âë ç¥ ­¥ ¢¨¤¥« ? - ‹¥­  ᬥ﫠áì...
- ’ë à ­ìè¥ ­¥ ¬®£«  ᪠§ âì? - ¨ ‹¥à  ⮦¥ à áᬥ﫠áì...
- ’ ª, ¯®¤à㣨 è ¡ è ¢¥á¥«ìî, ¡«ïâì, ¥á«¨ ¢ ¬ § ­ïâìáï ­¥ç¥¬ - ¯¨§¤ã©â¥ á, ï ¢ ¬ ᥩç á § £àã¦ã ï騪 ¬¨!!! - Ÿ ¡ë« ­¥ ¢ ­ áâ஥­¨¨ èãâ¨âì.
- ã ¨ á㪠 âë Œ ªá...
- „  ¯®è¥« ®­ ­  åã©! - ¯®¤¤¥à¦ «  ‹¥à ...
- ¥ ¯¨§¤¥âì! ‚ᥬ á ­ åã©!!!!
‹¥­  ᨤ¥«  ­   ¢â®¡ãá­®© ®áâ ­®¢ª¥ ­ ¯à®â¨¢ ¬®¥£® ¤®¬ . Ž­  â¨å® ¯« ª « , ®¡å¢ â¨¢ à㪠¬¨ £®«®¢ã. “¦¥ ­¥¤¥«î ï ­¨ç¥£® £®àï祣® ­¥ ¥«. ‡ ¯ áë ¯à®¤ãªâ®¢ ª®­ç¨«¨áì, 㫨æë ®¯ãá⥫¨. ˆ «¨èì ­¥¬­®£¨¥ ¯à®å®¦¨¥ è â «¨áì ¯® £®à®¤ã ª ª §®¬¡¨, á«®¢­® ­¨ç¥£® ¯¥à¥¤ ᮡ®© ­¥ ¢¨¤¥«¨. Ž­¨ 諨 ª à §¤ â®ç­ë¬ ¯ã­ªâ ¬. ® á«ãå ¬ - â ¬ 㦥 ­ ç «¨áì ¡¥á¯®à浪¨. ¥ª®â®àë¥ ¤®¬  £®à¥«¨.
Œ­¥ ­ ¤®¥«® 室¨âì, ¬­¥ ¡ë«® ®¤¨­®ª®. Ÿ ᥫ à冷¬ á ­¥©.
- Š ª ¤¥« ?
- Ÿ ­¥ ¬®£ã ­ ©â¨ á¢®î ¤®çì. - ‹¥­  £®¢®à¨«  ¢ ¯ãáâ®âã ¯¥à¥¤ ᮡ®©.
- Š ª ¥ñ §®¢ãâ? - ï ¯®¯ëâ «áï § ¯®«­¨âì íâã ¯ãáâ®âã.
- „ è .
- —â® âë ᮡ¨à ¥èìáï ¤¥« âì?
- Ÿ å®çã ã©â¨ ¢á«¥¤ §  ­¥©.. - ¥ñ á«®¢  ¯à¥à뢠«¨áì áâ®­ ¬¨ ¨ ¯« ç¥¬.
- ®è«¨ §  ¬­®©.
Œë ­¥¯«®å® ¯®¦¨¢¨«¨áì. ‚áî ¯à¨£®¤­ãî ¥¤ã 㭥᫨ á ᮡ®©. ¥áª®«ìª®  ¢â®¬ â®¢ ¨ ¡®¥¯à¨¯ á®¢. “¤ ç . Žâªã¤  ¢ £®à®¤¥ ®ª § «®áì á⮫쪮 ®à㦨ï? ®ç¥¬ã ⥯¥àì ¬ë ¡®¨¬áï ᮫­¥ç­®£® ᢥâ ? •®«¥à  ª®á¨â «î¤¥© ¨ ¦¨¢®â­ëå.   㫨æ å, ¢® ¤¢®à å ¢¨¤­ë âàã¯ë «î¤¥©, ¤¥â¥©... Ž­¨ ¯®ªãá ­ë ᮡ ª ¬¨. Ž­¨ à á¯à®áâà ­ïîâ ­¥¢ë­®á¨¬ãî ¢®­ì. ‹î¤¨ 㬨à îâ ¢­¥§ ¯­®. Žâ ¡®«¥§­¥©. ®â ¯ã«¨, ¢ë¯ã饭­®© ¢ ᯨ­ã. Žâ ­®¦ , ª®â®àë© ª®£¤  ⮠१ « áëà,   ⥯¥àì ०¥â 祫®¢¥ç¥áªãî ¯«®âì. ƒ®á¯®¤ì § ¤ã¬ « £«®¡ «ì­ãî ç¨áâªã. â® ­¥  à¬ £¥¤¤®­. ‚릨¢è¨¥ ¨ ãá⠢訥. ‹î¤¨, ¯®å®¦¨¥ ¡®«ìè¥ ­  §¢¥à¥©. —¥«®¢¥ç¥á⢮ ¢ í⮬ £®à®¤¥ ¯¥à¥áâ «® áãé¥á⢮¢ âì. ‚ë¡à âìáï ¨§ ­¥£® ­¥à¥ «­® - â¥, ªâ® ¯ëâ «áï § ¬¥à§«¨ ¢ ¤®à®£¥. ˆ«¨ ¡ë«¨ 㡨âë. …¤¨­á⢥­­ë© ¢ë室 - 㡨¢ âì, £à ¡¨âì, ¢ë¦¨¢ âì. „¥à¦ âìáï £à㯯 ¬¨. „®¢¥àïâì «î¤ï¬, ª®â®àë¥ à冷¬, ­® ⮫쪮 ª®£¤  âë ®á®§­ ¥èì, çâ® ®­¨ ­ã¦¤ îâáï ¢ ⥡¥. ’®â, ªâ® ­¥ ­ã¦¥­ - ¡ã¤¥â 㡨â. ¥¤¥«î ­ § ¤, ­ è ⮢ à¨éì, ¬®© ¤à㣠¤¥âá⢠, ‚®¢ ... ®­ § ¡®«¥« 宫¥à®©. Š ª ⮫쪮 ¬ë íâ® ¯®­ï«¨ - ¬ë á¢ï§ «¨ ¥ã à㪨 ¨ ­®£¨, ®â­¥á«¨ ­  ®¡®ç¨­ã, ¨ ï ¯ãá⨫ ¥¬ã ¯ã«î ¢ «®¡.
Ž­  ¢á¯®¬¨­ «  ¤­¨, ª®£¤  §¢¥§¤ ­¥ ¡ë«® ¢¨¤­®. € §¢¥§¤ë ®âà ¦ «¨áì ¢ ¥ñ £« § å. Œë ¢á¥ ¡ë«¨ ¤à㣨¬¨. ’¥¯¥àì ï ¢¨¦ã çâ® ®­  áç á⫨¢ . Ž­  ¯®â¥àï«  ॡ¥­ª . Ž­  㡨¢ « , ¡ë«  ᢨ¤¥â¥«¥¬ ⮣®, ª ª 㡨¢ «¨ ¥ñ ¤àã§¥©. Ž­  ᬨਫ áì á ⥬, ç⮠㦥 ­¨ª®£¤  ­¥ ¡ã¤¥â ¢ ¥ñ ¦¨§­¨ ⥯«®£® ¤ãè , ª®ä¥, £®àï祩 ¬ ¬¨­®© ¯®å«¥¡ª¨. ‹¥­ . ˆ ï å®çã à §¤¥«¨âì ⢮¥ áç áâì¥. ’ë ¯®§¢®«ï¥èì ¬­¥ â¥¡ï ®¡­ïâì. ’ë 㦥 ­¥ ¤ã¬ ¥èì ® ¦¥á⮪®á⨠¦¨§­¨, § áâ ¢¨¢è¥© ¨¤â¨ â¥¡ï ­  ¯ ­¥«ì. ’ë ¤®¢®«ì­ . ’¢®ï ¬¥áâì ᢥà訫 áì. ’®à¦¥á⢮ ¡ëâ¨ï á⮨«® ¯®â¥à¨ ¤¥¢®çª¨, ª®â®àãî âë «î¡¨« . ’¥¯¥àì ¬ë á« ¢¨¬ ¡®£  §  â®, çâ® ®­ ¤ « ­ ¬ íâ®â ¬®¬¥­â áç áâìï. ’¥¯¥àì ¬ë ¢¥à¨¬ ¢ ­¥£®. ’¥¯¥àì ¬ë ­¥ áãé¥áâ¢ã¥¬. Œë ¦¨¢¥¬. Œë ¢á¥ ¯®â¥à﫨 ¤¥¢á⢥­­®áâì. Œë ¯®«ã稫¨ ®¯ëâ.  á ¨§­®á¨«®¢ « £®á¯®¤ì ¡®£! ® ¯®ç¥¬ã ¦¥ ¬ë ᥩç á â ª áç á⫨¢ë????
+184
View File
@@ -0,0 +1,184 @@
— ª €‹€ˆŠ
Šˆ˜Šˆ
‚¤®å­¨â¥.
 ¡¥à¨â¥ ª ª ¬®¦­® ¡®«ìè¥ ¢®§¤ãå .
â  ¨áâ®à¨ï § ­¨¬ ¥â ஢­® á⮫쪮 ¢à¥¬¥­¨, ­ áª®«ìª® ¢ë ¬®¦¥â¥ § ¤¥à¦ âì ¤ëå ­¨¥, ¨ ¥é¥ çãâì-çãâì. ’ ª çâ® á«ã蠩⥠ª ª ¬®¦­® ᪮॥.
ޤ¨­ ¬®© ¤àã£, ª®£¤  ¥¬ã ¡ë«® 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
@@ -0,0 +1,102 @@
#!/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}