Authors
    
      - Richard Frith-Macdonald (rfm@gnu.org)
- 
      
Version: 28737
    Date: 2009-09-25 11:17:32 +0100 (Fri, 25 Sep 2009)
    Copyright: (C) 2009 Free Software Foundation, Inc.
        
    
          
    
    
      
        - Declared in:
- WebServerBundles.h
    
      
        - Conforms to:
- WebServerDelegate
    
      
          WebServerBundles is an example delegate for
          the WebServer class. 
 This is intended to act as a
          convenience for a scheme where the WebServer
          instance in a program is configured by values
          obtained from the user defaults system, and incoming
          requests may be handled by different delegate
          objects depending on the path information supplied in
          the request. The WebServerBundles instance is responsible
          for loading the bundles (based on information in the
          WebServerBundles dictionary in the user
          defaults system) and for forwarding requests to the
          appropriate bundles for processing. 
 If a
          request comes in which is not an exact match for the
          path of any handler, the request path is repeatedly
          shortened by chopping off the last path component
          until a matching handler is found. 
 The paths in
          the dictionary must 
not end with a slash... an
          empty string will match all requests which do not match
          a handler with a longer path.
 
      
        
    
    Instance Variables
    
    Method summary
    
    
    
    - (BOOL) 
defaultsUpdate: (NSNotification*)aNotification;
    
      
            Handle a notification that the defaults have been
            updated... change WebServer configuration if
            necessary. 
            
      
        - 
          
                WebServerPort must be used to specify the
                port that the server listens on. See
                [WebServer -setPort:secure:]
 for details.
              
        
- 
          
                WebServerSecure may be supplied to make
                the server operate as an HTTPS server rather than
                an HTTP server. See
                [WebServer -setPort:secure:]
 for details.
              
        
- 
          
                WebServerBundles is a dictionary keyed
                on path strings, whose values are dictionaries, each
                containing per-handler configuration
                information and the name of the bundle
                containing the code to handle requests sent
                to the path. NB. the bundle name listed should omit
                the .bundleextension.
      
            Returns 
YES on success,
            
NO on failure (if the port of the
            WebServer cannot be set).
          
    
 
    
    - (id) 
handlerForPath: (NSString*)path
 info: (NSString**)info;
    
      
            Returns the handler to be used for the specified
            path, or nil if there is no
            handler available. 
 If the info
            argument is non-null, it is used to return
            additional information, either the
            path actually matched, or an error string.
          
    
    
 
    
    - (NSMutableDictionary*) 
handlers;
    
      
            Return dictionary of all handlers by name (path in
            request which maps to that handler instance).
          
    
    
 
    
    - (
WebServer*) 
http;
    
      
            Return the WebServer instance that the receiver is
            acting as a delegate for.
          
    
    
 
    
    - (id) 
initAsDelegateOf: (
WebServer*)http;
This is a designated initialiser for the class.
    
      
            Initialises the receiver as the delegate of
            HTTP and configures the WebServer based upon the
            settings found in the user defaults system by
            using the
            
              -defaultsUpdate:
            
            method.
          
    
 
    
    - (BOOL) 
processRequest: (
WebServerRequest*)request
 response: (
WebServerResponse*)response
 for: (
WebServer*)http;
    
      
            
    
    
              Handles an incoming request by
              forwarding it to another handler. 
 If a
              direct mapping is available from the path in the
              request to an existing handler, that
              handler is used to process the request
              . Otherwise, the WebServerBundles dictionary (obtained
              from the defaults system) is used to map the
              request path to configuration
              information listing the bundle containing the
              handler to be used.
                
    
      
            
    
    
              The configuration information is a dictionary
              containing the name of the bundle (keyed on
              'Name'), and this is used to locate the bundle
              in the applications resources. 
 Before a
              request is passed on to a handler, two
              extra headers are set in it...
              x-http-path-base and
              x-http-path-info being the actual
              path matched for the handler, and the remainder of
              the path after that base part.
                
    
      
            We handle the incoming requests here.
          
    
 
    
 
    
    - (void) 
registerHandler: (id)handler
 forPath: (NSString*)path;
    
      
            Registers an object as the handler for
            a particular path. 
 Registering a
            nil handler destroys any
            existing handler for the
            path.
          
    
    
 
    
    - (void) 
webAlert: (NSString*)message
 for: (
WebServer*)http;
    
      
            Just write to stderr using NSLog.
          
    
    
 
    
    - (void) 
webAudit: (NSString*)message
 for: (
WebServer*)http;
    
      
            Log an audit record as UTF8 data on stderr.
          
    
    
 
    
    - (void) 
webLog: (NSString*)message
 for: (
WebServer*)http;
    
      
            Just discard the message... please subclass
            or use a category to override this method if you wish to
            used the logged messages.
          
    
    
 
    
    Instance Variables for WebServerBundles Class
    
    @protected NSMutableDictionary* _handlers;
    
      
            Warning the underscore at the start of the
            name of this instance variable indicates that, even
            though it is not technically private, it is
            intended for internal use within the package, and
            you should not use the variable in other code.
          
    
    
    
    @protected WebServer* _http;
    
      
            Warning the underscore at the start of the
            name of this instance variable indicates that, even
            though it is not technically private, it is
            intended for internal use within the package, and
            you should not use the variable in other code.