SVN: toys/fun/rsget.pl

sparky sparky at pld-linux.org
Fri Apr 17 19:57:20 CEST 2009


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;
 


More information about the pld-cvs-commit mailing list