summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2015-02-17 17:30:03 +0100
committerTobias Klauser <tklauser@distanz.ch>2015-02-17 17:30:03 +0100
commit81bf2c13db079821b0bb1d5284df3b7818a6edbb (patch)
treed10d6cbc4c1db02fa40eee54a2c14a341d96338b /main.c
parent9a390acd44203dc7847ad05d86ac07082336c7fe (diff)
llmnrd: Rename main.c to llmnrd.c
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Diffstat (limited to 'main.c')
-rw-r--r--main.c150
1 files changed, 0 insertions, 150 deletions
diff --git a/main.c b/main.c
deleted file mode 100644
index 80cf6cc..0000000
--- a/main.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * llmnrd -- LLMNR (RFC 4705) responder daemon.
- *
- * Copyright (C) 2014-2015 Tobias Klauser <tklauser@distanz.ch>
- *
- * This file is part of llmnrd.
- *
- * llmnrd 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, version 2 of the License.
- *
- * llmnrd 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 llmnrd. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <getopt.h>
-#include <signal.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <sys/ioctl.h>
-
-#include "compiler.h"
-#include "log.h"
-#include "util.h"
-
-#include "iface.h"
-#include "llmnr.h"
-#include "llmnr-packet.h"
-
-static const char *short_opts = "H:p:dh";
-static const struct option long_opts[] = {
- { "hostname", required_argument, NULL, 'H' },
- { "port", required_argument, NULL, 'p' },
- { "daemonize", no_argument, NULL, 'd' },
- { "help", no_argument, NULL, 'h' },
- { NULL, 0, NULL, 0 },
-};
-
-static void __noreturn usage_and_exit(int status)
-{
- fprintf(stdout, "Usage: llmnrd [OPTIONS]\n"
- "Options:\n"
- " -H, --hostname <name> set hostname to respond with (default: system hostname)\n"
- " -p, --port <number> set port number to listen on (default: %d)\n"
- " -d, --daemonize run as daemon in the background\n"
- " -h, --help show this help and exit\n",
- LLMNR_UDP_PORT);
- exit(status);
-}
-
-static void signal_handler(int sig)
-{
- switch (sig) {
- case SIGINT:
- case SIGQUIT:
- case SIGTERM:
- log_info("Interrupt received. Stopping llmnrd.\n");
- iface_stop();
- llmnr_stop();
- break;
- case SIGHUP:
- default:
- /* ignore */
- break;
- }
-}
-
-static void register_signal(int sig, void (*handler)(int))
-{
- sigset_t block_mask;
- struct sigaction saction;
-
- sigfillset(&block_mask);
-
- saction.sa_handler = handler;
- saction.sa_mask = block_mask;
-
- if (sigaction(sig, &saction, NULL) != 0) {
- log_err("Failed to register signal handler for %s (%d)\n",
- strsignal(sig), sig);
- }
-}
-
-int main(int argc, char **argv)
-{
- int c, ret = EXIT_FAILURE;
- long num_arg;
- bool daemonize = false;
- char *hostname = "";
- uint16_t port = LLMNR_UDP_PORT;
-
- while ((c = getopt_long(argc, argv, short_opts, long_opts, NULL)) != -1) {
- switch (c) {
- case 'd':
- daemonize = true;
- break;
- case 'H':
- hostname = xstrdup(optarg);
- break;
- case 'p':
- num_arg = strtol(optarg, NULL, 0);
- if (num_arg < 0 || num_arg > UINT16_MAX) {
- log_err("Invalid port number: %ld\n", num_arg);
- return EXIT_FAILURE;
- }
- port = num_arg;
- case 'h':
- ret = EXIT_SUCCESS;
- /* fall through */
- default:
- usage_and_exit(ret);
- }
- }
-
- register_signal(SIGINT, signal_handler);
- register_signal(SIGQUIT, signal_handler);
- register_signal(SIGTERM, signal_handler);
- register_signal(SIGHUP, signal_handler);
-
- if (hostname[0] == '\0') {
- /* TODO: Consider hostname changing at runtime */
- hostname = xmalloc(255);
- if (gethostname(hostname, 255) != 0) {
- log_err("Failed to get hostname");
- return EXIT_FAILURE;
- }
- }
-
- if (daemonize) {
- /* TODO */
- }
-
- if (iface_start_thread() < 0)
- goto out;
-
- ret = llmnr_run(hostname, port);
-out:
- free(hostname);
- return ret;
-}