/* Search and connect * Returns: * -1 - critical error (exit persist mode) * 1 - non critical error * 0 - success */ static int do_connect(void) { inquiry_info *ii; int reconnect = 0; int i, n, r = 0; do { if (reconnect) sleep(persist); reconnect = 1; if (cache.valid > 0) { /* Use cached bdaddr */ r = create_connection(cache.dst, &cache.bdaddr); if (r < 0) { terminate = 1; break; } continue; } syslog(LOG_INFO, "Inquiring"); /* FIXME: Should we use non general LAP here ? */ ii = NULL; n = hci_inquiry(src_dev, search_duration, 10, NULL, &ii, 0); if (n < 0) { syslog(LOG_ERR, "Inquiry failed. %s(%d)", strerror(errno), errno); continue; } for (i = 0; i < n; i++) { char dst[40]; ba2str(&ii[i].bdaddr, dst); if (use_sdp) { syslog(LOG_INFO, "Searching for %s on %s", bnep_svc2str(service), dst); if (bnep_sdp_search(&src_addr, &ii[i].bdaddr, service) <= 0) continue; } r = create_connection(dst, &ii[i].bdaddr); if (r < 0) { terminate = 1; break; } } free(ii); } while (!terminate && persist); return r; }
int bnep_show_connections(void) { struct bnep_connlist_req req; struct bnep_conninfo ci[48]; int i; req.cnum = 48; req.ci = ci; if (ioctl(ctl, bnepgetconnlist, &req)) { perror("Failed to get connection list"); return -1; } for (i=0; i < req.cnum; i++) { printf("%s %s %s\n", ci[i].device, batostr((bdaddr_t *) ci[i].dst), bnep_svc2str(ci[i].role)); } return 0; }