[BACK]Return to send.pm CVS log [TXT][DIR] Up to [local] / wpscripts / ztransfer

Annotation of wpscripts/ztransfer/send.pm, Revision 1.1

1.1     ! yason       1: #!/usr/bin/perl
        !             2: # $Id: send.pm,v 1.1.1.17 2007/01/23 14:02:26 init Exp $
        !             3: package send;
        !             4: use fetch;
        !             5: use db;
        !             6: use log;
        !             7: use fileops;
        !             8: use warnings;
        !             9:
        !            10: # spool path constants (without leading slash)
        !            11: our $SPOOL_ZAYAVKI        = "/usr/backup/wp/zayavki";
        !            12: our $SPOOL_PROBAS         = "/usr/backup/wp/proba";
        !            13: our $SPOOL_TMPDIR         = "/usr/backup/temp";
        !            14:
        !            15: # temp variables for map table lookup
        !            16: our $ret;
        !            17: our $tmpd;
        !            18: our $tmpf;
        !            19:
        !            20: sub zayavki()
        !            21: {
        !            22:     my @dbids;
        !            23:     my @localpaths;
        !            24:     my @remotepaths;
        !            25:     my $dbids_ref;
        !            26:     my $localpaths_ref;
        !            27:     my $i = 0;
        !            28:     my $okay = 0;
        !            29:     my $curfile;
        !            30:
        !            31:     my $size_orig;
        !            32:     my $size_arc;
        !            33:
        !            34:     my $spool;
        !            35:     my $delete;
        !            36:
        !            37:     ($dbids_ref, $localpaths_ref) = fetch::zayavki_list();
        !            38:
        !            39:     @dbids = @$dbids_ref;
        !            40:     @localpaths = @$localpaths_ref;
        !            41:     log::main("Fetched " . scalar(@localpaths) . " zayavki from database");
        !            42:     log::zayavki("<<  Starting transfer process  >>");
        !            43:
        !            44:     @remotepaths = @localpaths;         # clone
        !            45:
        !            46:
        !            47:     while($localpaths[$i])
        !            48:     {
        !            49:        # check if there is a void element
        !            50:        # ???
        !            51:        next if(!$localpaths[$i]);
        !            52:
        !            53:        #
        !            54:        #
        !            55:         # fill $spool with right spool directory
        !            56:        if( db::get_tx_count($dbids[$i]) > 0 )
        !            57:        {
        !            58:            # retransmission
        !            59:            # set $spool to temporary directory to make backup collector happy :)
        !            60:            # in this case also let $delete = 1 (removing garbage after copy, as in old times)
        !            61:
        !            62:            # considering okay to not to check /usr/backup for availability
        !            63:            $spool = $SPOOL_TMPDIR;
        !            64:            $delete = 1;
        !            65:        }
        !            66:        else
        !            67:        {
        !            68:            # this is the first time copy
        !            69:            # set $spool to backup spool directory
        !            70:            # and not to delete archive
        !            71:
        !            72:            $spool = $SPOOL_ZAYAVKI;
        !            73:            $delete = 0;
        !            74:         }
        !            75:
        !            76:        # lookup in table first
        !            77:        chomp( $tmpf = `basename $remotepaths[$i]` );
        !            78:        chomp( $_ = `dirname $remotepaths[$i]` );
        !            79:        $tmpd = hash::lookup($_);
        !            80:        print "\$remotepaths[\$i] is $remotepaths[$i]  \$_ is $_  \$tmpd is $tmpd\n";
        !            81:        if ( $tmpd ne '' )
        !            82:        {
        !            83:            $remotepaths[$i] =  $tmpd. "/". $tmpf;
        !            84:        }
        !            85:        else
        !            86:        {
        !            87:            # hardcoded
        !            88:            $remotepaths[$i] =~ s/V(1)/zV7/;
        !            89:            $remotepaths[$i] =~ s/V(2)/zV8/;
        !            90:            $remotepaths[$i] =~ s/V(3)/zV6/;
        !            91:            $remotepaths[$i] =~ s/V(4)/zV7/;
        !            92:            $remotepaths[$i] =~ s/V(5)/zV7/;
        !            93:        }
        !            94:
        !            95:        if(-e $remotepaths[$i] || -e $remotepaths[$i] . '.rar')
        !            96:        {
        !            97:            log::error("Remote file $remotepaths[$i] or $remotepaths[$i].rar already exists");
        !            98:            db::change_status($dbids[$i], 1);
        !            99:        }
        !           100:        else
        !           101:        {
        !           102:            # In this place we must be sure that local file is ok
        !           103:            if( -e $localpaths[$i] )
        !           104:            {
        !           105:                # set $size_orig
        !           106:                $size_orig = -s "$localpaths[$i]";
        !           107:
        !           108:                # rar and copy local file
        !           109:                fileops::checkdir($remotepaths[$i]);
        !           110:                 chomp($curfile = `basename $localpaths[$i]`) , $curfile .= '.rar';
        !           111:
        !           112:                 # two functions in log.pm makes newer versions of zlist happy
        !           113:                 log::file_work_on($curfile, "rar");
        !           114:
        !           115:                 log::zayavki("compressing '$localpaths[$i]' -> '$spool/$curfile'");
        !           116:
        !           117:                 `/usr/local/bin/rar a -rr10% -ep '$spool/$curfile' '$localpaths[$i]'`;
        !           118:                 if( ($? >> 8) == 0)
        !           119:                 {
        !           120:                    # rar exited successfully
        !           121:                        # set $size_arc
        !           122:                        $size_arc = -s "$spool/$curfile";
        !           123:
        !           124:                    # it can be possible that file already uploaded by hand while rar copressed one
        !           125:                    # so we should check for existence of archive in remote before send it
        !           126:                    if( -e $remotepaths[$i] || -e $remotepaths[$i] . '.rar')
        !           127:                    {
        !           128:                        log::error("Can not save $remotepaths[$i].rar cause of file has appeared after compressing");
        !           129:                        log::zayavki("Can not save $remotepaths[$i].rar cause of file has appeared after compressing");
        !           130:                        # file was uploaded by hand, let us change its status in db
        !           131:                        db::change_status($dbids[$i], 1);
        !           132:
        !           133: #                      log::file_work_done();
        !           134:                    }
        !           135:                    else
        !           136:                    {
        !           137:                        # copy archive and then delete it from /usr/backup/spool
        !           138:                        log::zayavki("transferring $spool/$curfile -> $remotepaths[$i].rar");
        !           139:
        !           140:                        log::file_work_on($curfile, "copy");
        !           141:
        !           142:                        if( system("cp '$spool/$curfile' $remotepaths[$i].rar") == 0 )
        !           143:                        {
        !           144:                            # OKAY
        !           145:
        !           146:                            log::zayavki("saved $localpaths[$i] -> $remotepaths[$i].rar [size_orig=$size_orig, size_arc=$size_arc]");
        !           147:
        !           148:                            log::file_work_done();
        !           149:
        !           150:                            log::diff($localpaths[$i], $size_orig, $size_arc);
        !           151:                            # update database
        !           152:                            db::change_status($dbids[$i], 1);
        !           153:                            db::write_size_orig($dbids[$i], $size_orig);
        !           154:                            db::write_size_arc($dbids[$i], $size_arc);
        !           155:
        !           156:                            # write ux_rpaths
        !           157:                            db::write_ux_rpath($dbids[$i], "$remotepaths[$i].rar");
        !           158:
        !           159:                            # increment tx_count
        !           160:                            db::increment_tx_count($dbids[$i]);
        !           161:
        !           162:                            $okay++;
        !           163:                        }
        !           164:                        else
        !           165:                        {
        !           166:                            # error in the copy process
        !           167:                            log::zayavki("error in copy process (see error log)");
        !           168:                            log::error("error in copy process: $?");
        !           169:
        !           170:                            # additional cleanup for log::file_work_on()
        !           171: #                          log::file_work_done();
        !           172:
        !           173:                        }
        !           174:
        !           175:                        # finally, delete $spool/XXXXX.rar if $delete
        !           176:                        if($delete)
        !           177:                        {
        !           178:                            if( (system("/bin/rm -f '$spool/$curfile'")) == 0 )
        !           179:                            {
        !           180:                                log::zayavki("removed temporary file $spool/$curfile");
        !           181:                            }
        !           182:                            else
        !           183:                            {
        !           184:                                # /bin/rm exits with error
        !           185:                                log::zayavki("error while removing temporary file $spool/$curfile (see error log)");
        !           186:                                log::error("error while removing temporary file $spool/$curfile: $?");
        !           187:                            }
        !           188:                        }
        !           189:                    }
        !           190:
        !           191:                 }
        !           192:                 else
        !           193:                 {
        !           194:                    # an error occurs in the archivation process
        !           195:                    log::zayavki("error in archivation process (see error log)");
        !           196:                    log::error("error in archivation process: $?");
        !           197:
        !           198:                    # clean out compressed file in /usr/backup/spool on error
        !           199:                    #system("/bin/rm -f '/usr/backup/spool/$curfile'");
        !           200:                    `/bin/rm -f '$spool/$curfile'`;
        !           201:
        !           202:                 }
        !           203:            }
        !           204:            else
        !           205:            {
        !           206:                # error, local file doesn't exists
        !           207:                log::error("Can not open local file $localpaths[$i]");
        !           208:                log::zayavki("Can not open local file $localpaths[$i]");
        !           209:
        !           210:            }
        !           211:        }
        !           212:
        !           213:        # next iteration of 'while' and increment of $i
        !           214:        $i++;
        !           215:
        !           216:        log::file_work_done();
        !           217:     }
        !           218: # end while
        !           219:
        !           220:     log::main("Saved $okay zayavki on remote host");
        !           221:     log::zayavki("<<  End transfer process  >>");
        !           222: }
        !           223:
        !           224:
        !           225:
        !           226: sub jpegs()
        !           227: {
        !           228:     my @dbids;
        !           229:     my @localpaths;
        !           230:     my @remotepaths;
        !           231:     my $dbids_ref;
        !           232:     my $localpaths_ref;
        !           233:     my $i = 0;
        !           234:     my $okay = 0;
        !           235:
        !           236:     my $size_orig;
        !           237:
        !           238:     ($dbids_ref, $localpaths_ref) = fetch::jpegs_list();
        !           239:
        !           240:     @dbids = @$dbids_ref;
        !           241:     @localpaths = @$localpaths_ref;
        !           242:     log::main("Fetched " . scalar(@localpaths) . " jpegs from database");
        !           243:     log::jpegs("<<  Starting transfer process  >>");
        !           244:
        !           245:     @remotepaths = @localpaths;         # clone
        !           246:
        !           247:     while($localpaths[$i])
        !           248:     {
        !           249:        # lookup in table first
        !           250:        chomp( $tmpf = `basename $remotepaths[$i]` );
        !           251:        chomp( $_ = `dirname $remotepaths[$i]` );
        !           252:        $tmpd = hash::lookup($_);
        !           253:        if ( $tmpd ne '' )
        !           254:        {
        !           255:            $remotepaths[$i] =  $tmpd. "/". $tmpf;
        !           256:        }
        !           257:        else
        !           258:        {
        !           259:            # hardcoded
        !           260:            $remotepaths[$i] =~ s/V(1)/zV7/;
        !           261:            $remotepaths[$i] =~ s/V(2)/zV8/;
        !           262:            $remotepaths[$i] =~ s/V(3)/zV6/;
        !           263:            $remotepaths[$i] =~ s/V(4)/zV7/;
        !           264:            $remotepaths[$i] =~ s/V(5)/zV7/;
        !           265:        }
        !           266:
        !           267:        if(-e $remotepaths[$i])
        !           268:        {
        !           269:            log::error("Remote file $remotefile[$i] already exists");
        !           270:            db::change_status($dbids[$i], 1);
        !           271:        }
        !           272:        else
        !           273:        {
        !           274:            if( -e $localpaths[$i] )
        !           275:            {
        !           276:                fileops::checkdir($remotepaths[$i]);
        !           277:                # set $size_orig
        !           278:                $size_orig = -s "$localpaths[$i]";
        !           279:
        !           280:                log::jpegs("transferring $localpaths[$i] -> $remotepaths[$i]");
        !           281:                if( system("cp '$localpaths[$i]' '$remotepaths[$i]'") == 0 )
        !           282:                {
        !           283:                        log::jpegs("saved $localpaths[$i] -> $remotepaths[$i] [size_orig=$size_orig]");
        !           284:                        # update database
        !           285:                        db::change_status($dbids[$i], 1);
        !           286:                        db::write_size_orig($dbids[$i], $size_orig);
        !           287:
        !           288:                #
        !           289:                #       WE SHOULD NOT FILL ux_rpath FIELD FOR jpeg-types
        !           290:                #
        !           291:                #       db::write_ux_rpath($dbids[$i], "$remotepaths[$i]");
        !           292:
        !           293:                        $okay++;
        !           294:
        !           295:                }
        !           296:                else
        !           297:                {
        !           298:                    # error in the copy process
        !           299:                    log::jpegs("error in copy process (see error log)");
        !           300:                    log::error("error in copy process: $?");
        !           301:                }
        !           302:            }
        !           303:            else
        !           304:            {
        !           305:                # error, local file doesn't exists
        !           306:                log::error("Can not open local file $localpaths[$i]");
        !           307:                log::jpegs("Can not open local file $localpaths[$i]");
        !           308:            }
        !           309:        }
        !           310:
        !           311:        # next iteration of 'while' and increment of $i
        !           312:        $i++;
        !           313:     }
        !           314:
        !           315:     log::main("Saved $okay jpegs on remote host");
        !           316:     log::jpegs("<<  End transfer process  >>");
        !           317: }
        !           318:
        !           319:
        !           320:
        !           321: sub probas()
        !           322: {
        !           323:     my @dbids;
        !           324:     my @localpaths;
        !           325:     my @remotepaths;
        !           326:     my $dbids_ref;
        !           327:     my $localpaths_ref;
        !           328:     my $i = 0;
        !           329:     my $okay = 0;
        !           330:     my $curfile;
        !           331:
        !           332:     my $size_orig;
        !           333:     my $size_arc;
        !           334:
        !           335:     my $spool;
        !           336:     my $delete;
        !           337:
        !           338:     ($dbids_ref, $localpaths_ref) = fetch::probas_list();
        !           339:
        !           340:     @dbids = @$dbids_ref;
        !           341:     @localpaths = @$localpaths_ref;
        !           342:     log::main("Fetched " . scalar(@localpaths) . " probas from database");
        !           343:     log::probas("<<  Starting transfer process  >>");
        !           344:
        !           345:     @remotepaths = @localpaths;         # clone
        !           346:
        !           347:     while($localpaths[$i])
        !           348:     {
        !           349:        # cloned from send::zayavki()
        !           350:
        !           351:        # check if there is a void element
        !           352:        # ???
        !           353:        next if(!$localpaths[$i]);
        !           354:
        !           355:        #
        !           356:        #
        !           357:         # fill $spool with right spool directory
        !           358:        if( db::get_tx_count($dbids[$i]) > 0 )
        !           359:        {
        !           360:            # retransmission
        !           361:            # set $spool to temporary directory to make backup collector happy :)
        !           362:            # in this case also let $delete = 1 (removing garbage after copy, as in old times)
        !           363:
        !           364:            # considering okay to not to check /usr/backup for availability
        !           365:            $spool = $SPOOL_TMPDIR;
        !           366:            $delete = 1;
        !           367:        }
        !           368:        else
        !           369:        {
        !           370:            # this is the first time copy
        !           371:            # set $spool to backup spool directory
        !           372:            # and not to delete archive
        !           373:
        !           374:            $spool = $SPOOL_PROBAS;
        !           375:            $delete = 0;
        !           376:         }
        !           377:
        !           378:        # lookup in table first
        !           379:        chomp( $tmpf = `basename $remotepaths[$i]` );
        !           380:        chomp( $_ = `dirname $remotepaths[$i]` );
        !           381:        $tmpd = hash::lookup($_);
        !           382:        if ( $tmpd ne '' )
        !           383:        {
        !           384:            $remotepaths[$i] =  $tmpd. "/". $tmpf;
        !           385:        }
        !           386:        else
        !           387:        {
        !           388:            # /V5/probas/* goes on /zV7/probas/
        !           389:            substr($remotepaths[$i], 1, 2, 'zV7');
        !           390:        }
        !           391:
        !           392:        if(-e $remotepaths[$i] || -e $remotepaths[$i] . '.rar')
        !           393:        {
        !           394:            log::error("Remote file $remotepaths[$i] already exists");
        !           395:            db::change_status($dbids[$i], 1);
        !           396:        }
        !           397:        else
        !           398:        {
        !           399:            if( -e $localpaths[$i] )
        !           400:            {
        !           401:                # rar and copy local file
        !           402:                fileops::checkdir($remotepaths[$i]);
        !           403:
        !           404:                # set $size_orig
        !           405:                $size_orig = -s "$localpaths[$i]";
        !           406:
        !           407:                 chomp($curfile = `basename $localpaths[$i]`) , $curfile .= '.rar';
        !           408:
        !           409:                 # two functions in log.pm makes newer versions of zlist happy
        !           410:                 log::file_work_on($curfile, "rar");
        !           411:
        !           412:                 log::probas("compressing '$localpaths[$i]' -> '$spool/$curfile'");
        !           413:
        !           414:                `/usr/local/bin/rar a -rr10% -ep '$spool/$curfile' '$localpaths[$i]'`;
        !           415:                 if( ($? >> 8) == 0)
        !           416:                 {
        !           417:                    # rar exited successfully
        !           418:                        # set $size_arc
        !           419:                        $size_arc = -s "$spool/$curfile";
        !           420:
        !           421:                    # it can be possible that file already uploaded by hand while rar copressed one
        !           422:                    # so we should check for existence of archive in remote before send it
        !           423:                    if( -e $remotepaths[$i] || -e $remotepaths[$i] . '.rar')
        !           424:                    {
        !           425:                        log::error("Can not save $remotepaths[$i].rar cause of file has appeared after compressing");
        !           426:                        log::probas("Can not save $remotepaths[$i].rar cause of file has appeared after compressing");
        !           427:
        !           428:                        db::change_status($dbids[$i], 1);
        !           429:                    }
        !           430:                    else
        !           431:                    {
        !           432:                        # copy archive and then delete it from $spool
        !           433:                        log::file_work_on($curfile, "copy");
        !           434:
        !           435:                        log::probas("transferring $spool/$curfile -> $remotepaths[$i].rar");
        !           436:
        !           437:                        if( system("cp '$spool/$curfile' $remotepaths[$i].rar") == 0 )
        !           438:                        {
        !           439:                            log::probas("saved $localpaths[$i] -> $remotepaths[$i].rar [size_orig=$size_orig, size_arc=$size_arc]");
        !           440:                            log::diff($localpaths[$i], $size_orig, $size_arc);
        !           441:                            # update database
        !           442:                            db::change_status($dbids[$i], 1);
        !           443:                            db::write_size_orig($dbids[$i], $size_orig);
        !           444:                            db::write_size_arc($dbids[$i], $size_arc);
        !           445:
        !           446:                            db::write_ux_rpath($dbids[$i], "$remotepaths[$i].rar");
        !           447:
        !           448:                            # increment tx_count
        !           449:                            db::increment_tx_count($dbids[$i]);
        !           450:
        !           451:                            $okay++;
        !           452:                        }
        !           453:                        else
        !           454:                        {
        !           455:                            # error in the copy process
        !           456:                            log::probas("error in copy process (see error log)");
        !           457:                            log::error("error in copy process: $?");
        !           458:                        }
        !           459:
        !           460:                        if ($delete)
        !           461:                        {
        !           462:                            # finally, delete $spool/XXXXX.rar
        !           463:                            if( (system("/bin/rm -f '$spool/$curfile'")) == 0 )
        !           464:                            {
        !           465:                                log::probas("removed temporary file $spool/$curfile");
        !           466:                            }
        !           467:                            else
        !           468:                            {
        !           469:                                # /bin/rm exits with error
        !           470:                                log::probas("error while removing temporary file $spool/$curfile (see error log)");
        !           471:                                log::error("error while removing temporary file $spool/$curfile: $?");
        !           472:                            }
        !           473:                        } # !$delete
        !           474:                    }
        !           475:
        !           476:                 }
        !           477:                 else
        !           478:                 {
        !           479:                    # an error occurs in the archivation process
        !           480:                    log::probas("error in archivation process (see error log)");
        !           481:                    log::error("error in archivation process: $?");
        !           482:
        !           483:                    system("/bin/rm -f '$spool/$curfile'");
        !           484:                 }
        !           485:            }
        !           486:            else
        !           487:            {
        !           488:                # error, local file doesn't exists
        !           489:                log::error("Can not open local file $localpaths[$i]");
        !           490:                log::probas("Can not open local file $localpaths[$i]");
        !           491:            }
        !           492:        }
        !           493:
        !           494:        # next iteration of 'while' and increment of $i
        !           495:        $i++;
        !           496:
        !           497:        log::file_work_done();
        !           498:     }
        !           499:
        !           500:     log::main("Saved $okay probas on remote host");
        !           501:     log::probas("<<  End transfer process  >>");
        !           502: }
        !           503:
        !           504: sub tpps()
        !           505: {
        !           506:     my @dbids;
        !           507:     my @localpaths;
        !           508:     my @remotepaths;
        !           509:     my $dbids_ref;
        !           510:     my $localpaths_ref;
        !           511:     my $i = 0;
        !           512:     my $okay = 0;
        !           513:
        !           514:     my $size_orig;
        !           515:
        !           516:     ($dbids_ref, $localpaths_ref) = fetch::tpps_list();
        !           517:
        !           518:     @dbids = @$dbids_ref;
        !           519:     @localpaths = @$localpaths_ref;
        !           520:     log::main("Fetched " . scalar(@localpaths) . " tpps from database");
        !           521:     log::tpps("<<  Starting transfer process  >>");
        !           522:
        !           523:     @remotepaths = @localpaths;         # clone
        !           524:
        !           525:     while($localpaths[$i])
        !           526:     {
        !           527:        # lookup in table first
        !           528:        chomp( $tmpf = `basename $remotepaths[$i]` );
        !           529:        chomp( $_ = `dirname $remotepaths[$i]` );
        !           530:        $tmpd = hash::lookup($_);
        !           531:        if ( $tmpd ne '' )
        !           532:        {
        !           533:            $remotepaths[$i] =  $tmpd. "/". $tmpf;
        !           534:        }
        !           535:        else
        !           536:        {
        !           537:            # hardcoded
        !           538:            $remotepaths[$i] =~ s/V(1)/zV7/;
        !           539:            $remotepaths[$i] =~ s/V(2)/zV8/;
        !           540:            $remotepaths[$i] =~ s/V(3)/zV6/;
        !           541:            $remotepaths[$i] =~ s/V(4)/zV7/;
        !           542:            $remotepaths[$i] =~ s/V(5)/zV7/;
        !           543:        }
        !           544:
        !           545:        if(-e $remotepaths[$i])
        !           546:        {
        !           547:            log::error("Remote file $remotefile[$i] already exists");
        !           548:            db::change_status($dbids[$i], 1);
        !           549:        }
        !           550:        else
        !           551:        {
        !           552:            if( -e $localpaths[$i] )
        !           553:            {
        !           554:                fileops::checkdir($remotepaths[$i]);
        !           555:                # set $size_orig
        !           556:                $size_orig = -s "$localpaths[$i]";
        !           557:
        !           558:                log::tpps("transferring $localpaths[$i] -> $remotepaths[$i]");
        !           559:                if( system("cp '$localpaths[$i]' '$remotepaths[$i]'") == 0 )
        !           560:                {
        !           561:                        log::tpps("saved $localpaths[$i] -> $remotepaths[$i] [size_orig=$size_orig]");
        !           562:                        # update database
        !           563:                        db::change_status($dbids[$i], 1);
        !           564:                        db::write_size_orig($dbids[$i], $size_orig);
        !           565:
        !           566:                #
        !           567:                #       WE SHOULD NOT FILL ux_rpath FIELD FOR tpp-types
        !           568:                #
        !           569:                #       XXX Please explain me why?
        !           570:                #
        !           571:                #       db::write_ux_rpath($dbids[$i], "$remotepaths[$i]");
        !           572:
        !           573:                        $okay++;
        !           574:
        !           575:                }
        !           576:                else
        !           577:                {
        !           578:                    # error in the copy process
        !           579:                    log::tpps("error in copy process (see error log)");
        !           580:                    log::error("error in copy process: $?");
        !           581:                }
        !           582:            }
        !           583:            else
        !           584:            {
        !           585:                # error, local file doesn't exists
        !           586:                log::error("Can not open local file $localpaths[$i]");
        !           587:                log::tpps("Can not open local file $localpaths[$i]");
        !           588:            }
        !           589:        }
        !           590:
        !           591:        # next iteration of 'while' and increment of $i
        !           592:        $i++;
        !           593:     }
        !           594:
        !           595:     log::main("Saved $okay tpps on remote host");
        !           596:     log::tpps("<<  End transfer process  >>");
        !           597: }
        !           598:
        !           599:
        !           600:
        !           601: return(1);

CVSweb