X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_export%2Fhuawei_hlr.pm;h=9b405d5b617ad511a6093cb5119b81dc53e9349a;hb=389b6f1116c3309c2ee57a6c295ed1a793503095;hp=fb3b6790a978153de8128493d00558367ff85def;hpb=c5fba52eb881e31ecc006224289885cde2cc96f3;p=freeside.git diff --git a/FS/FS/part_export/huawei_hlr.pm b/FS/FS/part_export/huawei_hlr.pm index fb3b6790a..9b405d5b6 100644 --- a/FS/FS/part_export/huawei_hlr.pm +++ b/FS/FS/part_export/huawei_hlr.pm @@ -5,6 +5,8 @@ use Tie::IxHash; use FS::Record qw(qsearch qsearchs dbh); use FS::part_export; use FS::svc_phone; +use FS::inventory_class; +use FS::inventory_item; use IO::Socket::INET; use Data::Dumper; @@ -14,10 +16,25 @@ $DEBUG = 0; @ISA = qw(FS::part_export); tie my %options, 'Tie::IxHash', - 'opname' => { label=>'Operator login' }, - 'pwd' => { label=>'Operator password' }, + 'opname' => { label=>'Operator login (required)' }, + 'pwd' => { label=>'Operator password (required)' }, 'tplid' => { label=>'Template number' }, 'hlrsn' => { label=>'HLR serial number' }, + 'k4sno' => { label=>'K4 serial number' }, + 'cardtype' => { label => 'Card type (required)', + type => 'select', + options=> ['SIM', 'USIM'] + }, + 'alg' => { label => 'Authentication algorithm (required)', + type => 'select', + options=> ['COMP128_1', + 'COMP128_2', + 'COMP128_3', + 'MILENAGE' ], + }, + 'opcvalue' => { label=>'OPC value (for MILENAGE only)' }, + 'opsno' => { label=>'OP serial number (for MILENAGE only)' }, + 'timeout' => { label=>'Timeout (seconds)', default => 120 }, 'debug' => { label=>'Enable debugging', type=>'checkbox' }, ; @@ -32,17 +49,21 @@ set on the service, and the template must exist. END ); +sub actions { + 'Import SIMs' => 'misc/part_export/huawei_hlr-import_sim.html' +} + sub _export_insert { my( $self, $svc_phone ) = (shift, shift); # svc_phone::check should ensure phonenum and sim_imsi are numeric my @command = ( - 'ADD TPLSUB', IMSI => '"'.$svc_phone->sim_imsi.'"', - ISDN => '"'.$svc_phone->phonenum.'"', + ISDN => '"'.$svc_phone->countrycode.$svc_phone->phonenum.'"', TPLID => $self->option('tplid'), ); unshift @command, 'HLRSN', $self->option('hlrsn') if $self->option('hlrsn'); + unshift @command, 'ADD TPLSUB'; my $err_or_queue = $self->queue_command($svc_phone->svcnum, @command); ref($err_or_queue) ? '' : $err_or_queue; } @@ -53,7 +74,7 @@ sub _export_replace { if ( $new->sim_imsi ne $old->sim_imsi ) { my @command = ( 'MOD IMSI', - ISDN => '"'.$old->phonenum.'"', + ISDN => '"'.$old->countrycode.$old->phonenum.'"', IMSI => '"'.$old->sim_imsi.'"', NEWIMSI => '"'.$new->sim_imsi.'"', ); @@ -61,11 +82,12 @@ sub _export_replace { return $err_or_queue unless ref $err_or_queue; $depend_jobnum = $err_or_queue->jobnum; } - if ( $new->phonenum ne $old->phonenum ) { + if ( $new->countrycode ne $old->countrycode or + $new->phonenum ne $old->phonenum ) { my @command = ( 'MOD ISDN', - ISDN => '"'.$old->phonenum.'"', - NEWISDN => '"'.$new->phonenum.'"', + ISDN => '"'.$old->countrycode.$old->phonenum.'"', + NEWISDN => '"'.$new->countrycode.$new->phonenum.'"', ); my $err_or_queue = $self->queue_command($new->svcnum, @command); return $err_or_queue unless ref $err_or_queue; @@ -94,7 +116,7 @@ sub _export_lock { my @command = ( 'MOD LCK', IMSI => '"'.$svc_phone->sim_imsi.'"', - ISDN => '"'.$svc_phone->phonenum.'"', + ISDN => '"'.$svc_phone->countrycode.$svc_phone->phonenum.'"', IC => $lockstate, OC => $lockstate, GPRSLOCK=> $lockstate, @@ -107,8 +129,8 @@ sub _export_delete { my( $self, $svc_phone ) = (shift, shift); my @command = ( 'RMV SUB', - IMSI => '"'.$svc_phone->sim_imsi.'"', - ISDN => '"'.$svc_phone->phonenum.'"', + #IMSI => '"'.$svc_phone->sim_imsi.'"', + ISDN => '"'.$svc_phone->countrycode.$svc_phone->phonenum.'"', ); my $err_or_queue = $self->queue_command($svc_phone->svcnum, @command); ref($err_or_queue) ? '' : $err_or_queue; @@ -179,15 +201,16 @@ sub command { $string .= shift(@param) . '=' . shift(@param); $string .= ',' if @param; } - $string .= "\n"; + $string .= "\n;"; my @result; eval { # timeout local $SIG{ALRM} = sub { die "timeout\n" }; - alarm ($self->option('timeout') || 30); + alarm ($self->option('timeout') || 120); warn "Sending to server:\n$string\n\n" if $DEBUG; $socket->print($string); warn "Received:\n"; my $line; + local $/ = "\r\n"; do { $line = $socket->getline(); warn $line if $DEBUG; @@ -203,11 +226,10 @@ sub command { return { error => $@ }; } else { #+++ HLR9820