ns_adp_abort closes the connection without returning an empty HTML page. Every ns_returnxxx call in an ADP should be followed with a call to ns_adp_abort.
The return_value, if specified, becomes the return value of the ADP.
Note that this function returns all the way up the call stack. For example, suppose a.adp includes b.adp which includes c.adp, and c.adp calls ns_adp_abort. No code in b.adp or a.adp after the includes will be executed. You can get around this in one of two ways:
* You can execute these calls in a.adp and b.adp, respectively:
catch {ns_adp_include b.adp} retval
catch {ns_adp_include c.adp} retval
* Or, you can execute this call in c.adp:
ns_adp_return ?retval?
The ns_adp_return function returns up only one level.