Last active
August 29, 2015 13:58
-
-
Save probonopd/9986109 to your computer and use it in GitHub Desktop.
Announce services using tinysvcmdns
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/sh /etc/rc.common | |
| # This script should not have the same name as one of the binaries | |
| # that gets launched by it, otherwise it terminates itself rather | |
| # than shutting down cleanly. | |
| START=94 | |
| STOP=1 | |
| start() { | |
| run-announce & # & is important, otherwise boot hangs | |
| } | |
| stop() { | |
| killall run-announce >/dev/null 2>&1 | |
| killall announce >/dev/null 2>&1 | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| * Announce services using tinysvcmdns | |
| */ | |
| #include <sys/socket.h> | |
| #include <netdb.h> | |
| #include <arpa/inet.h> | |
| #include <signal.h> | |
| #include <stdio.h> | |
| #include "mdns.h" | |
| #include "mdnsd.h" | |
| #include <netdb.h> | |
| int done = 0; | |
| void term(int signum) | |
| { | |
| printf("\nReceived SIGTERM, exiting...\n"); | |
| done = 1; | |
| } | |
| int main(int argc, char *argv[]) { | |
| struct sigaction action; | |
| memset(&action, 0, sizeof(struct sigaction)); | |
| action.sa_handler = term; | |
| sigaction(SIGTERM, &action, NULL); // Catch kill, killall | |
| sigaction(SIGINT, &action, NULL); // Catch Ctrl-C | |
| if (argc < 7) { | |
| printf("Usage: %s 'hello.local' 192.168.0.11 'My Website' '_http._tcp.local' 80 'path=/mywebsite'\n", argv[0]); | |
| exit(1); | |
| } | |
| struct mdnsd *svr = mdnsd_start(); | |
| if (svr == NULL) { | |
| printf("mdnsd_start() error\n"); | |
| return 1; | |
| } | |
| char *hostname = argv[1]; | |
| mdnsd_set_hostname(svr, hostname, inet_addr(argv[2])); | |
| struct rr_entry *a2_e = NULL; | |
| a2_e = rr_create_a(create_nlabel(hostname), inet_addr(argv[2])); | |
| mdnsd_add_rr(svr, a2_e); | |
| const char *txt[] = { argv[6], NULL }; | |
| struct mdns_service *svc = mdnsd_register_svc(svr, argv[3], argv[4], atoi(argv[5]), NULL, txt); | |
| mdns_service_destroy(svc); | |
| printf("Announcing service. Press Ctrl-C to exit\n"); | |
| while (!done) sleep(1); | |
| mdnsd_stop(svr); | |
| return 0; | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/sh | |
| # Check whether certain services are running locally and announce them accordingly | |
| HOSTNAME=$(uci get system.@system[0].hostname) | |
| L=".local" | |
| launch() { | |
| IPS=$(ifconfig | grep "inet addr" | cut -d ":" -f 2 | cut -d " " -f 1) | |
| for IP in $IPS ; do | |
| announce $HOSTNAME$L $IP $HOSTNAME $1$L $2 ''$3 >/dev/null 2>&1 & | |
| done | |
| } | |
| killall announce >/dev/null 2>&1 | |
| while true ; do | |
| killall -9 announce >/dev/null 2>&1 | |
| pidof dropbear >/dev/null && launch "_ssh._tcp" 22 | |
| pidof uhttpd >/dev/null && launch "_http._tcp" 80 'path=/' | |
| ls /usr/libexec/sftp-server >/dev/null && launch "_sftp-ssh._tcp" 22 | |
| sleep 15 | |
| done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment