diff --git a/src/test/network_example1/main_network_1.c b/src/test/network_example1/main_network_1.c deleted file mode 100644 index 48ca0b9..0000000 --- a/src/test/network_example1/main_network_1.c +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (C) 2010 INSYS Microelectronics GmbH - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -/******************************************************************* - * - * @author mlauterbach - * @version 0.0.1 - * - ********************************************************************/ -#include -#include -#include -#include -#include -#include -#include - -#define EVSE 1 -#define PEV 2 - -static char *help_string = -"%s: Valid parameters are:\n" -" -v - print the program version and exit\n" -" -d - daemonize this process\n" -" -m - mode of application with x=1 EVSE or x=2 PEV\n" -" -h - help\n"; - -extern void run_evse(unsigned int port); -extern void run_pev(unsigned int port); - - -static void arg_error(char *name) -{ - fprintf(stderr, help_string, name); - exit(1); -} - - -int main_network_1(int argc, char *argv[]) -{ - int fd0, fd1, fd2; - int i, pid; - int daemonize = 0; - int mode = -1; - unsigned int port = 7259; /* TODO port is fix, should be configurable */ - - /* check arguments */ - if(argc == 1) - arg_error("too few parameters"); - for (i = 1; i < argc; i++) { - if ((argv[i][0] != '-') || (strlen(argv[i]) > 3)) { - fprintf(stderr, "Invalid argument: '%s'\n", argv[i]); - arg_error(argv[0]); - } - switch (argv[i][1]) { - - case 'd': - daemonize = 1; - break; - - case 'm': - mode = atoi(&argv[i][2]); - if(mode != EVSE && mode != PEV) { - fprintf(stderr, "Invalid option: '%s'\n", argv[i]); - arg_error(argv[0]); - } - break; - - case 'h' : - fprintf(stdout, help_string, argv[0]); - exit(0); - - case 'v': - printf("%s Example 1: 0.0.1\n", argv[0]); - exit(0); - - default: - fprintf(stderr, "Invalid option: '%s'\n", argv[i]); - arg_error(argv[0]); - } - } - - if (daemonize) { - if ((pid = fork()) > 0) { - exit(0); - } else if (pid < 0) { - printf("Error forking first fork\n"); - exit(1); - } else { - /* setsid() is necessary if we really want to demonize */ - if(setsid() == -1) - printf("Error setsid()\n"); - /* Second fork to really deamonize me. */ - if ((pid = fork()) > 0) { - exit(0); - } else if (pid < 0) { - printf("Error forking second fork\n"); - exit(1); - } - } - /* change working directory to root so we won't prevent file systems - * from being unmounted. - */ - if(chdir("/") < 0) { - ; - } - /* Attach file descriptors 0, 1, and 2 to /dev/null */ - fd0 = open("/dev/null", O_RDWR); - fd1 = dup(0); - fd2 = dup(0); - }else { - printf("+++Start EVSE/PEV Example+++\n\n"); - } - - if (mode == EVSE) { - printf("+++Start EVSE on port: %i+++\n\n", port); - run_evse(port); - - }else if (mode == PEV) { - printf("+++Start PEV to port: %i+++\n\n", port); - run_pev(port); - } - - printf("+++Terminate EV2SE Example+++\n\n"); - return 0; -} diff --git a/src/test/network_example1/run_evse.c b/src/test/network_example1/run_evse.c deleted file mode 100644 index bac2a86..0000000 --- a/src/test/network_example1/run_evse.c +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Copyright (C) 2010 INSYS Microelectronics GmbH - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -/******************************************************************* - * - * @author mlauterbach - * @version 0.0.1 - * - ********************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -fd_set master_fd; /* master fd list */ -fd_set read_fds; /* tmp fd list for select() */ -int fdmax; /* maximum file descriptor number */ -int listen_fd; /* file descriptor for TCP-Server */ -int pev_fd; /* file descriptor to PEV */ - - -static void close_server(void) -{ - if(listen_fd == -1) - return; - tcflush(listen_fd, TCIOFLUSH); - FD_CLR(listen_fd, &master_fd); - close(listen_fd); - listen_fd = -1; - - return; -} - - -static void init_server(void) -{ - listen_fd = -1; - pev_fd = -1; - FD_ZERO(&master_fd); - FD_ZERO(&read_fds); - - return; -} - - -static void cleanup_server(void) -{ - close_server(); - if(pev_fd != -1) { - close(pev_fd); - pev_fd = -1; - } - return; -} - - -static int start_server(unsigned int port) -{ - - int yes = 1; - struct addrinfo hints; - struct addrinfo *ai; - char str_port[10]; - - memset(&hints, 0, sizeof hints); - hints.ai_family = AF_INET; - hints.ai_socktype = SOCK_STREAM; - hints.ai_flags = AI_PASSIVE; - - sprintf(str_port, "%d", port); - if ((getaddrinfo(NULL, str_port, &hints, &ai)) != 0) { - printf("ERROR: Could not get address info for the TCP listener: %s\n", strerror(errno)); - return -1; - } - - listen_fd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); /* create the socket */ - if (listen_fd < 0) { - printf("ERROR: Creation of TCP listen socket failed: %s\n", strerror(errno)); - listen_fd = -1; - return 1; - } - - setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)); /* just some options */ - if (bind(listen_fd, ai->ai_addr, ai->ai_addrlen) < 0) { /* now we bind it to the port */ - printf("ERROR: Binding TCP listen socket failed: %s\n", strerror(errno)); - close(listen_fd); - listen_fd = -1; - return -1; - - } - freeaddrinfo(ai); - - if (listen(listen_fd, 10) == -1) { /* and put the socket in listen-mode */ - printf("ERROR: Listening on TCP listen socket failed: %s\n", strerror(errno)); - close(listen_fd); - listen_fd = -1; - return -1; - } - - FD_SET(listen_fd, &master_fd); - if(listen_fd > fdmax) - fdmax = listen_fd; - - printf("DEBUG: TCP-Server fd:%i\n", listen_fd); - return listen_fd; -} - - -static int accept_connection(void) -{ - - struct sockaddr_in remoteaddr; - socklen_t addrlen = sizeof remoteaddr; - - pev_fd = accept(listen_fd, (struct sockaddr *) &remoteaddr, &addrlen); - if (pev_fd == -1) { - printf("ERROR: Could not accept on TCP listen socket: %s\n", strerror(errno)); - return -1; - } - - FD_SET(pev_fd, &master_fd); - if (pev_fd > fdmax) { - fdmax = pev_fd; - } - - printf("PEV arrived .................... ;-)\n"); - close_server(); - return pev_fd; -} - - -static int handle_tcp_data(void) -{ - ssize_t read_bytes; - uint8_t buffer[512]; - - read_bytes = read(pev_fd, buffer, sizeof(buffer)); /* get data from PEV */ - if(read_bytes < 1) { - if(errno != EAGAIN) { - if(errno == EBADF) - printf("ERROR: Reading from TCP failed: connection is gone\n"); - else - printf("ERROR: Reading from TCP failed: %d: %s\n", errno, strerror(errno)); - printf("INFO: PEV gone\n"); - close(pev_fd); - return -1; - } - } - printf("INFO: number of bytes from PEV: %i\n", read_bytes); - - /* TODO give data to DoIP/EXI Parser and send response to PEV, if a complete EXI msg. was received */ - - return 0; -} - - -void run_evse(unsigned int port) -{ - int sel; - struct timeval tv; - - init_server(); - - listen_fd = start_server(port); - if (listen_fd == -1) { - printf("ERROR: open_server failed\n"); - return; - } - - for (;;) { - - tv.tv_sec = 0; - tv.tv_usec = 100000; - FD_ZERO(&read_fds); - read_fds = master_fd; - - sel = select(fdmax + 1, &read_fds, NULL, NULL, &tv); - if(sel > 0) { - if (FD_ISSET(listen_fd, &read_fds)) - accept_connection(); - if (FD_ISSET(pev_fd, &read_fds)) - if(handle_tcp_data() == -1) { /* PEV gone */ - break; - } - }else if (sel == -1) { - break; - } - } - - cleanup_server(); - return; -} diff --git a/src/test/network_example1/run_pev.c b/src/test/network_example1/run_pev.c deleted file mode 100644 index e2e44dd..0000000 --- a/src/test/network_example1/run_pev.c +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2010 INSYS Microelectronics GmbH - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -/******************************************************************* - * - * @author mlauterbach - * @version 0.0.1 - * - ********************************************************************/ - -void run_pev(unsigned int port) -{ - - // TODO - return; -}