From 5fd83771641d15c418f747bd343ba6738d3875f7 Mon Sep 17 00:00:00 2001 From: Cameron Katri Date: Sun, 9 May 2021 14:20:58 -0400 Subject: Import macOS userland adv_cmds-176 basic_cmds-55 bootstrap_cmds-116.100.1 developer_cmds-66 diskdev_cmds-667.40.1 doc_cmds-53.60.1 file_cmds-321.40.3 mail_cmds-35 misc_cmds-34 network_cmds-606.40.1 patch_cmds-17 remote_cmds-63 shell_cmds-216.60.1 system_cmds-880.60.2 text_cmds-106 --- network_cmds/mnc.tproj/mnc_main.c | 131 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 network_cmds/mnc.tproj/mnc_main.c (limited to 'network_cmds/mnc.tproj/mnc_main.c') diff --git a/network_cmds/mnc.tproj/mnc_main.c b/network_cmds/mnc.tproj/mnc_main.c new file mode 100644 index 0000000..1e5c5af --- /dev/null +++ b/network_cmds/mnc.tproj/mnc_main.c @@ -0,0 +1,131 @@ +/* + * $Id: mnc_main.c,v 1.12 2004/09/22 19:14:23 colmmacc Exp $ + * + * mnc_main.c -- Multicast NetCat + * + * Colm MacCarthaigh, + * + * Copyright (c) 2007, Colm MacCarthaigh. + * Copyright (c) 2004 - 2006, HEAnet Ltd. + * + * This software is an open source. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the HEAnet Ltd. nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef WINDOWS + +/* Non-windows includes */ + +#include +#include +#include +#include + +#else + +/* Windows-specific includes */ + +#include +#include +#include +#include + +#endif /* WINDOWS */ + +#include "mnc.h" + +int main(int argc, char **argv) +{ + /* Utility variables */ + int sock, + len; + char buffer[1024]; + + /* Our main configuration */ + struct mnc_configuration * config; + +#ifdef WINDOWS + WSADATA wsaData; + + if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) + { + mnc_error("This operating system is not supported\n"); + } +#endif + + /* Parse the command line */ + config = parse_arguments(argc, argv); + + /* Create a socket */ + if ((sock = socket(config->group->ai_family, config->group->ai_socktype, + config->group->ai_protocol)) < 0) + { + mnc_error("Could not create socket\n"); + } + + /* Are we supposed to listen? */ + if (config->mode == LISTENER) + { + /* Set up the socket for listening */ + if (multicast_setup_listen(sock, config->group, config->source, + config->iface) < 0) + { + mnc_error("Can not listen for multicast packets.\n"); + } + + /* Recieve the packets */ + while ((len = recvfrom(sock, buffer, sizeof(buffer), + 0, NULL, NULL)) >= 0) + { + write(STDOUT_FILENO, buffer, len); + } + } + else /* Assume MODE == SENDER */ + { + /* Set up the socket for sending */ + if (multicast_setup_send(sock, config->group, config->source) + < 0) + { + mnc_error("Can not send multicast packets\n"); + } + + /* Send the packets */ + while((len = read(STDIN_FILENO, buffer, sizeof(buffer))) > 0) + { + sendto(sock, buffer, len, 0, config->group->ai_addr, + config->group->ai_addrlen); + } + } + + /* Close the socket */ + close(sock); + + return 0; +} -- cgit v1.2.3-56-ge451