[0001]
[0002]
[0003]
[0004]
[0005]
[0006]
[0007]
[0008]
[0009]
[0010]
[0011]
[0012]
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026]
[0027]
[0028]
[0029]
[0030]
[0031]
[0032]
[0033]
[0034]
[0035]
[0036]
[0037]
[0038]
[0039]
[0040]
[0041]
[0042]
[0043]
[0044]
[0045]
[0046]
[0047]
[0048]
[0049]
[0050]
[0051]
[0052]
[0053]
[0054]
[0055]
[0056]
[0057]
[0058]
[0059]
[0060]
[0061]
[0062]
[0063]
[0064]
[0065]
[0066]
[0067]
[0068]
[0069]
[0070]
[0071]
[0072]
[0073]
[0074]
[0075]
[0076]
[0077]
[0078]
[0079]
[0080]
[0081]
[0082]
[0083]
[0084]
[0085]
[0086]
[0087]
[0088]
[0089]
[0090]
[0091]
[0092]
[0093]
[0094]
[0095]
[0096]
[0097]
[0098]
[0099]
[0100]
[0101]
[0102]
[0103]
[0104]
[0105]
[0106]
[0107]
[0108]
[0109]
[0110]
[0111]
[0112]
[0113]
[0114]
[0115]
[0116]
[0117]
[0118]
[0119]
[0120]
[0121]
[0122]
[0123]
[0124]
[0125]
[0126]
[0127]
[0128]
[0129]
[0130]
[0131]
[0132]
[0133]
[0134]
[0135]
[0136]
[0137]
[0138]
[0139]
[0140]
[0141]
[0142]
[0143]
[0144]
[0145]
[0146]
[0147]
[0148]
[0149]
[0150]
[0151]
[0152]
[0153]
[0154]
[0155]
[0156]
[0157]
[0158]
[0159]
[0160]
[0161]
[0162]
[0163]
[0164]
[0165]
[0166]
[0167]
[0168]
[0169]
[0170]
[0171]
[0172]
[0173]
[0174]
[0175]
[0176]
[0177]
[0178]
[0179]
[0180]
[0181]
[0182]
[0183]
[0184]
[0185]
[0186]
[0187]
[0188]
[0189]
[0190]
[0191]
[0192]
[0193]
[0194]
[0195]
[0196]
[0197]
[0198]
[0199]
[0200]
[0201]
[0202]
[0203]
[0204]
[0205]
[0206]
[0207]
[0208]
[0209]
[0210]
[0211]
[0212]
[0213]
[0214]
[0215]
[0216]
[0217]
[0218]
[0219]
[0220]
[0221]
[0222]
[0223]
[0224]
[0225]
[0226]
[0227]
[0228]
[0229]
[0230]
[0231]
[0232]
[0233]
[0234]
[0235]
[0236]
[0237]
[0238]
[0239]
[0240]
[0241]
[0242]
[0243]
[0244]
[0245]
[0246]
[0247]
[0248]
[0249]
[0250]
[0251]
[0252]
[0253]
[0254]
[0255]
[0256]
[0257]
[0258]
[0259]
[0260]
[0261]
[0262]
[0263]
[0264]
[0265]
[0266]
[0267]
[0268]
[0269]
[0270]
[0271]
[0272]
[0273]
[0274]
[0275]
[0276]
[0277]
[0278]
[0279]
[0280]
[0281]
[0282]
[0283]
[0284]
[0285]
[0286]
[0287]
[0288]
[0289]
[0290]
[0291]
[0292]
[0293]
[0294]
[0295]
[0296]
[0297]
[0298]
[0299]
[0300]
[0301]
[0302]
[0303]
[0304]
[0305]
[0306]
[0307]
[0308]
[0309]
[0310]
[0311]
[0312]
[0313]
[0314]
[0315]
[0316]
[0317]
[0318]
[0319]
[0320]
[0321]
[0322]
[0323]
[0324]
[0325]
[0326]
[0327]
[0328]
[0329]
[0330]
[0331]
[0332]
[0333]
[0334]
[0335]
[0336]
[0337]
[0338]
[0339]
[0340]
[0341]
[0342]
[0343]
[0344]
[0345]
[0346]
[0347]
[0348]
[0349]
[0350]
[0351]
[0352]
[0353]
[0354]
[0355]
[0356]
[0357]
[0358]
[0359]
[0360]
[0361]
[0362]
[0363]
[0364]
[0365]
[0366]
[0367]
[0368]
[0369]
[0370]
[0371]
[0372]
[0373]
[0374]
[0375]
[0376]
[0377]
[0378]
[0379]
[0380]
[0381]
[0382]
[0383]
[0384]
[0385]
[0386]
[0387]
[0388]
[0389]
[0390]
[0391]
[0392]
[0393]
[0394]
[0395]
[0396]
[0397]
[0398]
[0399]
[0400]
[0401]
[0402]
[0403]
[0404]
[0405]
[0406]
[0407]
[0408]
[0409]
[0410]
[0411]
[0412]
[0413]
[0414]
[0415]
[0416]
[0417]
[0418]
[0419]
[0420]
[0421]
[0422]
[0423]
[0424]
[0425]
[0426]
[0427]
[0428]
[0429]
[0430]
[0431]
[0432]
[0433]
[0434]
[0435]
[0436]
[0437]
[0438]
[0439]
[0440]
[0441]
[0442]
[0443]
[0444]
[0445]
[0446]
[0447]
[0448]
[0449]
[0450]
[0451]
[0452]
[0453]
[0454]
[0455]
[0456]
[0457]
[0458]
[0459]
[0460]
[0461]
[0462]
[0463]
[0464]
[0465]
[0466]
[0467]
[0468]
[0469]
[0470]
[0471]
[0472]
[0473]
[0474]
[0475]
[0476]
[0477]
[0478]
[0479]
[0480]
[0481]
[0482]
[0483]
[0484]
[0485]
[0486]
[0487]
[0488]
[0489]
[0490]
[0491]
[0492]
[0493]
[0494]
[0495]
[0496]
[0497]
[0498]
[0499]
[0500]
[0501]
[0502]
[0503]
[0504]
[0505]
[0506]
[0507]
[0508]
[0509]
[0510]
[0511]
[0512]
[0513]
[0514]
[0515]
[0516]
[0517]
[0518]
[0519]
[0520]
[0521]
[0522]
[0523]
[0524]
[0525]
[0526]
[0527]
[0528]
[0529]
[0530]
[0531]
[0532]
[0533]
[0534]
[0535]
[0536]
[0537]
[0538]
[0539]
[0540]
[0541]
[0542]
[0543]
[0544]
[0545]
[0546]
[0547]
[0548]
[0549]
[0550]
[0551]
[0552]
[0553]
[0554]
[0555]
[0556]
[0557]
[0558]
[0559]
[0560]
[0561]
[0562]
[0563]
[0564]
[0565]
[0566]
[0567]
[0568]
[0569]
[0570]
[0571]
[0572]
[0573]
[0574]
[0575]
[0576]
[0577]
[0578]
[0579]
[0580]
[0581]
[0582]
[0583]
[0584]
[0585]
[0586]
[0587]
[0588]
[0589]
[0590]
[0591]
[0592]
[0593]
[0594]
[0595]
[0596]
[0597]
[0598]
[0599]
[0600]
[0601]
[0602]
[0603]
[0604]
[0605]
[0606]
[0607]
[0608]
[0609]
[0610]
[0611]
[0612]
[0613]
[0614]
[0615]
[0616]
[0617]
[0618]
[0619]
[0620]
[0621]
[0622]
[0623]
[0624]
/*****************************************************************************/
/*
                                  DAVweb.h

*/
/*****************************************************************************/

