cyla

cyla

Nov 11th, 2009
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 5.37 KB | None | 0 0
  1. #!/usr/bin/perl -w
  2. #
  3. # Configurable variables
  4. #
  5. #       src             "socket" when using scgi_socket, or anything else when using scgi_port
  6. #       socket          rTorrent's rpc socket (scgi_local)      - using scgi_local      - needed, when "src" is set to "socket"
  7. #       ip              rTorrent's ip address                   - using scgi_port       - needed, when "src" is NOT set to "socket"
  8. #       port            rTorrent's scgi port (scgi_port)        - using scgi_port       - needed, when "src" is NOT set to "socket"
  9. #       maxdls          maximum number of paralell downloads    -                       - required
  10. #
  11.  
  12. use IO::Socket;
  13.  
  14. my $src         = "";
  15. my $ip          = "127.0.0.1";
  16. my $port        = "4912";
  17. my $socket      = "";
  18. my $maxdls      = 1;
  19.  
  20. my $pattern     = qr/<value><string>([A-Z0-9]+)<\/string><\/value>/;
  21.  
  22. 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></para
  23. ms></methodCall>";
  24. my $llen        = length $line;
  25. my $header      = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
  26. my $hlen        = length $header;
  27. $line           = "${hlen}:${header},${line}";
  28.  
  29. if ( ( defined $src ) && ( $src eq "socket" ) ) {
  30.         socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
  31.         connect( SOCK, sockaddr_un( $socket ) ) or die $!;
  32. } else {
  33.         socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
  34.         connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
  35. }
  36.  
  37. print SOCK $line;
  38. flush SOCK;
  39.  
  40. my @torrents = ();
  41. while ( $line = <SOCK> ) {
  42.         if ( $line =~ /$pattern/ ) {
  43.                 push( @torrents, $1 );
  44.         }
  45. }
  46. close (SOCK);
  47.  
  48. my $count = 0;
  49. while ( ( ( $count < $maxdls ) ) && ( scalar( @torrents ) > 0 ) ) {
  50.         $torrent = $torrents[0];
  51.  
  52.         $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><str
  53. ing>f.set_priority=1</string></value></param></params></methodCall>";
  54.         $llen   = length $line;
  55.         $header = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
  56.         $hlen   = length $header;
  57.         $line   = "${hlen}:${header},${line}";
  58.  
  59.         if ( ( defined $src ) && ( $src eq "socket" ) ) {
  60.                 socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
  61.                 connect( SOCK, sockaddr_un( $socket ) ) or die $!;
  62.         } else {
  63.                 socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
  64.                 connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
  65.         }
  66.         print SOCK $line;
  67.         flush SOCK;
  68.  
  69.         $line   = "<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>d.update_priorities</methodName><params><param><value><string>$torrent</string></value></param></params></methodCall>";
  70.         $llen   = length $line;
  71.         $header = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
  72.         $hlen   = length $header;
  73.         $line   = "${hlen}:${header},${line}";
  74.  
  75.         if ( ( defined $src ) && ( $src eq "socket" ) ) {
  76.                 socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
  77.                 connect( SOCK, sockaddr_un( $socket ) ) or die $!;
  78.         } else {
  79.                 socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
  80.                 connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
  81.         }
  82.         print SOCK $line;
  83.         flush SOCK;
  84.  
  85.         shift( @torrents );
  86.         $count++;
  87. }
  88.  
  89. foreach $torrent ( @torrents ) {
  90.         $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><str
  91. ing>f.set_priority=0</string></value></param></params></methodCall>";
  92.         $llen   = length $line;
  93.         $header = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
  94.         $hlen   = length $header;
  95.         $line   = "${hlen}:${header},${line}";
  96.  
  97.         if ( ( defined $src ) && ( $src eq "socket" ) ) {
  98.                 socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
  99.                 connect( SOCK, sockaddr_un( $socket ) ) or die $!;
  100.         } else {
  101.                 socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
  102.                 connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
  103.         }
  104.         print SOCK $line;
  105.         flush SOCK;
  106.  
  107.         $line   = "<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>d.update_priorities</methodName><params><param><value><string>$torrent</string></value></param></params></methodCall>";
  108.         $llen   = length $line;
  109.         $header = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
  110.         $hlen   = length $header;
  111.         $line   = "${hlen}:${header},${line}";
  112.  
  113.         if ( ( defined $src ) && ( $src eq "socket" ) ) {
  114.                 socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
  115.                 connect( SOCK, sockaddr_un( $socket ) ) or die $!;
  116.         } else {
  117.                 socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
  118.                 connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
  119.         }
  120.         print SOCK $line;
  121.         flush SOCK;
  122. }
  123.  
  124. exit;
  125.  
Add Comment
Please, Sign In to add comment