int mailpop3_socket_connect(mailpop3 * f, const char * server, uint16_t port) { int s; mailstream * stream; if (port == 0) { port = mail_get_service_port(SERVICE_NAME_POP3, SERVICE_TYPE_TCP); if (port == 0) port = DEFAULT_POP3_PORT; } /* Connection */ s = mail_tcp_connect(server, port); if (s == -1) return MAILPOP3_ERROR_CONNECTION_REFUSED; stream = mailstream_socket_open(s); if (stream == NULL) { #ifdef WIN32 closesocket(s); #else close(s); #endif return MAILPOP3_ERROR_MEMORY; } return mailpop3_connect(f, stream); }
static int mailpop3_cfsocket_connect(mailpop3 * f, const char * server, uint16_t port) { mailstream * stream; stream = mailstream_cfstream_open_timeout(server, port, f->pop3_timeout); if (stream == NULL) { return MAILPOP3_ERROR_CONNECTION_REFUSED; } return mailpop3_connect(f, stream); }
static int pop3driver_connect_stream(mailsession * session, mailstream * s) { int r; r = mailpop3_connect(get_pop3_session(session), s); switch (r) { case MAILPOP3_NO_ERROR: return MAIL_NO_ERROR_NON_AUTHENTICATED; default: return pop3driver_pop3_error_to_mail_error(r); } }
static int mailpop3_cfssl_connect_ssl_level(mailpop3 * f, const char * server, uint16_t port, int ssl_level) { mailstream * stream; int r; stream = mailstream_cfstream_open_timeout(server, port, f->pop3_timeout); if (stream == NULL) { return MAILPOP3_ERROR_CONNECTION_REFUSED; } mailstream_cfstream_set_ssl_level(stream, ssl_level); mailstream_cfstream_set_ssl_verification_mask(stream, MAILSTREAM_CFSTREAM_SSL_NO_VERIFICATION); r = mailstream_cfstream_set_ssl_enabled(stream, 1); if (r < 0) { mailstream_close(stream); return MAILPOP3_ERROR_SSL; } return mailpop3_connect(f, stream); }
int mailpop3_ssl_connect_with_callback(mailpop3 * f, const char * server, uint16_t port, void (* callback)(struct mailstream_ssl_context * ssl_context, void * data), void * data) { int s; mailstream * stream; #if HAVE_CFNETWORK if (mailstream_cfstream_enabled) { if (callback == NULL) { return mailpop3_cfssl_connect(f, server, port); } } #endif if (port == 0) { port = mail_get_service_port(SERVICE_NAME_POP3S, SERVICE_TYPE_TCP); if (port == 0) port = DEFAULT_POP3S_PORT; } /* Connection */ s = mail_tcp_connect_timeout(server, port, f->pop3_timeout); if (s == -1) return MAILPOP3_ERROR_CONNECTION_REFUSED; stream = mailstream_ssl_open_with_callback_timeout(s, f->pop3_timeout, callback, data); if (stream == NULL) { #ifdef WIN32 closesocket(s); #else close(s); #endif return MAILPOP3_ERROR_SSL; } return mailpop3_connect(f, stream); }