* more fixes, offset in URLS is different now, since we strip the command.
authorWilfried Göesgens <willi@citadel.org>
Sun, 17 May 2009 15:12:55 +0000 (15:12 +0000)
committerWilfried Göesgens <willi@citadel.org>
Sun, 17 May 2009 15:12:55 +0000 (15:12 +0000)
webcit/context_loop.c
webcit/downloads.c
webcit/messages.c
webcit/paramhandling.c
webcit/roomops.c
webcit/vcard_edit.c
webcit/webcit.c
webcit/webcit.h

index 1d1cbb821a39640173b2c9ddf4fcf287a35fe353..1f38768d1786d7bc8e047413934481bc6225b321 100644 (file)
@@ -270,7 +270,7 @@ int ReadHttpSubject(ParsedHttpHdrs *Hdr, StrBuf *Line, StrBuf *Buf)
                        Args, 
                        StrLength(Hdr->ReqLine) -
                        (Args - ChrPtr(Hdr->ReqLine)));
-               StrBufCutAt(Hdr->ReqLine, 0, Args);
+               StrBufCutAt(Hdr->ReqLine, 0, Args - 1);
        } /* don't parse them yet, maybe we don't even care... */
        
        /* now lookup what we are going to do with this... */
@@ -441,13 +441,6 @@ void context_loop(int *sock)
 
 /*     dbg_PrintHash(HTTPHeaders, nix, NULL);  */
 
