int nntp_threaded_connect(Folder * folder, const char * server, int port) { struct connect_param param; struct connect_result result; chashdatum key; chashdatum value; newsnntp * nntp, * oldnntp; oldnntp = get_nntp(folder); nntp = newsnntp_new(0, NULL); if (oldnntp) { debug_print("deleting old nntp %p\n", oldnntp); delete_nntp(folder, oldnntp); } key.data = &folder; key.len = sizeof(folder); value.data = nntp; value.len = 0; chash_set(session_hash, &key, &value, NULL); param.nntp = nntp; param.server = server; param.port = port; refresh_resolvers(); threaded_run(folder, ¶m, &result, connect_run); debug_print("connect ok %i with nntp %p\n", result.error, nntp); return result.error; }
int nntp_threaded_mode_reader(Folder * folder) { struct mode_reader_param param; struct mode_reader_result result; debug_print("nntp mode_reader - begin\n"); param.nntp = get_nntp(folder); threaded_run(folder, ¶m, &result, mode_reader_run); debug_print("nntp mode_reader - end\n"); return result.error; }
int nntp_threaded_list(Folder * folder, clist **grouplist) { struct list_param param; struct list_result result; debug_print("nntp list - begin\n"); param.nntp = get_nntp(folder); param.grouplist = grouplist; threaded_run(folder, ¶m, &result, list_run); debug_print("nntp list - end\n"); return result.error; }
int nntp_threaded_date(Folder * folder, struct tm *lt) { struct date_param param; struct date_result result; debug_print("nntp date - begin\n"); param.nntp = get_nntp(folder); param.lt = lt; threaded_run(folder, ¶m, &result, date_run); debug_print("nntp date - end\n"); return result.error; }
int nntp_threaded_group(Folder * folder, const char *group, struct newsnntp_group_info **info) { struct group_param param; struct group_result result; debug_print("nntp group - begin\n"); param.nntp = get_nntp(folder); param.group = group; param.info = info; threaded_run(folder, ¶m, &result, group_run); debug_print("nntp group - end\n"); return result.error; }
int nntp_threaded_post(Folder * folder, char *contents, size_t len) { struct post_param param; struct post_result result; debug_print("nntp post - begin\n"); param.nntp = get_nntp(folder); param.contents = contents; param.len = len; threaded_run(folder, ¶m, &result, post_run); debug_print("nntp post - end\n"); return result.error; }
int nntp_threaded_login(Folder * folder, const char * login, const char * password) { struct login_param param; struct login_result result; debug_print("nntp login - begin\n"); param.nntp = get_nntp(folder); param.login = login; param.password = password; threaded_run(folder, ¶m, &result, login_run); debug_print("nntp login - end\n"); return result.error; }
int nntp_threaded_article(Folder * folder, guint32 num, char **contents, size_t *len) { struct article_param param; struct article_result result; debug_print("nntp article - begin\n"); param.nntp = get_nntp(folder); param.num = num; param.contents = contents; param.len = len; threaded_run(folder, ¶m, &result, article_run); debug_print("nntp article - end\n"); return result.error; }
int nntp_threaded_connect_ssl(Folder * folder, const char * server, int port) { struct connect_param param; struct connect_result result; chashdatum key; chashdatum value; newsnntp * nntp, * oldnntp; gboolean accept_if_valid = FALSE; oldnntp = get_nntp(folder); nntp = newsnntp_new(0, NULL); if (oldnntp) { debug_print("deleting old nntp %p\n", oldnntp); delete_nntp(folder, oldnntp); } key.data = &folder; key.len = sizeof(folder); value.data = nntp; value.len = 0; chash_set(session_hash, &key, &value, NULL); param.nntp = nntp; param.server = server; param.port = port; param.account = folder->account; if (folder->account) accept_if_valid = folder->account->ssl_certs_auto_accept; refresh_resolvers(); threaded_run(folder, ¶m, &result, connect_ssl_run); if (result.error == NEWSNNTP_NO_ERROR && !etpan_skip_ssl_cert_check) { if (etpan_certificate_check(nntp->nntp_stream, server, port, accept_if_valid) != TRUE) return -1; } debug_print("connect %d with nntp %p\n", result.error, nntp); return result.error; }
int nntp_threaded_connect_ssl(Folder * folder, const char * server, int port) { struct connect_param param; struct connect_result result; chashdatum key; chashdatum value; newsnntp * nntp, * oldnntp; unsigned char *certificate = NULL; int cert_len; oldnntp = get_nntp(folder); nntp = newsnntp_new(0, NULL); if (oldnntp) { debug_print("deleting old nntp %p\n", oldnntp); delete_nntp(folder, oldnntp); } key.data = &folder; key.len = sizeof(folder); value.data = nntp; value.len = 0; chash_set(session_hash, &key, &value, NULL); param.nntp = nntp; param.server = server; param.port = port; param.account = folder->account; refresh_resolvers(); threaded_run(folder, ¶m, &result, connect_ssl_run); if (result.error == NEWSNNTP_NO_ERROR && !etpan_skip_ssl_cert_check) { cert_len = (int)mailstream_ssl_get_certificate(nntp->nntp_stream, &certificate); if (etpan_certificate_check(certificate, cert_len, ¶m) < 0) return -1; if (certificate) free(certificate); } debug_print("connect %d with nntp %p\n", result.error, nntp); return result.error; }
int nntp_threaded_xhdr(Folder * folder, const char *header, guint32 beg, guint32 end, clist **hdrlist) { struct xhdr_param param; struct xhdr_result result; debug_print("nntp xhdr - begin\n"); param.nntp = get_nntp(folder); param.header = header; param.beg = beg; param.end = end; param.hdrlist = hdrlist; threaded_run(folder, ¶m, &result, xhdr_run); debug_print("nntp xhdr - end\n"); return result.error; }
int nntp_threaded_xover(Folder * folder, guint32 beg, guint32 end, struct newsnntp_xover_resp_item **single_result, clist **multiple_result) { struct xover_param param; struct xover_result result; debug_print("nntp xover - begin\n"); param.nntp = get_nntp(folder); param.beg = beg; param.end = end; param.result = single_result; param.msglist = multiple_result; threaded_run(folder, ¶m, &result, xover_run); debug_print("nntp xover - end\n"); return result.error; }