+ wc_printf("%s", ChrPtr(site_prefix));
+}
+
+
+void tmplput_GROUPDAV_HOSTNAME(StrBuf *Target, WCTemplputParams *TP)
+{
+ StrBufAppendPrintf(Target, "%s", ChrPtr(site_prefix));
+}
+
+/*
+ * Output our host prefix for globally absolute URL's.
+ */
+void groupdav_identify_hosthdr(void) {
+ hprintf("%s", ChrPtr(site_prefix));
+}
+
+
+void Header_HandleIfMatch(StrBuf *Line, ParsedHttpHdrs *hdr)
+{
+ hdr->HR.dav_ifmatch = Line;
+}
+
+void Header_HandleDepth(StrBuf *Line, ParsedHttpHdrs *hdr)
+{
+ if (!strcasecmp(ChrPtr(Line), "infinity")) {
+ hdr->HR.dav_depth = 32767;
+ }
+ else if (strcmp(ChrPtr(Line), "0") == 0) {
+ hdr->HR.dav_depth = 0;
+ }
+ else if (strcmp(ChrPtr(Line), "1") == 0) {
+ hdr->HR.dav_depth = 1;
+ }
+}
+int Conditional_DAV_DEPTH(StrBuf *Target, WCTemplputParams *TP)
+{
+ return WC->Hdr->HR.dav_depth == GetTemplateTokenNumber(Target, TP, 2, 0);
+}
+
+
+void RegisterDAVNamespace(const char * UrlString,
+ long UrlSLen,
+ const char *DisplayName,
+ long dslen,
+ WebcitHandlerFunc F,
+ WebcitRESTDispatchID RID,
+ long Flags)
+{
+ void *vHandler;
+
+ /* first put it in... */
+ WebcitAddUrlHandler(UrlString, UrlSLen, DisplayName, dslen, F, Flags|PARSE_REST_URL);
+ /* get it out again... */
+ GetHash(HandlerHash, UrlString, UrlSLen, &vHandler);
+ ((WebcitHandler*)vHandler)->RID = RID;
+ /* and keep a copy of it, so we can compare it later */
+ Put(DavNamespaces, UrlString, UrlSLen, vHandler, reference_free_handler);
+}
+
+int Conditional_DAV_NS(StrBuf *Target, WCTemplputParams *TP)
+{
+ wcsession *WCC = WC;
+ void *vHandler;
+ const char *NS;
+ long NSLen;
+
+ GetTemplateTokenString(NULL, TP, 2, &NS, &NSLen);
+ GetHash(HandlerHash, NS, NSLen, &vHandler);
+ return WCC->Hdr->HR.Handler == vHandler;
+}
+
+
+int Conditional_DAV_NSCURRENT(StrBuf *Target, WCTemplputParams *TP)
+{
+ wcsession *WCC = WC;
+ void *vHandler;
+
+ vHandler = CTX;
+ return WCC->Hdr->HR.Handler == vHandler;
+}
+
+void tmplput_DAV_NAMESPACE(StrBuf *Target, WCTemplputParams *TP)
+{