Ejemplo n.º 1
0
static void tims_handle_input(void *arg)
{
	int l = 0;
	char buffer[MAX_LINESIZE];	/* connection buffer */
	ClientSession_t *session = (ClientSession_t *)arg;

	ci_cork(session->ci);

	while (TRUE) {
		memset(buffer, 0, sizeof(buffer));
		l = ci_readln(session->ci, buffer);

		if (l == 0) break;

		if ((l = tims_tokenizer(session, buffer))) {
			if (l == -3) {
				client_session_bailout(&session);
				return;
			}
			if (tims(session) == -3) {
				client_session_bailout(&session);
				return;
			}
			client_session_reset_parser(session);
		}
	}

	if (session->state < QUIT)
		ci_uncork(session->ci);
}
Ejemplo n.º 2
0
Archivo: imap4.c Proyecto: m8rge/dbmail
void imap_cb_time(void *arg)
{
	Field_T interval;
	int idle_interval = 10;
	ImapSession *session = (ImapSession *) arg;
	TRACE(TRACE_DEBUG,"[%p]", session);

	if ( session->command_type == IMAP_COMM_IDLE  && session->command_state == IDLE ) {
	       	// session is in a IDLE loop
		GETCONFIGVALUE("idle_interval", "IMAP", interval);
		if (strlen(interval) > 0) {
			int i = atoi(interval);
			if (i > 0 && i < 1000)
				idle_interval = i;
		}

		ci_cork(session->ci);
		if (! (++session->loop % idle_interval)) {
			imap_session_printf(session, "* OK\r\n");
		}
		dbmail_imap_session_mailbox_status(session,TRUE);
		dbmail_imap_session_buff_flush(session);
		ci_uncork(session->ci);
	} else {
		dbmail_imap_session_set_state(session,CLIENTSTATE_ERROR);
		imap_session_printf(session, "%s", IMAP_TIMEOUT_MSG);
		imap_session_bailout(session);
	}
}
Ejemplo n.º 3
0
Archivo: imap4.c Proyecto: m8rge/dbmail
// helpers
//
static void imap_session_reset(ImapSession *session)
{
	ClientState_T current;

	TRACE(TRACE_DEBUG,"[%p]", session);

	memset(session->tag, 0, sizeof(session->tag));
	memset(session->command, 0, sizeof(session->command));

	session->use_uid = 0;
	session->command_type = 0;
	session->command_state = FALSE;
	session->parser_state = FALSE;
	dbmail_imap_session_args_free(session, FALSE);

	PLOCK(session->lock);
	current = session->state;
	PUNLOCK(session->lock);

	if (current == CLIENTSTATE_AUTHENTICATED)
		session->ci->timeout.tv_sec = server_conf->timeout; 
	else
		session->ci->timeout.tv_sec = server_conf->login_timeout; 

	ci_uncork(session->ci);
	
	return;
}
Ejemplo n.º 4
0
Archivo: pop3.c Proyecto: skeyby/dbmail
static void reset_callbacks(ClientSession_T *session)
{
    session->ci->cb_time = pop3_cb_time;
    session->ci->cb_write = pop3_cb_write;
    session->handle_input = pop3_handle_input;

    UNBLOCK(session->ci->rx);
    UNBLOCK(session->ci->tx);
    ci_uncork(session->ci);
}
Ejemplo n.º 5
0
void client_session_set_timeout(ClientSession_T *session, int timeout)
{
	if (session && (session->state > CLIENTSTATE_ANY) && session->ci && session->ci->timeout) {
		int current = session->ci->timeout->tv_sec;
		if (timeout != current) {
			ci_cork(session->ci);
			session->ci->timeout->tv_sec = timeout;
			ci_uncork(session->ci);
		}
	}
}
Ejemplo n.º 6
0
Archivo: pop3.c Proyecto: skeyby/dbmail
static void pop3_handle_input(void *arg)
{
    char buffer[MAX_LINESIZE];	/* connection buffer */
    ClientSession_T *session = (ClientSession_T *)arg;

    if (p_string_len(session->ci->write_buffer)) {
        ci_write(session->ci, NULL);
        return;
    }

    memset(buffer, 0, sizeof(buffer));
    if (ci_readln(session->ci, buffer) == 0)
        return;

    ci_cork(session->ci);
    if (pop3(session, buffer) <= 0) {
        client_session_bailout(&session);
        return;
    }
    ci_uncork(session->ci);
}