#ifndef DAVWEB_H_LOADED
#define DAVWEB_H_LOADED 1

#include "../expat/expat.h"
#include <lkidef.h>

/**********/
/* macros */
/**********/

/* WASD'S own XML namespace */
#define WEBDAV_NS_WASDAV "WASD.VMS.WebDAV:"

/* compare this element string to the WASDAV namespace element name */
#define WEBDAV_IS_WASDAVEL(elstr,elname) \
(*(ULONGPTR)elstr == 'WASD' && \
 *(ULONGPTR)(elstr+sizeof(WEBDAV_NS_WASDAV)) == *(ULONGPTR)elname && \
 !strcmp(elstr,WEBDAV_NS_WASDAV " " elname))

/* compare this element string to the DAV namespace element name */
#define WEBDAV_IS_DAVEL(elstr,elname) \
(*(ULONGPTR)elstr == 'DAV:' && \
 *(ULONGPTR)(elstr+sizeof("DAV:")) == *(ULONGPTR)elname && \
 !strcmp(elstr,"DAV: " elname))

/* number of parents tested for lock meta-data */
#define WEBDAV_LOCK_PARENT_DEFAULT 1

/* number of volumes ODS can be cached */
#define WEBDAV_META_VOLODS 32

/* seconds representing an infinite timeout (~31 years) */
#define WEBDAV_TIMEOUT_INFINITE 999999999

