Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl -w
- #
- # Configurable variables
- #
- # src "socket" when using scgi_socket, or anything else when using scgi_port
- # socket rTorrent's rpc socket (scgi_local) - using scgi_local - needed, when "src" is set to "socket"
- # ip rTorrent's ip address - using scgi_port - needed, when "src" is NOT set to "socket"
- # port rTorrent's scgi port (scgi_port) - using scgi_port - needed, when "src" is NOT set to "socket"
- # maxdls maximum number of paralell downloads - - required
- #
- use IO::Socket;
- my $src = "socket";
- my $ip = "127.0.0.1";
- my $port = "5000";
- my $socket = "torrent/.socket/rpc.socket";
- my $maxdls = 1;
- my $pattern = qr/<value><string>([A-Z0-9]+)<\/string><\/value>/;
- my $line = "<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>d.multicall</methodName><params><param><value><string>incomplete</string></value></param><param><value><string>d.get_hash=</string></value></param></params></methodCall>";
- my $llen = length $line;
- my $header = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
- my $hlen = length $header;
- $line = "${hlen}:${header},${line}";
- if ( ( defined $src ) && ( $src eq "socket" ) ) {
- socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
- connect( SOCK, sockaddr_un( $socket ) ) or die $!;
- } else {
- socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
- connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
- }
- print SOCK $line;
- flush SOCK;
- my @torrents = ();
- while ( $line = <SOCK> ) {
- if ( $line =~ /$pattern/ ) {
- push( @torrents, $1 );
- }
- }
- close (SOCK);
- my $count = 0;
- while ( ( ( $count < $maxdls ) ) && ( scalar( @torrents ) > 0 ) ) {
- $torrent = $torrents[0];
- $line = "<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>f.multicall</methodName><params><param><value><string>$torrent</string></value></param><param><value><string>0</string></value></param><param><value><string>f.set_priority=1</string></value></param></params></methodCall>";
- $llen = length $line;
- $header = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
- $hlen = length $header;
- $line = "${hlen}:${header},${line}";
- if ( ( defined $src ) && ( $src eq "socket" ) ) {
- socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
- connect( SOCK, sockaddr_un( $socket ) ) or die $!;
- } else {
- socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
- connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
- }
- print SOCK $line;
- flush SOCK;
- $line = "<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>d.update_priorities</methodName><params><param><value><string>$torrent</string></value></param></params></methodCall>";
- $llen = length $line;
- $header = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
- $hlen = length $header;
- $line = "${hlen}:${header},${line}";
- if ( ( defined $src ) && ( $src eq "socket" ) ) {
- socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
- connect( SOCK, sockaddr_un( $socket ) ) or die $!;
- } else {
- socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
- connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
- }
- print SOCK $line;
- flush SOCK;
- shift( @torrents );
- $count++;
- }
- foreach $torrent ( @torrents ) {
- $line = "<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>f.multicall</methodName><params><param><value><string>$torrent</string></value></param><param><value><string>0</string></value></param><param><value><string>f.set_priority=0</string></value></param></params></methodCall>";
- $llen = length $line;
- $header = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
- $hlen = length $header;
- $line = "${hlen}:${header},${line}";
- if ( ( defined $src ) && ( $src eq "socket" ) ) {
- socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
- connect( SOCK, sockaddr_un( $socket ) ) or die $!;
- } else {
- socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
- connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
- }
- print SOCK $line;
- flush SOCK;
- $line = "<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>d.update_priorities</methodName><params><param><value><string>$torrent</string></value></param></params></methodCall>";
- $llen = length $line;
- $header = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
- $hlen = length $header;
- $line = "${hlen}:${header},${line}";
- if ( ( defined $src ) && ( $src eq "socket" ) ) {
- socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
- connect( SOCK, sockaddr_un( $socket ) ) or die $!;
- } else {
- socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
- connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
- }
- print SOCK $line;
- flush SOCK;
- }
- exit;
Add Comment
Please, Sign In to add comment