From b15362b6534debb8098d797cf4a847599b03228d Mon Sep 17 00:00:00 2001 From: Claudiu Olteanu Date: Sun, 4 Aug 2013 18:19:43 +0000 Subject: Extending the testcases to use bluetooth --- src/transport/Makefile.am | 79 +++++++++- src/transport/gnunet-helper-transport-bluetooth.c | 168 +++++++++------------ src/transport/plugin_transport_bluetooth.c | 22 +++ ...uota_compliance_bluetooth_asymmetric_peer1.conf | 30 ++++ ...uota_compliance_bluetooth_asymmetric_peer2.conf | 29 ++++ .../test_quota_compliance_bluetooth_peer1.conf | 30 ++++ .../test_quota_compliance_bluetooth_peer2.conf | 29 ++++ .../test_transport_api_bluetooth_peer1.conf | 35 +++++ .../test_transport_api_bluetooth_peer2.conf | 34 +++++ ..._transport_api_reliability_bluetooth_peer1.conf | 30 ++++ ..._transport_api_reliability_bluetooth_peer2.conf | 29 ++++ ...ransport_api_unreliability_bluetooth_peer1.conf | 30 ++++ ...ransport_api_unreliability_bluetooth_peer2.conf | 29 ++++ 13 files changed, 476 insertions(+), 98 deletions(-) create mode 100644 src/transport/test_quota_compliance_bluetooth_asymmetric_peer1.conf create mode 100644 src/transport/test_quota_compliance_bluetooth_asymmetric_peer2.conf create mode 100644 src/transport/test_quota_compliance_bluetooth_peer1.conf create mode 100644 src/transport/test_quota_compliance_bluetooth_peer2.conf create mode 100644 src/transport/test_transport_api_bluetooth_peer1.conf create mode 100644 src/transport/test_transport_api_bluetooth_peer2.conf create mode 100644 src/transport/test_transport_api_reliability_bluetooth_peer1.conf create mode 100644 src/transport/test_transport_api_reliability_bluetooth_peer2.conf create mode 100644 src/transport/test_transport_api_unreliability_bluetooth_peer1.conf create mode 100644 src/transport/test_transport_api_unreliability_bluetooth_peer2.conf (limited to 'src') diff --git a/src/transport/Makefile.am b/src/transport/Makefile.am index 4524f9897..358eba98b 100644 --- a/src/transport/Makefile.am +++ b/src/transport/Makefile.am @@ -71,6 +71,12 @@ if HAVE_LIBBLUETOOTH AM_LDFLAGS = -lbluetooth BT_BIN = gnunet-helper-transport-bluetooth BT_PLUGIN_LA = libgnunet_plugin_transport_bluetooth.la + BT_PLUGIN_TEST = test_plugin_bluetooth + BT_API_TEST = test_transport_api_bluetooth + BT_REL_TEST = test_transport_api_reliability_bluetooth + BT_UREL_TEST = test_transport_api_unreliability_bluetooth + BT_QUOTA_TEST = test_quota_compliance_bluetooth \ + test_quota_compliance_bluetooth_asymmetric endif endif @@ -355,6 +361,7 @@ check_PROGRAMS = \ test_plugin_udp \ $(UNIX_TEST) \ $(WLAN_PLUGIN_TEST) \ + $(BT_PLUGIN_TEST) \ test_http_common \ $(HTTP_CLIENT_PLUGIN_TEST) \ $(HTTPS_CLIENT_PLUGIN_TEST) \ @@ -380,6 +387,7 @@ check_PROGRAMS = \ $(HTTPS_API_TEST) \ $(HTTPS_API_TIMEOUT_TEST) \ $(WLAN_API_TEST) \ + $(BT_API_TEST) \ test_transport_api_multi \ test_transport_blacklisting_no_bl \ test_transport_blacklisting_outbound_bl_full \ @@ -399,13 +407,16 @@ check_PROGRAMS = \ $(HTTPS_REL_TEST) \ $(WLAN_REL_TEST) \ $(WLAN_UREL_TEST) \ + $(BT_REL_TEST) \ + $(BT_UREL_TEST) \ test_quota_compliance_tcp \ test_quota_compliance_tcp_asymmetric \ test_quota_compliance_udp \ $(UNIX_QUOTA_TEST) \ $(HTTP_QUOTA_TEST) \ $(HTTPS_QUOTA_TEST) \ - $(WLAN_QUOTA_TEST) + $(WLAN_QUOTA_TEST) \ + $(BT_QUOTA_TEST) endif if ENABLE_TEST_RUN @@ -418,6 +429,7 @@ TESTS = \ test_plugin_udp \ $(UNIX_TEST) \ $(WLAN_PLUGIN_TEST) \ + $(BT_PLUGIN_TEST) \ test_transport_api_blacklisting \ test_transport_api_disconnect_tcp \ test_transport_api_bidirectional_connect \ @@ -437,6 +449,7 @@ TESTS = \ $(HTTPS_API_TEST) \ $(HTTPS_API_TIMEOUT_TEST) \ $(WLAN_API_TEST) \ + $(BT_API_TEST) \ test_transport_api_multi \ test_transport_blacklisting_no_bl \ test_transport_blacklisting_outbound_bl_full \ @@ -456,6 +469,8 @@ TESTS = \ $(HTTPS_REL_TEST) \ $(WLAN_REL_TEST) \ $(WLAN_UREL_TEST) \ + $(BT_REL_TEST) \ + $(BT_UREL_TEST) \ test_quota_compliance_tcp \ test_quota_compliance_tcp_asymmetric \ test_quota_compliance_udp \ @@ -606,6 +621,14 @@ test_plugin_wlan_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ $(top_builddir)/src/transport/libgnunettransporttesting.la +test_plugin_bluetooth_SOURCES = \ + test_plugin_transport.c +test_plugin_bluetooth_LDADD = \ + $(top_builddir)/src/transport/libgnunettransport.la \ + $(top_builddir)/src/statistics/libgnunetstatistics.la \ + $(top_builddir)/src/hello/libgnunethello.la \ + $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/transport/libgnunettransporttesting.la test_http_common_SOURCES = \ test_http_common.c plugin_transport_http_common.c @@ -763,6 +786,14 @@ test_transport_api_reliability_tcp_nat_LDADD = \ test_transport_api_reliability_wlan_SOURCES = \ test_transport_api_reliability.c test_transport_api_reliability_wlan_LDADD = \ + $(top_builddir)/src/transport/libgnunettransport.la \ + $(top_builddir)/src/hello/libgnunethello.la \ + $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/transport/libgnunettransporttesting.la + +test_transport_api_reliability_bluetooth_SOURCES = \ + test_transport_api_reliability.c +test_transport_api_reliability_bluetooth_LDADD = \ $(top_builddir)/src/transport/libgnunettransport.la \ $(top_builddir)/src/hello/libgnunethello.la \ $(top_builddir)/src/util/libgnunetutil.la \ @@ -776,6 +807,14 @@ test_transport_api_unreliability_wlan_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ $(top_builddir)/src/transport/libgnunettransporttesting.la +test_transport_api_unreliability_bluetooth_SOURCES = \ + test_transport_api_unreliability.c +test_transport_api_unreliability_bluetooth_LDADD = \ + $(top_builddir)/src/transport/libgnunettransport.la \ + $(top_builddir)/src/hello/libgnunethello.la \ + $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/transport/libgnunettransporttesting.la + test_transport_api_udp_SOURCES = \ test_transport_api.c test_transport_api_udp_LDADD = \ @@ -933,6 +972,18 @@ test_transport_api_wlan_LDADD = \ $(top_builddir)/src/transport/libgnunettransporttesting.la endif +if LINUX +if HAVE_LIBBLUETOOTH +test_transport_api_bluetooth_SOURCES = \ + test_transport_api.c +test_transport_api_bluetooth_LDADD = \ + $(top_builddir)/src/transport/libgnunettransport.la \ + $(top_builddir)/src/hello/libgnunethello.la \ + $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/transport/libgnunettransporttesting.la +endif +endif + test_quota_compliance_tcp_SOURCES = \ test_quota_compliance.c test_quota_compliance_tcp_LDADD = \ @@ -989,6 +1040,22 @@ test_quota_compliance_wlan_asymmetric_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ $(top_builddir)/src/transport/libgnunettransporttesting.la +test_quota_compliance_bluetooth_SOURCES = \ + test_quota_compliance.c +test_quota_compliance_bluetooth_LDADD = \ + $(top_builddir)/src/transport/libgnunettransport.la \ + $(top_builddir)/src/hello/libgnunethello.la \ + $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/transport/libgnunettransporttesting.la + +test_quota_compliance_bluetooth_asymmetric_SOURCES = \ + test_quota_compliance.c +test_quota_compliance_bluetooth_asymmetric_LDADD = \ + $(top_builddir)/src/transport/libgnunettransport.la \ + $(top_builddir)/src/hello/libgnunethello.la \ + $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/transport/libgnunettransporttesting.la + test_transport_api_multi_SOURCES = \ test_transport_api.c test_transport_api_multi_LDADD = \ @@ -1018,6 +1085,8 @@ test_quota_compliance_unix_peer1.conf\ test_quota_compliance_unix_peer2.conf\ test_quota_compliance_wlan_peer1.conf\ test_quota_compliance_wlan_peer2.conf\ +test_quota_compliance_bluetooth_peer1.conf\ +test_quota_compliance_bluetooth_peer2.conf\ test_quota_compliance_http_asymmetric_peer1.conf\ test_quota_compliance_http_asymmetric_peer2.conf\ test_quota_compliance_https_asymmetric_peer1.conf\ @@ -1028,6 +1097,8 @@ test_quota_compliance_unix_asymmetric_peer1.conf\ test_quota_compliance_unix_asymmetric_peer2.conf\ test_quota_compliance_wlan_asymmetric_peer1.conf\ test_quota_compliance_wlan_asymmetric_peer2.conf\ +test_quota_compliance_bluetooth_asymmetric_peer1.conf\ +test_quota_compliance_bluetooth_asymmetric_peer2.conf\ test_transport_api_data.conf\ test_transport_api_http_peer1.conf\ test_transport_api_http_peer2.conf\ @@ -1049,6 +1120,8 @@ test_transport_api_reliability_tcp_peer1.conf\ test_transport_api_reliability_tcp_peer2.conf\ test_transport_api_reliability_wlan_peer1.conf\ test_transport_api_reliability_wlan_peer2.conf\ +test_transport_api_reliability_bluetooth_peer1.conf\ +test_transport_api_reliability_bluetooth_peer2.conf\ test_transport_api_bidirectional_connect_peer1.conf\ test_transport_api_bidirectional_connect_peer2.conf\ test_transport_api_manipulation_send_tcp_peer1.conf\ @@ -1077,8 +1150,12 @@ test_transport_api_unreliability_unix_peer1.conf\ test_transport_api_unreliability_unix_peer2.conf\ test_transport_api_unreliability_wlan_peer1.conf\ test_transport_api_unreliability_wlan_peer2.conf\ +test_transport_api_unreliability_bluetooth_peer1.conf\ +test_transport_api_unreliability_bluetooth_peer2.conf\ test_transport_api_wlan_peer1.conf\ test_transport_api_wlan_peer2.conf\ +test_transport_api_bluetooth_peer1.conf\ +test_transport_api_bluetooth_peer2.conf\ test_transport_defaults.conf\ test_transport_startonly.conf\ test_transport_api_disconnect_tcp_peer1.conf\ diff --git a/src/transport/gnunet-helper-transport-bluetooth.c b/src/transport/gnunet-helper-transport-bluetooth.c index 48e63dd75..1f5add92d 100644 --- a/src/transport/gnunet-helper-transport-bluetooth.c +++ b/src/transport/gnunet-helper-transport-bluetooth.c @@ -54,9 +54,9 @@ /** - * Maximum number of loops without inquiring for a new devices. + * Maximum number of loops without inquiring for new devices. */ -#define MAX_LOOPS 3 +#define MAX_LOOPS 5 /** * struct for storing the information of the hardware. There is only @@ -285,7 +285,7 @@ mst_receive (struct MessageStreamTokenizer *mst, do_align: if (mst->pos < mst->off) { - fprintf (stderr, "We processed too many bytes!\n"); + //fprintf (stderr, "We processed too many bytes!\n"); return GNUNET_SYSERR; } if ((mst->curr_buf - mst->off < sizeof (struct GNUNET_MessageHeader)) || @@ -696,7 +696,7 @@ static int get_channel(struct HardwareInfos *dev, bdaddr_t dest) { /** - * 1. detect all nearby devices //FIXME : Connect directly to the device with the service + * 1. detect all nearby devices * 2. for each device: * 2.1. connect to the SDP server running * 2.2. get a list of service records with the specific UUID @@ -803,7 +803,7 @@ read_from_the_socket (int sock, memset (ri, 0, sizeof (*ri)); ri->ri_channel = rc_addr.rc_channel; - /* detect CRC32 at the end */ + /* Detect CRC32 at the end */ if (0 == check_crc_buf_osdep (tmpbuf, count - sizeof (uint32_t))) { count -= sizeof(uint32_t); @@ -822,25 +822,13 @@ read_from_the_socket (int sock, */ static int open_device (struct HardwareInfos *dev) -{ - /** - * 1. Open a HCI socket (if RFCOMM protocol is used. If not, the HCI socket is - * saved in dev->rfcomm). - * 2. Find the device id (request a list with all the devices and find the one - * with the dev->iface name) - * 3. If the interface is down try to get it up - * 4. Bind the RFCOMM socket to the interface using the bind_socket() method and register - * a SDP service - * 5. For now use a hard coded port number(channel) value - * FIXME : if I use HCI sockets , should I enable RAW_SOCKET MODE?!?!?! - */ - +{ int i, dev_id = -1, fd_hci; struct { struct hci_dev_list_req list; struct hci_dev_req dev[HCI_MAX_DEV]; - } request; //used for detecting the local devices + } request; //used for detecting the local devices struct sockaddr_rc rc_addr = { 0 }; //used for binding /* Initialize the neighbour structure */ @@ -848,6 +836,7 @@ open_device (struct HardwareInfos *dev) for (i = 0; i < MAX_PORTS; i++) neighbours.fds[i] = -1; + /* Open a HCI socket */ fd_hci = socket (AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI); if (fd_hci < 0) @@ -888,14 +877,13 @@ open_device (struct HardwareInfos *dev) dev_id = dev_info.dev_id; //the device was found /** * Copy the MAC address to the device structure - * FIXME: probably this is not the best solution */ memcpy (&dev->pl_mac, &dev_info.bdaddr, sizeof (bdaddr_t)); /* Check if the interface is UP */ if (hci_test_bit (HCI_UP, (void *) &dev_info.flags) == 0) { - /* Bring interface up */ //FIXME should I check if is HCI_RUNNING ?!?!??! + /* Bring interface up */ if (ioctl (fd_hci, HCIDEVUP, dev_info.dev_id)) { fprintf (stderr, "ioctl(HCIDEVUP) on interface `%.*s' failed: %s\n", @@ -923,10 +911,6 @@ open_device (struct HardwareInfos *dev) } } - - //FIXME : Sniff mode!?! - //FIXME : RAW MODE?!? - break; } @@ -969,7 +953,7 @@ open_device (struct HardwareInfos *dev) { fprintf (stderr, "Failed to listen on socket for interface `%.*s': %s\n", IFNAMSIZ, dev->iface, strerror (errno)); - return 3; + return 1; } @@ -1112,8 +1096,8 @@ send_broadcast (struct HardwareInfos *dev, int *sendsocket) inquiry_devices: //skip the conditions and force a inquiry for new devices { /** - * It means that I sent HELLO message to all the devices from the list so I should search - * for another devices or that this is the first time when I do a search for devices. + * It means that I sent HELLO messages to all the devices from the list and I should search + * for another ones or that this is the first time when I do a search. */ inquiry_info *devices = NULL; int i, responses, max_responses = MAX_PORTS; @@ -1121,7 +1105,7 @@ send_broadcast (struct HardwareInfos *dev, int *sendsocket) /* sanity checks */ if (neighbours.size >= MAX_PORTS) { - fprintf (stderr, "%s reached the top limit for the discovarable devices\n", dev->iface); + fprintf (stderr, "%.*s reached the top limit for the discovarable devices\n", IFNAMSIZ, dev->iface); return 2; } @@ -1134,7 +1118,7 @@ send_broadcast (struct HardwareInfos *dev, int *sendsocket) neighbours.dev_id = hci_devid (addr); if (neighbours.dev_id < 0) { - fprintf (stderr, "Failed to get the device id for interface %s : %s\n", + fprintf (stderr, "Failed to get the device id for interface %.*s : %s\n", IFNAMSIZ, dev->iface, strerror (errno)); return 1; } @@ -1143,7 +1127,7 @@ send_broadcast (struct HardwareInfos *dev, int *sendsocket) devices = malloc (max_responses * sizeof (inquiry_info)); if (devices == NULL) { - fprintf (stderr, "Failed to allocate memory for inquiry info list on interface %s\n", + fprintf (stderr, "Failed to allocate memory for inquiry info list on interface %.*s\n", IFNAMSIZ, dev->iface); return 1; } @@ -1151,15 +1135,15 @@ send_broadcast (struct HardwareInfos *dev, int *sendsocket) responses = hci_inquiry (neighbours.dev_id, 8, max_responses, NULL, &devices, IREQ_CACHE_FLUSH); if (responses < 0) { - fprintf (stderr, "Failed to inquiry on interface %s\n", dev->iface); + fprintf (stderr, "Failed to inquiry on interface %.*s\n", IFNAMSIZ, dev->iface); return 1; } - fprintf (stderr, "Found %d devices\n", responses); //FIXME delete it after debugging stage + fprintf (stderr, "LOG : Found %d devices\n", responses); //FIXME delete it after debugging stage if (responses == 0) { - fprintf (stderr, "No devices discoverable\n"); + fprintf (stderr, "LOG : No devices discoverable\n"); return 1; } @@ -1171,7 +1155,8 @@ send_broadcast (struct HardwareInfos *dev, int *sendsocket) /* sanity check */ if (i >= MAX_PORTS) { - fprintf (stderr, "%s reached the top limit for the discoverable devices (after inquiry)\n", dev->iface); + fprintf (stderr, "%.*s reached the top limit for the discoverable devices (after inquiry)\n", IFNAMSIZ, + dev->iface); return 2; } @@ -1181,7 +1166,7 @@ send_broadcast (struct HardwareInfos *dev, int *sendsocket) if (memcmp (&(devices + i)->bdaddr, &(neighbours.devices[j]), sizeof (bdaddr_t)) == 0) { found = 1; - fprintf (stderr, "the device already exists on the list\n"); //FIXME debugging message + fprintf (stderr, "LOG : the device already exists on the list\n"); //FIXME debugging message break; } } @@ -1191,7 +1176,7 @@ send_broadcast (struct HardwareInfos *dev, int *sendsocket) char addr[19] = { 0 }; ba2str (&(devices +i)->bdaddr, addr); - fprintf (stderr, "%s was added to the list\n", addr); //FIXME debugging message + fprintf (stderr, "LOG : %s was added to the list\n", addr); //FIXME debugging message memcpy (&(neighbours.devices[neighbours.size++]), &(devices + i)->bdaddr, sizeof (bdaddr_t)); } } @@ -1218,14 +1203,14 @@ send_broadcast (struct HardwareInfos *dev, int *sendsocket) addr_rc.rc_channel = get_channel (dev, addr_rc.rc_bdaddr); *sendsocket = socket (AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM); - + //TODO adauga un label aici si intoarcete de cateva ori daca nu reuseste if (connect (*sendsocket, (struct sockaddr *)&addr_rc, sizeof (addr_rc)) == 0) { neighbours.fds[neighbours.pos++] = *sendsocket; connection_successful = 1; char addr[19] = { 0 }; ba2str (&(neighbours.devices[neighbours.pos - 1]), addr); - fprintf (stderr, "Connected to %s\n", addr); + fprintf (stderr, "LOG : Connected to %s\n", addr); break; } @@ -1234,10 +1219,10 @@ send_broadcast (struct HardwareInfos *dev, int *sendsocket) char addr[19] = { 0 }; errno_copy = errno; //Save a copy for later ba2str (&(neighbours.devices[neighbours.pos]), addr); - fprintf (stderr, "Couldn't connect on device %s, error : %s\n", addr, strerror(errno)); + fprintf (stderr, "LOG : Couldn't connect on device %s, error : %s\n", addr, strerror(errno)); if (errno != ECONNREFUSED) //FIXME nu merge! { - fprintf (stderr, "Removes %d device from the list\n", neighbours.pos); + fprintf (stderr, "LOG : Removes %d device from the list\n", neighbours.pos); /* Remove the device from the list */ memcpy (&neighbours.devices[neighbours.pos], &neighbours.devices[neighbours.size - 1], sizeof (bdaddr_t)); memset (&neighbours.devices[neighbours.size - 1], 0, sizeof (bdaddr_t)); @@ -1259,7 +1244,7 @@ send_broadcast (struct HardwareInfos *dev, int *sendsocket) } else { - fprintf (stderr, "Search for a new device\n"); //FIXME debugging message + fprintf (stderr, "LOG : Search for a new device\n"); //FIXME debugging message neighbours.pos += 1; } } @@ -1272,7 +1257,7 @@ send_broadcast (struct HardwareInfos *dev, int *sendsocket) if (searching_devices_count == MAX_LOOPS) { - fprintf (stderr, "Force to inquiry for new devices\n"); + fprintf (stderr, "LOG : Force to inquiry for new devices\n"); searching_devices_count = 0; goto inquiry_devices; } @@ -1290,7 +1275,7 @@ send_broadcast (struct HardwareInfos *dev, int *sendsocket) { if (errno_copy == ECONNREFUSED) { - fprintf (stderr, "No device found. Go back and search again\n"); //FIXME debugging message + fprintf (stderr, "LOG : No device found. Go back and search again\n"); //FIXME debugging message new_device = 1; loops += 1; goto search_for_devices; @@ -1443,27 +1428,23 @@ main (int argc, char *argv[]) FD_ZERO (&rfds); if ((0 == write_pout.size) && (1 == stdin_open)) { - // fprintf (stderr, "LOG : %s adds STDIN to rfds\n", dev.iface); //FIXME: debugging message FD_SET (STDIN_FILENO, &rfds); maxfd = MAX (maxfd, STDIN_FILENO); } if (0 == write_std.size) { - // fprintf (stderr, "LOG : %s adds fd_rfcomm to rfds\n", dev.iface); //FIXME: debugging message FD_SET (dev.fd_rfcomm, &rfds); maxfd = MAX (maxfd, dev.fd_rfcomm); } for (i = 0; i < crt_rfds; i++) // it can receive messages from multiple devices { - // fprintf (stderr, "LOG : %s adds extra fds to rfds\n", dev.iface); //FIXME: debugging message FD_SET (rfds_list[i], &rfds); maxfd = MAX (maxfd, rfds_list[i]); } FD_ZERO (&wfds); if (0 < write_std.size) { - // fprintf (stderr, "LOG : %s adds STDOUT to wfds\n", dev.iface); //FIXME: debugging message FD_SET (STDOUT_FILENO, &wfds); maxfd = MAX (maxfd, STDOUT_FILENO); } @@ -1471,14 +1452,13 @@ main (int argc, char *argv[]) { struct GNUNET_TRANSPORT_WLAN_Ieee80211Frame *frame; /* Get the destination address */ - //FIXME : not sure if this is correct frame = (struct GNUNET_TRANSPORT_WLAN_Ieee80211Frame *) write_pout.buf; if (memcmp (&frame->addr1, &dev.pl_mac, sizeof (struct GNUNET_TRANSPORT_WLAN_MacAddress)) == 0) { - fprintf (stderr, "LOG : %s has a message for him:)\n", dev.iface); //FIXME: debugging message - memset (&write_pout, 0, sizeof (write_pout)); // clear the buffer + broadcast = 1; + memset (&write_pout, 0, sizeof (write_pout)); //clear the buffer } else if (memcmp (&frame->addr1, &broadcast_address, sizeof (struct GNUNET_TRANSPORT_WLAN_MacAddress)) == 0) @@ -1491,7 +1471,7 @@ main (int argc, char *argv[]) { broadcast = 1; memset (&write_pout, 0, sizeof (write_pout)); //remove the message - fprintf (stderr, "Skip the broadcast message (pos %d, size %d)\n", neighbours.pos, neighbours.size); + fprintf (stderr, "LOG : Skip the broadcast message (pos %d, size %d)\n", neighbours.pos, neighbours.size); } else { @@ -1502,17 +1482,22 @@ main (int argc, char *argv[]) else { int found = 0; + int pos = 0; /* Search if the address already exists on the list */ for (i = 0; i < neighbours.size; i++) { - if (memcmp (&frame->addr1, &(neighbours.devices[i]), sizeof (bdaddr_t)) == 0 && neighbours.fds[i] != -1) + if (memcmp (&frame->addr1, &(neighbours.devices[i]), sizeof (bdaddr_t)) == 0) { - found = 1; - FD_SET (neighbours.fds[i], &wfds); - maxfd = MAX (maxfd, neighbours.fds[i]); - sendsocket = neighbours.fds[i]; - fprintf (stderr, "LOG: the address was found in the list\n"); - break; + pos = i; + if (neighbours.fds[i] != -1) + { + found = 1; //save the position where it was found + FD_SET (neighbours.fds[i], &wfds); + maxfd = MAX (maxfd, neighbours.fds[i]); + sendsocket = neighbours.fds[i]; + fprintf (stderr, "LOG: the address was found in the list\n"); + break; + } } } if (found == 0) @@ -1537,11 +1522,6 @@ main (int argc, char *argv[]) addr.rc_family = AF_BLUETOOTH; addr.rc_channel = get_channel (&dev, addr.rc_bdaddr); - /*** - *TODO: use a NON-BLOCKING socket - * sock_flags = fcntl (sendsocket, F_GETFL, 0); - * fcntl( sendsocket, F_SETFL, sock_flags | O_NONBLOCK); - */ int tries = 0; connect_retry: status = connect (sendsocket, (struct sockaddr *) &addr, sizeof (addr)); @@ -1549,19 +1529,19 @@ main (int argc, char *argv[]) { if (errno == ECONNREFUSED && tries < 2) { - fprintf (stderr, "%s failed to connect. Trying again!\n", dev.iface); + fprintf (stderr, "LOG : %.*s failed to connect. Trying again!\n", IFNAMSIZ, dev.iface); tries++; goto connect_retry; } else if (errno == EBADF) { - fprintf (stderr, "%s failed to connect : %s. Skip it!\n", dev.iface, strerror (errno)); + fprintf (stderr, "LOG : %s failed to connect : %s. Skip it!\n", dev.iface, strerror (errno)); memset (&write_pout, 0, sizeof (write_pout)); broadcast = 1; } else { - fprintf (stderr, "%s failed to connect : %s. Try again later!\n", dev.iface, strerror (errno)); + fprintf (stderr, "LOG : %s failed to connect : %s. Try again later!\n", dev.iface, strerror (errno)); memset (&write_pout, 0, sizeof (write_pout)); broadcast = 1; } @@ -1571,16 +1551,23 @@ main (int argc, char *argv[]) { FD_SET (sendsocket, &wfds); maxfd = MAX (maxfd, sendsocket); - fprintf (stderr, "Connection successful\n"); - /* Add the new device to the discovered devices list */ - if (neighbours.size < MAX_PORTS) + fprintf (stderr, "LOG : Connection successful\n"); + if (pos != 0) // save the socket { - neighbours.fds[neighbours.size] = sendsocket; - memcpy (&(neighbours.devices[neighbours.size++]), &addr.rc_bdaddr, sizeof (bdaddr_t)); + neighbours.fds[pos] = sendsocket; } else { - fprintf (stderr, "The top limit for the discovarable devices' list was reached\n"); + /* Add the new device to the discovered devices list */ + if (neighbours.size < MAX_PORTS) + { + neighbours.fds[neighbours.size] = sendsocket; + memcpy (&(neighbours.devices[neighbours.size++]), &addr.rc_bdaddr, sizeof (bdaddr_t)); + } + else + { + fprintf (stderr, "The top limit for the discovarable devices' list was reached\n"); + } } } } @@ -1591,7 +1578,7 @@ main (int argc, char *argv[]) { /* Select a fd which is ready for action :) */ { - int retval = select (maxfd + 1, &rfds, &wfds, NULL, NULL); //FIXME : when a device close the connection remove the socket from the list + int retval = select (maxfd + 1, &rfds, &wfds, NULL, NULL); if ((-1 == retval) && (EINTR == errno)) continue; if (0 > retval && errno != EBADF) // we handle BADF errors later @@ -1629,8 +1616,7 @@ main (int argc, char *argv[]) if (0 > ret) //FIXME should I check first the error type? { fprintf (stderr, "Failed to write to bluetooth device: %s. Closing the socket!\n", - strerror (errno)); - + strerror (errno)); for (i = 0; i < neighbours.size; i++) { if (neighbours.fds[i] == sendsocket) @@ -1640,15 +1626,17 @@ main (int argc, char *argv[]) break; } } - //memset (&(write_pout.buf + write_std.pos), 0, (write_pout.size - write_pout.pos)) // FIXME should I remove the message? or try to resend it - //write_pour.pos = 0 ; write_pout.size = 0; + /* Remove the message */ + memset (&write_pout.buf + write_std.pos, 0, (write_pout.size - write_pout.pos)); + write_pout.pos = 0 ; + write_pout.size = 0; } else { write_pout.pos += ret; if ((write_pout.pos != write_pout.size) && (0 != ret)) { - /* we should not get partial sends with packet-oriented devices... */ + /* We should not get partial sends with packet-oriented devices... */ fprintf (stderr, "Write error, partial send: %u/%u\n", (unsigned int) write_pout.pos, (unsigned int) write_pout.size); @@ -1664,7 +1652,7 @@ main (int argc, char *argv[]) } } } - for (i = 0; i <= maxfd; i++) //FIXME it should be incremented + for (i = 0; i <= maxfd; i++) { if (FD_ISSET (i, &rfds)) { @@ -1675,7 +1663,7 @@ main (int argc, char *argv[]) if (0 > ret) { fprintf (stderr, "Read error from STDIN: %s\n", strerror (errno)); - break; + break; break; } if (0 == ret) { @@ -1698,9 +1686,9 @@ main (int argc, char *argv[]) fprintf(stderr, "LOG : %s accepts a message\n", dev.iface); //FIXME: debugging message if (readsocket == -1) { - fprintf (stderr, "Failed to accept a connection on interface: %s\n", + fprintf (stderr, "Failed to accept a connection on interface: %.*s\n", IFNAMSIZ, strerror (errno)); - return -1; //FIXME probably I should ignore the error and keep the process alive + break; } else { @@ -1758,20 +1746,6 @@ main (int argc, char *argv[]) - sizeof (struct GNUNET_TRANSPORT_WLAN_Ieee80211Frame); rrm->header.size = htons (write_std.size); rrm->header.type = htons (GNUNET_MESSAGE_TYPE_WLAN_DATA_FROM_HELPER); - - /* Remove the socket from the list */ - int j; - for (j = 0; j < crt_rfds; j++) - { - if (i == rfds_list[crt_rfds]) - { - rfds_list[j] ^= rfds_list[crt_rfds]; - rfds_list[crt_rfds] ^= rfds_list[j]; - rfds_list[j] ^= rfds_list[crt_rfds]; - crt_rfds -= 1; - break; - } - } } } } diff --git a/src/transport/plugin_transport_bluetooth.c b/src/transport/plugin_transport_bluetooth.c index ef8c6f1a2..36c5c8e2e 100644 --- a/src/transport/plugin_transport_bluetooth.c +++ b/src/transport/plugin_transport_bluetooth.c @@ -1859,6 +1859,28 @@ libgnunet_plugin_transport_bluetooth_init (void *cls) NULL, plugin); break; + case 1: /* testmode, peer 1 */ + plugin->helper_argv[0] = (char *) "gnunet-helper-transport-wlan-dummy"; + plugin->helper_argv[1] = (char *) "1"; + plugin->helper_argv[2] = NULL; + plugin->suid_helper = GNUNET_HELPER_start (GNUNET_NO, + "gnunet-helper-transport-wlan-dummy", + plugin->helper_argv, + &handle_helper_message, + NULL, + plugin); + break; + case 2: /* testmode, peer 2 */ + plugin->helper_argv[0] = (char *) "gnunet-helper-transport-wlan-dummy"; + plugin->helper_argv[1] = (char *) "2"; + plugin->helper_argv[2] = NULL; + plugin->suid_helper = GNUNET_HELPER_start (GNUNET_NO, + "gnunet-helper-transport-wlan-dummy", + plugin->helper_argv, + &handle_helper_message, + NULL, + plugin); + break; default: GNUNET_assert (0); } diff --git a/src/transport/test_quota_compliance_bluetooth_asymmetric_peer1.conf b/src/transport/test_quota_compliance_bluetooth_asymmetric_peer1.conf new file mode 100644 index 000000000..77d06bee4 --- /dev/null +++ b/src/transport/test_quota_compliance_bluetooth_asymmetric_peer1.conf @@ -0,0 +1,30 @@ +@INLINE@ template_cfg_peer1.conf +[PATHS] +SERVICEHOME = /tmp/test-transport/api-bluetooth-p1/ + +[transport-bluetooth] +INTERFACE = hci0 +TESTMODE = 1 + +[arm] +PORT = 12164 +UNIXPATH = /tmp/gnunet-p1-service-arm.sock + +[statistics] +PORT = 12163 +UNIXPATH = /tmp/gnunet-p1-service-statistics.sock + +[resolver] +PORT = 12162 +UNIXPATH = /tmp/gnunet-p1-service-resolver.sock + +[peerinfo] +PORT = 12161 +UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock + +[transport] +PORT = 12160 +PLUGINS = bluetooth +UNIXPATH = /tmp/gnunet-p1-service-transport.sock + + diff --git a/src/transport/test_quota_compliance_bluetooth_asymmetric_peer2.conf b/src/transport/test_quota_compliance_bluetooth_asymmetric_peer2.conf new file mode 100644 index 000000000..f5941fdae --- /dev/null +++ b/src/transport/test_quota_compliance_bluetooth_asymmetric_peer2.conf @@ -0,0 +1,29 @@ +@INLINE@ template_cfg_peer2.conf +[PATHS] +SERVICEHOME = /tmp/test-transport/api-bluetooth-p2/ + +[transport-bluetooth] +INTERFACE = hci1 +TESTMODE = 2 + +[arm] +PORT = 12174 +UNIXPATH = /tmp/gnunet-p2-service-arm.sock + +[statistics] +PORT = 12173 +UNIXPATH = /tmp/gnunet-p2-service-statistics.sock + +[resolver] +PORT = 12172 +UNIXPATH = /tmp/gnunet-p2-service-resolver.sock + +[peerinfo] +PORT = 12171 +UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock + +[transport] +PORT = 12170 +PLUGINS = bluetooth +UNIXPATH = /tmp/gnunet-p2-service-transport.sock + diff --git a/src/transport/test_quota_compliance_bluetooth_peer1.conf b/src/transport/test_quota_compliance_bluetooth_peer1.conf new file mode 100644 index 000000000..77d06bee4 --- /dev/null +++ b/src/transport/test_quota_compliance_bluetooth_peer1.conf @@ -0,0 +1,30 @@ +@INLINE@ template_cfg_peer1.conf +[PATHS] +SERVICEHOME = /tmp/test-transport/api-bluetooth-p1/ + +[transport-bluetooth] +INTERFACE = hci0 +TESTMODE = 1 + +[arm] +PORT = 12164 +UNIXPATH = /tmp/gnunet-p1-service-arm.sock + +[statistics] +PORT = 12163 +UNIXPATH = /tmp/gnunet-p1-service-statistics.sock + +[resolver] +PORT = 12162 +UNIXPATH = /tmp/gnunet-p1-service-resolver.sock + +[peerinfo] +PORT = 12161 +UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock + +[transport] +PORT = 12160 +PLUGINS = bluetooth +UNIXPATH = /tmp/gnunet-p1-service-transport.sock + + diff --git a/src/transport/test_quota_compliance_bluetooth_peer2.conf b/src/transport/test_quota_compliance_bluetooth_peer2.conf new file mode 100644 index 000000000..f5941fdae --- /dev/null +++ b/src/transport/test_quota_compliance_bluetooth_peer2.conf @@ -0,0 +1,29 @@ +@INLINE@ template_cfg_peer2.conf +[PATHS] +SERVICEHOME = /tmp/test-transport/api-bluetooth-p2/ + +[transport-bluetooth] +INTERFACE = hci1 +TESTMODE = 2 + +[arm] +PORT = 12174 +UNIXPATH = /tmp/gnunet-p2-service-arm.sock + +[statistics] +PORT = 12173 +UNIXPATH = /tmp/gnunet-p2-service-statistics.sock + +[resolver] +PORT = 12172 +UNIXPATH = /tmp/gnunet-p2-service-resolver.sock + +[peerinfo] +PORT = 12171 +UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock + +[transport] +PORT = 12170 +PLUGINS = bluetooth +UNIXPATH = /tmp/gnunet-p2-service-transport.sock + diff --git a/src/transport/test_transport_api_bluetooth_peer1.conf b/src/transport/test_transport_api_bluetooth_peer1.conf new file mode 100644 index 000000000..baf84a21b --- /dev/null +++ b/src/transport/test_transport_api_bluetooth_peer1.conf @@ -0,0 +1,35 @@ +@INLINE@ template_cfg_peer1.conf +[PATHS] +SERVICEHOME = /tmp/test-transport/api-bluetooth-p1/ + +[transport-bluetooth] +INTERFACE = hci0 +TESTMODE = 1 + +[arm] +PORT = 12164 +UNIXPATH = /tmp/gnunet-p1-service-arm.sock + +[statistics] +PORT = 12163 +UNIXPATH = /tmp/gnunet-p1-service-statistics.sock + +[resolver] +PORT = 12162 +UNIXPATH = /tmp/gnunet-p1-service-resolver.sock + +[peerinfo] +PORT = 12161 +UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock + +[transport] +PORT = 12160 +PLUGINS = bluetooth +UNIXPATH = /tmp/gnunet-p1-service-transport.sock +#PREFIX = xterm -T transport2 -e gdb --command=cmd --args +#PREFIX = valgrind --leak-check=full --show-reachable=yes --main-stacksize=104857600 +#PREFIX = valgrind --leak-check=full --show-reachable=yes +#PREFIX = valgrind --leak-check=full +#PREFIX = valgrind --tool=massif +#PREFIX = gdbserver :2345 + diff --git a/src/transport/test_transport_api_bluetooth_peer2.conf b/src/transport/test_transport_api_bluetooth_peer2.conf new file mode 100644 index 000000000..99836a732 --- /dev/null +++ b/src/transport/test_transport_api_bluetooth_peer2.conf @@ -0,0 +1,34 @@ +@INLINE@ template_cfg_peer2.conf +[PATHS] +SERVICEHOME = /tmp/test-transport/api-bluetooth-p2/ + +[transport-bluetooth] +INTERFACE = hci1 +TESTMODE = 2 + +[arm] +PORT = 12174 +UNIXPATH = /tmp/gnunet-p2-service-arm.sock + +[statistics] +PORT = 12173 +UNIXPATH = /tmp/gnunet-p2-service-statistics.sock + +[resolver] +PORT = 12172 +UNIXPATH = /tmp/gnunet-p2-service-resolver.sock + +[peerinfo] +PORT = 12171 +UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock + +[transport] +PORT = 12170 +PLUGINS = bluetooth +UNIXPATH = /tmp/gnunet-p2-service-transport.sock +#PREFIX = xterm -T transport2 -e gdb --command=cmd --args +#PREFIX = valgrind --leak-check=full --show-reachable=yes --main-stacksize=104857600 +#PREFIX = valgrind --leak-check=full --show-reachable=yes +#PREFIX = valgrind --leak-check=full +#PREFIX = valgrind --tool=massif +#PREFIX = gdbserver :2345 diff --git a/src/transport/test_transport_api_reliability_bluetooth_peer1.conf b/src/transport/test_transport_api_reliability_bluetooth_peer1.conf new file mode 100644 index 000000000..77d06bee4 --- /dev/null +++ b/src/transport/test_transport_api_reliability_bluetooth_peer1.conf @@ -0,0 +1,30 @@ +@INLINE@ template_cfg_peer1.conf +[PATHS] +SERVICEHOME = /tmp/test-transport/api-bluetooth-p1/ + +[transport-bluetooth] +INTERFACE = hci0 +TESTMODE = 1 + +[arm] +PORT = 12164 +UNIXPATH = /tmp/gnunet-p1-service-arm.sock + +[statistics] +PORT = 12163 +UNIXPATH = /tmp/gnunet-p1-service-statistics.sock + +[resolver] +PORT = 12162 +UNIXPATH = /tmp/gnunet-p1-service-resolver.sock + +[peerinfo] +PORT = 12161 +UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock + +[transport] +PORT = 12160 +PLUGINS = bluetooth +UNIXPATH = /tmp/gnunet-p1-service-transport.sock + + diff --git a/src/transport/test_transport_api_reliability_bluetooth_peer2.conf b/src/transport/test_transport_api_reliability_bluetooth_peer2.conf new file mode 100644 index 000000000..f5941fdae --- /dev/null +++ b/src/transport/test_transport_api_reliability_bluetooth_peer2.conf @@ -0,0 +1,29 @@ +@INLINE@ template_cfg_peer2.conf +[PATHS] +SERVICEHOME = /tmp/test-transport/api-bluetooth-p2/ + +[transport-bluetooth] +INTERFACE = hci1 +TESTMODE = 2 + +[arm] +PORT = 12174 +UNIXPATH = /tmp/gnunet-p2-service-arm.sock + +[statistics] +PORT = 12173 +UNIXPATH = /tmp/gnunet-p2-service-statistics.sock + +[resolver] +PORT = 12172 +UNIXPATH = /tmp/gnunet-p2-service-resolver.sock + +[peerinfo] +PORT = 12171 +UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock + +[transport] +PORT = 12170 +PLUGINS = bluetooth +UNIXPATH = /tmp/gnunet-p2-service-transport.sock + diff --git a/src/transport/test_transport_api_unreliability_bluetooth_peer1.conf b/src/transport/test_transport_api_unreliability_bluetooth_peer1.conf new file mode 100644 index 000000000..77d06bee4 --- /dev/null +++ b/src/transport/test_transport_api_unreliability_bluetooth_peer1.conf @@ -0,0 +1,30 @@ +@INLINE@ template_cfg_peer1.conf +[PATHS] +SERVICEHOME = /tmp/test-transport/api-bluetooth-p1/ + +[transport-bluetooth] +INTERFACE = hci0 +TESTMODE = 1 + +[arm] +PORT = 12164 +UNIXPATH = /tmp/gnunet-p1-service-arm.sock + +[statistics] +PORT = 12163 +UNIXPATH = /tmp/gnunet-p1-service-statistics.sock + +[resolver] +PORT = 12162 +UNIXPATH = /tmp/gnunet-p1-service-resolver.sock + +[peerinfo] +PORT = 12161 +UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock + +[transport] +PORT = 12160 +PLUGINS = bluetooth +UNIXPATH = /tmp/gnunet-p1-service-transport.sock + + diff --git a/src/transport/test_transport_api_unreliability_bluetooth_peer2.conf b/src/transport/test_transport_api_unreliability_bluetooth_peer2.conf new file mode 100644 index 000000000..f5941fdae --- /dev/null +++ b/src/transport/test_transport_api_unreliability_bluetooth_peer2.conf @@ -0,0 +1,29 @@ +@INLINE@ template_cfg_peer2.conf +[PATHS] +SERVICEHOME = /tmp/test-transport/api-bluetooth-p2/ + +[transport-bluetooth] +INTERFACE = hci1 +TESTMODE = 2 + +[arm] +PORT = 12174 +UNIXPATH = /tmp/gnunet-p2-service-arm.sock + +[statistics] +PORT = 12173 +UNIXPATH = /tmp/gnunet-p2-service-statistics.sock + +[resolver] +PORT = 12172 +UNIXPATH = /tmp/gnunet-p2-service-resolver.sock + +[peerinfo] +PORT = 12171 +UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock + +[transport] +PORT = 12170 +PLUGINS = bluetooth +UNIXPATH = /tmp/gnunet-p2-service-transport.sock + -- cgit v1.2.3