# IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # bos720 src/bos/usr/sbin/install/ecc/lib/ECC/ServiceProviderManager.pm 1.6 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2006,2007 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG package ServiceProviderManager; use strict; use warnings; use Exporter; use XML::SAX; use base qw(XML::SAX::Base); use lib '/usr/ecc/lib/ECC'; use Definitions; use vars qw(@ISA @EXPORT); @ISA = qw(Exporter XML::SAX::Base); @EXPORT = qw(PhoneList CountryList RetrieveID RetrieveSPConfigN); my $record; my $context; my @phones; my %countries; my %u_ids; my $parser; my $process_text = 0; my %sp_config_uris; my $sp_ip=""; sub init() { if (! (-e Definitions::SPMFILE)) { &Utils::showMessage(1, 19, '"Service Provider XML file not found. Contact your local Service Representative.\n"'); exit 1; } my $refresh = ! (stat(Definitions::SPMFILE_PHONES_PREP)) || ((stat(Definitions::SPMFILE_PHONES_PREP))[9] - (stat(Definitions::SPMFILE))[9]) <= 0 || ! (stat(Definitions::SPMFILE_COUNTRIES_PREP)) || ((stat(Definitions::SPMFILE_COUNTRIES_PREP))[9] - (stat(Definitions::SPMFILE))[9]) <= 0 || ! (stat(Definitions::SPMFILE_REGIONIDS_PREP)) || ((stat(Definitions::SPMFILE_REGIONIDS_PREP))[9] - (stat(Definitions::SPMFILE))[9]) <= 0 ; if ($refresh) { $parser = XML::SAX::ParserFactory->parser( Handler => ServiceProviderManager->new); $parser->parse_uri(Definitions::SPMFILE); # PhoneList open(phones_prep_file, "> @{[ Definitions::SPMFILE_PHONES_PREP ]}"); foreach (sort @phones) { print phones_prep_file $_; } close(phones_prep_file); # Countries open(countries_prep_file, "> @{[ Definitions::SPMFILE_COUNTRIES_PREP ]}"); foreach (sort keys %countries) { print countries_prep_file $_; } close(countries_prep_file); # IDs open(ids_prep_file, "> @{[ Definitions::SPMFILE_REGIONIDS_PREP ]}"); foreach (keys %u_ids) { print ids_prep_file "$_=$u_ids{$_}\n"; } close(ids_prep_file); } } sub PhoneList() { init(); open(phones_prep_file, "< @{[ Definitions::SPMFILE_PHONES_PREP ]}"); while ($_ = ) { print; } close(phones_prep_file); } sub CountryList() { init(); open(countries_prep_file, "< @{[ Definitions::SPMFILE_COUNTRIES_PREP ]}"); while ($_ = ) { print; } close(countries_prep_file); } sub RetrieveID($) { my $by_region = shift; my $temp_region; my $temp_id; my $id; init(); open(ids_prep_file, "< @{[ Definitions::SPMFILE_REGIONIDS_PREP ]}"); LINE: while ($_ = ) { ($temp_region, $temp_id) = $_ =~ /(\w+)=([\w\.]+)/g; if ($temp_region eq $by_region) { $id = $temp_id; last LINE; } } close(ids_prep_file); return $id; } sub start_element { shift; my $elem = shift; $context = $elem->{LocalName}; if ($context eq 'Service-Provider-Phone-List-Entry' || $context eq 'Service-Provider-Phone-List-Authentication-Entry' || $context eq 'Service-Provider-Connection-Information-Entry') { $record = {}; $process_text = 1; } } sub characters { if (! $process_text) { return; } shift; $record->{$context} .= shift(@_)->{Data}; #.= because of possible multiple calls } sub end_element { shift; my $elem = shift; $context = $elem->{LocalName}; if ($context eq 'Service-Provider-Phone-List-Entry') { $record->{'State-Province'} = "" unless defined $record->{'State-Province'}; my @phone_entry = ($record->{'Country-Region'}, $record->{'State-Province'}, $record->{'Location'}, $record->{'Phone-Number'}); foreach (@phone_entry) { s/\s+$//; } push(@phones, join(";", @phone_entry)."\n"); $countries{$phone_entry[0]."\n"} = '1'; $process_text = 0; } if ($context eq 'Service-Provider-Phone-List-Authentication-Entry') { my $temp = $record->{'Country-Region'}; my $temp2 = $record->{'User-Id'}; $temp =~ s/\s+$//; $temp2 =~ s/\s+$//; $u_ids{$temp} = $temp2; $process_text = 0; } if ($context eq 'Service-Provider-Connection-Information-Entry' && defined($record->{'Service-Destination'}) && $record->{'Service-Destination'} =~ /^SP_Config_/) { foreach (keys %$record) { $record->{$_} =~ s/\s+$//; } # $sp_config_uris{$record->{'Service-Destination'}} = # ['http://'.$record->{'Host-Name'} # .':'.$record->{'Port'} # .'/'.$record->{'URI'}, # 'http://'.$record->{'IP-Address'} # .':'.$record->{'Port'} # .'/'.$record->{'URI'} # ]; if (($record->{'Host-Name'} =~ /www-03\.ibm\.com/) || ($record->{'Host-Name'} =~ /rchgsa\.ibm\.com/)) { $sp_ip = $record->{'IP-Address'}; } $process_text = 0; } } 1;