Beispiel #1
0
void pop3_cb_write(void *arg)
{
    ClientSession_T *session = (ClientSession_T *)arg;
    int state = session->state;

    switch (state) {
    case CLIENTSTATE_QUIT_QUEUED:
    case CLIENTSTATE_QUIT:
        break;
    default:
        ci_write_cb(session->ci);
        session->handle_input(session);
        break;
    }
}
Beispiel #2
0
void tims_cb_write(void *arg)
{
	ClientSession_T *session = (ClientSession_T *)arg;
	TRACE(TRACE_DEBUG, "[%p] state: [%d]", session, session->state);

	switch(session->state) {
		case QUIT:
			client_session_bailout(&session);
			break;
		default:
			if (session->ci->write_buffer->len > session->ci->write_buffer_offset) {
				ci_write(session->ci,NULL);
				break;
			}
			session->handle_input(session);
			break;
	}
}
Beispiel #3
0
void tims_cb_write(void *arg)
{
	ClientSession_T *session = (ClientSession_T *)arg;
	int state = session->state;

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

	switch(state) {
		case CLIENTSTATE_QUIT_QUEUED:
		case CLIENTSTATE_QUIT:
			break;
		default:
			if (p_string_len(session->ci->write_buffer) > session->ci->write_buffer_offset) {
				ci_write(session->ci,NULL);
				break;
			}
			session->handle_input(session);
			break;
	}
}
Beispiel #4
0
void client_session_read(void *arg)
{
	int state;
	ClientSession_T *session = (ClientSession_T *)arg;
	TRACE(TRACE_DEBUG, "[%p] state: [%d]", session, session->state);
	ci_read_cb(session->ci);
		
	state = session->ci->client_state;
	if (state & CLIENT_ERR) {
		TRACE(TRACE_DEBUG,"client_state ERROR");
		client_session_bailout(&session);
	} else if (state & CLIENT_EOF) {
		TRACE(TRACE_NOTICE,"reached EOF");
		event_del(session->ci->rev);
		if (session->ci->read_buffer->len < 1)
			client_session_bailout(&session);
		else 
			session->handle_input(session);
	}
	else if (state & CLIENT_OK || state & CLIENT_AGAIN) {
		session->handle_input(session);
	}
}