Dummy for testing
authorDavid Brodski <david@brodski.eu>
Tue, 21 Dec 2010 12:09:15 +0000 (12:09 +0000)
committerDavid Brodski <david@brodski.eu>
Tue, 21 Dec 2010 12:09:15 +0000 (12:09 +0000)
src/transport/Makefile.am
src/transport/gnunet-transport-wlan-helper.c
src/transport/plugin_transport_wlan.h
src/transport/test_plugin_transport_wlan_dummy.c

index e616c9d1946e6a1a9d33a8b1ed8827231eacdb1e..f1f72b6894aa47e4169608b5f998e5206600199e 100644 (file)
@@ -77,10 +77,14 @@ bin_SCRIPTS = \
 gnunet_nat_server_SOURCES = \
  $(NATSERVER)
 
+    
 gnunet_transport_wlan_helper_SOURCES = \
- gnunet-transport-wlan-helper.c         
+ gnunet-transport-wlan-helper.c
 gnunet_transport_wlan_helper_LDADD = \
  -lpcap
+test_plugin_transport_wlan_SOURCES = \
+ test_plugin_transport_wlan_dummy.c
 
 gnunet_nat_client_SOURCES = \
  $(NATCLIENT)         
@@ -215,7 +219,8 @@ check_PROGRAMS = \
  test_quota_compliance_udp \
  test_quota_compliance_udp_asymmetric_recv_constant \
  $(HTTP_QUOTA_TEST) \
- $(HTTPS_QUOTA_TEST)
+ $(HTTPS_QUOTA_TEST) \
+ test_plugin_transport_wlan
 # TODO: add tests for nat, etc.
 
 if !DISABLE_TEST_RUN
index 7556e66639b6ee292201fdf4e3f11bcd398a4e42..87c140825e0d39c23e925f6d14c827e2de326bec 100644 (file)
@@ -33,6 +33,8 @@
 
 #include <pcap.h>
 
+
+
 //#include "radiotap.h"
 
 // mac of this node
@@ -643,3 +645,4 @@ main(int argc, char *argv[])
 
        return (0);
 }
+
index 1444af18e392ef48e88d74691c1821c185d5b69f..3c206a496e5b31d22719d8b805b46ce669186fb4 100644 (file)
@@ -24,6 +24,9 @@
  * @author David Brodski
  */
 
+#ifndef PLUGIN_TRANSPORT_WLAN
+#define PLUGIN_TRANSPORT_WLAN
+
 #include "gnunet_common.h"
 
 typedef unsigned int uint32_t;
@@ -163,3 +166,4 @@ struct RadiotapHeader
   uint8_t antenna;
 };
 
+#endif
index 4afb24ed4315501f666ab199ce8031e2afb21376..adfada461f65443c2d09562132f1a7b1720c5f0d 100644 (file)
 /*\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