#define WEBDAV_LOCK_TIMEOUT_DEFAULT   3600  /* seconds - one hour */
#define WEBDAV_LOCK_TIMEOUT_MAX     604800  /* seconds - one week */

#define WEBDAV_FLUSH_SECONDS_MAX        30  /* for PROPFIND */

#define WEBDAV_DEPTH_ZERO 0
#define WEBDAV_DEPTH_ONE  1
/* must be positive and greater than 1 */
#define WEBDAV_DEPTH_INFINITY 999

#define WEBDAV_LOCK_TYPE_WRITE      1

#define WEBDAV_LOCK_SCOPE_SHARED    1
#define WEBDAV_LOCK_SCOPE_EXCLUSIVE 2

/* phases of processing when deleting */
#define WEBDAV_DELETE_SINGLE_FILE  1
#define WEBDAV_DELETE_TREE_FILES   2
#define WEBDAV_DELETE_TREE_DIRS    3
#define WEBDAV_DELETE_TREE_PARENT  4

/* "Microsoft-WebDAV-MiniRedir/.." */
#define WEBDAV_MICROSOFT_MINIREDIR  1
/* "Microsoft Data Access Internet Publishing Provider .." */
#define WEBDAV_MICROSOFT_MDAIPP     2
/* South River Technologies WebDrive (assuming some level of IIS conformance) */
#define WEBDAV_MICROSOFT_WEBDRIVE  10
/* BARAD-DUR (assuming some level of IIS conformance) */
#define WEBDAV_MICROSOFT_BITKINEX  11
/* had "Microsoft" in the user agent field */
#define WEBDAV_MICROSOFT_UNKNOWN   99

#define WEBDAV_LOCK_TOKEN_SIZE 64

/* states when parsing XML */
#define WEBDAV_STATE_NOT_PARSING  0
#define WEBDAV_STATE_PARSING      1
#define WEBDAV_STATE_PARSED       2

/* macros for setting/testing states */
#define WEBDAV_PARSING(this)     (this = WEBDAV_STATE_PARSING)
#define WEBDAV_PARSED(this)      (this = WEBDAV_STATE_PARSED)
#define WEBDAV_NOT_PARSING(this) (this = WEBDAV_STATE_NOT_PARSING)
#define WEBDAV_IS_PARSING(this)  (this == WEBDAV_STATE_PARSING)
#define WEBDAV_IS_PARSED(this)   (this == WEBDAV_STATE_PARSED)

/*******************/
/* data structures */
/*******************/

#pragma member_alignment __save
#pragma member_alignment

/* forward reference */
typedef struct WebDavTaskStruct WEBDAV_TASK;

/******************/
/* copy structure */
/******************/

typedef struct WebDavCopyStruct WEBDAV_COPY;

typedef struct WebDavCopyStruct
{
   BOOL  CopyingDir,
         CopyingMeta,
         MoveOverwrite;

   int  BucketSize,
        DataSize,
        DirCount,
        DirFailCount,
        FileCount,
        FileFailCount,
        MetaCount,
        MetaFailCount,
        SuccessCount,
        VmsStatus;

   char  *DataPtr;

   REQUEST_STRUCT  *RequestPtr;

   STR_DSC  ReadNameDsc,
            WriteNameDsc;

   ODS_STRUCT  *ReadOdsPtr,
               *WriteOdsPtr;
};

/********************/
/* delete structure */
/********************/

typedef struct WebDavDeleteStruct WEBDAV_DELETE;

typedef struct WebDavDeleteStruct
{
   int  /* phase of deletion */
        DelPhase,
        /* count of directory files deleted */
        DirCount,
        /* count of directory file deletion errors */
        DirFailCount,
        /* count of files deleted */
        FileCount,
        /* count of file deletion errors */
        FileFailCount,
        /* count of meta files deleted */
        MetaCount,
        /* count of meta file deletion errors */
        MetaFailCount,
        /* count of tree directories deleted this pass */
        TreeDirCount,
        /* count of tree directories not empty this pass */
        TreeDirNotEmptyCount;
};      

/******************/
/* lock structure */
/******************/

