Beispiel #1
0
int
request_idle(const char *server, const char *port, const char *user)
{
	int t, rg, ri;
	session *s;

	if (!(s = session_find(server, port, user)))
		return -1;


	if (!(s->capabilities & CAPABILITY_IDLE))
		return -1;

	do {
		ri = 0;

		t = imap_idle(s);

		if ((rg = response_continuation(s)) == -1)
			goto fail;

		if (rg == STATUS_RESPONSE_CONTINUE) {
			if ((ri = response_idle(s, t)) == -1)
				goto fail;

			imap_done(s);

			if ((rg = response_generic(s, t)) == -1)
				goto fail;
		}
	} while (ri == STATUS_RESPONSE_TIMEOUT);

	return rg;
fail:
	close_connection(s);
	session_destroy(s);

	return -1;
}
Beispiel #2
0
int
request_idle(session *ssn, char **event)
{
	int t, r, ri;

	if (!(ssn->capabilities & CAPABILITY_IDLE))
		return STATUS_BAD;

	do {
		ri = 0;

		TRY(t = send_request(ssn, "IDLE"));
		TRY(r = response_continuation(ssn, t));
		if (r == STATUS_CONTINUE) {
			TRY(ri = response_idle(ssn, t, event));
			TRY(send_continuation(ssn, "DONE", strlen("DONE")));
			TRY(r = response_generic(ssn, t));
		}
	} while (ri == STATUS_TIMEOUT);

	return r;
}