|
|
|
@ -9,6 +9,7 @@ use IO::Socket::IP; |
|
|
|
use Bencode; |
|
|
|
use Data::Dumper; |
|
|
|
use JSON; |
|
|
|
use LWP::UserAgent; |
|
|
|
|
|
|
|
|
|
|
|
our $req_cb; |
|
|
|
@ -23,6 +24,9 @@ sub new { |
|
|
|
if (ref($addr)) { |
|
|
|
$self->{socket} = $addr; |
|
|
|
} |
|
|
|
elsif ($addr =~ /^http/) { |
|
|
|
$self->{uri} = $addr; |
|
|
|
} |
|
|
|
else { |
|
|
|
$self->{socket} = IO::Socket::IP->new(Type => &SOCK_DGRAM, Proto => 'udp', |
|
|
|
PeerHost => $addr, PeerPort => $port); |
|
|
|
@ -36,12 +40,21 @@ sub req { |
|
|
|
|
|
|
|
my $cookie = rand() . ' '; |
|
|
|
my $p = $cookie . ($self->{json} ? encode_json($packet) : Bencode::bencode($packet)); |
|
|
|
$self->{socket}->send($p, 0) or die $!; |
|
|
|
if ($req_cb) { |
|
|
|
$req_cb->(); |
|
|
|
} |
|
|
|
my $ret; |
|
|
|
$self->{socket}->recv($ret, 65535) or die $!; |
|
|
|
if ($self->{uri}) { |
|
|
|
my $ua = LWP::UserAgent->new(); |
|
|
|
my $resp = $ua->post($self->{uri}, |
|
|
|
'Content-type' => "application/x-rtpengine-ng", |
|
|
|
Content => $p); |
|
|
|
$ret = $resp->decoded_content; |
|
|
|
} |
|
|
|
else { |
|
|
|
$self->{socket}->send($p, 0) or die $!; |
|
|
|
if ($req_cb) { |
|
|
|
$req_cb->(); |
|
|
|
} |
|
|
|
$self->{socket}->recv($ret, 65535) or die $!; |
|
|
|
} |
|
|
|
$ret =~ s/^\Q$cookie\E//s or die $ret; |
|
|
|
my $resp = $self->{json} ? decode_json($ret) : Bencode::bdecode($ret, 1); |
|
|
|
|
|
|
|
|