From fe5880e8642621d70d46f142378054d06f031f3e Mon Sep 17 00:00:00 2001 From: Christian Garbs Date: Sun, 28 Dec 2008 02:04:27 +0100 Subject: [PATCH] Unix Domain Socket communication works still some bugs, /torrent remote gives weird results --- xmlrtorrent/SocketTalker.pm | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/xmlrtorrent/SocketTalker.pm b/xmlrtorrent/SocketTalker.pm index 453b7f6..14b6590 100644 --- a/xmlrtorrent/SocketTalker.pm +++ b/xmlrtorrent/SocketTalker.pm @@ -8,6 +8,7 @@ use xmlrtorrent::TalkerBase; @ISA = qw(xmlrtorrent::TalkerBase); use RPC::XML; +use RPC::XML::Parser; use IO::Socket::UNIX; use strict; @@ -20,6 +21,7 @@ sub new { $self->{'_PARAMS'} = { 'SOCKET' => ['', 'filename of socket'], }; + $self->{'__RPCXMLPARSER'} = RPC::XML::Parser->new(); bless($self, $class); @@ -43,22 +45,24 @@ sub _create_scgi_header($$$) { sub send_request { my $self = shift; - my @params = @_; + my (@params) = (@_); - unless (exists($self->{'_PARAMS'}->{'SOCKET'}) and defined($self->{'_PARAMS'}->{'SOCKET'}) and ($self->{'_PARAMS'}->{'SOCKET'} ne '')) { + my $socketfile = $self->_getval('SOCKET'); + + unless (defined $socketfile and $socketfile ne '') { return 'socket talker: SOCKET not set'; } # prepare socket my $socket = IO::Socket::UNIX->new( 'Type' => SOCK_STREAM, - 'Local' => $self->{'_PARAMS'}->{'SOCKET'}, + 'Peer' => $socketfile, ) - or return "socket: cannot connect to SOCKET: $!"; + or return "socket talker: cannot connect to SOCKET: $!"; $socket->autoflush(1); # default since 1.18, but be sure # prepare XML RPC request - my $rpc_request = RPC::XML::request->new(@params); + my $rpc_request = RPC::XML::request->new(@params)->as_string(); # prpepare SCGI request my $scgi_request = @@ -75,16 +79,16 @@ sub send_request { # read from socket while (my $line = <$socket>) { - last if ($line =~ /^$/); # munch headers + last if ($line =~ /^\s*$/); # munch headers } my $ret = ''; while (my $line = <$socket>) { $ret .= $line; } - $socket->close(); + $socket->close() or return "socket talker: cannot close SOCKET: $!"; - return $ret; + return $self->{'__RPCXMLPARSER'}->parse($ret); } 1; -- 1.8.3.1