Index: http.c =================================================================== --- http.c (revision 33263) +++ http.c (working copy) @@ -394,23 +394,51 @@ if (ast_strlen_zero(cookie)) break; if (!strncasecmp(cookie, "Cookie: ", 8)) { - vname = cookie + 8; - vval = strchr(vname, '='); - if (vval) { - /* Ditch the = and the quotes */ - *vval = '\0'; - vval++; - if (*vval) + + /* TODO - The cookie parsing code below seems to work + in IE6 and FireFox 1.5. However, it is not entirely + correct, and therefore may not work in all + circumstances. + For more details see RFC 2109 and RFC 2965 */ + + /* FireFox cookie strings look like: + Cookie: mansession_id="********" + InternetExplorer's look like: + Cookie: $Version="1"; mansession_id="********" */ + + /* If we got a FireFox cookie string, the name's right + after "Cookie: " */ + vname = cookie + 8; + + /* If we got an IE cookie string, we need to skip to + past the version to get to the name */ + if (*vname == '$'){ + vname = strchr(vname, ';'); + if (vname){ + vname++; + if (*vname == ' ') + vname++; + } + } + + if (vname){ + vval = strchr(vname, '='); + if (vval) { + /* Ditch the = and the quotes */ + *vval = '\0'; vval++; - if (strlen(vval)) - vval[strlen(vval) - 1] = '\0'; - var = ast_variable_new(vname, vval); - if (var) { - if (prev) - prev->next = var; - else - vars = var; - prev = var; + if (*vval) + vval++; + if (strlen(vval)) + vval[strlen(vval) - 1] = '\0'; + var = ast_variable_new(vname, vval); + if (var) { + if (prev) + prev->next = var; + else + vars = var; + prev = var; + } } } }