--- bug/gass/transfer/source/library/globus_gass_transfer_http.c Wed Jan 21 12:38:17 2004 +++ fix/gass/transfer/source/library/globus_gass_transfer_http.c Wed Feb 4 17:01:07 2004 @@ -830,7 +830,11 @@ { proto->recv_state = GLOBUS_GASS_TRANSFER_HTTP_RECV_STATE_ERROR; } - + else if(nbytes==0 && proto->eof_read) + { + proto->failure_occurred = GLOBUS_TRUE; + proto->recv_state = GLOBUS_GASS_TRANSFER_HTTP_RECV_STATE_ERROR; + } if((proto->type == GLOBUS_GASS_TRANSFER_REQUEST_TYPE_PUT || proto->type == GLOBUS_GASS_TRANSFER_REQUEST_TYPE_APPEND) && @@ -5921,6 +5925,44 @@ { globus_size_t i; + if ( proto->response_offset - proto->parsed_offset == 0 ) + { + if (!proto->eof_read ) + { + return GLOBUS_TRUE; + } + else + { + switch(proto->recv_state) + { + case GLOBUS_GASS_TRANSFER_HTTP_RECV_STATE_UNTIL_LENGTH: + if (proto->length == proto->handled) + { + proto->recv_state = + GLOBUS_GASS_TRANSFER_HTTP_RECV_STATE_EOF; + } + else + { + proto->recv_state = + GLOBUS_GASS_TRANSFER_HTTP_RECV_STATE_ERROR; + } + break; + + case GLOBUS_GASS_TRANSFER_HTTP_RECV_STATE_UNTIL_EOF: + proto->recv_state = + GLOBUS_GASS_TRANSFER_HTTP_RECV_STATE_EOF; + break; + + default: + proto->failure_occurred = GLOBUS_TRUE; + proto->recv_state = + GLOBUS_GASS_TRANSFER_HTTP_RECV_STATE_ERROR; + break; + } + return GLOBUS_FALSE; + } + } + while(proto->response_offset - proto->parsed_offset > 0) { switch(proto->recv_state)