OpenSIPS provisioning, RT10993
[freeside.git] / FS / FS / part_export / phone_sqlopensips.pm
index 8a3d3a1..cb644a0 100644 (file)
@@ -7,6 +7,7 @@ use FS::Record qw( dbh qsearch qsearchs );
 use FS::part_export;
 use FS::svc_phone;
 use FS::export_svc;
+use LWP::UserAgent;
 
 @ISA = qw(FS::part_export);
 
@@ -14,6 +15,7 @@ tie %options, 'Tie::IxHash',
   'datasrc'  => { label=>'DBI data source ' },
   'username' => { label=>'Database username' },
   'password' => { label=>'Database password' },
+  'xmlrpc_url' => { label=>'XMLRPC URL' },
 ;
 
 %info = (
@@ -31,10 +33,10 @@ sub _export_insert {
   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,'',
+  $sth->execute('0',$svc_x->phonenum,'',$svc_x->route,$svc_x->gwlist,
                $svc_x->phone_name) or die $sth->errstr;
   $dbh->disconnect;
-  '';
+  $self->dr_reload;
 }
 
 sub opensips_connect {
@@ -58,6 +60,11 @@ sub _export_replace {
        push @paramvalues, $new->phone_name;
     }
 
+    if($old->gwlist ne $new->gwlist) {
+       push @update, 'gwlist = ?';
+       push @paramvalues, $new->gwlist;
+    }
+
     if(scalar(@update)) {
       my $update_str = join(' and ',@update);
       my $dbh = $self->opensips_connect;
@@ -66,6 +73,7 @@ sub _export_replace {
       push @paramvalues, $old->phonenum;
       $sth->execute(@paramvalues) or die $sth->errstr;
       $dbh->disconnect;
+      return $self->dr_reload;
     }
   '';
 }
@@ -87,6 +95,21 @@ sub _export_delete {
     or die $dbh->errstr;
   $sth->execute($svc_x->phonenum) or die $sth->errstr;
   $dbh->disconnect;
-  '';
+  $self->dr_reload;
+}
+
+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;
+    '';
 }