sub handler( $$ ) {
my( $req, $hasSSL ) = @_;
my $args = parseArgs( $req->args() );
- return HTTPRedirect( $req, protoName( $hasSSL ).'://'.$req->hostname().'/index.html' ) if( $req->uri() eq '/' && ( !defined $args->{'action'} || $args->{'action'} ne 'help' ) );
+ return HTTPRedirect( $req, protoName( $hasSSL ).'://'.$req->hostname().'/index.html' ) if( $req->uri() eq '/' && ( !defined $args->{'action'} || ( $args->{'action'} ne 'help' && $args->{'action'} ne 'jump' ) ) );
return DECLINED if( $req->uri() =~ /^\/((static)\/|robots.txt|index.html)/ );
my $action = $args->{'action'};
$action = '' unless( defined $action );
my $address = PciIds::Address::new( $req->uri() );
$search =~ s/:/\//g;
$search =~ s/ //g;
- my( $top ) = $address->get() =~ /^([^\/]+)/;
- $search =~ s/^\//$top\//;
- #Is it absolute address?
- my $saddr = PciIds::Address::new( $search );
- return redirect( $req, $args, $saddr->get(), $hasSSL ) if( defined $saddr && itemExists( $tables, $saddr->get() ) );
+ if( defined $address ) {
+ my( $top ) = $address->get() =~ /^([^\/]+)/;
+ $search =~ s/^\//$top\//;
+ #Is it absolute address?
+ my $saddr = PciIds::Address::new( $search );
+ return redirect( $req, $args, $saddr->get(), $hasSSL ) if( defined $saddr && itemExists( $tables, $saddr->get() ) );
+ }
while( defined $address ) {
- $saddr = PciIds::Address::new( $address->get()."/$search" );
+ my $saddr = PciIds::Address::new( $address->get()."/$search" );
return redirect( $req, $args, $saddr->get(), $hasSSL ) if( defined $saddr && itemExists( $tables, $saddr->get() ) );
$address = $address->parent();
}
my $direct = tryDirect( $req, $args, $tables, $search, $auth->{'ssl'} );
return $direct if defined $direct;
my $address = PciIds::Address::new( $req->uri() );
+ $address = PciIds::Address::new( 'PC' ) unless defined $address;
unless( $idOnly || length $search < 3 ) {#Try extended search
my( $prefix ) = $address->get() =~ /^([^\/]+)/;
$prefix = undef if $search =~ s/^\*//;