示例#1
0
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));
	}
}
示例#2
0
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;
}