Author: sparky
Date: Fri Apr 17 19:57:20 2009
New Revision: 10331

Modified:
   toys/fun/rsget.pl
Log:
- add multiple output address/interface support


Modified: toys/fun/rsget.pl
==============================================================================
--- toys/fun/rsget.pl   (original)
+++ toys/fun/rsget.pl   Fri Apr 17 19:57:20 2009
@@ -77,7 +77,7 @@
                $move = "\033[" . $steps . "B";
        }
        my $tl = length $text;
-       substr $text, 15, $tl - $columns + 3, '...'
+       substr $text, 22, $tl - $columns + 3, '...'
                if $tl > $columns;
        
        print $move . "\r\033[K" . $text;
@@ -129,7 +129,7 @@
                        $self->{file_name} = $fn;
                }
                my $net = $self->{obj}->{net};
-               $self->{obj}->{netname} = "[$net] $fn: ";
+               $self->{obj}->{netname} =~ s/] .*/] $fn: /;
        }
 
        {
@@ -185,8 +185,11 @@
        };
 
     $curl->setopt( CURLOPT_PRIVATE, $id );
-
-       if ( $opts{cookies} ) {
+       if ( $obj->{outaddr} ) {
+               $curl->setopt( CURLOPT_INTERFACE, $obj->{outaddr} );
+       }
+       
+       if ( defined $opts{cookies} ) {
                $curl->setopt( CURLOPT_COOKIEJAR, $opts{cookies} );
                $curl->setopt( CURLOPT_COOKIEFILE, $opts{cookies} );
        }
@@ -197,7 +200,7 @@
        $curl->setopt( CURLOPT_HTTPHEADER, $curl_headers );
        $curl->setopt( CURLOPT_URL, $url );
        $curl->setopt( CURLOPT_REFERER, $opts{referer} )
-               if $opts{referer};
+               if defined $opts{referer};
        $curl->setopt( CURLOPT_ENCODING, 'gzip,deflate' );
        $curl->setopt( CURLOPT_CONNECTTIMEOUT, 20 );
 
@@ -362,6 +365,22 @@
 package Get; # {{{
 
 use URI;
+my @outaddr;
+
+sub add_outaddr
+{
+       my $newaddr = shift;
+       NEW_IP: foreach my $ip ( split /[ ,]+/, $newaddr ) {
+               foreach my $outaddr ( @outaddr ) {
+                       if ( $ip eq $outaddr ) {
+                               print "Address $ip already on the list\n";
+                               next NEW_IP;
+                       }
+               }
+               print "Adding $ip address\n";
+               push @outaddr, $ip;
+       }
+}
 
 my %running;
 sub makenew
@@ -374,6 +393,9 @@
                shift;
                $slots = shift;
        }
+       if ( scalar @outaddr > $slots ) {
+               $slots = scalar @outaddr;
+       }
 
        return {} if $gotlist{ $url };
        $running{ $net } = {} unless exists $running{ $net };
@@ -385,6 +407,22 @@
                }
        }
 
+       my $outaddr = undef;
+       if ( scalar @outaddr ) {
+               FIND_IP: foreach my $maybe_outaddr ( @outaddr ) {
+                       foreach my $id ( keys %$rn ) {
+                               if ( $rn->{ $id }->{outaddr} eq $maybe_outaddr 
) {
+                                       next FIND_IP;
+                               }
+                       }
+                       $outaddr = $maybe_outaddr;
+               }
+               # no IP found ?
+               return {}
+                       unless defined $outaddr;
+       }
+       my $outaddrstr = $outaddr ? "[$outaddr]" :  "";
+
        my $id = 1;
        ++$id while exists $rn->{ $id };
 
@@ -400,7 +438,8 @@
                try => 0,
                line => $line,
                net => $net,
-               netname => "[$net] $fn: ",
+               netname => "[$net]$outaddrstr $fn: ",
+               outaddr => $outaddr,
        };
 
        $rn->{ $id } = bless $self, $class;
@@ -428,8 +467,9 @@
 
        $self->{curl_next} = $next_stage;
        Curl::start( $url, $self,
-               ($self->{referer} ? ( referer => $self->{referer} ) : ()),
-               ($self->{cookies} ? ( cookies => $self->{cookies} ) : ()),
+               (referer => $self->{referer}),
+               (cookies => $self->{cookies}),
+               (outaddr => $self->{outaddr}),
                @_ );
 }
 
@@ -1234,7 +1274,14 @@
 # }}}
 package main; # {{{
 
-my $get_list = shift @ARGV || 'get.list';
+my $get_list = 'get.list';
+while ( my $arg = shift @ARGV ) {
+       if ( $arg eq '-i' ) {
+               Get::add_outaddr( shift @ARGV || die "argument missing" );
+       } else {
+               $get_list = $arg;
+       }
+}
 print "Using '$get_list' file list\n";
 die "Can't read the list\n" unless -r $get_list;
 
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to