rp_handler conn ignoreWhat it does:
The request handler, which responds to absolutely every HTTP request made to the server.Defined in: /web/philip/packages/acs-core/request-processor-procs.tcl
Source code:
set errno [catch { ##### # # Initialize the environment: unset the ad_conn array, and populate it with # a few things. # ##### global ad_conn if { [info exists ad_conn] } { unset ad_conn } set ad_conn(request) [nsv_incr ad_security request] set ad_conn(sec_validated) "" set ad_conn(browser_id) "" set ad_conn(session_id) "" set ad_conn(user_id) 0 set ad_conn(token) "" set ad_conn(last_issue) "" set ad_conn(deferred_dml) "" set ad_conn(start_clicks) [clock clicks] rp_debug "Serving request: [ns_conn url]" set url [ns_conn url] set urlv [rp_url_component_list $url] # Here we'd play with $urlv, stripping any scoping/subcommunity information # from the beginning of the URL and setting the appropriate ad_conn fields. # For now, since we don't support scoping here, we don't do anything to # $urlv. # The URL, sans scoping information, goes in ad_conn(url). set ad_conn(url) "/[join $urlv "/"]" set ad_conn(urlv) $urlv ##### # # See if any libraries have changed. This may look expensive, but all it # does is check an NSV. # ##### rp_debug "Checking for changed libraries" apm_load_any_changed_libraries ##### # # Log stuff for developer support. # ##### rp_debug "Performing developer support logging" ad_call_proc_if_exists ds_collect_connection_info # Skip a few steps for requests to system directories (like SYSTEM) - don't # check the Host header, and don't check any cookies. if { ![nsv_exists rp_system_url_sections [lindex $urlv 0]] } { ##### # # Check the Host header (if provided). If it doesn't look like [ns_conn location] # (a combination of the Hostname and Port specified under the nssock module in # the server.ini file), issue a redirect. # ##### if { [ad_parameter ForceHostP "" 1] } { rp_debug "Checking the host header" set host_header [ns_set iget [ns_conn headers] "Host"] set virtual_mappings [ad_parameter_all_values_as_list Host "virtual-host-mapping"] foreach mapping $virtual_mappings { set virtualhostname [lindex [split $mapping "|"] 0] set virtualhosttarget [lindex [split $mapping "|"] 1] if { [string first $virtualhostname $host_header] != -1 } { # one of the virtual hosts has been asked for # we'll redirect only if there is no URL, e.g., just bostonhelicoptertours.com if { [ns_conn url] == "" || [ns_conn url] == "/" } { ns_returnredirect $virtualhosttarget return "filter_return" } } } # first let's check to see if it is one of our virtual hosts regexp {^([^:]*)} $host_header "" host_without_port regexp {^https?://([^:]+)} [ns_conn location] "" desired_host_without_port if { ![empty_string_p $host_header] && ![string equal $host_without_port $desired_host_without_port] } { rp_debug "Host header is set to \"$host_header\"; forcing to \"[ns_conn location]\"" set query [ns_conn query] if { $query != "" } { set query "?$query" if { [ns_getform] != "" } { set query "$query&[export_entire_form_as_url_vars]" } } elseif { [ns_set size [ns_getform]] != 0 } { set query "?[export_entire_form_as_url_vars]" } ad_returnredirect "[ns_conn location][ns_conn url]$query" return "filter_return" } } ##### # # Read in and/or generate security cookies. # ##### rp_debug "Handling security" # Read in the security cookies. sec_read_security_info # Use sec_log to log the cookies (for debugging's sake). sec_log "ad_browser_id=<<[ad_get_cookie "ad_browser_id"]>>; ad_session_id=<<[ad_get_cookie "ad_session_id"]>>" if { [empty_string_p $ad_conn(browser_id)] } { # Assign a browser_id set db [ns_db gethandle] # Fails under read-only -jsc set ad_conn(browser_id) [database_to_tcl_string $db "select sec_id_seq.nextval from dual"] sec_log "Assigned browser ID $ad_conn(browser_id)" ad_set_cookie -expires never "ad_browser_id" $ad_conn(browser_id) } if { [empty_string_p $ad_conn(session_id)] || $ad_conn(last_issue) > [ns_time] + [sec_session_timeout] || $ad_conn(last_issue) + [sec_session_timeout] < [ns_time] } { # No session or user ID yet (or last_issue is way in the future, or session is # expired). if { ![info exists db] } { # Allocate a database handle if one hasn't been allocated yet. set db [ns_db gethandle] } if { [empty_string_p $ad_conn(last_issue)] } { set ad_conn(last_issue) "" } sec_log "Bad session: session ID was \"$ad_conn(session_id)\"; last_issue was \"$ad_conn(last_issue)\"; ns_time is [ns_time]; timeout is [sec_session_timeout]" ad_assign_session_id $db } else { # The session already exists and is valid. if { $ad_conn(last_issue) + [sec_session_cookie_reissue] < [ns_time] } { # It's been a while... reissue the cookie and update sec_sessions. ad_defer_dml " update sec_sessions set last_hit = [ns_time] where session_id = $ad_conn(session_id) " # This should probably be changed to util_memoize_seed. util_memoize_flush "sec_get_session_info $ad_conn(session_id)" sec_generate_session_id_cookie } } if { [info exists db] } { # Free any database handle we may have allocated. ns_db releasehandle $db } } ##### # # Invoke applicable preauth filters. # ##### rp_debug "Calling preauth filters" # filters based on ad_conn(url) if { [rp_call_filters $conn preauth] == "filter_return" } { rp_debug "Filter returned filter_return" return "filter_return" } ##### # # Invoke ns_requestauthorize to run any authorization module, such as nsperm. # Patch by Brian Mottershead, 2005-11-17 # ##### set method [ns_conn method] set authuser [ns_conn authuser] set authpassword [ns_conn authpassword] set ip [peeraddr] switch [ns_requestauthorize $method $url $authuser $authpassword $ip] { "OK" { # do nothing } "FORBIDDEN" { ns_returnforbidden return "filter_return" } "UNAUTHORIZED" { ns_returnunauthorized return "filter_return" } default - "ERROR" { ad_return_error "Authorization problem" "An error occurred while authorizing the request" return "filter_return" } } ##### # # Invoke applicable postauth filters. # ##### rp_debug "Calling postauth filters" if { [rp_call_filters $conn postauth] == "filter_return" } { return "filter_return" } ##### # # Invoke a registered procedure, if we find one. # ##### rp_debug "Looping through registered procedures" # Loop through the array of registered procs, dispatching if we find a match. foreach proc_info [nsv_get rp_registered_procs [ns_conn method]] { set proc_path [lindex $proc_info 1] set proc_noinherit [lindex $proc_info 5] if { [string match $proc_path $ad_conn(url)] || $proc_noinherit == "f" && [string match "$proc_path/*" $ad_conn(url)] } { # Found a match. Execute the handler procedure. if { [catch { set proc [lindex $proc_info 2] set args [lindex $proc_info 3] if { [llength [info procs $proc]] == 0 } { # [info procs $proc] returns nothing when the procedure has been # registered by C code (e.g., ns_returnredirect). Assume that neither # "conn" nor "why" is present in this case. eval $proc $args } else { # Need to eval different things depending on whether the proc # has the $conn element. if { [llength [info args $proc]] - [llength $args] == 2 } { # Procedure has conn argument. eval $proc [list $conn] "dontuseme" } elseif { [llength [info args $proc]] - [llength $args] == 1 } { # Procedure has conn argument. eval $proc [list $conn] $args } else { eval $proc $args } } }] } { # We got an error! Eventually write out a fancy error message; for now, # return a server error. global errorInfo ns_log "Notice" "Error in registered procedure $proc: $errorInfo" ad_return_error "Error in filter" "The filter routine <tt>$proc</tt> has failed." } return "filter_return" } } ##### # # Invoke the abstract URL system. # ##### rp_debug "Calling rp_abstract_url_server" rp_abstract_url_server return "filter_return" } error] # If it's an "OK" or a "return" exception, just propagate it if { $errno == 0 || $errno == 2 } { return $error } # Bombed! Dump a stack trace. global errorInfo ns_log "Error" "Error executing request processor: $errorInfo" ad_return_error "Error in request processor" "An error occurred in the request processor. Please try later. If the problem persists, send a message to philg-webmaster@photo.net" return "filter_return"