+ if((cn->state == STATE_DONE) && cn->autoredir) {
+ if((cn->rescode == 301) || (cn->rescode == 302) || (cn->rescode == 303) || (cn->rescode == 307)) {
+ if((p = spfind(cn->headers, "location")) == NULL) {
+ HTDEBUG("got redirect without Location, flagging EPROTO\n");
+ errno = EPROTO;
+ return(-1);
+ }
+ if((ui = parseurl(p)) == NULL) {
+ HTDEBUG("unparsable URL in redirection (%s), flagging EPROTO\n", p);
+ errno = EPROTO;
+ return(-1);
+ }
+ HTDEBUG("autohandling redirect (%i, ->%s)\n", cn->rescode, p);
+ ret = resethtconn(cn, ui);
+ freeurl(ui);
+ return(ret);
+ }
+ }