hlr: add TC_MSLookup_mDNS_service_other_home

Send an mslookup mDNS request to the home HLR, asking about a service
that is not "gsup.hlr". Hence the "_other" in the test name, service
"gsup.hlr" has different code paths, and related tests will be added in
follow-up patches.

This is the first test using MSLookup_mDNS_Emulation, so add related
test infrastructure.

Related: OS#4380
Depends: osmo-hlr I2fe453553c90e6ee527ed13a13089900efd488aa
Change-Id: Ia7f92d33691f910549353b16a7b0efc18e521719
diff --git a/library/MSLookup_mDNS_Emulation.ttcn b/library/MSLookup_mDNS_Emulation.ttcn
new file mode 100644
index 0000000..029091d
--- /dev/null
+++ b/library/MSLookup_mDNS_Emulation.ttcn
@@ -0,0 +1,45 @@
+module MSLookup_mDNS_Emulation {
+
+/* (C) 2020 sysmocom s.f.m.c. GmbH <info@sysmocom.de>
+ * 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);
+}
+
+}