aboutsummaryrefslogtreecommitdiff
path: root/src/transport/gnunet-helper-transport-bluetooth.c
diff options
context:
space:
mode:
authorClaudiu Olteanu <claudiu@140774ce-b5e7-0310-ab8b-a85725594a96>2013-07-13 14:58:52 +0000
committerClaudiu Olteanu <claudiu@140774ce-b5e7-0310-ab8b-a85725594a96>2013-07-13 14:58:52 +0000
commit43e5720102d5e2ee2e33ee0d90da0442511573b6 (patch)
treefc739acd7320bd0781f444e59086e930c20e8a74 /src/transport/gnunet-helper-transport-bluetooth.c
parent407baaccce283d80794a93c3d496b6afa6950c31 (diff)
downloadgnunet-43e5720102d5e2ee2e33ee0d90da0442511573b6.tar.gz
gnunet-43e5720102d5e2ee2e33ee0d90da0442511573b6.zip
Adding a copy of wlan plugin used for bluetooth plugin
Diffstat (limited to 'src/transport/gnunet-helper-transport-bluetooth.c')
-rw-r--r--src/transport/gnunet-helper-transport-bluetooth.c79
1 files changed, 58 insertions, 21 deletions
diff --git a/src/transport/gnunet-helper-transport-bluetooth.c b/src/transport/gnunet-helper-transport-bluetooth.c
index ff45319a8..ca9aa70c3 100644
--- a/src/transport/gnunet-helper-transport-bluetooth.c
+++ b/src/transport/gnunet-helper-transport-bluetooth.c
@@ -41,8 +41,7 @@
41#include "gnunet_protocols.h" 41#include "gnunet_protocols.h"
42#include "plugin_transport_wlan.h" 42#include "plugin_transport_wlan.h"
43 43
44#define HARD_CODED_PORT_NUMBER 10 44#define MAX_PORTS 30
45#define HARD_CODED_PORT_NUMBER2 10
46 45
47/** 46/**
48 * Maximum size of a message allowed in either direction 47 * Maximum size of a message allowed in either direction
@@ -1020,6 +1019,8 @@ stdin_send_hw (void *cls, const struct GNUNET_MessageHeader *hdr)
1020 /* payload contains MAC address, but we don't trust it, so we'll 1019 /* payload contains MAC address, but we don't trust it, so we'll
1021 * overwrite it with OUR MAC address to prevent mischief */ 1020 * overwrite it with OUR MAC address to prevent mischief */
1022 mac_set (blueheader, dev); 1021 mac_set (blueheader, dev);
1022 memcpy (&blueheader->addr1, &header->frame.addr1,
1023 sizeof (struct GNUNET_TRANSPORT_WLAN_MacAddress)); //FIXME is this correct?
1023 write_pout.size = sendsize; 1024 write_pout.size = sendsize;
1024} 1025}
1025 1026
@@ -1048,6 +1049,7 @@ main (int argc, char *argv[])
1048 struct MessageStreamTokenizer *stdin_mst; 1049 struct MessageStreamTokenizer *stdin_mst;
1049 int raw_eno, i; 1050 int raw_eno, i;
1050 uid_t uid; 1051 uid_t uid;
1052 int crt_rfds = 0, crt_wfds = 0, rfds_list[MAX_PORTS], wfds_list[MAX_PORTS];
1051 1053
1052 /* Assert privs so we can modify the firewall rules! */ 1054 /* Assert privs so we can modify the firewall rules! */
1053 uid = getuid (); 1055 uid = getuid ();
@@ -1161,11 +1163,24 @@ main (int argc, char *argv[])
1161 FD_SET (STDOUT_FILENO, &wfds); 1163 FD_SET (STDOUT_FILENO, &wfds);
1162 maxfd = MAX (maxfd, STDOUT_FILENO); 1164 maxfd = MAX (maxfd, STDOUT_FILENO);
1163 } 1165 }
1166
1167 for (i = 0; i < crt_rfds; i++)
1168 {
1169 FD_SET (rfds_list[i], &rfds);
1170 maxfd = MAX (maxfd, rfds_list[i]);
1171 }
1172
1173 for (i = 0; i < crt_wfds; i++)
1174 {
1175 FD_SET (wfds_list[i], &wfds);
1176 maxfd = MAX (maxfd, wfds_list[i]);
1177 }
1178
1164 if (0 < write_pout.size) 1179 if (0 < write_pout.size)
1165 { 1180 {
1166 int sendsocket, status; 1181 int sendsocket, status;
1167 struct sockaddr_rc addr = { 0 }; 1182 struct sockaddr_rc addr = { 0 };
1168 struct GNUNET_TRANSPORT_WLAN_Ieee80211Frame frame; 1183 struct GNUNET_TRANSPORT_WLAN_Ieee80211Frame *frame;
1169 1184
1170 memset (dest, 0, sizeof (dest)); 1185 memset (dest, 0, sizeof (dest));
1171 1186
@@ -1179,15 +1194,10 @@ main (int argc, char *argv[])
1179 } 1194 }
1180 1195
1181 /* Get the destination address */ 1196 /* Get the destination address */
1182 if (write_pout.pos == 0) //FIXME: if write_pout.pos != 0, I cannot get the destination address 1197 //FIXME : not sure if this is correct
1183 { 1198 frame = (struct GNUNET_TRANSPORT_WLAN_Ieee80211Frame *) write_pout.buf;
1184 //FIXME : not sure if this is correct 1199 memcpy (&addr.rc_bdaddr, &frame->addr1, sizeof (bdaddr_t));
1185 memset (&frame, 0, sizeof (frame)); 1200
1186 memcpy (&frame, write_pout.buf + sizeof (struct GNUNET_TRANSPORT_WLAN_RadiotapReceiveMessage)
1187 - sizeof (struct GNUNET_TRANSPORT_WLAN_Ieee80211Frame),
1188 sizeof (struct GNUNET_TRANSPORT_WLAN_Ieee80211Frame));
1189 memcpy (&addr.rc_bdaddr, &frame.addr1, sizeof (bdaddr_t));
1190 }
1191 addr.rc_family = AF_BLUETOOTH; 1201 addr.rc_family = AF_BLUETOOTH;
1192 addr.rc_channel = get_channel (&dev, addr.rc_bdaddr); 1202 addr.rc_channel = get_channel (&dev, addr.rc_bdaddr);
1193 1203
@@ -1205,6 +1215,15 @@ main (int argc, char *argv[])
1205 1215
1206 FD_SET (sendsocket, &wfds); 1216 FD_SET (sendsocket, &wfds);
1207 maxfd = MAX (maxfd, sendsocket); 1217 maxfd = MAX (maxfd, sendsocket);
1218
1219 if (crt_wfds < MAX_PORTS)
1220 wfds_list[crt_wfds++] = sendsocket; //add the socket to the list
1221 else
1222 {
1223 fprintf (stderr, "The limit for the write file descriptors list was \
1224 reached\n");
1225 break;
1226 }
1208 } 1227 }
1209 { 1228 {
1210 int retval = select (maxfd + 1, &rfds, &wfds, NULL, NULL); 1229 int retval = select (maxfd + 1, &rfds, &wfds, NULL, NULL);
@@ -1287,20 +1306,29 @@ main (int argc, char *argv[])
1287 } 1306 }
1288 else if (i == dev.fd_rfcomm) 1307 else if (i == dev.fd_rfcomm)
1289 { 1308 {
1290 int newfd; 1309 int readsocket;
1291 struct sockaddr_rc addr = { 0 }; 1310 struct sockaddr_rc addr = { 0 };
1292 unsigned int opt = sizeof (addr); 1311 unsigned int opt = sizeof (addr);
1293 1312
1294 newfd = accept (dev.fd_rfcomm, (struct sockaddr *) &addr, &opt); 1313 readsocket = accept (dev.fd_rfcomm, (struct sockaddr *) &addr, &opt);
1295 1314
1296 if (newfd == -1) 1315 if (readsocket == -1)
1297 { 1316 {
1298 fprintf (stderr, "Failed to accept a connection on interface: %s\n", 1317 fprintf (stderr, "Failed to accept a connection on interface: %s\n",
1299 strerror (errno)); 1318 strerror (errno));
1300 return -1; 1319 return -1;
1301 } else { 1320 } else {
1302 FD_SET (newfd, &rfds); 1321 FD_SET (readsocket, &rfds);
1303 maxfd = MAX (maxfd, newfd); 1322 maxfd = MAX (maxfd, readsocket);
1323
1324 if (crt_rfds < MAX_PORTS)
1325 rfds_list[crt_rfds++] = readsocket;
1326 else
1327 {
1328 fprintf (stderr, "The limit for the read file descriptors list was \
1329 reached\n");
1330 break;
1331 }
1304 } 1332 }
1305 1333
1306 } 1334 }
@@ -1328,20 +1356,29 @@ main (int argc, char *argv[])
1328 - sizeof (struct GNUNET_TRANSPORT_WLAN_Ieee80211Frame); 1356 - sizeof (struct GNUNET_TRANSPORT_WLAN_Ieee80211Frame);
1329 rrm->header.size = htons (write_std.size); 1357 rrm->header.size = htons (write_std.size);
1330 rrm->header.type = htons (GNUNET_MESSAGE_TYPE_WLAN_DATA_FROM_HELPER); 1358 rrm->header.type = htons (GNUNET_MESSAGE_TYPE_WLAN_DATA_FROM_HELPER);
1331 (void) close (i);
1332 } 1359 }
1333 if (0 == ret)
1334 (void) close (i);
1335 } 1360 }
1336 } 1361 }
1337 } 1362 }
1338 } 1363 }
1339 /* Error handling, try to clean up a bit at least */ 1364 /* Error handling, try to clean up a bit at least */
1340 mst_destroy (stdin_mst); 1365 mst_destroy (stdin_mst);
1366 sdp_close (dev.session);
1367
1341 (void) close (dev.fd_rfcomm); 1368 (void) close (dev.fd_rfcomm);
1342 1369 for (i = 0; i < crt_rfds; i++)
1370 (void) close (rfds_list[i]);
1371
1372 for (i = 0; i < crt_wfds; i++)
1373 (void) close (wfds_list[i]);
1374
1343 return 1; /* we never exit 'normally' */ 1375 return 1; /* we never exit 'normally' */
1344 1376
1377 /**
1378 *TODO
1379 * 1. check if the rate from get_wlan_header (plugin_transport_bluetooth.c) is correct
1380 * 2.
1381 */
1345} 1382}
1346 1383
1347 1384