static int mailimap_cfsocket_starttls(mailimap * f) { int r; r = mailimap_starttls(f); switch (r) { case MAILIMAP_NO_ERROR: break; default: return r; } r = mailstream_cfstream_set_ssl_enabled(f->imap_stream, 1); if (r < 0) { return MAILIMAP_ERROR_SSL; } return MAILIMAP_NO_ERROR; }
static int mailimap_cfsocket_starttls(mailimap * f) { int r; r = mailimap_starttls(f); switch (r) { case MAILIMAP_NO_ERROR: break; default: return r; } mailstream_cfstream_set_ssl_verification_mask(f->imap_stream, MAILSTREAM_CFSTREAM_SSL_NO_VERIFICATION); r = mailstream_cfstream_set_ssl_enabled(f->imap_stream, 1); if (r < 0) { return MAILIMAP_ERROR_SSL; } return MAILIMAP_NO_ERROR; }
int mailimap_socket_starttls_with_callback(mailimap * f, void (* callback)(struct mailstream_ssl_context * ssl_context, void * data), void * data) { mailstream_low * low; mailstream_low * new_low; int r; int fd; low = mailstream_get_low(f->imap_stream); if (low->driver == mailstream_cfstream_driver) { // won't use callback return mailimap_cfsocket_starttls(f); } r = mailimap_starttls(f); switch (r) { case MAILIMAP_NO_ERROR: break; default: return r; } fd = mailstream_low_get_fd(low); if (fd == -1) return MAILIMAP_ERROR_STREAM; new_low = mailstream_low_tls_open_with_callback_timeout(fd, f->imap_timeout, callback, data); if (new_low == NULL) return MAILIMAP_ERROR_STREAM; mailstream_low_free(low); mailstream_set_low(f->imap_stream, new_low); return MAILIMAP_NO_ERROR; }