]> code.citadel.org Git - citadel.git/blobdiff - webcit/webcit.c
* add way to have tokens do their custom parse-time preevaluation; this involves...
[citadel.git] / webcit / webcit.c
index 57e3b18e36e178528517d19d7a221d4a6e7c8bc9..013e38cd440fe5d206a6d2553564afd865e6cd74 100644 (file)
@@ -483,7 +483,6 @@ void seconds_since_last_gexp(void)
 
 void ReadPostData(void)
 {
-       const char *content_end = NULL;
        int body_start = 0;
        wcsession *WCC = WC;
        StrBuf *content = NULL;
@@ -513,12 +512,16 @@ void ReadPostData(void)
        } else if (!strncasecmp(ChrPtr(WCC->Hdr->HR.ContentType), "multipart", 9)) {
                char *Buf;
                char *BufEnd;
+               long len;
+
+               len = StrLength(content);
                Buf = SmashStrBuf(&content);
-               content_end = Buf + WCC->Hdr->HR.ContentLength + body_start;
+               BufEnd = Buf + len;
                mime_parser(Buf, BufEnd, *upload_handler, NULL, NULL, NULL, 0);
                free(Buf);
        } else if (WCC->Hdr->HR.ContentLength > 0) {
                WCC->upload = content;
+               WCC->upload_length = StrLength(WCC->upload);
                content = NULL;
        }
        FreeStrBuf(&content);
@@ -528,9 +531,12 @@ void ReadPostData(void)
 void ParseREST_URL(void)
 {
        StrBuf *Buf;
+       StrBuf *pFloor = NULL;
        wcsession *WCC = WC;
        long i = 0;
        const char *pCh = NULL;
+       HashList *Floors;
+       void *vFloor;
 
        WCC->Directory = NewHash(1, Flathash);
 
@@ -539,11 +545,23 @@ void ParseREST_URL(void)
                                       Buf, &pCh,  '/') >= 0)
        {
                Put(WCC->Directory, IKEY(i), Buf, HFreeStrBuf);
+               if (i==0)
+                       pFloor = Buf;
                i++;
                Buf = NewStrBuf();
        }
        if (i == 0)
                FreeStrBuf(&Buf);
+       else if (pFloor != NULL)
+       {
+               Floors = GetFloorListHash(NULL, NULL);
+               
+               if (Floors != NULL)
+               {
+                       if (GetHash(Floors, SKEY(pFloor), &vFloor))
+                               WCC->CurrentFloor = (floor*) vFloor;
+               }
+       }
 }
 
 
@@ -786,9 +804,9 @@ InitModule_WEBCIT
 
        WebcitAddUrlHandler(HKEY("401"), authorization_required, ANONYMOUS|COOKIEUNNEEDED);
        RegisterConditional(HKEY("COND:IMPMSG"), 0, ConditionalImportantMesage, CTX_NONE);
-       RegisterNamespace("CSSLOCAL", 0, 0, tmplput_csslocal, CTX_NONE);
-       RegisterNamespace("IMPORTANTMESSAGE", 0, 0, tmplput_importantmessage, CTX_NONE);
-       RegisterNamespace("TRAILING_JAVASCRIPT", 0, 0, tmplput_trailing_javascript, CTX_NONE);
+       RegisterNamespace("CSSLOCAL", 0, 0, tmplput_csslocal, NULL, CTX_NONE);
+       RegisterNamespace("IMPORTANTMESSAGE", 0, 0, tmplput_importantmessage, NULL, CTX_NONE);
+       RegisterNamespace("TRAILING_JAVASCRIPT", 0, 0, tmplput_trailing_javascript, NULL, CTX_NONE);
 
        snprintf(dir, SIZ, "%s/webcit.css", static_local_dir);
        if (!access(dir, R_OK)) {
@@ -831,11 +849,11 @@ void
 SessionDetachModule_WEBCIT
 (wcsession *sess)
 {
-       DeleteHash(&sess->Hdr->urlstrings);// TODO?
-       if (sess->upload_length > 0) {
-               FreeStrBuf(&sess->upload);
-               sess->upload_length = 0;
-       }
+       DeleteHash(&sess->Directory);
+
+       FreeStrBuf(&sess->upload);
+       sess->upload_length = 0;
+       
        FreeStrBuf(&sess->trailing_javascript);
 
        if (StrLength(sess->WBuf) > SIZ * 30) /* Bigger than 120K? release. */