struct HandleData is now called struct SingleRequest, and is only for data that
is inited at the start of the DO action. I removed the Curl_transfer_keeper struct completely, and I had to move out a few struct members (that had to be set before DO or used after DONE) to the UrlState struct. The SingleRequest struct is accessed with SessionHandle->req. One of the biggest reasons for doing this was the bunch of duplicate struct members in HandleData and Curl_transfer_keeper since it was really messy to keep track of two variables with the same name and basically the same purpose!
This commit is contained in:
84
lib/url.c
84
lib/url.c
@@ -463,12 +463,12 @@ CURLcode Curl_close(struct SessionHandle *data)
|
||||
}
|
||||
}
|
||||
|
||||
if(data->reqdata.rangestringalloc)
|
||||
free(data->reqdata.range);
|
||||
if(data->state.rangestringalloc)
|
||||
free(data->state.range);
|
||||
|
||||
/* Free the pathbuffer */
|
||||
Curl_safefree(data->reqdata.pathbuffer);
|
||||
Curl_safefree(data->reqdata.proto.generic);
|
||||
Curl_safefree(data->state.pathbuffer);
|
||||
Curl_safefree(data->state.proto.generic);
|
||||
|
||||
/* Close down all open SSL info and sessions */
|
||||
Curl_ssl_close_all(data);
|
||||
@@ -2166,7 +2166,7 @@ CURLcode Curl_disconnect(struct connectdata *conn)
|
||||
}
|
||||
|
||||
conn_free(conn);
|
||||
data->reqdata.current_conn = NULL;
|
||||
data->state.current_conn = NULL;
|
||||
|
||||
return CURLE_OK;
|
||||
}
|
||||
@@ -2872,7 +2872,7 @@ static CURLcode ParseURLAndFillConnection(struct SessionHandle *data,
|
||||
char *at;
|
||||
char *tmp;
|
||||
|
||||
char *path = data->reqdata.path;
|
||||
char *path = data->state.path;
|
||||
|
||||
/*************************************************************
|
||||
* Parse the URL.
|
||||
@@ -3030,7 +3030,7 @@ static CURLcode ParseURLAndFillConnection(struct SessionHandle *data,
|
||||
* So if the URL was A://B/C,
|
||||
* conn->protostr is A
|
||||
* conn->host.name is B
|
||||
* data->reqdata.path is /C
|
||||
* data->state.path is /C
|
||||
*/
|
||||
|
||||
return CURLE_OK;
|
||||
@@ -3049,28 +3049,27 @@ static CURLcode setup_range(struct SessionHandle *data)
|
||||
* If we're doing a resumed transfer, we need to setup our stuff
|
||||
* properly.
|
||||
*/
|
||||
struct HandleData *req = &data->reqdata;
|
||||
struct UrlState *s = &data->state;
|
||||
s->resume_from = data->set.set_resume_from;
|
||||
if(s->resume_from || data->set.str[STRING_SET_RANGE]) {
|
||||
if(s->rangestringalloc)
|
||||
free(s->range);
|
||||
|
||||
req->resume_from = data->set.set_resume_from;
|
||||
if(req->resume_from || data->set.str[STRING_SET_RANGE]) {
|
||||
if(req->rangestringalloc)
|
||||
free(req->range);
|
||||
|
||||
if(req->resume_from)
|
||||
req->range = aprintf("%" FORMAT_OFF_T "-", req->resume_from);
|
||||
if(s->resume_from)
|
||||
s->range = aprintf("%" FORMAT_OFF_T "-", s->resume_from);
|
||||
else
|
||||
req->range = strdup(data->set.str[STRING_SET_RANGE]);
|
||||
s->range = strdup(data->set.str[STRING_SET_RANGE]);
|
||||
|
||||
req->rangestringalloc = (unsigned char)(req->range?TRUE:FALSE);
|
||||
s->rangestringalloc = (bool)(s->range?TRUE:FALSE);
|
||||
|
||||
if(!req->range)
|
||||
if(!s->range)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
/* tell ourselves to fetch this range */
|
||||
req->use_range = TRUE; /* enable range download */
|
||||
s->use_range = TRUE; /* enable range download */
|
||||
}
|
||||
else
|
||||
req->use_range = FALSE; /* disable range download */
|
||||
s->use_range = FALSE; /* disable range download */
|
||||
|
||||
return CURLE_OK;
|
||||
}
|
||||
@@ -3539,7 +3538,7 @@ static CURLcode CreateConnection(struct SessionHandle *data,
|
||||
urllen=LEAST_PATH_ALLOC;
|
||||
|
||||
/* Free the old buffer */
|
||||
Curl_safefree(data->reqdata.pathbuffer);
|
||||
Curl_safefree(data->state.pathbuffer);
|
||||
|
||||
/*
|
||||
* We malloc() the buffers below urllen+2 to make room for to possibilities:
|
||||
@@ -3547,10 +3546,10 @@ static CURLcode CreateConnection(struct SessionHandle *data,
|
||||
* 2 - an extra slash (in case a syntax like "www.host.com?moo" is used)
|
||||
*/
|
||||
|
||||
data->reqdata.pathbuffer=(char *)malloc(urllen+2);
|
||||
if(NULL == data->reqdata.pathbuffer)
|
||||
data->state.pathbuffer=(char *)malloc(urllen+2);
|
||||
if(NULL == data->state.pathbuffer)
|
||||
return CURLE_OUT_OF_MEMORY; /* really bad error */
|
||||
data->reqdata.path = data->reqdata.pathbuffer;
|
||||
data->state.path = data->state.pathbuffer;
|
||||
|
||||
conn->host.rawalloc=(char *)malloc(urllen+2);
|
||||
if(NULL == conn->host.rawalloc)
|
||||
@@ -3803,7 +3802,7 @@ static CURLcode CreateConnection(struct SessionHandle *data,
|
||||
char *url;
|
||||
|
||||
url = aprintf("%s://%s:%d%s", conn->protostr, conn->host.name,
|
||||
conn->remote_port, data->reqdata.path);
|
||||
conn->remote_port, data->state.path);
|
||||
if(!url)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
@@ -4237,7 +4236,7 @@ static CURLcode SetupConnection(struct connectdata *conn,
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
data->reqdata.keep.headerbytecount = 0;
|
||||
data->req.headerbytecount = 0;
|
||||
|
||||
#ifdef CURL_DO_LINEEND_CONV
|
||||
data->state.crlf_conversions = 0; /* reset CRLF conversion counter */
|
||||
@@ -4393,9 +4392,9 @@ CURLcode Curl_done(struct connectdata **connp,
|
||||
conn->writechannel_inuse = FALSE;
|
||||
|
||||
/* Cleanup possible redirect junk */
|
||||
if(data->reqdata.newurl) {
|
||||
free(data->reqdata.newurl);
|
||||
data->reqdata.newurl = NULL;
|
||||
if(data->req.newurl) {
|
||||
free(data->req.newurl);
|
||||
data->req.newurl = NULL;
|
||||
}
|
||||
|
||||
if(conn->dns_entry) {
|
||||
@@ -4458,14 +4457,13 @@ CURLcode Curl_done(struct connectdata **connp,
|
||||
static CURLcode do_init(struct connectdata *conn)
|
||||
{
|
||||
struct SessionHandle *data = conn->data;
|
||||
struct Curl_transfer_keeper *k = &data->reqdata.keep;
|
||||
struct SingleRequest *k = &data->req;
|
||||
|
||||
conn->bits.done = FALSE; /* Curl_done() is not called yet */
|
||||
conn->bits.do_more = FALSE; /* by default there's no curl_do_more() to use */
|
||||
|
||||
/* NB: the content encoding software depends on this initialization of
|
||||
Curl_transfer_keeper.*/
|
||||
memset(k, 0, sizeof(struct Curl_transfer_keeper));
|
||||
/* NB: the content encoding software depends on this initialization */
|
||||
Curl_easy_initHandleData(data);
|
||||
|
||||
k->start = Curl_tvnow(); /* start time */
|
||||
k->now = k->start; /* current time is now */
|
||||
@@ -4496,19 +4494,11 @@ static CURLcode do_init(struct connectdata *conn)
|
||||
*/
|
||||
static void do_complete(struct connectdata *conn)
|
||||
{
|
||||
struct SessionHandle *data = conn->data;
|
||||
struct Curl_transfer_keeper *k = &data->reqdata.keep;
|
||||
conn->bits.chunk=FALSE;
|
||||
conn->bits.trailerhdrpresent=FALSE;
|
||||
|
||||
k->maxfd = (conn->sockfd>conn->writesockfd?
|
||||
conn->sockfd:conn->writesockfd)+1;
|
||||
|
||||
k->size = data->reqdata.size;
|
||||
k->maxdownload = data->reqdata.maxdownload;
|
||||
k->bytecountp = data->reqdata.bytecountp;
|
||||
k->writebytecountp = data->reqdata.writebytecountp;
|
||||
|
||||
conn->data->req.maxfd = (conn->sockfd>conn->writesockfd?
|
||||
conn->sockfd:conn->writesockfd)+1;
|
||||
}
|
||||
|
||||
CURLcode Curl_do(struct connectdata **connp, bool *done)
|
||||
@@ -4602,9 +4592,9 @@ CURLcode Curl_do_more(struct connectdata *conn)
|
||||
void Curl_reset_reqproto(struct connectdata *conn)
|
||||
{
|
||||
struct SessionHandle *data = conn->data;
|
||||
if(data->reqdata.proto.generic && data->reqdata.current_conn != conn) {
|
||||
free(data->reqdata.proto.generic);
|
||||
data->reqdata.proto.generic = NULL;
|
||||
if(data->state.proto.generic && data->state.current_conn != conn) {
|
||||
free(data->state.proto.generic);
|
||||
data->state.proto.generic = NULL;
|
||||
}
|
||||
data->reqdata.current_conn = conn;
|
||||
data->state.current_conn = conn;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user