diff --git a/debian/control b/debian/control index e5e467e6f..788d3ebb2 100644 --- a/debian/control +++ b/debian/control @@ -47,6 +47,7 @@ Build-Depends: libtest2-suite-perl, liburing-dev (>= 2.3) , libwebsockets-dev, + libwww-perl, libxtables-dev (>= 1.4) | iptables-dev (>= 1.4), ngcp-libcodec-chain-dev (>= 13.3) , pandoc, diff --git a/perl/NGCP/Rtpengine.pm b/perl/NGCP/Rtpengine.pm index b4d55dbed..f6d165cea 100644 --- a/perl/NGCP/Rtpengine.pm +++ b/perl/NGCP/Rtpengine.pm @@ -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);