static void close_session(SESSION *session) { event_disable_readwrite(vstream_fileno(session->stream)); vstream_fclose(session->stream); session->stream = 0; start_another(session); }
static void rset_done(int unused_event, char *context) { SESSION *session = (SESSION *) context; RESPONSE *resp; int except; /* * Get response to RSET command. */ if ((except = vstream_setjmp(session->stream)) != 0) msg_fatal("%s while sending message", exception_text(except)); if ((resp = response(session->stream, buffer))->code / 100 == 2) { /* void */ } else if (allow_reject) { msg_warn("rset rejected: %d %s", resp->code, resp->str); if (resp->code == 421 || resp->code == 521) { close_session(session); return; } } else { msg_fatal("rset rejected: %d %s", resp->code, resp->str); } /* * Say goodbye or send the next message. */ if (disconnect || message_count < 1) { send_quit(session); } else { event_disable_readwrite(vstream_fileno(session->stream)); start_another(session); } }
static void quit_done(int unused_event, char *context) { SESSION *session = (SESSION *) context; (void) response(session->stream, buffer); event_disable_readwrite(vstream_fileno(session->stream)); vstream_fclose(session->stream); session->stream = 0; start_another(session); }
static void receive_reply(int unused_event, char *context) { SESSION *session = (SESSION *) context; int except; /* * Prepare for disaster. */ if ((except = vstream_setjmp(session->stream)) != 0) msg_fatal("%s while receiving server reply", exception_text(except)); /* * Receive and process the server reply. */ netstring_get(session->stream, buffer, var_line_limit); if (msg_verbose) vstream_printf("<< %.*s\n", (int) LEN(buffer), STR(buffer)); if (STR(buffer)[0] != QMQP_STAT_OK) msg_fatal("%s error: %.*s", STR(buffer)[0] == QMQP_STAT_RETRY ? "recoverable" : STR(buffer)[0] == QMQP_STAT_HARD ? "unrecoverable" : "unknown", (int) LEN(buffer) - 1, STR(buffer) + 1); /* * Update the optional running counter. */ if (count) { counter++; vstream_printf("%d\r", counter); vstream_fflush(VSTREAM_OUT); } /* * Finish this session. QMQP sends only one message per session. */ event_disable_readwrite(vstream_fileno(session->stream)); vstream_fclose(session->stream); session->stream = 0; start_another(session); }