typedef struct WebDavLockStruct WEBDAV_LOCK;

typedef struct WebDavLockStruct
{
   LIST_ENTRY  ListEntry;

   int  Depth,
        Type,
        Scope,
        Timeout;

   int64  ExpiresTime64;

   char  ExpiresString [48],
         TokenString [WEBDAV_LOCK_TOKEN_SIZE+1],
         TimeoutString [24];
         
   STR_DSC  LockDsc,
            OwnerDsc;
};

/*****************/
/* DLM structure */
/*****************/

typedef struct WebDavDlmStruct WEBDAV_DLM;

typedef struct WebDavDlmStruct
{
   unsigned long  ResourceHash [4];

   BOOL  ExMode;

   char  ResourceName [ODS_MAX_FILE_NAME_LENGTH+1];

   struct lksb  LockSb;

   REQUEST_STRUCT  *RequestPtr;
   WEBDAV_TASK  *TaskPtr;
};

/******************/
/* meta structure */
/******************/

typedef struct WebDavMetaStruct WEBDAV_META;

typedef struct WebDavMetaStruct
{
   BOOL  CopyCaseChange,
         CopyDeleteAfter,
         CopyLocked,
         LockCreated,
         MetaCreated,
         MetaDirCreate,
         MetaForDir,
         ParseData,
         ParseLock,
         ParseLockExpires,
         ParseLockOwner,
         ParseProp,
         ParseCharData,
         ResourceNamesMatch,
         UpdateLocked;

   int  ElementDepth,
        MetaDirNameLength,
        MoveDirCount,
        MoveDirFailCount,
        MoveFileCount,
        MoveFileFailCount,
        ReadMetaNameLength,
        ReadResourceNameLength,
        RabBucket,
        VmsStatus,
        WriteMetaNameLength,
        WriteResourceNameLength;

   unsigned long  CopyAstParam,
                  DeleteAstParam,
                  ReadAstParam,
                  UpdateAstParam;

   unsigned long  ReadHash [4],
                  WriteHash [4];

   char  *MetaDirNamePtr;

   char  ReadMetaName [ODS_MAX_FILE_NAME_LENGTH+1],
         ReadResourceName [ODS_MAX_FILE_NAME_LENGTH+1],
         WriteMetaName [ODS_MAX_FILE_NAME_LENGTH+1],
         WriteResourceName [ODS_MAX_FILE_NAME_LENGTH+1];

   WEBDAV_DLM  DlmData,
               DlmDest;
   WEBDAV_LOCK  *LockBuildPtr;
   WEBDAV_TASK  *TaskPtr;

   LIST_HEAD  LockList;

   STR_DSC  CopyDsc,
            FromDsc,
            LockDsc,
            ParseErrorDsc,
            PropDsc,
            ReadDsc,
            ToDsc,
            WriteDsc;

   ODS_STRUCT  ReadOds;

   REQUEST_STRUCT  *RequestPtr;

   REQUEST_AST  CopyAstFunction,
                DeleteAstFunction,
                ReadAstFunction,
                UpdateAstFunction;
};

/**********************/
/* property structure */
/**********************/

typedef struct WebDavPropStruct WEBDAV_PROP;

typedef struct WebDavPropStruct
{
   BOOL  AllProp,
         CreationDate,
         DisplayName,
         FindProp,
         GetContentLanguage,
         GetContentLength,
         GetContentType,
         GetEtag,
         GetLastModified,
         LockDiscovery,
         PropName,
         ResourceType,
         PropertyBehaviorKeepalive,
         PropertyBehaviorOmit,
         SupportedLock,
         VersionName,
         QuotaAvailableBytes,
         QuotaUsedBytes;

   STR_DSC  SetDsc;
};

/***********************/
/* XML parse structure */
/***********************/

typedef struct WebDavXmlStruct WEBDAV_XML;

struct WebDavXmlStruct
{
   int  ElementDepth,
        ParseCharData,
        ParseFind,
        ParseLockInfo,
        ParseLockOwner,
        ParseLockScope,
        ParseLockType,
        ParseProp,
        ParsePropertyBehavior,
        ParsePropertyUpdate,
        ParsePropFind,
        ParseRemove,
        ParseSet;

   STR_DSC  CharDataDsc,
            ElementDsc,
            ParseErrorDsc,
            PropFindDsc,
            PropRemoveDsc,
            PropSetDsc;

