Allow synonyms for localhost
[spider.git] / perl / AsyncMsg.pm
index cb0878762f1ba7f3d60dd5c4b8cd43bf2366100d..f8cd2f9f3b60bea14be79d24029a69049b685a9c 100644 (file)
@@ -118,6 +118,8 @@ sub _getpost
        $conn->{_assort} = $sort;
        $conn->{csort} = 'http';
 
+       my $data = delete $args{data};
+
        my $ua =  Mojo::UserAgent->new;
        my $s;
        $s .= $host;
@@ -130,6 +132,19 @@ sub _getpost
 #      $tx->on(error => sub { $conn->_error(@_); });
 #      $tx->on(finish => sub { $conn->disconnect; });
 
+       $ua->on(start => sub {
+                               my ($ua, $tx) = @_;
+                               while (my ($k, $v) = each %args) {
+                                       dbg("AsyncMsg: attaching header $k: $v") if isdbg('async');
+                                       $tx->req->headers->header($k => $v);
+                               }
+                               if (defined $data) {
+                                       dbg("AsyncMsg: body ='$data'") if isdbg('async'); 
+                                       $tx->req->body($data);
+                               }
+                       });
+       
+
        $ua->start($tx => sub { $conn->handle_getpost(@_) }); 
 
        
@@ -188,9 +203,11 @@ sub raw
        my %args = @_;
 
        my $handler = delete $args{handler} || \&handle_raw;
+       
        my $conn = $pkg->new($call, $handler);
        $conn->{prefix} = delete $args{prefix} if exists $args{prefix};
        $conn->{prefix} ||= '';
+       $conn->{on_disconnect} = delete $args{on_disc} || delete $args{on_disconnect};
        $r = $conn->connect($host, $port, on_connect => &_on_raw_connect);
        return $r ? $conn : undef;
 }
@@ -251,7 +268,8 @@ sub disconnect
                my $dxchan = DXChannel::get($conn->{caller});
                if ($dxchan) {
                        no strict 'refs';
-                       $ondisc->($conn, $dxchan)
+                       $ondisc->($conn, $dxchan);
+                       delete $conn->{on_disconnect};
                }
        }
        delete $conn->{mojo};
@@ -259,6 +277,19 @@ sub disconnect
        $conn->SUPER::disconnect;
 }
 
+sub _send_later
+{
+       my $conn = shift;
+       my $m = shift;
+       
+       if (isdbg('async')) {
+               my $s = $m;
+               $s =~ s/([\%\x00-\x1f\x7f-\xff])/sprintf("%%%02X", ord($1))/eg;
+               dbg("AsyncMsg: send $s");
+       }
+       $conn->send_later($m);
+}
+
 sub DESTROY
 {
        my $conn = shift;