From f5da211d270d0e7010ae85680361fc192caa3721 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Wed, 21 Apr 2010 19:52:03 +0000 Subject: [PATCH] * fix flags for state of rest parsing * DAV-Message-list: expect timestamp next to the EUID --- webcit/groupdav_main.c | 9 ++++---- webcit/groupdav_propfind.c | 42 ++++++++++++++++++++++++-------------- webcit/roomops.h | 6 +++--- 3 files changed, 35 insertions(+), 22 deletions(-) diff --git a/webcit/groupdav_main.c b/webcit/groupdav_main.c index fb3f5203c..313efe83c 100644 --- a/webcit/groupdav_main.c +++ b/webcit/groupdav_main.c @@ -293,12 +293,13 @@ void tmplput_DAV_NAMESPACE(StrBuf *Target, WCTemplputParams *TP) int GroupdavDispatchREST(RESTDispatchID WhichAction, int IgnoreFloor) { - + wcsession *WCC = WC; + void *vDir; + switch(WhichAction){ case ExistsID: - //WCC->Directory -//nRoomNameParts -// return locate_message_by_uid() != -1; + GetHash(WCC->Directory, IKEY(WCC->ThisRoom->nRoomNameParts + 1), &vDir); + return locate_message_by_uid(ChrPtr((StrBuf*)vDir)) != -1; /* TODO: remember euid */ case PutID: case DeleteID: diff --git a/webcit/groupdav_propfind.c b/webcit/groupdav_propfind.c index f3a37294a..d8dfc211e 100644 --- a/webcit/groupdav_propfind.c +++ b/webcit/groupdav_propfind.c @@ -122,7 +122,9 @@ const folder *GetRESTFolder(int IgnoreFloor, HashList *Subfolders) /* Room has more parts than the URL, it might be a sub-room? */ else if (iRoom nRoomNameParts) {//// TODO: ThisFolder->nRoomNameParts == urlp - IgnoreFloor??? - Put(Subfolders, SKEY(ThisFolder->name), ThisFolder, reference_free_handler); + Put(Subfolders, SKEY(ThisFolder->name), + /* Cast away const, its a reference. */ + (void*)ThisFolder, reference_free_handler); } } else { @@ -174,14 +176,13 @@ const folder *GetRESTFolder(int IgnoreFloor, HashList *Subfolders) -long GotoRestRoom() +long GotoRestRoom(HashList *SubRooms) { int IgnoreFloor = 0; /* deprecated... */ wcsession *WCC = WC; long Count; long State; const folder *ThisFolder; - HashList *SubRooms = NULL; State = REST_TOPLEVEL; @@ -205,33 +206,33 @@ long GotoRestRoom() { IgnoreFloor = 0; State |= REST_IN_FLOOR; - SubRooms = NewHash(1, Flathash); + ThisFolder = GetRESTFolder(IgnoreFloor, SubRooms); if (ThisFolder != NULL) { if (WCC->ThisRoom != NULL) - if (CompareRooms(WCC->ThisRoom, ThisFolder)) + if (CompareRooms(WCC->ThisRoom, ThisFolder) != 0) gotoroom(ThisFolder->name); State |= REST_IN_ROOM; + } + if (GetCount(SubRooms) > 0) + State |= REST_HAVE_SUB_ROOMS; } if ((WCC->ThisRoom != NULL) && (Count + IgnoreFloor > 3)) { - if (WCC->Hdr->HR.Handler.RID(ExistsID, IgnoreFloor)) + if (WCC->Hdr->HR.Handler->RID(ExistsID, IgnoreFloor)) { - State |= REST_GOT_EUID; - }/////TODO + State |= REST_GOT_LOCAL_PART; + } else { /// WHOOPS, not there??? + State |= REST_NONEXIST; } } - /// TODO: ID detection - /// TODO: File detection - - return State; } @@ -421,6 +422,7 @@ void groupdav_collection_list(void) */ void groupdav_propfind(void) { + HashList *SubRooms = NULL; wcsession *WCC = WC; StrBuf *dav_roomname; StrBuf *dav_uid; @@ -448,9 +450,10 @@ void groupdav_propfind(void) * If the room name is blank, the client is requesting a * folder list. */ - State = GotoRestRoom(); + SubRooms = NewHash(1, Flathash); + State = GotoRestRoom(SubRooms); if (((State & REST_IN_ROOM) == 0) || - (((State & (REST_GOT_EUID|REST_GOT_ID|REST_GOT_FILENAME)) == 0) && + (((State & (REST_GOT_LOCAL_PART)) == 0) && (WCC->Hdr->HR.dav_depth == 0))) { now = time(NULL); @@ -476,14 +479,21 @@ void groupdav_propfind(void) end_burst(); FreeStrBuf(&dav_roomname); FreeStrBuf(&dav_uid); + FreeHashList(&SubRooms); return; } - if ((State & (REST_GOT_EUID|REST_GOT_ID|REST_GOT_FILENAME)) == 0) { + if ((State & (REST_GOT_LOCAL_PART)) == 0) { readloop(headers, eReadEUIDS); + FreeHashList(&SubRooms); return; } + + + + FreeHashList(&SubRooms); + #endif /* @@ -725,6 +735,8 @@ int ParseMessageListHeaders_EUID(StrBuf *Line, { Msg->euid = NewStrBuf(); StrBufExtract_NextToken(Msg->euid, Line, pos, '|'); + Msg->date = StrBufExtractNext_long(Line, pos, '|'); + return StrLength(Msg->euid) > 0; } diff --git a/webcit/roomops.h b/webcit/roomops.h index 5753b23fc..a416b402e 100644 --- a/webcit/roomops.h +++ b/webcit/roomops.h @@ -112,6 +112,6 @@ int CompareRooms(const folder *room1, const folder *room2); #define REST_IN_NAMESPACE (1<<0) #define REST_IN_FLOOR (1<<1) #define REST_IN_ROOM (1<<2) -#define REST_GOT_EUID (1<<3) -#define REST_GOT_ID (1<<4) -#define REST_GOT_FILENAME (1<<5) +#define REST_HAVE_SUB_ROOMS (1<<3) +#define REST_GOT_LOCAL_PART (1<<4) +#define REST_NONEXIST (1<<5) -- 2.30.2