cyla

cyla

May 23rd, 2009
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.30 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. #
  10.  
  11. my $src         = "socket";
  12. my $ip          = "127.0.0.1";
  13. my $port        = "5000";
  14. my $socket      = "torrent/.socket/rpc.socket";
  15.  
  16. use IO::Socket;
  17.    
  18. if ( @ARGV == 0 ) {
  19.     exit;
  20. } else {
  21.     print "${ARGV[0]}\n\n";
  22. }
  23.  
  24. my $pattern     = qr/<value><string>(.*?)<\/string><\/value>/;
  25. my $tpattern    = qr/<value><string>(.*?${ARGV[0]}.*?)<\/string><\/value>/;
  26. my $openarray   = qr/<value><array><data>/;
  27. my $closearray  = qr/<\/data><\/array><\/value>/;
  28.  
  29. my $line        = "<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>d.multicall</methodName><params><param><value><string>name</string></value></param><param><value><string>d.get_name=</string></value></param><param><value><string>t.multicall=,t.get_url=</string></value></param></params></methodCall>";
  30.  
  31. my $llen        = length $line;
  32. my $header      = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
  33. my $hlen        = length $header;
  34. $line           = "${hlen}:${header},${line}";
  35.  
  36. if ( ( defined $src ) && ( $src eq "socket" ) ) {
  37.         socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
  38.         connect( SOCK, sockaddr_un( $socket ) ) or die $!;
  39. } else {
  40.         socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
  41.         connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
  42. }
  43.  
  44. print SOCK $line;
  45. flush SOCK;
  46.  
  47. my $depth = 0;
  48. my @torrents = ();
  49. my $torrent;
  50. while ( $line = <SOCK> ) {
  51.         if ( $line =~ /$openarray/ ) {
  52.         $depth++
  53.         }
  54.         if ( $line =~ /$closearray/ ) {
  55.         $depth--
  56.         }
  57.         if ( ( $depth == 2 ) && ( $line =~ /$pattern/ ) ) {
  58.         $torrent = $1;
  59.         }
  60.         if ( ( $depth == 4 ) && ( $line =~ /$tpattern/ ) ) {
  61.         push( @torrents, "${torrent}" );
  62.         }
  63. }
  64. close (SOCK);
  65.  
  66. foreach ( @torrents ) {
  67.     print "${_}\n";
  68. }
  69. print "\n";
  70.  
Add Comment
Please, Sign In to add comment