void remote488_device::process_input_msgs() { uint8_t data; char msg_ch; while ((msg_ch = recv_update(data)) != 0) { set_connection(true); LOG("%.6f Rx %c %02x\n" , machine().time().as_double() , msg_ch , data); switch (msg_ch) { case MSG_SIGNAL_CLEAR: m_flush_bytes = false; update_signals_from_rem(0 , data); break; case MSG_SIGNAL_SET: m_flush_bytes = false; update_signals_from_rem(data , 0); break; case MSG_DATA_BYTE: if (m_flush_bytes) { LOG("Flushed\n"); } else { m_poll_timer->reset(); recvd_data_byte(data , false); return; } break; case MSG_END_BYTE: if (m_flush_bytes) { LOG("Flushed\n"); m_flush_bytes = false; } else { m_poll_timer->reset(); recvd_data_byte(data , true); return; } break; case MSG_PP_DATA: m_flush_bytes = false; m_pp_data = data; m_pp_requested = false; update_pp_dio(); break; case MSG_ECHO_REQ: send_update(MSG_ECHO_REPLY , 0); break; default: break; } } if (!m_poll_timer->enabled()) { m_poll_timer->adjust(attotime::from_usec(POLL_PERIOD_US) , 0 , attotime::from_usec(POLL_PERIOD_US)); } }
int main(int argc, char **argv) { (void)argc; (void)argv; const uint32_t net = 0x0a0a0a00; char *password; setup_test("tcpr-test", "test-filter-recovery"); password = get_password(htonl(net | 2), 8888, htonl(net | 3), 9999); fprintf(stderr, "Application: \"a\"\n"); send_segment(internal_log, net | 4, net | 2, 9999, 8888, TH_ACK, 0xbeefbead, 0xbabedeed, 0, NULL, 2, "a", password); fprintf(stderr, " Filter: update (failure)\n"); recv_update(net | 2, net | 4, 8888, 9999, 0, 0, 0, 0, 0, 0); fprintf(stderr, "Application: update\n"); send_update(net | 2, net | 4, 8888, 9999, 0xbeefbead, 0xbabedeed - 4, peer_mss, peer_ws, 0, TCPR_HAVE_ACK); fprintf(stderr, " Filter: ACK\n"); recv_segment(external_log, net | 3, net | 2, 9999, 8888, TH_ACK, 0xbeefbead + 2, 0xbabedeed - 4, 0, NULL, 0, NULL, password); fprintf(stderr, "Application: \"a\" (retransmit)\n"); send_segment(internal_log, net | 4, net | 2, 9999, 8888, TH_ACK, 0xbeefbead, 0xbabedeed, 0, NULL, 2, "a", password); recv_segment(external_log, net | 3, net | 2, 9999, 8888, TH_ACK, 0xbeefbead, 0xbabedeed - 4, 0, NULL, 2, "a", password); cleanup_connection(net | 2, net | 4, 8888, 9999, 0xbeefbead, 0xbabedeed - 4, 0); cleanup_test(); return EXIT_SUCCESS; }
int main(int argc, char **argv) { (void)argc; (void)argv; const uint32_t net = 0x0a0a0a00; char *password; setup_test("tcpr-test", "test-simultaneous-recovery"); password = get_password(htonl(net | 2), 8888, htonl(net | 3), 9999); fprintf(stderr, "Application: SYN (simultaneous recovery)\n"); send_segment(internal_log, net | 4, net | 2, 9999, 8888, TH_SYN, 0xcafebabe, 0, 0, NULL, 0, NULL, password); recv_segment(external_log, net | 3, net | 2, 9999, 8888, TH_SYN, 0xcafebabe, 0, 0, NULL, 0, NULL, password); fprintf(stderr, " Peer: ACK (answer unacceptable SYN)\n"); send_segment(external_log, net | 2, net | 3, 8888, 9999, TH_ACK, 0xdeadbeef + 5, 0xcafebabe + 1, 0, NULL, 0, NULL, password); fprintf(stderr, " Filter: update (failure)\n"); recv_update(net | 2, net | 4, 8888, 9999, 0xcafebabe + 1, 0, 0, 0, 0, 0); fprintf(stderr, "Application: update\n"); send_update(net | 2, net | 4, 8888, 9999, 0xcafebabe + 1, 0xdeadbeef + 5, 0, 0, 0, TCPR_HAVE_ACK); fprintf(stderr, " Filter: ACK\n"); recv_segment(external_log, net | 3, net | 2, 9999, 8888, TH_ACK, 0xcafebabe + 1, 0xdeadbeef + 5, 0, NULL, 0, NULL, password); fprintf(stderr, "Application: SYN (retransmit)\n"); send_segment(internal_log, net | 4, net | 2, 9999, 8888, TH_SYN, 0xcafebabe, 0, 0, NULL, 0, NULL, password); fprintf(stderr, " Filter: SYN ACK\n"); recv_segment(internal_log, net | 2, net | 4, 8888, 9999, TH_SYN | TH_ACK, 0xdeadbeef + 4, 0xcafebabe + 1, 0, NULL, 0, NULL, password); fprintf(stderr, " Filter: update\n"); recv_update(net | 2, net | 4, 8888, 9999, 0xcafebabe + 1, 0xdeadbeef + 5, 0, 0, 0, TCPR_HAVE_ACK); fprintf(stderr, "Application: ACK\n"); send_segment(internal_log, net | 4, net | 2, 9999, 8888, TH_ACK, 0xcafebabe + 1, 0xdeadbeef + 5, 0, NULL, 0, NULL, password); recv_segment(external_log, net | 3, net | 2, 9999, 8888, TH_ACK, 0xcafebabe + 1, 0xdeadbeef + 5, 0, NULL, 0, NULL, password); fprintf(stderr, "Application: update (reset)\n"); send_update(net | 2, net | 4, 8888, 9999, 0xcafebabe + 1, 0xdeadbeef + 5, 0, 0, 0, TCPR_HAVE_ACK | TCPR_TIME_WAIT); cleanup_connection(net | 2, net | 4, 8888, 9999, 0xcafebabe + 1, 0xdeadbeef + 1, 0); cleanup_test(); return EXIT_SUCCESS; }