module MSLookup_mDNS_Emulation { /* (C) 2020 sysmocom s.f.m.c. GmbH * All rights reserved. * * Released under the terms of GNU General Public License, Version 2 or * (at your option) any later version. * * SPDX-License-Identifier: GPL-2.0-or-later */ import from DNS_Types all; import from UDPasp_Types all; import from MSLookup_mDNS_Types all; /* Transcode between mDNS and UDP: Wait for DNS packets on the mDNS port, encode them as UDP and forward them to the mDNS_UDP port. Wait for UDP packets on mDNS_UDP port, decode them as DNS and forward them to the mDNS port. */ function f_main() runs on MSLookup_mDNS_Emulation_CT { var MSLookup_mDNS vl_dnsmsg; var ASP_UDP vl_udpmsg; map(self:mDNS_UDP, system:UDP); alt { [] mDNS_UDP.receive(ASP_UDP:?) -> value vl_udpmsg { mDNS.send(MSLookup_mDNS: { dec_PDU_DNS(vl_udpmsg.data), vl_udpmsg.addressf, vl_udpmsg.portf }); repeat; } [] mDNS.receive(MSLookup_mDNS:?) -> value vl_dnsmsg { mDNS_UDP.send(ASP_UDP: { enc_PDU_DNS(vl_dnsmsg.dnsMessage, false, true), vl_dnsmsg.udpAddress, vl_dnsmsg.udpPort }); repeat; } } unmap(self:mDNS_UDP, system:UDP); } }