#include "jdatagramsocket.h" #include #include #include using namespace jsocket; #define BUFFER_SIZE 4096 std::vector hosts; FILE *fd_hosts; int receive_port; int file_parser() { DatagramSocket *client; char *line = NULL; size_t length; ssize_t rd; char *host, *t; int port; while ((rd = getline(&line, &length, fd_hosts)) != EOF) { try { t = strtok(line, ":"); if (t == NULL) { continue; } host = t; t = strtok(NULL, ":"); if (t == NULL) { continue; } port = atoi(t); client = new DatagramSocket(host, port); if (client != NULL) { hosts.push_back(client); } } catch (...) { std::cout << "Error in file parser !" << std::endl; } } if (line != NULL) { delete [] line; } return 0; } int init_args(int argc, char **argv) { if (argc != 3) { return -1; } receive_port = atoi(argv[1]); fd_hosts = fopen(argv[2], "r"); if (fd_hosts == NULL) { return -1; } return 0; } int init_proxy() { DatagramSocket server(receive_port); DatagramSocket *client; char buffer[BUFFER_SIZE]; size_t length; std::vector::iterator i; while (true) { try { length = server.Receive(buffer, BUFFER_SIZE); for (i=hosts.begin(); i!=hosts.end(); i++) { client = (DatagramSocket *)(*i); if (client->Send(buffer, length) < 0) { std::cout << "Cliente " << client->GetInetAddress()->GetHostName() << " morto !" << std::endl; } } } catch (std::runtime_error &e) { std::cout << "error in init proxy" << e.what() << std::endl; } } return 0; } void help(char *p) { std::cout << "JProxy\n" << std::endl; std::cout << "use: " << p << " \n" << std::endl; exit(1); } int main(int argc, char **argv) { if (init_args(argc, argv) == -1) { help(argv[0]); } if (file_parser() == -1) { help(argv[0]); } if (init_proxy() == -1) { return -1; } return 0; }