#
# Copyright for the Uniform Repository Service (c) 1995 - 2000, 2021, 2023, 2024, 2025
# by Gerald Banon. All rights reserved.
# Version 2.1
# from.tcl
#
# The document is searched within the collection defined by the local bibliographic mirror
# (unless the call is done from another mirror). If it is not found the it is searched im the whole URLib collection.
# The document corresponding to the official version or the most recent
# metadata last update is returned.
#
# Example of:
# /col/inpe.br/gb/1998/08.02.08.56/doc/goto-/inpe.br/gb/1998/08.08.09.10
# PATH_INFO = /inpe.br/gb/1998/08.02.08.56/to-/inpe.br/gb/1998/08.08.09.10

# see reserved file names in iconet.com.br/banon/2008/12.11.01.03 (Testando nome de arquivo e sequência de pastas/arquivo reservados)

proc From {} {
if [catch {
## http://mtc-m12.sid.inpe.br/col/urlib.net/www/2023/06.03.21.17/doc/upn:4CR88AP:8JMKD3MGP3W34R/44C25PS
## /urlib.net/www/2023/06.03.21.17/to/upn:4CR88AP/8JMKD3MGP3W34R/44C25PS
# http://mtc-m12.sid.inpe.br/col/urlib.net/www/2023/06.03.21.17/doc/urn:doi:10.17487/RFC8141
# /urlib.net/www/2023/06.03.21.17/to/urn:doi/10.17487/RFC8141

## http://gjfb:1905/col/iconet.com.br/banon/2001/04.28.19.50/doc/urlib:4CR88AP:QABCDSTQQW/4BT93R5?forcehistorybackflag=1
## /iconet.com.br/banon/2001/04.28.19.50/to/urlib:4CR88AP/QABCDSTQQW/4BT93R5?forcehistorybackflag=1
# http://gjfb0520.sid.inpe.br/col/urlib.net/www/2023/11.16.13.37/doc/urn:doi:10.1590/0001-3765202320210807
# /urlib.net/www/2023/11.16.13.37/to/urn:doi/10.1590/0001-3765202320210807

	global env
	global linkFromResolve	;# set in Resolve - solve the return problem when leaving the Resolve code

# ibiResolver (local site)	
	set ibiResolver $env(SERVER_NAME):$env(SERVER_PORT)	;# source resolver
# homePath
	set homePath $env(DOCUMENT_ROOT)
# URLibServiceRepository
	set URLibServiceRepository $env(URLIB_SERVICE_REP)
	
	if ![regexp {/([^/]*/[^/]*/[^/]*/[^/]*)/to/([^/]*)/([^/]*/[^/]*/[^/]*/[^/]*.*)$} $env(PATH_INFO) m source resolverID destination] {
		regexp {/([^/]*/[^/]*/[^/]*/[^/]*)/to/([^/]*)/([^/]*/[^/]*.*)$} $env(PATH_INFO) m source resolverID destination	;# added by GJFB in 2021-11-17 to resolve urn
	}
	
if 0 {
	puts {Content-Type: text/html}
	puts {}
	puts "From: PATH_INFO = $env(PATH_INFO) 
" puts "From: resolverID = $resolverID
" puts "From: destination = $destination
" } ## regsub {goto} $resolverID {upn:4CR88AP} resolverID ;# nameSpaceID value is upn:4CR88AP- or upn:4CR88AP # regsub {goto} $resolverID {ibi} resolverID ;# URI prefix value is ibi- or ibi ## regsub {^ibi(-?)$} $resolverID {upn:4CR88AP\1} resolverID ;# nameSpaceID value is upn:4CR88AP- or upn:4CR88AP if {[info exists env(QUERY_STRING)] && [string compare {} $env(QUERY_STRING)] != 0} { # set queryString ?$env(QUERY_STRING) ;# commented by GJFB in 2021-10-08 # set queryString ?$env(QUERY_STRING)&linktype=relative ;# added by GJFB in 2021-10-08 - linktype is used in ReturnURLPropertyList2 - commented by GJFB in 2024-01-04 set queryString ?$env(QUERY_STRING)&ibiurl.clientinformation.citingitem=$source&linktype=relative ;# added by GJFB in 2021-10-08 - linktype is used in ReturnURLPropertyList2 - added by GJFB in 2024-01-04 } else { # set queryString {} ;# commented by GJFB in 2021-10-08 # set queryString ?linktype=relative ;# added by GJFB in 2021-10-08 - linktype is used in ReturnURLPropertyList2 - commented by GJFB in 2024-01-04 set queryString ?ibiurl.clientinformation.citingitem=$source&linktype=relative ;# added by GJFB in 2021-10-08 - linktype is used in ReturnURLPropertyList2 - added by GJFB in 2024-01-04 } if [regsub {goto} $resolverID {ibi} resolverID] { ;# resolverID value is ibi- or ibi set link $ibiResolver/$resolverID/$destination$queryString ;# traditional link } else { if 0 { set link $ibiResolver/$resolverID:$destination$queryString ;# to be solved in 'Resolve' } else { # should be faster - doesn't require Apache source $homePath/col/$URLibServiceRepository/doc/cgi/resolve.tcl ;# Resolve # set link [Resolve 0 /$resolverID:$destination $queryString] ;# commented by GJFB in 2025-12-02 - for some reason return from Resollve doesn't work Resolve 0 /$resolverID:$destination $queryString ;# added by GJFB in 2025-12-02 set link $linkFromResolve ;# linkFromResolve is set in Resolve # puts --$link-- } } # puts "Location: http://mtc-m12.sid.inpe.br/urn:doi:10.17487/RFC8141 ;# to be solved in 'resolve' # puts "Location: http://gjfb0520.sid.inpe.br/10.1590/urn:doi:0001-3765202320210807? ; to be solved in 'resolve' puts "Location: http://$link" puts "" # => Location: http://doi.org/10.1590/0001-3765202320210807?ibiurl.clientinformation.citingitem=urlib.net/www/2023/11.16.13.37&linktype=relative ## => Location: http://gjfb:1905/upn:4CR88AP:urlib.net/www/2024/08.26.03.05?forcehistorybackflag=1&ibiurl.clientinformation.citingitem=iconet.com.br/banon/2001/04.28.19.50&linktype=relative ## => Location: http://gjfb:1905/upn:4CR88AP:QABCDSTQQW/4BT93R5?forcehistorybackflag=1&ibiurl.clientinformation.citingitem=iconet.com.br/banon/2001/04.28.19.50&linktype=relative ## => Location: http://gjfb:1905/upn:4CR88AP-:QABCDSTQQW/4BT93R5?forcehistorybackflag=1&ibiurl.clientinformation.citingitem=iconet.com.br/banon/2001/04.28.19.50&linktype=relative } m] { if ![string equal {} $m] { puts {Content-Type: text/html} puts {} puts "
From: $m
" if 0 {global errorInfo; puts
$errorInfo
} } } } #