   WEBDAV_PROP  *PropListPtr,
                *PropRemovePtr,
                *PropSetPtr;

   XML_Parser  *ParserPtr;
};

/******************/
/* task structure */
/******************/

struct WebDavTaskStruct
{
   BOOL  /* request is NOT begin processed by WebDAV module functions */
         NotWebDavFun,
         /* the specification is a directory */
         IsDirectory,
         /* global config locking enabled and path not 'webdav=NOlocking' */
         LockingEnabled,
         /* keeps track of parent search */
         PropParent,
         /* RFC 4331 quota properties enabled for request */
         QuotaEnabled,
         /* the searched file is a directory file (".DIR;") */
         SearchIsDirectory,
         /* the directory has been changed from ']dir' to '.dir]' */
         SlashlessDir,
         /* move required a copy (different device or meta-data involved) */
         MoveUsingCopy,
         /* overwrite was permitted and actually happened */
         OverwriteOccurred;

   int  /* subdirectory or full directory specification for meta files */
        MetaFileDirLength,
        /* "Microsoft" in the user agent field */
        MicrosoftAgent,
        /* seconds before network buffer is explicitly flushed */
        PropFindFlushAfter,
        /* U*x seconds timestamp when network buffer last flushed */
        PropFindFlushSecond,
        /* track the length of the network buffer data  */
        PropFindFlushLength,
        /* HTTP status code generated during processing */
        ResponseStatusCode,
        /* length of search specification */
        SearchSpecLength,
        /* parameter to meta-data test (for lock) AST */
        TestLockAstParam,
        /* level at which (any) lock occured */
        TestLockedAt,
        /* for checking parent meta locks */
        TestLockDepth,
        /* for checking meta locks */
        TestLockState,
        /* VMS status indicating locking test result */
        TestLockStatus,
        /* depth of collection operation */
        ToDepth;

   unsigned long  /* MD5 hash of request name */
                  RequestHash [4],
                  /* MD5 hash of destination name */
                  DestinationHash [4];

   char  /* subdirectory or full directory specification for meta files */
         *MetaFileDirPtr;

   char  /* buffer to contain multistatus href= scheme://host:port */
         HrefHost [32+128],
         /* buffer to contain multistatus href= path */
         HrefPath [ODS_MAX_FILE_NAME_LENGTH+1],
         /* */
         LockTestName [ODS_MAX_FILE_NAME_LENGTH+1],
         /* search specification */
         SearchSpec [ODS_MAX_FILE_NAME_LENGTH+1];

   /* storage for content-type, etc. */
   CONTENT_TYPE  ContentInfo;

   /* VMS DLM locks on source and destination */
   WEBDAV_DLM  DlmSource,
               DlmDestin;

   /* used for retrieving file size, dates, etc. */
   FILE_QIO  FileAcpData;

   /* "on-disk structure" supporting both ODS-2 and ODS-5 */
   ODS_STRUCT  DestOds,
               SearchOds;

   /* WebDAV functional data stuctures */
   WEBDAV_COPY  CopyData;
   WEBDAV_DELETE  DeleteData;
   WEBDAV_LOCK  LockData;
   WEBDAV_META  MetaData;
   WEBDAV_PROP  PropData;
   WEBDAV_XML  XmlData;

   /* pointer to request owning this WebDAV task structure */
   REQUEST_STRUCT  *RequestPtr;

   REQUEST_AST  /* storage of next function after AST delivery */
                AstFunction,
                /* storage of function after meta-data test (for lock) */
                TestLockAstFunction;
};

#pragma member_alignment __restore

/***********************/
/* function prototypes */
/***********************/

/* DAVWEB.C module */

void DavWebAgentDetect (REQUEST_STRUCT*);
int DavWebCreateDir (REQUEST_STRUCT*, char*, int);
int DavWebDateTimeTo3339 (char*, int64*);
int DavWebDateTimeFrom3339 (char*, int64*);
BOOL DavWebDequeue (WEBDAV_DLM*);
int DavWebDestination (REQUEST_STRUCT*);
int DavWebDirFromName (char*, char*, int);
BOOL DavWebDlmEnqueue (REQUEST_STRUCT*, WEBDAV_DLM*, char*, unsigned long*,
                       BOOL, BOOL, REQUEST_AST, unsigned long);
