Ejemplo n.º 1
0
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, &param, &result, connect_run);
	
	debug_print("connect ok %i with nntp %p\n", result.error, nntp);
	
	return result.error;
}
Ejemplo n.º 2
0
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, &param, &result, mode_reader_run);
	
	debug_print("nntp mode_reader - end\n");
	
	return result.error;
}
Ejemplo n.º 3
0
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, &param, &result, list_run);
	
	debug_print("nntp list - end\n");
	
	return result.error;
}
Ejemplo n.º 4
0
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, &param, &result, date_run);
	
	debug_print("nntp date - end\n");
	
	return result.error;
}
Ejemplo n.º 5
0
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, &param, &result, group_run);
	
	debug_print("nntp group - end\n");
	
	return result.error;
}
Ejemplo n.º 6
0
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, &param, &result, post_run);
	
	debug_print("nntp post - end\n");
	
	return result.error;
}
Ejemplo n.º 7
0
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, &param, &result, login_run);
	
	debug_print("nntp login - end\n");
	
	return result.error;
}
Ejemplo n.º 8
0
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, &param, &result, article_run);
	
	debug_print("nntp article - end\n");
	
	return result.error;
}
Ejemplo n.º 9
0
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, &param, &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;
}
Ejemplo n.º 10
0
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, &param, &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, &param) < 0)
			return -1;
		if (certificate) 
			free(certificate); 
	}
	debug_print("connect %d with nntp %p\n", result.error, nntp);
	
	return result.error;
}
Ejemplo n.º 11
0
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, &param, &result, xhdr_run);
	
	debug_print("nntp xhdr - end\n");
	
	return result.error;
}
Ejemplo n.º 12
0
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, &param, &result, xover_run);
	
	debug_print("nntp xover - end\n");
	
	return result.error;
}