|
|
typedef int (Ns_FilterProc) (void *context, Ns_Conn *conn, int
why);
Ns_ProcHandle Ns_RegisterFilter(
char *hServer,
char *method,
char *URLpatterns,
Ns_FilterProc *proc,
int why,
void *context
);
This function will register a filter procedure for a method/URL combination on a server. This function will be called at the specified stage of a connection, if the method/URL combination for the filter matches the method/URL combination for the connection using glob style matching. The procedures are run in last-registered last-run order. A filter procedure is often used for logging.
The why argument can be any of the following, or some combination of them by bitwise OR-ing (with "|") them together:
Using pre-authorization, the procedure will be called (assuming that the method/URL combination matches) just before authorization. If the procedure returns:
Using post-authorization, the procedure will be called (assuming that the method/URL combination matches) just after successful authorization. If the procedure returns:
Using trace, the procedure will be called (assuming that the method/URL combination match) after the connection has been totally processed and closed. If the procedure returns:
The URLpatterns can contain standard string-matching characters. For example, these are valid URLpatterns:
static int
ReportUse(void *context, Ns_Conn *conn, int why){
int status=NS_OK;
switch(why){
case NS_FILTER_PRE_AUTH:
Ns_Log(Notice, "User trying to access %s",conn->request->url);
break;
case NS_FILTER_POST_AUTH:
Ns_Log(Notice, "User authorized to access %s",conn->request-
>url);
break;
case NS_FILTER_TRACE:
Ns_Log(Notice, "User has retrieved %s",conn->request->url);
break;
default:
status=NS_ERROR;
}
return status;
}
int
Ns_ModuleInit(char *hServer, char *hModule){
Ns_RegisterFilter(hServer, "GET", "/test/a*", ReportUse,
Ns_FILTER_PRE_AUTH, NULL);
Ns_RegisterFilter(hServer, "GET", "/test/b*", ReportUse,
Ns_FILTER_POST_AUTH, NULL);
Ns_RegisterFilter(hServer, "GET", "/test/c*", ReportUse,
Ns_FILTER_TRACE, NULL);
Ns_RegisterFilter(hServer, "GET", "/test/d*", ReportUse,
Ns_FILTER_PRE_AUTH | NS_FILTER_POST_AUTH, NULL);
Ns_RegisterFilter(hServer, "GET", "/test/e*", ReportUse,
Ns_FILTER_POST_AUTH | NS_FILTER_TRACE, NULL);
Ns_RegisterFilter(hServer, "GET", "/test/f*", ReportUse,
Ns_FILTER_PRE_AUTH | Ns_FILTER_POST_AUTH | NS_FILTER_TRACE,
NULL);