int DavWebDlmTest (char*);
BOOL DavWebEnqueue (WEBDAV_DLM*, BOOL, BOOL, REQUEST_AST, unsigned long);
void DavWebEnd (REQUEST_STRUCT*);
void DavWebGetHead (REQUEST_STRUCT*);
void DavWebGetHeadEnd (REQUEST_STRUCT*);
void DavWebGetHead404 (REQUEST_STRUCT*);
DavWebHref (REQUEST_STRUCT*, char*, int);
int DavWebInit ();
BOOL DavWebMicrosoftDetect (REQUEST_STRUCT*);
DavWebMkCol (REQUEST_STRUCT*);
DavWebMkCol2 (REQUEST_STRUCT*);
DavWebMultiStatus (REQUEST_STRUCT*, int, char*);
DavWebMicrosoftMunge1 (REQUEST_STRUCT*);
DavWebMicrosoftMunge2 (REQUEST_STRUCT*);
int DavWebSlashlessMunge (REQUEST_STRUCT*, BOOL);
char* DavWebPathAccess (REQUEST_STRUCT*);
void DavWebPutBegin (REQUEST_STRUCT*);
BOOL DavWebRequest (REQUEST_STRUCT*);
DavWebRequest2 (REQUEST_STRUCT*);
DavWebReport (REQUEST_STRUCT*);
DavWebReportOnParse (REQUEST_STRUCT*);
DavWebResponse (REQUEST_STRUCT*, int, int, char*, char*, int);
DavWebResponse201 (REQUEST_STRUCT*);
DavWebResponse207 (REQUEST_STRUCT*);

/* DAVCOPY.C module */

DavCopyBegin (REQUEST_STRUCT*);
DavCopyDirectory (REQUEST_STRUCT*);
DavCopyDirectory2 (REQUEST_STRUCT*);
DavCopyEnd (WEBDAV_COPY*);
DavCopyFile (REQUEST_STRUCT*);
DavCopyFile2 (WEBDAV_COPY*);
DavCopyMeta (REQUEST_STRUCT*, char*, char*);
DavCopyNext (WEBDAV_COPY*);
DavCopyNextAst (WEBDAV_COPY*);
DavCopyOpen (WEBDAV_COPY*);
DavCopyReadOpenAst (WEBDAV_COPY*);
DavCopyReadAst (struct RAB*);
DavCopyWriteAst (struct RAB*);
DavCopyWriteOpenAst (WEBDAV_COPY*);

/* DAVDELETE.C module */

DavDeleteBegin (REQUEST_STRUCT*);
DavDeleteBegin2 (REQUEST_STRUCT*);
DavDeleteEnd (REQUEST_STRUCT*);
void DavDeleteErase (REQUEST_STRUCT*);
int DavDeleteMetaErase (WEBDAV_META*);
int DavDeleteParse (REQUEST_STRUCT*, BOOL, char*);
DavDeleteSearch (REQUEST_STRUCT*);
DavDeleteSearchAst (REQUEST_STRUCT*);

/* DAVLOCK.C module */

DavLockBegin (REQUEST_STRUCT*);
int DavLockSetTimeout (REQUEST_STRUCT*, WEBDAV_LOCK*);
DavLockDlm (REQUEST_STRUCT*);
DavLockEnd (WEBDAV_META*);
WEBDAV_LOCK* DavLockFindToken (REQUEST_STRUCT*);
WEBDAV_LOCK* DavLockFindIf (REQUEST_STRUCT*, int);
DavLockTest (REQUEST_STRUCT*, char*, BOOL, REQUEST_AST, unsigned long);
BOOL DavLockIfToken (REQUEST_STRUCT*, WEBDAV_LOCK*);
DavLockPreProcess (REQUEST_STRUCT*);
DavLockSetOpaqueToken (REQUEST_STRUCT*, WEBDAV_LOCK*);
DavLockSetUrnUuidToken (REQUEST_STRUCT*, WEBDAV_LOCK*);
DavLockUpdate (WEBDAV_META*);
DavLockXml (REQUEST_STRUCT*, WEBDAV_LOCK*, STR_DSC*);
DavUnLockBegin (REQUEST_STRUCT*);
DavUnLockEnd (WEBDAV_META*);
DavUnLockUpdate (WEBDAV_META*);

/* DavMeta.C module */

