|
|
|
|
@ -110,6 +110,27 @@ static struct frame stream_packet(int data) {
|
|
|
|
|
CHECK(etcp_encrypt_send(p)>0); memory_pool_free(ep[0].inst.pkt_pool,p); |
|
|
|
|
CHECK(tail == head+1); struct frame f=frames[head++ % 4096]; return f; |
|
|
|
|
} |
|
|
|
|
static void data_header_validation(void) { |
|
|
|
|
setup(0); |
|
|
|
|
uint8_t data[ETCP_SESSION_HEADER_SIZE + ETCP_ACK_BASE_SIZE] = {0}; |
|
|
|
|
struct ETCP_CONN* c = ep[1].c; |
|
|
|
|
etcp_session_encode(data, ETCP_SESSION_DATA, c->peer_reset_id, c->reset_id); |
|
|
|
|
data[ETCP_SESSION_HEADER_SIZE] = ETCP_SECTION_ACK; |
|
|
|
|
CHECK(etcp_session_accept_data(c, data, sizeof(data))); |
|
|
|
|
CHECK(!etcp_session_accept_data(c, data, 0)); |
|
|
|
|
CHECK(!etcp_session_accept_data(c, data, ETCP_SESSION_HEADER_SIZE)); |
|
|
|
|
data[0] = ETCP_SECTION_ACK; |
|
|
|
|
CHECK(!etcp_session_accept_data(c, data, sizeof(data))); |
|
|
|
|
data[0] = ETCP_SESSION_DATA; |
|
|
|
|
data[ETCP_SESSION_HEADER_SIZE] = ETCP_SESSION_DATA; |
|
|
|
|
for (unsigned i = 3; i < 1024; i++) CHECK(!etcp_session_accept_data(c, data, sizeof(data))); |
|
|
|
|
CHECK(c->session_data_errors == 1024); |
|
|
|
|
data[ETCP_SESSION_HEADER_SIZE] = ETCP_SECTION_ACK; |
|
|
|
|
CHECK(etcp_session_accept_data(c, data, sizeof(data))); |
|
|
|
|
CHECK(c->session_data_errors == 1024 && c->initialized && !c->reinit_pending); |
|
|
|
|
teardown(); |
|
|
|
|
puts("PASS session DATA header validation and rejection counter"); |
|
|
|
|
} |
|
|
|
|
static void timestamp_boundaries(void) { |
|
|
|
|
setup(0); |
|
|
|
|
struct ETCP_LINK* link = &ep[0].links[0]; |
|
|
|
|
@ -161,6 +182,7 @@ int main(void) {
|
|
|
|
|
const char* log=getenv("SESSION_TEST_LOG"); |
|
|
|
|
if (log) { debug_enable_file_output(log,1); debug_set_category_level(DEBUG_CATEGORY_ETCP,DEBUG_LEVEL_DEBUG); } |
|
|
|
|
size_t baseline=u_get_allocated_count(); |
|
|
|
|
data_header_validation(); CHECK(u_get_allocated_count() == baseline); |
|
|
|
|
timestamp_boundaries(); CHECK(u_get_allocated_count() == baseline); |
|
|
|
|
receive_window_case(0); CHECK(u_get_allocated_count() == baseline); |
|
|
|
|
receive_window_case(1); CHECK(u_get_allocated_count() == baseline); |
|
|
|
|
|