# Talker using RPC over HTTP # # (c) 2008 by Ralf Ertzinger # licensed under GNU GPL v2 package xmlrtorrent::HTTPTalker; use xmlrtorrent::TalkerBase; @ISA = qw(xmlrtorrent::TalkerBase); use Data::Dumper; use RPC::XML::Client; use strict; sub new { my $class = shift; my $self = $class->SUPER::new(); $self->{'NAME'} = 'http'; $self->{'DESC'} = 'talker using RPC over HTTP'; $self->{'_PARAMS'} = { 'XMLURL' => ['', 'URL of SCGI script'], 'USERNAME' => ['', 'username for RPC credentials (optional)'], 'PASSWORD' => ['', 'password for RPC credentials (optional)'], }; $self->{'_LASTXMLURL'} = undef; bless($self, $class); $self->_prepare_parameters(); return $self; } sub send_request { my $self = shift; my @params = @_; unless (exists($self->{'_PARAMS'}->{'XMLURL'}) and defined($self->{'_PARAMS'}->{'XMLURL'})) { return 'http talker: XMLURL not set'; } if ($self->{'_PARAMS'}->{'XMLURL'} ne $self->{'_LASTXMLURL'}) { $self->{'_LASTXMLURL'} = $self->{'_PARAMS'}->{'XMLURL'}; $self->{'__RPCClient'} = RPC::XML::Client->new($self->{'_PARAMS'}->{'XMLURL'}); } if ((exists($self->{'_PARAMS'}->{'USERNAME'}) and exists($self->{'_PARAMS'}->{'PASSWORD'})) and ($self->{'_PARAMS'}->{'USERNAME'} ne '')) { # mitch: let me guess, the realm must be configurable, too! $self->{'__RPCClient'}->credentials('', $self->{'_PARAMS'}->{'USERNAME'}, $self->{'_PARAMS'}->{'PASSWORD'}); } return $self->{'__RPCClient'}->send_request(@params); } 1;