email: Post STARTLS capability code tidy up (Part Three)
Corrected the order of the upgrade_tls() functions and moved the handler upgrade and getsock() functions out from the middle of the state related functions.
This commit is contained in:
Родитель
de492b31c5
Коммит
586f5d3614
71
lib/imap.c
71
lib/imap.c
|
@ -204,6 +204,15 @@ static const struct Curl_handler Curl_handler_imaps_proxy = {
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_SSL
|
||||||
|
static void imap_to_imaps(struct connectdata *conn)
|
||||||
|
{
|
||||||
|
conn->handler = &Curl_handler_imaps;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define imap_to_imaps(x) Curl_nop_stmt
|
||||||
|
#endif
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
*
|
*
|
||||||
* imap_sendf()
|
* imap_sendf()
|
||||||
|
@ -493,6 +502,25 @@ static CURLcode imap_state_starttls(struct connectdata *conn)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static CURLcode imap_state_upgrade_tls(struct connectdata *conn)
|
||||||
|
{
|
||||||
|
struct imap_conn *imapc = &conn->proto.imapc;
|
||||||
|
CURLcode result;
|
||||||
|
|
||||||
|
result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &imapc->ssldone);
|
||||||
|
|
||||||
|
if(!result) {
|
||||||
|
if(imapc->state != IMAP_UPGRADETLS)
|
||||||
|
state(conn, IMAP_UPGRADETLS);
|
||||||
|
|
||||||
|
if(imapc->ssldone) {
|
||||||
|
imap_to_imaps(conn);
|
||||||
|
result = imap_state_capability(conn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static CURLcode imap_state_login(struct connectdata *conn)
|
static CURLcode imap_state_login(struct connectdata *conn)
|
||||||
{
|
{
|
||||||
|
@ -627,22 +655,6 @@ static CURLcode imap_authenticate(struct connectdata *conn)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For the IMAP "protocol connect" and "doing" phases only */
|
|
||||||
static int imap_getsock(struct connectdata *conn, curl_socket_t *socks,
|
|
||||||
int numsocks)
|
|
||||||
{
|
|
||||||
return Curl_pp_getsock(&conn->proto.imapc.pp, socks, numsocks);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef USE_SSL
|
|
||||||
static void imap_to_imaps(struct connectdata *conn)
|
|
||||||
{
|
|
||||||
conn->handler = &Curl_handler_imaps;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
#define imap_to_imaps(x) Curl_nop_stmt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* For the initial server greeting */
|
/* For the initial server greeting */
|
||||||
static CURLcode imap_state_servergreet_resp(struct connectdata *conn,
|
static CURLcode imap_state_servergreet_resp(struct connectdata *conn,
|
||||||
int imapcode,
|
int imapcode,
|
||||||
|
@ -719,26 +731,6 @@ static CURLcode imap_state_starttls_resp(struct connectdata *conn,
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static CURLcode imap_state_upgrade_tls(struct connectdata *conn)
|
|
||||||
{
|
|
||||||
struct imap_conn *imapc = &conn->proto.imapc;
|
|
||||||
CURLcode result;
|
|
||||||
|
|
||||||
result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &imapc->ssldone);
|
|
||||||
|
|
||||||
if(!result) {
|
|
||||||
if(imapc->state != IMAP_UPGRADETLS)
|
|
||||||
state(conn, IMAP_UPGRADETLS);
|
|
||||||
|
|
||||||
if(imapc->ssldone) {
|
|
||||||
imap_to_imaps(conn);
|
|
||||||
result = imap_state_capability(conn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* For AUTHENTICATE PLAIN (without initial response) responses */
|
/* For AUTHENTICATE PLAIN (without initial response) responses */
|
||||||
static CURLcode imap_state_auth_plain_resp(struct connectdata *conn,
|
static CURLcode imap_state_auth_plain_resp(struct connectdata *conn,
|
||||||
int imapcode,
|
int imapcode,
|
||||||
|
@ -1397,6 +1389,13 @@ static CURLcode imap_init(struct connectdata *conn)
|
||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* For the IMAP "protocol connect" and "doing" phases only */
|
||||||
|
static int imap_getsock(struct connectdata *conn, curl_socket_t *socks,
|
||||||
|
int numsocks)
|
||||||
|
{
|
||||||
|
return Curl_pp_getsock(&conn->proto.imapc.pp, socks, numsocks);
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
*
|
*
|
||||||
* imap_connect() should do everything that is to be considered a part of
|
* imap_connect() should do everything that is to be considered a part of
|
||||||
|
|
71
lib/pop3.c
71
lib/pop3.c
|
@ -207,6 +207,15 @@ static const struct Curl_handler Curl_handler_pop3s_proxy = {
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_SSL
|
||||||
|
static void pop3_to_pop3s(struct connectdata *conn)
|
||||||
|
{
|
||||||
|
conn->handler = &Curl_handler_pop3s;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define pop3_to_pop3s(x) Curl_nop_stmt
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Function that checks for an ending pop3 status code at the start of the
|
/* Function that checks for an ending pop3 status code at the start of the
|
||||||
given string, but also detects the APOP timestamp from the server greeting
|
given string, but also detects the APOP timestamp from the server greeting
|
||||||
as well as the supported authentication types and allowed SASL mechanisms
|
as well as the supported authentication types and allowed SASL mechanisms
|
||||||
|
@ -406,6 +415,25 @@ static CURLcode pop3_state_starttls(struct connectdata *conn)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static CURLcode pop3_state_upgrade_tls(struct connectdata *conn)
|
||||||
|
{
|
||||||
|
struct pop3_conn *pop3c = &conn->proto.pop3c;
|
||||||
|
CURLcode result;
|
||||||
|
|
||||||
|
result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &pop3c->ssldone);
|
||||||
|
|
||||||
|
if(!result) {
|
||||||
|
if(pop3c->state != POP3_UPGRADETLS)
|
||||||
|
state(conn, POP3_UPGRADETLS);
|
||||||
|
|
||||||
|
if(pop3c->ssldone) {
|
||||||
|
pop3_to_pop3s(conn);
|
||||||
|
result = pop3_state_capa(conn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static CURLcode pop3_state_user(struct connectdata *conn)
|
static CURLcode pop3_state_user(struct connectdata *conn)
|
||||||
{
|
{
|
||||||
|
@ -551,22 +579,6 @@ static CURLcode pop3_authenticate(struct connectdata *conn)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For the POP3 "protocol connect" and "doing" phases only */
|
|
||||||
static int pop3_getsock(struct connectdata *conn, curl_socket_t *socks,
|
|
||||||
int numsocks)
|
|
||||||
{
|
|
||||||
return Curl_pp_getsock(&conn->proto.pop3c.pp, socks, numsocks);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef USE_SSL
|
|
||||||
static void pop3_to_pop3s(struct connectdata *conn)
|
|
||||||
{
|
|
||||||
conn->handler = &Curl_handler_pop3s;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
#define pop3_to_pop3s(x) Curl_nop_stmt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* For the initial server greeting */
|
/* For the initial server greeting */
|
||||||
static CURLcode pop3_state_servergreet_resp(struct connectdata *conn,
|
static CURLcode pop3_state_servergreet_resp(struct connectdata *conn,
|
||||||
int pop3code,
|
int pop3code,
|
||||||
|
@ -642,26 +654,6 @@ static CURLcode pop3_state_starttls_resp(struct connectdata *conn,
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static CURLcode pop3_state_upgrade_tls(struct connectdata *conn)
|
|
||||||
{
|
|
||||||
struct pop3_conn *pop3c = &conn->proto.pop3c;
|
|
||||||
CURLcode result;
|
|
||||||
|
|
||||||
result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &pop3c->ssldone);
|
|
||||||
|
|
||||||
if(!result) {
|
|
||||||
if(pop3c->state != POP3_UPGRADETLS)
|
|
||||||
state(conn, POP3_UPGRADETLS);
|
|
||||||
|
|
||||||
if(pop3c->ssldone) {
|
|
||||||
pop3_to_pop3s(conn);
|
|
||||||
result = pop3_state_capa(conn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* For AUTH PLAIN responses */
|
/* For AUTH PLAIN responses */
|
||||||
static CURLcode pop3_state_auth_plain_resp(struct connectdata *conn,
|
static CURLcode pop3_state_auth_plain_resp(struct connectdata *conn,
|
||||||
int pop3code,
|
int pop3code,
|
||||||
|
@ -1323,6 +1315,13 @@ static CURLcode pop3_init(struct connectdata *conn)
|
||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* For the POP3 "protocol connect" and "doing" phases only */
|
||||||
|
static int pop3_getsock(struct connectdata *conn, curl_socket_t *socks,
|
||||||
|
int numsocks)
|
||||||
|
{
|
||||||
|
return Curl_pp_getsock(&conn->proto.pop3c.pp, socks, numsocks);
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
*
|
*
|
||||||
* pop3_connect()
|
* pop3_connect()
|
||||||
|
|
72
lib/smtp.c
72
lib/smtp.c
|
@ -204,6 +204,15 @@ static const struct Curl_handler Curl_handler_smtps_proxy = {
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_SSL
|
||||||
|
static void smtp_to_smtps(struct connectdata *conn)
|
||||||
|
{
|
||||||
|
conn->handler = &Curl_handler_smtps;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define smtp_to_smtps(x) Curl_nop_stmt
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Function that checks for an ending SMTP status code at the start of the
|
/* Function that checks for an ending SMTP status code at the start of the
|
||||||
given string, but also detects various capabilities from the EHLO response
|
given string, but also detects various capabilities from the EHLO response
|
||||||
including the supported authentication mechanisms. */
|
including the supported authentication mechanisms. */
|
||||||
|
@ -379,6 +388,26 @@ static CURLcode smtp_state_starttls(struct connectdata *conn)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static CURLcode smtp_state_upgrade_tls(struct connectdata *conn)
|
||||||
|
{
|
||||||
|
struct smtp_conn *smtpc = &conn->proto.smtpc;
|
||||||
|
CURLcode result;
|
||||||
|
|
||||||
|
result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &smtpc->ssldone);
|
||||||
|
|
||||||
|
if(!result) {
|
||||||
|
if(smtpc->state != SMTP_UPGRADETLS)
|
||||||
|
state(conn, SMTP_UPGRADETLS);
|
||||||
|
|
||||||
|
if(smtpc->ssldone) {
|
||||||
|
smtp_to_smtps(conn);
|
||||||
|
result = smtp_state_ehlo(conn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static CURLcode smtp_authenticate(struct connectdata *conn)
|
static CURLcode smtp_authenticate(struct connectdata *conn)
|
||||||
{
|
{
|
||||||
CURLcode result = CURLE_OK;
|
CURLcode result = CURLE_OK;
|
||||||
|
@ -468,22 +497,6 @@ static CURLcode smtp_authenticate(struct connectdata *conn)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For the SMTP "protocol connect" and "doing" phases only */
|
|
||||||
static int smtp_getsock(struct connectdata *conn, curl_socket_t *socks,
|
|
||||||
int numsocks)
|
|
||||||
{
|
|
||||||
return Curl_pp_getsock(&conn->proto.smtpc.pp, socks, numsocks);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef USE_SSL
|
|
||||||
static void smtp_to_smtps(struct connectdata *conn)
|
|
||||||
{
|
|
||||||
conn->handler = &Curl_handler_smtps;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
#define smtp_to_smtps(x) Curl_nop_stmt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* For the initial server greeting */
|
/* For the initial server greeting */
|
||||||
static CURLcode smtp_state_servergreet_resp(struct connectdata *conn,
|
static CURLcode smtp_state_servergreet_resp(struct connectdata *conn,
|
||||||
int smtpcode,
|
int smtpcode,
|
||||||
|
@ -528,26 +541,6 @@ static CURLcode smtp_state_starttls_resp(struct connectdata *conn,
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static CURLcode smtp_state_upgrade_tls(struct connectdata *conn)
|
|
||||||
{
|
|
||||||
struct smtp_conn *smtpc = &conn->proto.smtpc;
|
|
||||||
CURLcode result;
|
|
||||||
|
|
||||||
result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &smtpc->ssldone);
|
|
||||||
|
|
||||||
if(!result) {
|
|
||||||
if(smtpc->state != SMTP_UPGRADETLS)
|
|
||||||
state(conn, SMTP_UPGRADETLS);
|
|
||||||
|
|
||||||
if(smtpc->ssldone) {
|
|
||||||
smtp_to_smtps(conn);
|
|
||||||
result = smtp_state_ehlo(conn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* For EHLO responses */
|
/* For EHLO responses */
|
||||||
static CURLcode smtp_state_ehlo_resp(struct connectdata *conn, int smtpcode,
|
static CURLcode smtp_state_ehlo_resp(struct connectdata *conn, int smtpcode,
|
||||||
smtpstate instate)
|
smtpstate instate)
|
||||||
|
@ -1312,6 +1305,13 @@ static CURLcode smtp_init(struct connectdata *conn)
|
||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* For the SMTP "protocol connect" and "doing" phases only */
|
||||||
|
static int smtp_getsock(struct connectdata *conn, curl_socket_t *socks,
|
||||||
|
int numsocks)
|
||||||
|
{
|
||||||
|
return Curl_pp_getsock(&conn->proto.smtpc.pp, socks, numsocks);
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
*
|
*
|
||||||
* smtp_connect()
|
* smtp_connect()
|
||||||
|
|
Загрузка…
Ссылка в новой задаче