/* Run the given packet event; send any error or warning back to the client. */ static int wire_server_run_packet_event( struct wire_server *wire_server, struct event *event, struct packet *packet, char **error) { int result = STATUS_OK; result = run_packet_event(wire_server->state, event, packet, error); if (result == STATUS_ERR) { /* When we sniff an incorrect packet, don't exit the * process (we're a daemon), just return the error * message via the TCP socket and finish the thread. */ DEBUGP("wire_server_run_packet_event: error!\n"); if (wire_server_send_packets_done(wire_server, STATUS_ERR, *error)) return STATUS_ERR; } else if (result == STATUS_WARN) { /* A non-fatal problem with the packet. Return the * warning message via the TCP socket and keep going. */ DEBUGP("wire_server_run_packet_event: warning!\n"); if (wire_server_send_packet_warning(wire_server, *error)) return STATUS_ERR; } return result; }
/* Run the given packet event; print warnings/errors, and exit on error. */ static void run_local_packet_event(struct state *state, struct event *event, struct packet *packet) { char *error = NULL; int result = STATUS_OK; result = run_packet_event(state, event, packet, &error); if (result == STATUS_WARN) { fprintf(stderr, "%s", error); free(error); } else if (result == STATUS_ERR) { state_free(state); die("%s\n", error); } }