int mailsmtp_socket_starttls_with_callback(mailsmtp * session, void (* callback)(struct mailstream_ssl_context * ssl_context, void * data), void * data) { int r; int fd; mailstream_low * low; mailstream_low * new_low; low = mailstream_get_low(session->stream); if (low->driver == mailstream_cfstream_driver) { // won't use callback return mailsmtp_cfsocket_starttls(session); } r = mailesmtp_starttls(session); if (r != MAILSMTP_NO_ERROR) return r; fd = mailstream_low_get_fd(low); if (fd == -1) return MAILSMTP_ERROR_STREAM; new_low = mailstream_low_tls_open_with_callback_timeout(fd, session->smtp_timeout, callback, data); if (new_low == NULL) return MAILSMTP_ERROR_SSL; mailstream_low_free(low); mailstream_set_low(session->stream, new_low); return MAILSMTP_NO_ERROR; }
static int mailsmtp_cfsocket_starttls(mailsmtp * session) { int r; r = mailesmtp_starttls(session); if (r != MAILSMTP_NO_ERROR) return r; r = mailstream_cfstream_set_ssl_enabled(session->stream, 1); if (r < 0) { return MAILSMTP_ERROR_SSL; } return MAILSMTP_NO_ERROR; }
static int mailsmtp_cfsocket_starttls(mailsmtp * session) { int r; r = mailesmtp_starttls(session); if (r != MAILSMTP_NO_ERROR) return r; mailstream_cfstream_set_ssl_verification_mask(session->stream, MAILSTREAM_CFSTREAM_SSL_DISABLE_VALIDATES_CERTIFICATE_CHAIN); r = mailstream_cfstream_set_ssl_enabled(session->stream, 1); if (r < 0) { return MAILSMTP_ERROR_SSL; } return MAILSMTP_NO_ERROR; }