예제 #1
0
파일: main.c 프로젝트: hagna/generichid_nh
int main(int argc, char *argv[])
{
    unsigned long filter_mask = 0;
    sigset_t mask;

    mainloop_init();

    for (;;) {
        int opt;

        opt = getopt_long(argc, argv, "b:vh", main_options, NULL);
        if (opt < 0)
            break;

        switch (opt) {
        case 'b':
            btsnoop_open(optarg);
            break;
        case 'v':
            printf("%s\n", VERSION);
            return EXIT_SUCCESS;
        case 'h':
            usage();
            return EXIT_SUCCESS;
        default:
            return EXIT_FAILURE;
        }
    }

    sigemptyset(&mask);
    sigaddset(&mask, SIGINT);
    sigaddset(&mask, SIGTERM);

    mainloop_set_signal(&mask, signal_callback, NULL, NULL);

    filter_mask |= PACKET_FILTER_SHOW_INDEX;
    filter_mask |= PACKET_FILTER_SHOW_TIME;
    filter_mask |= PACKET_FILTER_SHOW_ACL_DATA;

    packet_set_filter(filter_mask);

    printf("Bluetooth monitor ver %s\n", VERSION);

    if (control_tracing() < 0) {
        if (hcidump_tracing() < 0)
            return EXIT_FAILURE;
    }

    return mainloop_run();
}
예제 #2
0
파일: control.c 프로젝트: ghent360/bluez
int control_tracing(void)
{
	packet_add_filter(PACKET_FILTER_SHOW_INDEX);

	if (server_fd >= 0)
		return 0;

	if (open_channel(HCI_CHANNEL_MONITOR) < 0) {
		if (!hcidump_fallback)
			return -1;
		if (hcidump_tracing() < 0)
			return -1;
		return 0;
	}

	open_channel(HCI_CHANNEL_CONTROL);

	return 0;
}