/*                                                   W3C Sample Code Library libwww URL Tress
 */
/*
**      (c) COPYRIGHT MIT 1995.
**      Please first read the full copyright statement in the file COPYRIGH.
*/
/*

   A URL tree is a hierarchical container class that is well suited for storing
   information about a URL hierarchy. The root of a URL tree is the hostname part of the
   URL, for example www.w3.org:8000. Client application can use URL trees to store what
   they know about remote servers, for example the access authentication, PICS labels and
   PEP modules required to access a specific URL from a remote server. However, URL trees
   can also be used on server side to contain information about the server tree, for
   example what parts of the tree is protected etc.
   
   There are three components of the URL tree which all can be searched for using the
   methods declared in this module.
   
      The Tree itself
      
      A URL Node which represents a hierarchy level in a URL
      
      A URL Template which can span multiple nodes and are very similar to the realms
      known from for example Basic Access Authentication in HTTP.
      
   Typically, a URL tree will be empty when the application starts and as time goes by and
   we get to know more about the remote servers that we have access, the URL trees will
   contain more and more information. A nice feature about URL trees is that the
   application can interpolate information based on realms and templates. This gives the
   application a good chance of guessing what information (for example a set of
   credentials) should be appended to a new request.
   
   We do not currently distinguish between multiple access mechanisms, for example HTTP
   and FTP, however, URL trees are mostly used within the HTTP domain.
   
   URL Trees are often used by filters which stores information about remote services,
   Each filter can have its own URL tree or a URL tree can be shared among multiple
   filters.
   
   This module is implemented by HTUTree.c, and it is a part of the W3C Sample Code
   Library.
   
 */
#ifndef HTUTREE_H
#define HTUTREE_H
#include "HTReq.h"
/*

   The three parts of a URL tree are called
   
 */
typedef struct _HTUTree     HTUTree;
typedef struct _HTURealm     HTURealm;
typedef struct _HTUTemplate HTUTemplate;
/*

   Create a new authentication base Returns new object or NULL if error
   
 */

typedef int HTUTree_gc          (void * context);

extern HTUTree * HTUTree_new (const char *              root,
                              const char *              host,
                              int                       port,
                              HTUTree_gc *              gc);
/*

   Delete a complete server tree and everything within it.
   
 */
extern BOOL HTUTree_delete (const char *        root,
                            const char *        host,
                            int                 port);
/*

   Delete all information bases
   
 */
extern BOOL HTUTree_deleteAll (void);
/*

   Find a authentication base. Return NULL if not found
   
 */
extern HTUTree * HTUTree_find (const char *     root,
                               const char *     host,
                               int              port);
/*

 */
extern void * HTUTree_findNode (HTUTree * tree,
                                const char * realm, const char * path);
/*

 */
extern BOOL HTUTree_addNode (HTUTree * tree,
                             const char * realm, const char * path,
                             void * context);
/*

 */
extern BOOL HTUTree_replaceNode (HTUTree * tree,
                                 const char * realm, const char * path,
                                 void * context);
/*

 */
extern BOOL HTUTree_deleteNode (HTUTree * tree,
                                const char * realm, const char * path);
/*

 */
#endif /* HTUTREE_H */
/*

   
   ___________________________________
   
   */
