]> code.citadel.org Git - citadel.git/blobdiff - webcit/context_loop.c
* Finished gzip compression of dynamic pages (when browser supports it)
[citadel.git] / webcit / context_loop.c
index ec920745fb6fd2f70c0f5d3fb174e07b78422342..3a9a29178d9dc1fdc604139a72d738c889fdeb5e 100644 (file)
@@ -63,6 +63,8 @@ void do_housekeeping(void)
                        /* Remove sessions flagged for kill */
                        if (sptr->killthis) {
 
+                               lprintf(3, "Destroying session\n");
+
                                /* remove session from linked list */
                                if (sptr == SessionList) {
                                        SessionList = SessionList->next;
@@ -150,6 +152,7 @@ int req_gets(int sock, char *buf, char *hold)
                                return(0);
                        }
        }
+
        return(0);
 }
 
@@ -229,6 +232,10 @@ void context_loop(int sock)
        int desired_session = 0;
        int got_cookie = 0;
        struct wcsession *TheSession, *sptr;
+       char enc[SIZ];
+       char encodings[SIZ];
+       int gzip = 0;
+       int i;
 
        /*
         * Find out what it is that the web browser is asking for
@@ -236,12 +243,25 @@ void context_loop(int sock)
        memset(hold, 0, sizeof(hold));
        do {
                if (req_gets(sock, buf, hold) < 0) return;
+
                if (!strncasecmp(buf, "Cookie: webcit=", 15)) {
                        cookie_to_stuff(&buf[15], &desired_session,
                                NULL, NULL, NULL);
                        got_cookie = 1;
                }
 
+#ifdef WITH_ZLIB
+               if (!strncasecmp(buf, "Accept-encoding: ", 17)) {
+                       extract_token(encodings, &buf[17], 0, ';');
+                       for (i=0; i<num_tokens(encodings, ','); ++i) {
+                               extract_token(enc, encodings, i, ',');
+                               if (!strcasecmp(enc, "gzip")) {
+                                       gzip = 1;
+                               }
+                       }
+               }
+#endif
+
                hptr = (struct httprequest *)
                        malloc(sizeof(struct httprequest));
                if (req == NULL)
@@ -268,6 +288,7 @@ void context_loop(int sock)
         */
        if (!strncasecmp(buf, "GET ", 4)) strcpy(buf, &buf[4]);
        else if (!strncasecmp(buf, "HEAD ", 5)) strcpy(buf, &buf[5]);
+       else if (!strncasecmp(buf, "POST ", 5)) strcpy(buf, &buf[5]);
        if (buf[1]==' ') buf[1]=0;
 
        /*
@@ -331,7 +352,7 @@ void context_loop(int sock)
        pthread_setspecific(MyConKey, (void *)TheSession);
        TheSession->http_sock = sock;
        TheSession->lastreq = time(NULL);                       /* log */
-       session_loop(req);              /* perform the requested transaction */
+       session_loop(req, gzip);        /* perform the requested transaction */
        pthread_mutex_unlock(&TheSession->SessionMutex);        /* unbind */
 
        /* Free the request buffer */