int DavMetaBuild (WEBDAV_META*);
int DavMetaCreateDir (WEBDAV_META*);
int DavMetaDeleteDir (WEBDAV_META*);
BOOL DavMetaDir (REQUEST_STRUCT*, ODS_STRUCT*);
BOOL DavMetaFile (ODS_STRUCT*);
int DavMetaFileName (char*, char*, int);
int DavMetaOds (char*);
DavMetaLock (REQUEST_STRUCT*, WEBDAV_META*, char*, REQUEST_AST, unsigned long);
DavMetaLockAst (WEBDAV_META*);
DavMetaName (WEBDAV_META*, char*, int);
DavMetaRead (REQUEST_STRUCT*, WEBDAV_META*, char*, REQUEST_AST, unsigned long);
DavMetaReadOpen (WEBDAV_META*);
DavMetaReadAst (struct RAB*);
DavMetaOpenAst (WEBDAV_META*);
BOOL DavMetaRemove (REQUEST_STRUCT*, STR_DSC*, STR_DSC*);
STR_DSC* DavMetaSet (REQUEST_STRUCT*, STR_DSC*, STR_DSC*);
STR_DSC* DavMetaSearch (REQUEST_STRUCT*, STR_DSC*, STR_DSC*);
DavMetaUpdate (WEBDAV_META*, REQUEST_AST, unsigned long);
DavMetaUpdateWrite (struct RAB*);

int DavMetaParseXml (WEBDAV_META*);
void XMLCALL DavMetaCharData (WEBDAV_META*, XML_Char*, int);
void XMLCALL DavMetaEndElement (WEBDAV_META*, char*);
void XMLCALL DavMetaStartElement (WEBDAV_META*, char*, char**);

/* DAVMOVE.C module */

int DavMoveBegin (REQUEST_STRUCT*);
int DavMoveEnd (REQUEST_STRUCT*);
int DavMoveFile (REQUEST_STRUCT*);
int DavMoveDirectory (REQUEST_STRUCT*);
int DavMoveMeta (REQUEST_STRUCT*, char*, char*);
int DavMoveRename (REQUEST_STRUCT*, struct dsc$descriptor*,
                                    struct dsc$descriptor*);

/* DAVPROP.C module */

int DavPropFind ();
DavPropBegin (REQUEST_STRUCT*);
DavPropBegin2 (REQUEST_STRUCT*);
DavPropDead (REQUEST_STRUCT*);
DavPropEnd (REQUEST_STRUCT*);
DavPropLive (REQUEST_STRUCT*);
DavPropLiveAcp (REQUEST_STRUCT*);
DavPropName (REQUEST_STRUCT*);
DavPropParent (REQUEST_STRUCT*);
int DavPropParse (REQUEST_STRUCT*);
DavPropPatchBegin (REQUEST_STRUCT*);
DavPropPatchBegin2 (REQUEST_STRUCT*);
DavPropPatchEnd (REQUEST_STRUCT*);
DavPropPatchUpdate (WEBDAV_META*);
DavPropQuota (REQUEST_STRUCT*);
DavPropReadAst (REQUEST_STRUCT*);
DavPropSearch (REQUEST_STRUCT*);
DavPropSearchAst (REQUEST_STRUCT*);

DavPropPatchBegin (REQUEST_STRUCT*);
void XMLCALL DavPropPatchStartElement (REQUEST_STRUCT*, char*, const char**);
void XMLCALL DavPropPatchEndElement (REQUEST_STRUCT*, char*);

/* DAVXML.C module */

void XMLCALL DavXmlCharData (REQUEST_STRUCT*, XML_Char*, int);
void DavXmlInit ();
int DavXmlParseText (REQUEST_STRUCT*, STR_DSC*);
BOOL DavXmlMemoryError (REQUEST_STRUCT*, XML_Parser*);
DavXmlParseError (REQUEST_STRUCT*, XML_Parser*, STR_DSC*, STR_DSC*);
DavXmlTrimElement (STR_DSC*);
void XMLCALL DavXmlEndElement (REQUEST_STRUCT*, char*);
void XMLCALL DavXmlStartElement (REQUEST_STRUCT*, char*, char**);
DavXmlReport (REQUEST_STRUCT*);
DavXmlWatchProp (REQUEST_STRUCT*);

#if DAVXML_MEMORY
void DavXmlMemoryFree (void*);
void DavXmlMemoryInit ();
void* DavXmlMemoryMalloc (size_t);
void* DavXmlMemoryRealloc (void*, size_t);
#endif /* DAVXML_MEMORY */
char* DavXmlMemoryReport ();

#endif /* DAVWEB_H_LOADED */

/*****************************************************************************/