diff options
author | Claudiu Olteanu <claudiu@140774ce-b5e7-0310-ab8b-a85725594a96> | 2013-07-13 14:58:52 +0000 |
---|---|---|
committer | Claudiu Olteanu <claudiu@140774ce-b5e7-0310-ab8b-a85725594a96> | 2013-07-13 14:58:52 +0000 |
commit | 43e5720102d5e2ee2e33ee0d90da0442511573b6 (patch) | |
tree | fc739acd7320bd0781f444e59086e930c20e8a74 /src/transport/gnunet-helper-transport-bluetooth.c | |
parent | 407baaccce283d80794a93c3d496b6afa6950c31 (diff) | |
download | gnunet-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.c | 79 |
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 | ||