bool broker_t::handle_request() { message_pack_t message; if(!m_socket->recv(message)) return false; // interrupted message_part_t sender = message.pop_head(); message_part_t empty = message.pop_head(); message_part_t header = message.pop_head(); try { if(message::equal_to(*header, codes::header::sender)) { handle_sender(message); } else if(message::equal_to(*header, codes::header::receiver)) { message.push_head(std::move(sender)); handle_receiver(message); } else { m_ctx->log(LL_WARNING) << "Message discarded (header part is corrupted)"; } } catch(const runtime_error_t& e) { m_ctx->log(LL_WARNING) << e.what(); } return true; }
// FIXME: if rules_reset fails, exit static int MAIL(void) { const response* resp; msg2("MAIL ", arg.s); do_reset(); if ((resp = parse_addr_arg()) == 0) { if ((resp = handle_sender(&addr, ¶ms)) == 0) resp = &resp_accepted_sender; if (number_ok(resp)) { saw_mail = 1; } } return respond(resp); }