The HTTP redirects were failing because indeed Kannel was trying to read a body that wasn't there. The patch adds a check for a length of 0 as specified by Content-Length, and if found it sets the state to entity_done. This all happens in deduce_body_state() within http.c. Attached is the diff of my code vs. CVS. This fixed both my local WAP homepage redirect and the Hotmail redirect.


Jon
Index: gwlib/http.c
===================================================================
RCS file: /home/cvs/gateway/gwlib/http.c,v
retrieving revision 1.231
diff -u -p -d -r1.231 http.c
--- gwlib/http.c        29 Mar 2005 12:57:16 -0000      1.231
+++ gwlib/http.c        6 Apr 2005 17:42:17 -0000
@@ -359,6 +359,7 @@ typedef struct {
 static void deduce_body_state(HTTPEntity *ent)
 {
     Octstr *h = NULL;
+    long ret;
 
     if (ent->expect_state == expect_no_body) {
        ent->state = entity_done;
@@ -383,11 +384,13 @@ static void deduce_body_state(HTTPEntity
 
     h = http_header_find_first(ent->headers, "Content-Length");
     if (h != NULL) {
-        if (octstr_parse_long(&ent->expected_body_len, h, 0, 10) == -1 ||
-            ent->expected_body_len < 0) {
+        ret = octstr_parse_long(&ent->expected_body_len, h, 0, 10);
+        if (ret == -1 || ent->expected_body_len < 0) {
            error(0, "HTTP: Content-Length header wrong: <%s>",
                  octstr_get_cstr(h));
            ent->state = body_error;
+        } else if ( ent->expected_body_len == 0 ) {
+            ent->state = entity_done;
         } else {
             ent->state = reading_body_with_length;
        }

Reply via email to