Unix Domain Socket communication works
authorChristian Garbs <mitch@cgarbs.de>
Sun, 28 Dec 2008 01:04:27 +0000 (02:04 +0100)
committerRalf Ertzinger <sun@lain.camperquake.de>
Sun, 28 Dec 2008 21:16:27 +0000 (22:16 +0100)
still some bugs, /torrent remote gives weird results

xmlrtorrent/SocketTalker.pm

index 453b7f6..14b6590 100644 (file)
@@ -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;