/*
* $Id: object.h 80826 2008-03-04 14:51:23Z wotte $
*
* Copyright (c) 1994, 1995. Netscape Communications Corporation. All
* rights reserved.
*
* Use of this software is governed by the terms of the license agreement for
* the Netscape Communications or Netscape Comemrce Server between the
* parties.
*/
/* ------------------------------------------------------------------------ */
/*
* object.h: Handle httpd objects
*
* Manages information about a document from config. files. Called mainly
* by objset.c.
*
* This module does not assume anything about the directives being parsed.
* That is handled by objset.c.
*
* This module requires the pblock module from the base library.
*
* Rob McCool
*
*/
#ifndef OBJECT_H
#define OBJECT_H
#include "netsite.h"
#include "base/pblock.h"
#include "base/session.h"
/* ------------------------------ Constants ------------------------------- */
/* The maximum directive length unabbreviated, plus one space */
#define MAX_DNAME_LEN 11
#define NUM_DIRECTIVES 7
/* ------------------------------ Structures ------------------------------ */
/*
* Hierarchy of httpd_object
*
* An object contains dtables.
*
* Each dtable is a table of directives that were entered of a certain type.
* There is one dtable for each unique type of directive.
*
* Each dtable contains an array of directives, each of which is equivalent
* to one directive that occurred in a config. file.
*
* It is up to the caller to determine how many dtables will be allocated
* and to keep track of which of their directive types maps to which dtable
* number.
*/
/*
* directive is a structure containing the protection and parameters to an
* instance of a directive within an httpd_object.
*
* param is the parameters, client is the protection.
*/
typedef struct {
pblock *param;
pblock *client;
} directive;
/*
* dtable is a structure for creating tables of directives
*/
typedef struct {
int ni;
directive *inst;
} dtable;
/*
* The httpd_object structure.
*
* The name pblock array contains the names for this object, such as its
* virtual location, its physical location, or its identifier.
*
* tmpl contains any templates allocated to this object.
*/
typedef struct {
pblock *name;
int nd;
dtable *dt;
} httpd_object;
/* ------------------------------ Prototypes ------------------------------ */
/*
* directive_name2num will return the position of the abbreviated directive
* dir in the directive table.
*
* If dir does not exist in the table, it will return -1.
*/
int directive_name2num(char *dir);
/*
* directive_num2name returns a string describing directive number num.
*/
const char *directive_num2name(int num);
/*
* object_create will create a new object and return a pointer to it.
* It will allocate space for nd directive types and set name accordingly.
*/
httpd_object *object_create(int nd, pblock *name);
/*
* object_free will free an object and any data associated with it.
*/
void object_free(httpd_object *obj);
/*
* object_add_directive will add a new directive to the dtable for
* the directive class at position dc.
*/
void object_add_directive(int dc, pblock *p, pblock *c, httpd_object *obj);
/*
* object_findnext finds the object configured to follow the given object,
* and stores the variables in rq->vars. It returns REQ_PROCEED if more
* objects should be processed, or REQ_NOACTION if it did not find any
* further objects to process. If something bad happens, REQ_ABORTED is
* returned.
*
* Handles all DIRECTIVE_CONSTRUCT type directives such as NameTrans and
* AuthType.
*/
/* --------- Prototype moved to req.h because of interdependency ---------- */
#endif