From 5777b7bdd024b6fc585f0b8b791b01ffbef72885 Mon Sep 17 00:00:00 2001 From: David Brodski Date: Tue, 21 Dec 2010 12:09:15 +0000 Subject: [PATCH] Dummy for testing --- src/transport/Makefile.am | 9 +- src/transport/gnunet-transport-wlan-helper.c | 3 + src/transport/plugin_transport_wlan.h | 4 + .../test_plugin_transport_wlan_dummy.c | 282 ++++++++++++------ 4 files changed, 204 insertions(+), 94 deletions(-) diff --git a/src/transport/Makefile.am b/src/transport/Makefile.am index e616c9d19..f1f72b689 100644 --- a/src/transport/Makefile.am +++ b/src/transport/Makefile.am @@ -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 diff --git a/src/transport/gnunet-transport-wlan-helper.c b/src/transport/gnunet-transport-wlan-helper.c index 7556e6663..87c140825 100644 --- a/src/transport/gnunet-transport-wlan-helper.c +++ b/src/transport/gnunet-transport-wlan-helper.c @@ -33,6 +33,8 @@ #include + + //#include "radiotap.h" // mac of this node @@ -643,3 +645,4 @@ main(int argc, char *argv[]) return (0); } + diff --git a/src/transport/plugin_transport_wlan.h b/src/transport/plugin_transport_wlan.h index 1444af18e..3c206a496 100644 --- a/src/transport/plugin_transport_wlan.h +++ b/src/transport/plugin_transport_wlan.h @@ -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 diff --git a/src/transport/test_plugin_transport_wlan_dummy.c b/src/transport/test_plugin_transport_wlan_dummy.c index 4afb24ed4..adfada461 100644 --- a/src/transport/test_plugin_transport_wlan_dummy.c +++ b/src/transport/test_plugin_transport_wlan_dummy.c @@ -1,99 +1,197 @@ /* - 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. + (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 #include #include #define FIFO_FILE1 "MYFIFOin" -#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"); - 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) { - perror("fopen"); - exit(1); - } - if((fpout = fopen(FIFO_FILE2, "w")) == NULL) { - perror("fopen"); - exit(1); - } - } else { - first = 0; - if(stat(FIFO_FILE2,&st) == 0){ - perror("FIFO 1 exists, but FIFO 2 not"); - exit(1); - } - if((fpout = fopen(FIFO_FILE1, "w")) == NULL) { - perror("fopen"); - exit(1); - } - if((fpin = fopen(FIFO_FILE2, "r")) == NULL) { - perror("fopen"); - exit(1); - } - - } - // Write the input to the output - - //clean up - if (first == 1){ - unlink(FIFO_FILE1); - unlink(FIFO_FILE2); - } - - - fclose(fpin); - fclose(fpout); - return(0); +#define FIFO_FILE2 "MYFIFOout" +#define MAXLINE 5000 + +int closeprog = 0; + +void sigfunc(int sig) +{ + + if(sig != SIGINT || sig != SIGTERM || sig != SIGKILL) + return; + else + { + closeprog = 1; + } } - + + + +int +main(int argc, char *argv[]) +{ + struct stat st; + int erg; + int first; + FILE *fpin; + FILE *fpout; + pid_t pid; + + signal(SIGINT,sigfunc); + signal(SIGTERM,sigfunc); + signal(SIGKILL,sigfunc); + + //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"); + 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) + { + perror("fopen"); + exit(1); + } + if ((fpout = fopen(FIFO_FILE2, "w")) == NULL) + { + perror("fopen"); + exit(1); + } + } + else + { + first = 0; + if (stat(FIFO_FILE2, &st) == 0) + { + perror("FIFO 1 exists, but FIFO 2 not"); + exit(1); + } + if ((fpout = fopen(FIFO_FILE1, "w")) == NULL) + { + perror("fopen"); + exit(1); + } + if ((fpin = fopen(FIFO_FILE2, "r")) == NULL) + { + perror("fopen"); + exit(1); + } + + } + + // fork + + if ((pid = fork()) < 0) + { + perror("FORK ERROR"); + return -3; + } + else if (pid == 0) // CHILD PROCESS + { + int rv = 0; + int read = 0; + int pos = 0; + char line[MAXLINE]; + + while (closeprog == 0) + { + read = 0; + + while (read < sizeof( struct RadiotapHeader) + sizeof(struct GNUNET_MessageHeader)){ + if ((rv = read(STDIN_FILENO, line, MAXLINE)) < 0) + { + perror("READ ERROR FROM STDIN"); + } + read += rv; + } + + pos = 0; + + fwrite(&line[pos], 1, sizeof(struct GNUNET_MessageHeader), fpout); + + pos += sizeof(struct GNUNET_MessageHeader); + + //do not send radiotap header + pos += sizeof( struct RadiotapHeader); + + while (pos < read) + { + pos += fwrite(&line[pos], 1, read - pos, fpout); + } + } + + + //clean up + fclose(fpout); + } + else // PARENT PROCESS + { + int rv = 0; + ssize_t pos = 0; + char line[MAXLINE]; + + while (closeprog == 0) + { + if ((rv = fread(line, 1, MAXLINE, fpin)) < 0) + { + perror("READ ERROR FROM STDIN"); + } + + pos = 0; + while (pos < rv) + { + pos += write(STDOUT_FILENO, &line[pos], rv - pos); + } + } + + + //clean up + fclose(fpin); + + if (first == 1) + { + unlink(FIFO_FILE1); + unlink(FIFO_FILE2); + } + } + + // Write the input to the output + + return (0); +} + -- 2.25.1