[ Previous ] [ Contents ] [ Index ] [ Next ]

Ns_RegisterFilter

Overview

Register a filter function to handle a method/URL combination

Syntax

    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
    );

Description

This function will register a filter procedure for a method/URL combination on a virtual 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:

NS_FILTER_PRE_AUTH: the filter will be called before authorization of a page
NS_FILTER_POST_AUTH: the filter will be called after authorization but before a page has been returned
NS_FILTER_TRACE: the filter will be called after the connection has been totally processed

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:

/employees/*.tcl
/accounts/*/out

Example

    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;
    }
    DllExport 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);

Top of Page

[ Previous ] [ Contents ] [ Index ] [ Next ]
Copyright © 1996 America Online, Inc.