/*\r
- This file is part of GNUnet.
- (C) 2010 Christian Grothoff (and other contributing authors)
-
- GNUnet is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3, or (at your
- option) any later version.
-
- GNUnet is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-*/
-/**
- * @file transport/test_transport_wlan_dummy.c
- * @brief helper for the testcase for plugin_transport_wlan.c
- * @author David Brodski
- */
-
-#include "platform.h"
-#include "gnunet_constants.h"
-#include "gnunet_os_lib.h"
-#include "gnunet_transport_plugin.h"
-#include "transport.h"
-#include "plugin_transport_wlan.h"
-#include "gnunet_common.h"
-#include "gnunet-transport-wlan-helper.h"
-#include "plugin_transport_wlan.h"
-
+ This file is part of GNUnet.\r
+ (C) 2010 Christian Grothoff (and other contributing authors)
+\r
+ GNUnet is free software; you can redistribute it and/or modify\r
+ it under the terms of the GNU General Public License as published\r
+ by the Free Software Foundation; either version 3, or (at your\r
+ option) any later version.
+\r
+ GNUnet is distributed in the hope that it will be useful, but\r
+ WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ General Public License for more details.
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with GNUnet; see the file COPYING. If not, write to the\r
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,\r
+ Boston, MA 02111-1307, USA.\r
+ */\r
+/**\r
+ * @file transport/test_transport_wlan_dummy.c\r
+ * @brief helper for the testcase for plugin_transport_wlan.c\r
+ * @author David Brodski\r
+ */\r
+\r
+#include "platform.h"\r
+#include "gnunet_constants.h"\r
+#include "gnunet_os_lib.h"\r
+#include "gnunet_transport_plugin.h"\r
+#include "transport.h"\r
+#include "plugin_transport_wlan.h"\r
+#include "gnunet_common.h"\r
+#include "gnunet-transport-wlan-helper.h"\r
+\r
#include <stdio.h>\r
#include <stdlib.h>\r
#include <sys/stat.h>\r
\r
#define FIFO_FILE1 "MYFIFOin"\r
-#define FIFO_FILE2 "MYFIFOout"
-
-int
-main(int argc, char *argv[])
-{
- struct stat st;
- int erg;
- int first;
- FILE *fpin;
- FILE *fpout;
- //make the fifos if needed
- if(stat(FIFO_FILE1,&st) != 0){
- if(stat(FIFO_FILE2,&st) != 0){
- perror("FIFO 2 exists, but FIFO 1 not");\r
- exit(1);
- }
- first = 1;
- umask(0);
- erg = mknod(FIFO_FILE1, S_IFIFO|0666, 0);
- erg = mknod(FIFO_FILE2, S_IFIFO|0666, 0);
-
- if((fpin = fopen(FIFO_FILE1, "r")) == NULL) {\r
- perror("fopen");\r
- exit(1);\r
- }
- if((fpout = fopen(FIFO_FILE2, "w")) == NULL) {\r
- perror("fopen");\r
- exit(1);\r
- }
- } else {
- first = 0;
- if(stat(FIFO_FILE2,&st) == 0){
- perror("FIFO 1 exists, but FIFO 2 not");\r
- exit(1);
- }
- if((fpout = fopen(FIFO_FILE1, "w")) == NULL) {\r
- perror("fopen");\r
- exit(1);\r
- }
- if((fpin = fopen(FIFO_FILE2, "r")) == NULL) {\r
- perror("fopen");\r
- exit(1);\r
- }
-
- }
- // Write the input to the output\r
-\r
- //clean up\r
- if (first == 1){\r
- unlink(FIFO_FILE1);\r
- unlink(FIFO_FILE2);\r
- }\r
-\r
-\r
- fclose(fpin);\r
- fclose(fpout);\r
- return(0);\r
+#define FIFO_FILE2 "MYFIFOout"\r
+#define MAXLINE 5000\r
+\r
+int closeprog = 0;\r
+\r
+void sigfunc(int sig)\r
+{\r
+\r
+ if(sig != SIGINT || sig != SIGTERM || sig != SIGKILL)\r
+ return;\r
+ else\r
+ {\r
+ closeprog = 1;\r
+ exit(0);\r
+ }\r
}\r
-
+\r
+\r
+\r
+\r
+int\r
+main(int argc, char *argv[])\r
+{\r
+ struct stat st;\r
+ struct stat st2;\r
+ int erg;\r
+ int first;\r
+ FILE *fpin;\r
+ FILE *fpout;\r
+ pid_t pid;\r
+\r
+ perror("Test");\r
+\r
+\r
+ //make the fifos if needed\r
+ if (stat(FIFO_FILE1, &st) != 0)\r
+ {\r
+ if (stat(FIFO_FILE2, &st2) == 0)\r
+ {\r
+ perror("FIFO 2 exists, but FIFO 1 not, blub");\r
+ exit(1);\r
+ }\r
+ first = 1;\r
+ perror("First");\r
+ umask(0);\r
+ erg = mknod(FIFO_FILE1, S_IFIFO | 0666, 0);\r
+ erg = mknod(FIFO_FILE2, S_IFIFO | 0666, 0);\r
+\r
+ if ((fpin = fopen(FIFO_FILE1, "r")) == NULL)\r
+ {\r
+ perror("fopen");\r
+ exit(1);\r
+ }\r
+ if ((fpout = fopen(FIFO_FILE2, "w")) == NULL)\r
+ {\r
+ perror("fopen");\r
+ exit(1);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ first = 0;\r
+ perror("Second");\r
+ if (stat(FIFO_FILE2, &st2) != 0)\r
+ {\r
+ perror("FIFO 1 exists, but FIFO 2 not, mäh");\r
+ exit(1);\r
+ }\r
+ if ((fpout = fopen(FIFO_FILE1, "w")) == NULL)\r
+ {\r
+ perror("fopen");\r
+ exit(1);\r
+ }\r
+ if ((fpin = fopen(FIFO_FILE2, "r")) == NULL)\r
+ {\r
+ perror("fopen");\r
+ exit(1);\r
+ }\r
+\r
+ }\r
+\r
+ // fork\r
+\r
+ if ((pid = fork()) < 0)\r
+ {\r
+ perror("FORK ERROR");\r
+\r
+ //clean up\r
+ if (first == 1)\r
+ {\r
+ unlink(FIFO_FILE1);\r
+ unlink(FIFO_FILE2);\r
+ }\r
+ fclose(fpin);\r
+ fclose(fpout);\r
+ return -3;\r
+ }\r
+ else if (pid == 0) // CHILD PROCESS\r
+ {\r
+ perror("Child");\r
+ signal(SIGINT, sigfunc);\r
+ signal(SIGTERM, sigfunc);\r
+ signal(SIGKILL, sigfunc);\r
+ int rv = 0;\r
+ int readc = 0;\r
+ int pos = 0;\r
+ char line[MAXLINE];\r
+\r
+ fd_set rfds;\r
+ fd_set wfds;\r
+ struct timeval tv;\r
+ int retval;\r
+\r
+\r
+ tv.tv_sec = 5;\r
+ tv.tv_usec = 0;\r
+\r
+\r
+ FD_ZERO(&rfds);\r
+ FD_SET(STDIN_FILENO, &rfds);\r
+\r
+ FD_ZERO(&wfds);\r
+ FD_SET(STDOUT_FILENO, &wfds);\r
+\r
+ struct GNUNET_SERVER_MessageStreamTokenizer * stdin_mst;\r
+ struct GNUNET_SERVER_MessageStreamTokenizer * file_in_mst;\r
+\r
+ stdin_mst = GNUNET_SERVER_mst_create(&stdin_send, NULL);\r
+ file_in_mst = GNUNET_SERVER_mst_create(&file_in_send, NULL);\r
+\r
+ while (closeprog == 0)\r
+ {\r
+ readc = 0;\r
+\r
+\r
+ while (readc < sizeof( struct RadiotapHeader) + sizeof(struct GNUNET_MessageHeader)){\r
+ if ((rv = read(STDIN_FILENO, line, MAXLINE)) < 0)\r
+ {\r
+ perror("READ ERROR FROM STDIN");\r
+ }\r
+ readc += rv;\r
+ }\r
+\r
+ pos = 0;\r
+\r
+ //fwrite(&line[pos], 1, sizeof(struct GNUNET_MessageHeader), fpout);\r
+\r
+ //pos += sizeof(struct GNUNET_MessageHeader);\r
+\r
+ //do not send radiotap header\r
+ pos += sizeof( struct RadiotapHeader);\r
+\r
+ while (pos < readc)\r
+ {\r
+ pos += fwrite(&line[pos], 1, readc - pos, fpout);\r
+ }\r
+ }\r
+\r
+\r
+ //clean up\r
+ fclose(fpout);\r
+ }\r
+ else // PARENT PROCESS\r
+ {\r
+ perror("Parent");\r
+ signal(SIGINT, sigfunc);\r
+ signal(SIGTERM, sigfunc);\r
+ signal(SIGKILL, sigfunc);\r
+ int rv = 0;\r
+ ssize_t pos = 0;\r
+ char line[MAXLINE];\r
+ struct Wlan_Helper_Control_Message macmsg;\r
+\r
+\r
+ //Send random mac address\r
+ macmsg.mac.mac[0] = 0x13;\r
+ macmsg.mac.mac[1] = 0x22;\r
+ macmsg.mac.mac[2] = 0x33;\r
+ macmsg.mac.mac[3] = 0x44;\r
+ macmsg.mac.mac[4] = GNUNET_CRYPTO_random_u32(GNUNET_CRYPTO_QUALITY_WEAK, 255);\r
+ macmsg.mac.mac[5] = GNUNET_CRYPTO_random_u32(GNUNET_CRYPTO_QUALITY_WEAK, 255);\r
+ macmsg.hdr.size = sizeof(struct Wlan_Helper_Control_Message);\r
+\r
+ pos = 0;\r
+ /*\r
+ while (pos < sizeof(struct Wlan_Helper_Control_Message))\r
+ {\r
+ pos += write(STDOUT_FILENO, &macmsg + pos, sizeof(struct Wlan_Helper_Control_Message) - pos);\r
+ }\r
+ */\r
+ while (closeprog == 0)\r
+ {\r
+ if ((rv = fread(line, 1, MAXLINE, fpin)) < 0)\r
+ {\r
+ perror("READ ERROR FROM fpin");\r
+ }\r
+\r
+ pos = 0;\r
+ while (pos < rv)\r
+ {\r
+ pos += write(STDOUT_FILENO, &line[pos], rv - pos);\r
+ }\r
+ }\r
+\r
+\r
+ //clean up\r
+ fclose(fpin);\r
+\r
+ if (first == 1)\r
+ {\r
+ unlink(FIFO_FILE1);\r
+ unlink(FIFO_FILE2);\r
+ }\r
+ }\r
+\r
+ // Write the input to the output\r
+\r
+ return (0);\r
+}\r
+\r