diff options
author | Daniel Stenberg <daniel@haxx.se> | 2011-03-14 22:22:22 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2011-03-14 22:22:22 +0100 |
commit | 8831000bc07de463d277975a3ddfb6a31dcf14b4 (patch) | |
tree | 0313bc919a3ee27021c352e9efad38ad8c62407e /lib/transfer.c | |
parent | ed8749e308a9ed0da49ad46b8b2ba5e8aae80244 (diff) | |
download | curl-8831000bc07de463d277975a3ddfb6a31dcf14b4.tar.gz |
protocol handler: added flags field
The protocol handler struct got a 'flags' field for special information
and characteristics of the given protocol.
This now enables us to move away central protocol information such as
CLOSEACTION and DUALCHANNEL from single defines in a central place, out
to each protocol's definition. It also made us stop abusing the protocol
field for other info than the protocol, and we could start cleaning up
other protocol-specific things by adding flags bits to set in the
handler struct.
The "protocol" field connectdata struct was removed as well and the code
now refers directly to the conn->handler->protocol field instead. To
make things work properly, the code now always store a conn->given
pointer that points out the original handler struct so that the code can
learn details from the original protocol even if conn->handler is
modified along the way - for example when switching to go over a HTTP
proxy.
Diffstat (limited to 'lib/transfer.c')
-rw-r--r-- | lib/transfer.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/lib/transfer.c b/lib/transfer.c index 63ab5c4e9..8302396f8 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -322,7 +322,7 @@ static int data_pending(const struct connectdata *conn) { /* in the case of libssh2, we can never be really sure that we have emptied its internal buffers so we MUST always try until we get EAGAIN back */ - return conn->protocol&(PROT_SCP|PROT_SFTP) || + return conn->handler->protocol&(PROT_SCP|PROT_SFTP) || Curl_ssl_data_pending(conn, FIRSTSOCKET); } @@ -469,7 +469,7 @@ static CURLcode readwrite_data(struct SessionHandle *data, #ifndef CURL_DISABLE_RTSP /* Check for RTP at the beginning of the data */ - if(conn->protocol & PROT_RTSP) { + if(conn->handler->protocol & PROT_RTSP) { result = Curl_rtsp_rtp_readwrite(data, conn, &nread, &readmore); if(result) return result; @@ -490,7 +490,8 @@ static CURLcode readwrite_data(struct SessionHandle *data, #ifndef CURL_DISABLE_RTSP /* Check for RTP after the headers if there is no Content */ - if(k->maxdownload <= 0 && nread > 0 && (conn->protocol & PROT_RTSP)) { + if(k->maxdownload <= 0 && nread > 0 && + (conn->handler->protocol & PROT_RTSP)) { result = Curl_rtsp_rtp_readwrite(data, conn, &nread, &readmore); if(result) return result; @@ -516,7 +517,7 @@ static CURLcode readwrite_data(struct SessionHandle *data, if(0 == k->bodywrites && !is_empty_data) { /* These checks are only made the first time we are about to write a piece of the body */ - if(conn->protocol&(PROT_HTTP|PROT_RTSP)) { + if(conn->handler->protocol&(PROT_HTTP|PROT_RTSP)) { /* HTTP-only checks */ if(data->req.newurl) { @@ -703,7 +704,7 @@ static CURLcode readwrite_data(struct SessionHandle *data, if(!k->ignorebody) { #ifndef CURL_DISABLE_POP3 - if(conn->protocol&PROT_POP3) + if(conn->handler->protocol&PROT_POP3) result = Curl_pop3_write(conn, k->str, nread); else #endif /* CURL_DISABLE_POP3 */ @@ -746,7 +747,7 @@ static CURLcode readwrite_data(struct SessionHandle *data, #ifndef CURL_DISABLE_RTSP if(excess > 0 && !conn->bits.stream_was_rewound && - (conn->protocol & PROT_RTSP)) { + (conn->handler->protocol & PROT_RTSP)) { /* Check for RTP after the content if there is unrewound excess */ /* Parse the excess data */ @@ -834,7 +835,7 @@ static CURLcode readwrite_upload(struct SessionHandle *data, break; } - if(conn->protocol&(PROT_HTTP|PROT_RTSP)) { + if(conn->handler->protocol&(PROT_HTTP|PROT_RTSP)) { if(data->state.proto.http->sending == HTTPSEND_REQUEST) /* We're sending the HTTP request headers, not the data. Remember that so we don't change the line endings. */ @@ -872,7 +873,7 @@ static CURLcode readwrite_upload(struct SessionHandle *data, data->req.upload_present = nread; #ifndef CURL_DISABLE_SMTP - if(conn->protocol & PROT_SMTP) { + if(conn->handler->protocol & PROT_SMTP) { result = Curl_smtp_escape_eob(conn, nread); if(result) return result; @@ -2059,7 +2060,7 @@ CURLcode Curl_retry_request(struct connectdata *conn, /* if we're talking upload, we can't do the checks below, unless the protocol is HTTP as when uploading over HTTP we will still get a response */ - if(data->set.upload && !(conn->protocol&(PROT_HTTP|PROT_RTSP))) + if(data->set.upload && !(conn->handler->protocol&(PROT_HTTP|PROT_RTSP))) return CURLE_OK; if(/* workaround for broken TLS servers */ data->state.ssl_connect_retry || |