-
-///HttpHeaderHandler
-
-
-
-
-
        /*
         * If the request is prefixed by "/webcit" then chop that off.  This
         * allows a front end web server to forward all /webcit requests to us
index b0e7cace3a431e099ff085248465ccfd38b5d1b3..c8970ef3a528b2651a1e956b13241809f54db907 100644 (file)
@@ -249,7 +249,7 @@ void download_file(void)
        int force_download = 1;
        
        Buf = NewStrBuf();
-       StrBufExtract_token(Buf, WCC->Hdr->ReqLine, 2, '/');
+       StrBufExtract_token(Buf, WCC->Hdr->ReqLine, 0, '/');
        StrBufUnescape(Buf, 1);
        serv_printf("OPEN %s", ChrPtr(Buf));
        StrBuf_ServGetln(Buf);
index 0a9f2c746b332965191e670047f4f336ddb74e81..055fae22cbc4ae478dd6014da4593279727a048a 100644 (file)
@@ -426,7 +426,7 @@ void embed_message(void) {
        const StrBuf *Tmpl;
        StrBuf *CmdBuf = NULL;
 
-       msgnum = StrBufExtract_long(WCC->Hdr->ReqLine, 2, '/');
+       msgnum = StrBufExtract_long(WCC->Hdr->ReqLine, 0, '/');
        switch (WCC->Hdr->eReqType)
        {
        case eGET:
@@ -466,7 +466,7 @@ void print_message(void) {
        long msgnum = 0L;
        const StrBuf *Mime;
 
-       msgnum = StrBufExtract_long(WC->Hdr->ReqLine, 2, '/');
+       msgnum = StrBufExtract_long(WC->Hdr->ReqLine, 0, '/');
        output_headers(0, 0, 0, 0, 0, 0);
 
        hprintf("Content-type: text/html\r\n"
@@ -490,7 +490,7 @@ void mobile_message_view(void)
        long msgnum = 0L;
        const StrBuf *Mime;
   
-       msgnum = StrBufExtract_long(WC->Hdr->ReqLine, 2, '/');
+       msgnum = StrBufExtract_long(WC->Hdr->ReqLine, 0, '/');
        output_headers(1, 0, 0, 0, 0, 1);
        begin_burst();
        do_template("msgcontrols", NULL);
@@ -507,7 +507,7 @@ void display_headers(void) {
        long msgnum = 0L;
        char buf[1024];
 
-       msgnum = StrBufExtract_long(WC->Hdr->ReqLine, 2, '/');
+       msgnum = StrBufExtract_long(WC->Hdr->ReqLine, 0, '/');
        output_headers(0, 0, 0, 0, 0, 0);
 
        hprintf("Content-type: text/plain\r\n"
@@ -1738,8 +1738,8 @@ void mimepart(int force_download)
        StrBuf *ContentType = NewStrBufPlain(HKEY("application/octet-stream"));
        const char *CT;
 
-       msgnum = StrBufExtract_long(WCC->Hdr->ReqLine, 2, '/');
-       att = StrBufExtract_long(WCC->Hdr->ReqLine, 3, '/');
+       msgnum = StrBufExtract_long(WCC->Hdr->ReqLine, 0, '/');
+       att = StrBufExtract_long(WCC->Hdr->ReqLine, 1, '/');
 
        Buf = NewStrBuf();
        serv_printf("OPNA %ld|%ld", msgnum, att);
@@ -1758,7 +1758,7 @@ void mimepart(int force_download)
 
                if (!force_download) {
                        if (!strcasecmp(ChrPtr(ContentType), "application/octet-stream")) {
-                               StrBufExtract_token(Buf, WCC->Hdr->ReqLine, 4, '/');
+                               StrBufExtract_token(Buf, WCC->Hdr->ReqLine, 2, '/');
                                CT = GuessMimeByFilename(SKEY(Buf));
                        }
                        if (!strcasecmp(ChrPtr(ContentType), "application/octet-stream")) {
@@ -1845,8 +1845,8 @@ void view_postpart(void) {
        StrBuf *filename = NewStrBuf();
        StrBuf *partnum = NewStrBuf();
 
-       StrBufExtract_token(partnum, WC->Hdr->ReqLine, 2, '/');
-       StrBufExtract_token(filename, WC->Hdr->ReqLine, 3, '/');
+       StrBufExtract_token(partnum, WC->Hdr->ReqLine, 0, '/');
+       StrBufExtract_token(filename, WC->Hdr->ReqLine, 1, '/');
 
        postpart(partnum, filename, 0);
 
@@ -1858,8 +1858,8 @@ void download_postpart(void) {
        StrBuf *filename = NewStrBuf();
        StrBuf *partnum = NewStrBuf();
 
-       StrBufExtract_token(partnum, WC->Hdr->ReqLine, 2, '/');
-       StrBufExtract_token(filename, WC->Hdr->ReqLine, 3, '/');
+       StrBufExtract_token(partnum, WC->Hdr->ReqLine, 0, '/');
+       StrBufExtract_token(filename, WC->Hdr->ReqLine, 1, '/');
 
        postpart(partnum, filename, 1);
 
index 1f4fc85058711db5e1385e204333dee6af6e903f..bb7367fdbd3b6dd449bdf84548ee81c705c792b2 100644 (file)
@@ -394,28 +394,30 @@ StrEscPuts(WC->UrlFragment1);
 
 void tmplput_url_part(StrBuf *Target, WCTemplputParams *TP)
 {
+       StrBuf *Name = NULL;
        StrBuf *UrlBuf;
        wcsession *WCC = WC;
        
        if (WCC != NULL) {
                if (TP->Tokens->Params[0]->lvalue == 0) {
                        UrlBuf = NewStrBuf();
-                       StrBufExtract_token(UrlBuf, WCC->Hdr->ReqLine, 1, '/');
+                       if (WCC->Hdr->Handler != NULL)
+                               UrlBuf = Name = WCC->Hdr->Handler->Name;
                }
                else if (TP->Tokens->Params[0]->lvalue == 1) {
                        UrlBuf = NewStrBuf();
-                       StrBufExtract_token(UrlBuf, WCC->Hdr->ReqLine, 2, '/');
+                       StrBufExtract_token(UrlBuf, WCC->Hdr->ReqLine, 0, '/');
                }
                else {
                        UrlBuf = NewStrBuf();
-                       StrBufExtract_token(UrlBuf, WCC->Hdr->ReqLine, 3, '/');
+                       StrBufExtract_token(UrlBuf, WCC->Hdr->ReqLine, 1, '/');
                }
 
                if (UrlBuf == NULL)  {
                        LogTemplateError(Target, "urlbuf", ERR_PARM1, TP, "not set.");
                }
                StrBufAppendTemplate(Target, TP, UrlBuf, 2);
-               FreeStrBuf(&UrlBuf);
+               if (Name == NULL) FreeStrBuf(&UrlBuf);
        }
 }
 
index 41da33ceb40cdc1ef72e79bf4e350df61067fb30..39af8d669ad7cf6a7f2fc70f1b14d86ef419fc66 100644 (file)
@@ -3313,7 +3313,7 @@ void set_floordiv_expanded(void) {
        StrBuf *FloorDiv;
        
        FloorDiv = NewStrBuf();
-       StrBufExtract_token(FloorDiv, WCC->Hdr->ReqLine, 2, '/');
+       StrBufExtract_token(FloorDiv, WCC->Hdr->ReqLine, 0, '/');
        set_preference("floordiv_expanded", FloorDiv, 1);
        WCC->floordiv_expanded = FloorDiv;
 }
index 31780a6a136a2507be84e71501d558bb38df2482..e409125d6fc2d8266e2de8d949a3f06dc60ca17d 100644 (file)
@@ -1218,7 +1218,7 @@ void display_vcard_photo_img(void)
        const char *contentType;
        wcsession *WCC = WC;
 
-       msgnum = StrBufExtract_long(WCC->Hdr->ReqLine, 2, '/');
+       msgnum = StrBufExtract_long(WCC->Hdr->ReqLine, 0, '/');
        
        vcard = load_mimepart(msgnum,"1");
        v = VCardLoad(vcard);
index 51c7ac73da3eb85f4a4e796d93c272f4253c0dec..4908d44f436f7a93b270d50f5b98142ed98b05ae 100644 (file)
@@ -22,6 +22,15 @@ static char *unset = "; expires=28-May-1971 18:10:00 GMT";
 StrBuf *csslocal = NULL;
 HashList *HandlerHash = NULL;
 
+
+void DeleteWebcitHandler(void *vHandler)
+{
+       WebcitHandler *Handler = (WebcitHandler*) vHandler;
+       FreeStrBuf(&Handler->Name);
+       free (Handler);
+
+}
+
 void WebcitAddUrlHandler(const char * UrlString, 
                         long UrlSLen, 
                         WebcitHandlerFunc F, 
@@ -31,7 +40,8 @@ void WebcitAddUrlHandler(const char * UrlString,
        NewHandler = (WebcitHandler*) malloc(sizeof(WebcitHandler));
        NewHandler->F = F;
        NewHandler->Flags = Flags;
-       Put(HandlerHash, UrlString, UrlSLen, NewHandler, NULL);
+       NewHandler->Name = NewStrBufPlain(UrlString, UrlSLen);
+       Put(HandlerHash, UrlString, UrlSLen, NewHandler, DeleteWebcitHandler);
 }
 
 
index 008ccfdaa9afb81f970d576879b7d4a66b643415..c9033cdf3f73ff7ba93e3d4135b1bc849cf2fb2a 100644 (file)
@@ -364,6 +364,7 @@ typedef void (*WebcitHandlerFunc)(void);
 typedef struct  _WebcitHandler{
        WebcitHandlerFunc F;
        long Flags;
+       StrBuf *Name;
 } WebcitHandler;
 void WebcitAddUrlHandler(const char * UrlString, long UrlSLen, WebcitHandlerFunc F, long Flags);