X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fdav_main.c;h=91610ac993a34247f43918630b00056ffa1effac;hb=6124e82022a9b919529a4f1414349d3096fb839d;hp=97fcc9dc11f7423fbedeae9ebae9db5de8949a72;hpb=fb9557de050f4a88b57796574a3e8e93d37496de;p=citadel.git diff --git a/webcit/dav_main.c b/webcit/dav_main.c index 97fcc9dc1..91610ac99 100644 --- a/webcit/dav_main.c +++ b/webcit/dav_main.c @@ -1,7 +1,7 @@ /* * Entry point for GroupDAV functions * - * Copyright (c) 2005-2010 by the citadel.org team + * Copyright (c) 2005-2011 by the citadel.org team * * This program is open source software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,7 +34,7 @@ HashList *DavNamespaces = NULL; * do our own header stuff here. * */ -void groupdav_common_headers(void) { +void dav_common_headers(void) { hprintf( "Server: %s / %s\r\n" "Connection: close\r\n", @@ -100,13 +100,14 @@ void euid_unescapize(char *target, const char *source) { /* * Main entry point for GroupDAV requests */ -void groupdav_main(void) +void dav_main(void) { wcsession *WCC = WC; int i, len; - StrBufUnescape(WCC->Hdr->HR.ReqLine, 0); + syslog(LOG_DEBUG, "dav_main() called, logged_in=%d", WCC->logged_in ); + StrBufUnescape(WCC->Hdr->HR.ReqLine, 0); StrBufStripSlashes(WCC->Hdr->HR.ReqLine, 0); /* @@ -134,42 +135,40 @@ void groupdav_main(void) switch (WCC->Hdr->HR.eReqType) { /* - * The OPTIONS method is not required by GroupDAV. This is an - * experiment to determine what might be involved in supporting - * other variants of DAV in the future. + * The OPTIONS method is not required by GroupDAV but it will be + * needed for future implementations of other DAV-based protocols. */ case eOPTIONS: - groupdav_options(); + dav_options(); break; - /* * The PROPFIND method is basically used to list all objects in a * room, or to list all relevant rooms on the server. */ case ePROPFIND: - groupdav_propfind(); + dav_propfind(); break; /* * The GET method is used for fetching individual items. */ case eGET: - groupdav_get(); + dav_get(); break; /* * The PUT method is used to add or modify items. */ case ePUT: - groupdav_put(); + dav_put(); break; /* * The DELETE method kills, maims, and destroys. */ case eDELETE: - groupdav_delete(); + dav_delete(); break; default: @@ -177,7 +176,7 @@ void groupdav_main(void) * Couldn't find what we were looking for. Die in a car fire. */ hprintf("HTTP/1.1 501 Method not implemented\r\n"); - groupdav_common_headers(); + dav_common_headers(); hprintf("Content-Type: text/plain\r\n"); wc_printf("GroupDAV method \"%s\" is not implemented.\r\n", ReqStrs[WCC->Hdr->HR.eReqType]); @@ -189,7 +188,7 @@ void groupdav_main(void) /* * Output our host prefix for globally absolute URL's. */ -void groupdav_identify_host(void) { +void dav_identify_host(void) { wc_printf("%s", ChrPtr(site_prefix)); } @@ -202,7 +201,7 @@ void tmplput_dav_HOSTNAME(StrBuf *Target, WCTemplputParams *TP) /* * Output our host prefix for globally absolute URL's. */ -void groupdav_identify_hosthdr(void) { +void dav_identify_hosthdr(void) { hprintf("%s", ChrPtr(site_prefix)); } @@ -212,6 +211,7 @@ void Header_HandleIfMatch(StrBuf *Line, ParsedHttpHdrs *hdr) hdr->HR.dav_ifmatch = Line; } + void Header_HandleDepth(StrBuf *Line, ParsedHttpHdrs *hdr) { if (!strcasecmp(ChrPtr(Line), "infinity")) { @@ -224,6 +224,8 @@ void Header_HandleDepth(StrBuf *Line, ParsedHttpHdrs *hdr) hdr->HR.dav_depth = 1; } } + + int Conditional_DAV_DEPTH(StrBuf *Target, WCTemplputParams *TP) { return WC->Hdr->HR.dav_depth == GetTemplateTokenNumber(Target, TP, 2, 0); @@ -249,6 +251,7 @@ void RegisterDAVNamespace(const char * UrlString, Put(DavNamespaces, UrlString, UrlSLen, vHandler, reference_free_handler); } + int Conditional_DAV_NS(StrBuf *Target, WCTemplputParams *TP) { wcsession *WCC = WC; @@ -271,6 +274,7 @@ int Conditional_DAV_NSCURRENT(StrBuf *Target, WCTemplputParams *TP) return WCC->Hdr->HR.Handler == vHandler; } + void tmplput_DAV_NAMESPACE(StrBuf *Target, WCTemplputParams *TP) { wcsession *WCC = WC; @@ -285,6 +289,7 @@ void tmplput_DAV_NAMESPACE(StrBuf *Target, WCTemplputParams *TP) } } + int GroupdavDispatchREST(RESTDispatchID WhichAction, int IgnoreFloor) { wcsession *WCC = WC; @@ -311,9 +316,9 @@ ServerStartModule_DAV { DavNamespaces = NewHash(1, NULL); - } + void ServerShutdownModule_DAV (void) @@ -322,26 +327,22 @@ ServerShutdownModule_DAV } - - void InitModule_GROUPDAV (void) { -/* - WebcitAddUrlHandler(HKEY("groupdav"), "", 0, groupdav_main, XHTTP_COMMANDS|COOKIEUNNEEDED|FORCE_SESSIONCLOSE); - */ RegisterDAVNamespace(HKEY("groupdav"), HKEY("GroupDAV"), - groupdav_main, GroupdavDispatchREST, - XHTTP_COMMANDS|COOKIEUNNEEDED|FORCE_SESSIONCLOSE); + dav_main, GroupdavDispatchREST, + XHTTP_COMMANDS|COOKIEUNNEEDED|FORCE_SESSIONCLOSE + ); - RegisterNamespace("DAV:HOSTNAME", 0, 0, tmplput_davHOSTNAME, NULL, CTX_NONE); + RegisterNamespace("DAV:HOSTNAME", 0, 0, tmplput_dav_HOSTNAME, NULL, CTX_NONE); RegisterConditional(HKEY("COND:DAV:NS"), 0, Conditional_DAV_NS, CTX_NONE); RegisterIterator("DAV:NS", 0, DavNamespaces, NULL, - NULL, NULL, CTX_DAVNS, CTX_NONE, IT_NOFLAG); - + NULL, NULL, CTX_DAVNS, CTX_NONE, IT_NOFLAG + ); RegisterConditional(HKEY("COND:DAV:NSCURRENT"), 0, Conditional_DAV_NSCURRENT, CTX_DAVNS); RegisterNamespace("DAV:NAMESPACE", 0, 1, tmplput_DAV_NAMESPACE, NULL, CTX_NONE); @@ -349,5 +350,4 @@ InitModule_GROUPDAV RegisterHeaderHandler(HKEY("IF-MATCH"), Header_HandleIfMatch); RegisterHeaderHandler(HKEY("DEPTH"), Header_HandleDepth); RegisterConditional(HKEY("COND:DAV:DEPTH"), 1, Conditional_DAV_DEPTH, CTX_NONE); - }