Hello,

        If you understand clientReplyContext::replyStatus, please see if you
can help me with the following problem.

        Background: I am making aborted POSTs to work with the new BodyPipe.
Under certain ICAP failure conditions, the client side needs to produce
an error response. We did not have any code for that case.

        I found disabled "#if ICAP_HARD_ERROR" code inside
ClientHttpRequest::abortAdapting, removed the yet-unsupported errno
argument, and moved the code outside the if-statement. That wonderful,
albeit mysterious, piece if code seems to produce an error just fine.
The error is sometimes generated before the entire POST body is read and
discarded.

        Problem: The following piece of client_side_reply code appears to be
sometimes confused by the client-side produced error and/or my other
bugs. It returns STREAM_UNPLANNED_COMPLETE, causing various problems on
the client_request side (e.g., entering "closing" state twice).

> clientStream_status_t
> clientReplyContext::replyStatus()
> {
> ...
>         if (!done) {
>             debug(88, 5) ("clientReplyStatus: closing, !done, but read 0 
> bytes\n
>             return STREAM_FAILED;
>         }
> 
>         if (!http->gotEnough()) {
>             debug(88, 5) ("clientReplyStatus: client didn't get all it 
> expected\
>             return STREAM_UNPLANNED_COMPLETE;
>         }
> 
>         if (http->request->flags.proxy_keepalive) {
>             debug(88, 5) ("clientReplyStatus: stream complete and can 
> keepalive\
>             return STREAM_COMPLETE;
>         }
> 
>         debug(88, 5) ("clientReplyStatus: stream was not expected to 
> complete!\n
>         return STREAM_UNPLANNED_COMPLETE;

Could somebody please explain the logic here? Specifically, I do not
understand why proxy_keepalive flag is required to get a STREAM_COMPLETE
result. I am getting STREAM_UNPLANNED_COMPLETE (from the last return
statement) because the request apparently does not have that flag set.
What does it mean to have a "complete stream" and why do I need a
proxy_keepalive flag with that?

A related question: Is replyStatus() expected to work correctly when the
connection is in a closing state?

Thank you,

Alex.


Reply via email to