cyla

cyla

Mar 17th, 2009
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 4.59 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     = "socket";
  15. my $ip      = "127.0.0.1";
  16. my $port    = "5000";
  17. my $socket  = "torrent/.socket/rpc.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></params></methodCall>";
  23. my $llen    = length $line;
  24. my $header  = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
  25. my $hlen    = length $header;
  26. $line       = "${hlen}:${header},${line}";
  27.  
  28. if ( ( defined $src ) && ( $src eq "socket" ) ) {
  29.     socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
  30.     connect( SOCK, sockaddr_un( $socket ) ) or die $!;
  31. } else {
  32.     socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
  33.     connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
  34. }
  35.  
  36. print SOCK $line;
  37. flush SOCK;
  38.  
  39. my @torrents = ();
  40. while ( $line = <SOCK> ) {
  41.     if ( $line =~ /$pattern/ ) {
  42.         push( @torrents, $1 );
  43.     }
  44. }
  45. close (SOCK);
  46.  
  47. my $count = 0;
  48. while ( ( ( $count < $maxdls ) ) && ( scalar( @torrents ) > 0 ) ) {
  49.     $torrent = $torrents[0];
  50.  
  51.     $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>";
  52.     $llen   = length $line;
  53.     $header = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
  54.     $hlen   = length $header;
  55.     $line   = "${hlen}:${header},${line}";
  56.  
  57.     if ( ( defined $src ) && ( $src eq "socket" ) ) {
  58.         socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
  59.         connect( SOCK, sockaddr_un( $socket ) ) or die $!;
  60.     } else {
  61.         socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
  62.         connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
  63.     }
  64.     print SOCK $line;
  65.     flush SOCK;
  66.  
  67.     $line   = "<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>d.update_priorities</methodName><params><param><value><string>$torrent</string></value></param></params></methodCall>";
  68.     $llen   = length $line;
  69.     $header = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
  70.     $hlen   = length $header;
  71.     $line   = "${hlen}:${header},${line}";
  72.  
  73.     if ( ( defined $src ) && ( $src eq "socket" ) ) {
  74.         socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
  75.         connect( SOCK, sockaddr_un( $socket ) ) or die $!;
  76.     } else {
  77.         socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
  78.         connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
  79.     }
  80.     print SOCK $line;
  81.     flush SOCK;
  82.  
  83.     shift( @torrents );
  84.     $count++;
  85. }
  86.  
  87. foreach $torrent ( @torrents ) {
  88.     $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>";
  89.     $llen   = length $line;
  90.     $header = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
  91.     $hlen   = length $header;
  92.     $line   = "${hlen}:${header},${line}";
  93.  
  94.     if ( ( defined $src ) && ( $src eq "socket" ) ) {
  95.         socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
  96.         connect( SOCK, sockaddr_un( $socket ) ) or die $!;
  97.     } else {
  98.         socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
  99.         connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
  100.     }
  101.     print SOCK $line;
  102.     flush SOCK;
  103.  
  104.     $line   = "<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>d.update_priorities</methodName><params><param><value><string>$torrent</string></value></param></params></methodCall>";
  105.     $llen   = length $line;
  106.     $header = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
  107.     $hlen   = length $header;
  108.     $line   = "${hlen}:${header},${line}";
  109.  
  110.     if ( ( defined $src ) && ( $src eq "socket" ) ) {
  111.         socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
  112.         connect( SOCK, sockaddr_un( $socket ) ) or die $!;
  113.     } else {
  114.         socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
  115.         connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
  116.     }
  117.     print SOCK $line;
  118.     flush SOCK;
  119. }
  120.  
  121. exit;
  122.  
Add Comment
Please, Sign In to add comment