fix configuration variables
[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::TalkerBase;
8 @ISA = qw(xmlrtorrent::TalkerBase);
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     unless (exists($self->{'_PARAMS'}->{'XMLURL'}) and defined($self->{'_PARAMS'}->{'XMLURL'})) {
39         return 'http talker: XMLURL not set';
40     }
41
42     if ($self->{'_PARAMS'}->{'XMLURL'} ne $self->{'_LASTXMLURL'}) {
43         $self->{'_LASTXMLURL'} = $self->{'_PARAMS'}->{'XMLURL'};
44         $self->{'__RPCClient'} = RPC::XML::Client->new($self->{'_PARAMS'}->{'XMLURL'});
45     }   
46     
47     if ((exists($self->{'_PARAMS'}->{'USERNAME'}) and exists($self->{'_PARAMS'}->{'PASSWORD'})) and
48         ($self->{'_PARAMS'}->{'USERNAME'} ne '')) {
49         # mitch: let me guess, the realm must be configurable, too!
50         $self->{'__RPCClient'}->credentials('', $self->{'_PARAMS'}->{'USERNAME'}, $self->{'_PARAMS'}->{'PASSWORD'});
51     }
52
53     return $self->{'__RPCClient'}->send_request(@params);
54 }
55
56 1;