- Handle autosave on module unload/irssi exit
[xmlrtorrent.git] / xmlrtorrent / HTTPTalker.pm
1 # Talker using RPC over HTTP
2 #
3 # (c) 2008 by Ralf Ertzinger <ralf@camperquake.de>
4 # licensed under GNU GPL v2
5
6 package xmlrtorrent::HTTPTalker;
7 use xmlrtorrent::RTorrentTalkerBase;
8 @ISA = qw(xmlrtorrent::RTorrentTalkerBase);
9
10 use Data::Dumper;
11 use RPC::XML::Client;
12 use strict;
13
14 sub new {
15     my $class = shift;
16     my $self = $class->SUPER::new();
17
18     $self->{'NAME'} = 'http';
19     $self->{'DESC'} = 'talker using RPC over HTTP';
20     $self->{'_PARAMS'} = {
21         'XMLURL' => ['', 'URL of SCGI script'],
22         'USERNAME' => ['', 'username for RPC credentials (optional)'],
23         'PASSWORD' => ['', 'password for RPC credentials (optional)'],
24     };
25     $self->{'_LASTXMLURL'} = undef;
26
27     bless($self, $class);
28
29     $self->_prepare_parameters();
30
31     return $self;
32 }
33
34 sub send_request {
35     my $self = shift;
36     my @params = @_;
37
38     my $xmlurl = $self->_getval('XMLURL');
39
40     unless (defined($xmlurl) and $xmlurl ne '') {
41         return 'http talker: XMLURL not set';
42     }
43
44     if ($xmlurl ne $self->{'_LASTXMLURL'}) {
45         $self->{'_LASTXMLURL'} = $xmlurl;
46         $self->{'__RPCClient'} = RPC::XML::Client->new($xmlurl);
47     }   
48     
49     my $username = $self->_getval('USERNAME');
50     my $password = $self->_getval('PASSWORD');
51
52     if (defined $username and defined $password and $username ne '') {
53         # mitch: let me guess, the realm must be configurable, too!
54         $self->{'__RPCClient'}->credentials('', $username, $password);
55     }
56
57     return $self->{'__RPCClient'}->send_request(@params);
58 }
59
60 1;