You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ngcp-panel/lib/NGCP/Panel/Utils/PartyCallControl.pm

67 lines
1.7 KiB

package NGCP::Panel::Utils::PartyCallControl;
use Sipwise::Base;
use LWP::UserAgent;
use URI;
use JSON;
use Encode qw/encode/;
sub dispatch {
my (%args) = @_;
my $c = $args{c};
my $url = $args{url};
my $timeout = $args{timeout};
my $id = $args{id};
my $type = $args{type};
my $from = $args{from};
my $to = $args{to};
my $text = $args{text};
my $token = $args{token};
my %url_ph_map = (
caller => $from,
callee => $to,
callid => $id,
token => $token,
prefix => $type,
suffix => 'in',
);
# apply known placeholders to the url
foreach my $v (qw(caller callee callid token prefix suffix)) {
my $t = $url_ph_map{$v} // "";
# only add trailing slash if not last param (suffix here)
unless($v eq "suffix") {
$t .= $t ? "/" : "";
}
$url =~ s/(\$\{$v\})/$t/g;
}
# TODO: dispatch asynchronously!
my $ua = LWP::UserAgent->new(
#ssl_opts => { verify_hostname => 0, SSL_verify_mode => 0 },
timeout => $timeout,
);
$c->log->info("sending pcc request for $type with id $id to $url");
my $req = HTTP::Request->new(POST => $url);
$req->header('Content-Type' => 'application/json;charset=utf-8');
$req->content(encode('utf8', to_json({
actualMsisdn => $to,
callingMsisdn => $from,
callid => $id,
type => $type,
token => $token,
$type eq "sms" ? (text => $text) : (),
})));
my $res = $ua->request($req);
$c->log->info("sending pcc request " . ($res->is_success ? "succeeded" : "failed"));
if ($res->is_success) {
return 1;
}
return;
}
1;