use FS::part_export;
use FS::svc_phone;
use FS::export_svc;
+use LWP::UserAgent;
@ISA = qw(FS::part_export);
'datasrc' => { label=>'DBI data source ' },
'username' => { label=>'Database username' },
'password' => { label=>'Database password' },
+ 'xmlrpc_url' => { label=>'XMLRPC URL' },
+ # XXX: in future, add non-agent-virtualized config, i.e. per-export setting of gwlist, routeid, description, etc.
+ # and/or setting description from the phone_name column
;
%info = (
- 'svc' => 'svc_phone',
- 'desc' => 'Export DIDs to OpenSIPs dr_rules table',
- 'options' => \%options,
- 'notes' => 'Export DIDs to OpenSIPs dr_rules table',
+ 'svc' => 'svc_phone',
+ 'desc' => 'Export DIDs to OpenSIPs dr_rules table',
+ 'options' => \%options,
+ 'no_machine' => 1,
+ 'notes' => 'Export DIDs to OpenSIPs dr_rules table',
);
sub rebless { shift; }
sub _export_insert {
my($self, $svc_x) = (shift, shift);
+
+ my $conf = new FS::Conf;
+ my $agentnum = $svc_x->cust_svc->cust_pkg->cust_main->agentnum || 0;
+ my $gwlist = $conf->config('opensips_gwlist',$agentnum) || '';
+ my $description = $conf->config('opensips_description',$agentnum) || '';
+ my $route = $conf->config('opensips_route',$agentnum) || '';
+
my $dbh = $self->opensips_connect;
my $sth = $dbh->prepare("insert into dr_rules ".
"( groupid, prefix, timerec, routeid, gwlist, description ) ".
" values ( ?, ?, ?, ?, ?, ? )") or die $dbh->errstr;
- $sth->execute('0',$svc_x->phonenum,'',$svc_x->route,'',
- $svc_x->phone_name) or die $sth->errstr;
+ $sth->execute('0',$svc_x->phonenum,'',$route,$gwlist,$description)
+ or die $sth->errstr;
$dbh->disconnect;
- '';
+ $self->dr_reload; # XXX: if this fails, do we delete what we just inserted?
}
sub opensips_connect {
}
sub _export_replace {
- my( $self, $new, $old ) = (shift, shift, shift);
- my @update = ();
- my @paramvalues = ();
-
- if($old->route ne $new->route){
- push @update, 'routeid = ?';
- push @paramvalues, $new->route;
- }
-
- if($old->phone_name ne $new->phone_name) {
- push @update, 'description = ?';
- push @paramvalues, $new->phone_name;
- }
-
- if(scalar(@update)) {
- my $update_str = join(' and ',@update);
- my $dbh = $self->opensips_connect;
- my $sth = $dbh->prepare("update dr_rules set $update_str " .
- " where prefix = ? ") or die $dbh->errstr;
- push @paramvalues, $old->phonenum;
- $sth->execute(@paramvalues) or die $sth->errstr;
- $dbh->disconnect;
- }
- '';
+ '';
}
sub _export_suspend {
or die $dbh->errstr;
$sth->execute($svc_x->phonenum) or die $sth->errstr;
$dbh->disconnect;
- '';
+ $self->dr_reload; # XXX: if this fails, do we re-insert what we just deleted?
+}
+
+sub dr_reload {
+ my $self = shift;
+ my $reqxml = "<?xml version=\"1.0\"?>
+<methodCall>
+ <methodName>dr_reload</methodName>
+</methodCall>";
+ my $ua = LWP::UserAgent->new;
+ my $resp = $ua->post( $self->option('xmlrpc_url'),
+ Content_Type => 'text/xml',
+ Content => $reqxml );
+ return "invalid HTTP response from OpenSIPS: " . $resp->status_line
+ unless $resp->is_success;
+ '';
}
+1;