1 package FS::part_export::phone_sqlopensips;
3 use vars qw(@ISA @EXPORT_OK %info %options);
6 use FS::Record qw( dbh qsearch qsearchs );
12 @ISA = qw(FS::part_export);
14 tie %options, 'Tie::IxHash',
15 'datasrc' => { label=>'DBI data source ' },
16 'username' => { label=>'Database username' },
17 'password' => { label=>'Database password' },
18 'xmlrpc_url' => { label=>'XMLRPC URL' },
23 'desc' => 'Export DIDs to OpenSIPs dr_rules table',
24 'options' => \%options,
25 'notes' => 'Export DIDs to OpenSIPs dr_rules table',
28 sub rebless { shift; }
31 my($self, $svc_x) = (shift, shift);
32 my $dbh = $self->opensips_connect;
33 my $sth = $dbh->prepare("insert into dr_rules ".
34 "( groupid, prefix, timerec, routeid, gwlist, description ) ".
35 " values ( ?, ?, ?, ?, ?, ? )") or die $dbh->errstr;
36 $sth->execute('0',$svc_x->phonenum,'',$svc_x->route,$svc_x->gwlist,
37 $svc_x->phone_name) or die $sth->errstr;
42 sub opensips_connect {
44 DBI->connect($self->option('datasrc'),$self->option('username'),
45 $self->option('password')) or die $DBI::errstr;
49 my( $self, $new, $old ) = (shift, shift, shift);
53 if($old->route ne $new->route){
54 push @update, 'routeid = ?';
55 push @paramvalues, $new->route;
58 if($old->phone_name ne $new->phone_name) {
59 push @update, 'description = ?';
60 push @paramvalues, $new->phone_name;
63 if($old->gwlist ne $new->gwlist) {
64 push @update, 'gwlist = ?';
65 push @paramvalues, $new->gwlist;
69 my $update_str = join(' and ',@update);
70 my $dbh = $self->opensips_connect;
71 my $sth = $dbh->prepare("update dr_rules set $update_str " .
72 " where prefix = ? ") or die $dbh->errstr;
73 push @paramvalues, $old->phonenum;
74 $sth->execute(@paramvalues) or die $sth->errstr;
76 return $self->dr_reload;
82 my( $self, $svc_phone ) = (shift, shift);
86 sub _export_unsuspend {
87 my( $self, $svc_phone ) = (shift, shift);
92 my( $self, $svc_x ) = (shift, shift);
93 my $dbh = $self->opensips_connect;
94 my $sth = $dbh->prepare("delete from dr_rules where prefix = ?")
96 $sth->execute($svc_x->phonenum) or die $sth->errstr;
103 my $reqxml = "<?xml version=\"1.0\"?>
105 <methodName>dr_reload</methodName>
107 my $ua = LWP::UserAgent->new;
108 my $resp = $ua->post( $self->option('xmlrpc_url'),
109 Content_Type => 'text/xml',
110 Content => $reqxml );
111 return "invalid HTTP response from OpenSIPS: " . $resp->status_line
112 unless $resp->is_success;