diff options
Diffstat (limited to 'src/or/relay.c')
-rw-r--r-- | src/or/relay.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/or/relay.c b/src/or/relay.c index 6cf4b73a5f..60d439aca9 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -1194,6 +1194,25 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ, "'extend' cell received for non-zero stream. Dropping."); return 0; } + if (cell->command != CELL_RELAY_EARLY) { +#define EARLY_WARNING_INTERVAL 900 + static ratelim_t early_warning_limit = + RATELIM_INIT(EARLY_WARNING_INTERVAL); + char *m; + if (cell->command == CELL_RELAY) { + if ((m = rate_limit_log(&early_warning_limit, approx_time()))) { + /* XXXX make this a protocol_warn once we're happier with it*/ + log_fn(LOG_WARN, domain, "EXTEND cell received, " + "but not via RELAY_EARLY. Dropping.%s", m); + tor_free(m); + } + } else { + log_fn(LOG_WARN, domain, + "EXTEND cell received, in a cell with type %d! Dropping.", + cell->command); + } + return 0; + } return circuit_extend(cell, circ); case RELAY_COMMAND_EXTENDED: if (!layer_hint) { |