static err_t test_tcp_recv_expectclose(void* arg, struct tcp_pcb* pcb, struct pbuf* p, err_t err) { EXPECT_RETX(pcb != NULL, ERR_OK); EXPECT_RETX(err == ERR_OK, ERR_OK); LWIP_UNUSED_ARG(arg); if (p != NULL) { fail(); } else { /* correct: FIN received; close our end, too */ err_t err2 = tcp_close(pcb); fail_unless(err2 == ERR_OK); /* set back to some other rx function, just to not get here again */ tcp_recv(pcb, test_tcp_recv_expect1byte); } return ERR_OK; }
static err_t test_tcp_recv_expect1byte(void* arg, struct tcp_pcb* pcb, struct pbuf* p, err_t err) { EXPECT_RETX(pcb != NULL, ERR_OK); EXPECT_RETX(err == ERR_OK, ERR_OK); LWIP_UNUSED_ARG(arg); if (p != NULL) { if ((p->len == 1) && (p->tot_len == 1)) { tcp_recv(pcb, test_tcp_recv_expectclose); } else { fail(); } pbuf_free(p); } else { fail(); } return ERR_OK; }
err_t test_tcp_counters_recv(void* arg, struct tcp_pcb* pcb, struct pbuf* p, err_t err) { struct test_tcp_counters* counters = (struct test_tcp_counters*)arg; EXPECT_RETX(arg != NULL, ERR_OK); EXPECT_RETX(pcb != NULL, ERR_OK); EXPECT_RETX(err == ERR_OK, ERR_OK); if (p != NULL) { if (counters->close_calls == 0) { counters->recv_calls++; test_tcp_counters_check_rxdata(counters, p); counters->recved_bytes += p->tot_len; } else { counters->recv_calls_after_close++; counters->recved_bytes_after_close += p->tot_len; } pbuf_free(p); } else { counters->close_calls++; } EXPECT(counters->recv_calls_after_close == 0 && counters->recved_bytes_after_close == 0); return ERR_OK; }