IMAP in multi mode: use Curl_ssl_connect_nonblocking() when connecting.

This commit is contained in:
Ben Noordhuis
2011-02-14 19:41:42 +01:00
parent c4369f34b9
commit 45ca048f44
2 changed files with 10 additions and 2 deletions

View File

@@ -588,7 +588,14 @@ static CURLcode imap_multi_statemach(struct connectdata *conn,
bool *done) bool *done)
{ {
struct imap_conn *imapc = &conn->proto.imapc; struct imap_conn *imapc = &conn->proto.imapc;
CURLcode result = Curl_pp_multi_statemach(&imapc->pp); CURLcode result;
if((conn->protocol & PROT_IMAPS) && !imapc->ssldone) {
result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &imapc->ssldone);
}
else {
result = Curl_pp_multi_statemach(&imapc->pp);
}
*done = (bool)(imapc->state == IMAP_STOP); *done = (bool)(imapc->state == IMAP_STOP);
@@ -700,7 +707,7 @@ static CURLcode imap_connect(struct connectdata *conn,
} }
#endif /* !CURL_DISABLE_HTTP && !CURL_DISABLE_PROXY */ #endif /* !CURL_DISABLE_HTTP && !CURL_DISABLE_PROXY */
if(conn->protocol & PROT_IMAPS) { if((conn->protocol & PROT_IMAPS) && data->state.used_interface != Curl_if_multi) {
/* BLOCKING */ /* BLOCKING */
/* IMAPS is simply imap with SSL for the control channel */ /* IMAPS is simply imap with SSL for the control channel */
/* now, perform the SSL initialization for this socket */ /* now, perform the SSL initialization for this socket */

View File

@@ -47,6 +47,7 @@ struct imap_conn {
imapstate state; /* always use imap.c:state() to change state! */ imapstate state; /* always use imap.c:state() to change state! */
int cmdid; /* id number/index */ int cmdid; /* id number/index */
const char *idstr; /* pointer to a string for which to wait for as id */ const char *idstr; /* pointer to a string for which to wait for as id */
bool ssldone; /* is connect() over SSL done? only relevant in multi mode */
}; };
extern const struct Curl_handler Curl_handler_imap; extern const struct Curl_handler Curl_handler_imap;