/*\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
+ }\r
}\r
-
+\r
+\r
+\r
+int\r
+main(int argc, char *argv[])\r
+{\r
+ struct stat st;\r
+ int erg;\r
+ int first;\r
+ FILE *fpin;\r
+ FILE *fpout;\r
+ pid_t pid;\r
+\r
+ signal(SIGINT,sigfunc);\r
+ signal(SIGTERM,sigfunc);\r
+ signal(SIGKILL,sigfunc);\r
+\r
+ //make the fifos if needed\r
+ if (stat(FIFO_FILE1, &st) != 0)\r
+ {\r
+ if (stat(FIFO_FILE2, &st) != 0)\r
+ {\r
+ perror("FIFO 2 exists, but FIFO 1 not");\r
+ exit(1);\r
+ }\r
+ first = 1;\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
+ if (stat(FIFO_FILE2, &st) == 0)\r
+ {\r
+ perror("FIFO 1 exists, but FIFO 2 not");\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
+ return -3;\r
+ }\r
+ else if (pid == 0) // CHILD PROCESS\r
+ {\r
+ int rv = 0;\r
+ int read = 0;\r
+ int pos = 0;\r
+ char line[MAXLINE];\r
+\r
+ while (closeprog == 0)\r
+ {\r
+ read = 0;\r
+\r
+ while (read < 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
+ read += 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 < read)\r
+ {\r
+ pos += fwrite(&line[pos], 1, read - pos, fpout);\r
+ }\r
+ }\r
+\r
+\r
+ //clean up\r
+ fclose(fpout);\r
+ }\r
+ else // PARENT PROCESS\r
+ {\r
+ int rv = 0;\r
+ ssize_t pos = 0;\r
+ char line[MAXLINE];\r
+\r
+ while (closeprog == 0)\r
+ {\r
+ if ((rv = fread(line, 1, MAXLINE, fpin)) < 0)\r
+ {\r
+ perror("READ ERROR FROM STDIN");\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