From 7a3fe8ef43993f7b598bacc07cf801a6265b11af Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 6 Nov 2014 08:28:06 +0100 Subject: Add rtems_mdns_sethostname() Use it to set the multi-cast hostname of the default mDNS resolver instance via sethostname(). --- rtemsbsd/mdns/mdns.c | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) (limited to 'rtemsbsd/mdns/mdns.c') diff --git a/rtemsbsd/mdns/mdns.c b/rtemsbsd/mdns/mdns.c index 3cdcfe61..425c1276 100644 --- a/rtemsbsd/mdns/mdns.c +++ b/rtemsbsd/mdns/mdns.c @@ -31,6 +31,7 @@ #include #include +#include #include #include @@ -54,7 +55,7 @@ #include #include -static rtems_id daemon_id; +static rtems_id mdns_daemon_id; static mDNS mDNSStorage; @@ -223,7 +224,7 @@ mdns_gethostbyname(void *rval, void *cb_data, va_list ap) ctx.task_id = rtems_task_self(); mDNS_StartQuery(&mDNSStorage, &q); - rtems_bsd_force_select_timeout(daemon_id); + rtems_bsd_force_select_timeout(mdns_daemon_id); sc = rtems_event_transient_receive(RTEMS_WAIT, 10 * rtems_clock_get_ticks_per_second()); @@ -261,6 +262,36 @@ mdns_daemon(rtems_task_argument arg) } } +static void +truncate_at_first_dot(domainlabel *name) +{ + int c = name->c[0]; + int n = 0; + + while (n < c && name->c[n + 1] != '.') { + ++n; + } + + name->c[0] = n; +} + +static void +mdns_sethostname(const char *hostname) +{ + mDNS *m = &mDNSStorage; + + mDNS_Lock(m); + + MakeDomainLabelFromLiteralString(&m->hostlabel, hostname); + truncate_at_first_dot(&m->hostlabel); + + mDNS_Unlock(m); + + mDNS_SetFQDN(m); + + rtems_bsd_force_select_timeout(mdns_daemon_id); +} + rtems_status_code rtems_mdns_initialize(rtems_task_priority daemon_priority, CacheEntity *rrcachestorage, mDNSu32 rrcachesize) @@ -279,12 +310,12 @@ rtems_mdns_initialize(rtems_task_priority daemon_priority, sc = rtems_task_create(rtems_build_name('m', 'D', 'N', 'S'), daemon_priority, 16 * 1024, RTEMS_DEFAULT_MODES, - RTEMS_DEFAULT_ATTRIBUTES, &daemon_id); + RTEMS_DEFAULT_ATTRIBUTES, &mdns_daemon_id); if (sc != RTEMS_SUCCESSFUL) { return (RTEMS_UNSATISFIED); } - sc = rtems_task_start(daemon_id, mdns_daemon, 0); + sc = rtems_task_start(mdns_daemon_id, mdns_daemon, 0); if (sc != RTEMS_SUCCESSFUL) { return (RTEMS_UNSATISFIED); } @@ -311,6 +342,8 @@ rtems_mdns_initialize(rtems_task_priority daemon_priority, } } + rtems_mdns_sethostname_handler = mdns_sethostname; + return (RTEMS_SUCCESSFUL); } -- cgit v1.2.3