Lines Matching defs:conn
229 lwip_tcp_conn_report(lwiperf_state_tcp_t *conn, enum lwiperf_report_type report_type)
231 if ((conn != NULL) && (conn->report_fn != NULL)) {
234 duration_ms = now - conn->time_started;
238 bandwidth_kbitpsec = (conn->bytes_transferred / duration_ms) * 8U;
240 conn->report_fn(conn->report_arg, report_type,
241 &conn->conn_pcb->local_ip, conn->conn_pcb->local_port,
242 &conn->conn_pcb->remote_ip, conn->conn_pcb->remote_port,
243 conn->bytes_transferred, duration_ms, bandwidth_kbitpsec);
249 lwiperf_tcp_close(lwiperf_state_tcp_t *conn, enum lwiperf_report_type report_type)
253 lwiperf_list_remove(&conn->base);
254 lwip_tcp_conn_report(conn, report_type);
255 if (conn->conn_pcb != NULL) {
256 tcp_arg(conn->conn_pcb, NULL);
257 tcp_poll(conn->conn_pcb, NULL, 0);
258 tcp_sent(conn->conn_pcb, NULL);
259 tcp_recv(conn->conn_pcb, NULL);
260 tcp_err(conn->conn_pcb, NULL);
261 err = tcp_close(conn->conn_pcb);
264 tcp_abort(conn->conn_pcb);
267 /* no conn pcb, this is the listener pcb */
268 err = tcp_close(conn->server_pcb);
271 LWIPERF_FREE(lwiperf_state_tcp_t, conn);
276 lwiperf_tcp_client_send_more(lwiperf_state_tcp_t *conn)
285 LWIP_ASSERT("conn invalid", (conn != NULL) && conn->base.tcp && (conn->base.server == 0));
289 if (conn->settings.amount & PP_HTONL(0x80000000)) {
292 u32_t diff_ms = now - conn->time_started;
293 u32_t time = (u32_t) - (s32_t)lwip_htonl(conn->settings.amount);
297 lwiperf_tcp_close(conn, LWIPERF_TCP_DONE_CLIENT);
302 u32_t amount_bytes = lwip_htonl(conn->settings.amount);
304 if (amount_bytes >= conn->bytes_transferred) {
306 lwiperf_tcp_close(conn, LWIPERF_TCP_DONE_CLIENT);
311 if (conn->bytes_transferred < 24) {
313 txptr = &((u8_t *)&conn->settings)[conn->bytes_transferred];
314 txlen_max = (u16_t)(24 - conn->bytes_transferred);
316 } else if (conn->bytes_transferred < 48) {
318 txptr = &((u8_t *)&conn->settings)[conn->bytes_transferred - 24];
319 txlen_max = (u16_t)(48 - conn->bytes_transferred);
325 txptr = LWIP_CONST_CAST(void *, &lwiperf_txbuf_const[conn->bytes_transferred % 10]);
327 if (conn->bytes_transferred == 48) { /* @todo: fix this for intermediate settings, too */
335 err = tcp_write(conn->conn_pcb, txptr, txlen, apiflags);
342 conn->bytes_transferred += txlen;
348 tcp_output(conn->conn_pcb);
356 lwiperf_state_tcp_t *conn = (lwiperf_state_tcp_t *)arg;
358 LWIP_ASSERT("invalid conn", conn->conn_pcb == tpcb);
362 conn->poll_count = 0;
364 return lwiperf_tcp_client_send_more(conn);
371 lwiperf_state_tcp_t *conn = (lwiperf_state_tcp_t *)arg;
372 LWIP_ASSERT("invalid conn", conn->conn_pcb == tpcb);
375 lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_REMOTE);
378 conn->poll_count = 0;
379 conn->time_started = sys_now();
380 return lwiperf_tcp_client_send_more(conn);
439 lwiperf_tx_start_passive(lwiperf_state_tcp_t *conn)
443 u16_t remote_port = (u16_t)lwip_htonl(conn->settings.remote_port);
445 ret = lwiperf_tx_start_impl(&conn->conn_pcb->remote_ip, remote_port, &conn->settings, conn->report_fn, conn->report_arg,
446 conn->base.related_master_state, &new_conn);
462 lwiperf_state_tcp_t *conn = (lwiperf_state_tcp_t *)arg;
464 LWIP_ASSERT("pcb mismatch", conn->conn_pcb == tpcb);
468 lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_REMOTE);
473 if (conn->settings.flags & PP_HTONL(LWIPERF_FLAGS_ANSWER_TEST)) {
474 if ((conn->settings.flags & PP_HTONL(LWIPERF_FLAGS_ANSWER_NOW)) == 0) {
476 lwiperf_tx_start_passive(conn);
479 lwiperf_tcp_close(conn, LWIPERF_TCP_DONE_SERVER);
484 conn->poll_count = 0;
486 if ((!conn->have_settings_buf) || ((conn->bytes_transferred - 24) % (1024 * 128) == 0)) {
489 lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_LOCAL_DATAERROR);
493 if (!conn->have_settings_buf) {
494 if (pbuf_copy_partial(p, &conn->settings, sizeof(lwiperf_settings_t), 0) != sizeof(lwiperf_settings_t)) {
495 lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_LOCAL);
499 conn->have_settings_buf = 1;
500 if (conn->settings.flags & PP_HTONL(LWIPERF_FLAGS_ANSWER_TEST)) {
501 if (conn->settings.flags & PP_HTONL(LWIPERF_FLAGS_ANSWER_NOW)) {
503 err_t err2 = lwiperf_tx_start_passive(conn);
505 lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_LOCAL_TXERROR);
512 if (conn->settings.flags & PP_HTONL(LWIPERF_FLAGS_ANSWER_TEST)) {
513 if (pbuf_memcmp(p, 0, &conn->settings, sizeof(lwiperf_settings_t)) != 0) {
514 lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_LOCAL_DATAERROR);
520 conn->bytes_transferred += sizeof(lwiperf_settings_t);
521 if (conn->bytes_transferred <= 24) {
522 conn->time_started = sys_now();
527 conn->next_num = 4; /* 24 bytes received... */
541 if (num == conn->next_num) {
542 conn->next_num++;
543 if (conn->next_num == 10) {
544 conn->next_num = 0;
547 lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_LOCAL_DATAERROR);
556 conn->bytes_transferred += packet_idx;
566 lwiperf_state_tcp_t *conn = (lwiperf_state_tcp_t *)arg;
568 lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_REMOTE);
575 lwiperf_state_tcp_t *conn = (lwiperf_state_tcp_t *)arg;
576 LWIP_ASSERT("pcb mismatch", conn->conn_pcb == tpcb);
578 if (++conn->poll_count >= LWIPERF_TCP_MAX_IDLE_SEC) {
579 lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_LOCAL);
580 return ERR_OK; /* lwiperf_tcp_close frees conn */
583 if (!conn->base.server) {
584 lwiperf_tcp_client_send_more(conn);
594 lwiperf_state_tcp_t *s, *conn;
602 LWIP_ASSERT("invalid conn pcb", s->conn_pcb == NULL);
613 conn = (lwiperf_state_tcp_t *)LWIPERF_ALLOC(lwiperf_state_tcp_t);
614 if (conn == NULL) {
617 memset(conn, 0, sizeof(lwiperf_state_tcp_t));
618 conn->base.tcp = 1;
619 conn->base.server = 1;
620 conn->base.related_master_state = &s->base;
621 conn->conn_pcb = newpcb;
622 conn->time_started = sys_now();
623 conn->report_fn = s->report_fn;
624 conn->report_arg = s->report_arg;
627 tcp_arg(newpcb, conn);
630 tcp_err(conn->conn_pcb, lwiperf_tcp_err);
634 conn->base.related_master_state = s->base.related_master_state;
642 lwiperf_list_add(&conn->base);