react-native-zeroconf 0.13.8 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +49 -0
- package/README.md +489 -65
- package/android/build.gradle +23 -24
- package/android/src/main/AndroidManifest.xml +5 -2
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroConfImplFactory.java +10 -3
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroconfModule.java +3 -2
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/nsd/NsdServiceImpl.java +83 -22
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/rx2dnssd/DnssdImpl.java +61 -16
- package/android/src/main/java/com/github/druk/dnssd/BaseListener.java +33 -0
- package/android/src/main/java/com/github/druk/dnssd/BrowseListener.java +67 -0
- package/android/src/main/java/com/github/druk/dnssd/DNSRecord.java +47 -0
- package/android/src/main/java/com/github/druk/dnssd/DNSSD.java +650 -0
- package/android/src/main/java/com/github/druk/dnssd/DNSSDBindable.java +67 -0
- package/android/src/main/java/com/github/druk/dnssd/DNSSDEmbedded.java +135 -0
- package/android/src/main/java/com/github/druk/dnssd/DNSSDException.java +66 -0
- package/android/src/main/java/com/github/druk/dnssd/DNSSDRecordRegistrar.java +55 -0
- package/android/src/main/java/com/github/druk/dnssd/DNSSDRegistration.java +54 -0
- package/android/src/main/java/com/github/druk/dnssd/DNSSDService.java +35 -0
- package/android/src/main/java/com/github/druk/dnssd/DomainListener.java +57 -0
- package/android/src/main/java/com/github/druk/dnssd/InternalBrowseListener.java +76 -0
- package/android/src/main/java/com/github/druk/dnssd/InternalDNSSD.java +870 -0
- package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDRecordRegistrar.java +30 -0
- package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDRegistration.java +34 -0
- package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDService.java +29 -0
- package/android/src/main/java/com/github/druk/dnssd/InternalDomainListener.java +62 -0
- package/android/src/main/java/com/github/druk/dnssd/InternalQueryListener.java +61 -0
- package/android/src/main/java/com/github/druk/dnssd/InternalRegisterListener.java +51 -0
- package/android/src/main/java/com/github/druk/dnssd/InternalResolveListener.java +58 -0
- package/android/src/main/java/com/github/druk/dnssd/NSClass.java +16 -0
- package/android/src/main/java/com/github/druk/dnssd/NSType.java +58 -0
- package/android/src/main/java/com/github/druk/dnssd/QueryListener.java +54 -0
- package/android/src/main/java/com/github/druk/dnssd/RegisterListener.java +46 -0
- package/android/src/main/java/com/github/druk/dnssd/RegisterRecordListener.java +35 -0
- package/android/src/main/java/com/github/druk/dnssd/ResolveListener.java +55 -0
- package/android/src/main/java/com/github/druk/dnssd/TXTRecord.java +293 -0
- package/android/src/main/java/com/github/druk/rx2dnssd/BonjourService.java +400 -0
- package/android/src/main/java/com/github/druk/rx2dnssd/Rx2BrowseListener.java +55 -0
- package/android/src/main/java/com/github/druk/rx2dnssd/Rx2Dnssd.java +127 -0
- package/android/src/main/java/com/github/druk/rx2dnssd/Rx2DnssdBindable.java +35 -0
- package/android/src/main/java/com/github/druk/rx2dnssd/Rx2DnssdCommon.java +280 -0
- package/android/src/main/java/com/github/druk/rx2dnssd/Rx2DnssdEmbedded.java +31 -0
- package/android/src/main/java/com/github/druk/rx2dnssd/Rx2QueryListener.java +70 -0
- package/android/src/main/java/com/github/druk/rx2dnssd/Rx2RegisterListener.java +47 -0
- package/android/src/main/java/com/github/druk/rx2dnssd/Rx2ResolveListener.java +51 -0
- package/android/src/main/jni/Android.mk +95 -0
- package/android/src/main/jni/Application.mk +3 -0
- package/android/src/main/jni/DNSSD.java.h +290 -0
- package/android/src/main/jni/JNISupport.c +1140 -0
- package/android/src/main/jni/mdnsresponder/Android.bp +215 -0
- package/android/src/main/jni/mdnsresponder/Clients/ClientCommon.c +75 -0
- package/android/src/main/jni/mdnsresponder/Clients/ClientCommon.h +41 -0
- package/android/src/main/jni/mdnsresponder/Clients/Makefile +54 -0
- package/android/src/main/jni/mdnsresponder/Clients/ReadMe.txt +25 -0
- package/android/src/main/jni/mdnsresponder/Clients/dns-sd.c +1351 -0
- package/android/src/main/jni/mdnsresponder/LICENSE +13 -0
- package/android/src/main/jni/mdnsresponder/MODULE_LICENSE_APACHE2 +0 -0
- package/android/src/main/jni/mdnsresponder/Makefile +41 -0
- package/android/src/main/jni/mdnsresponder/NOTICE +13 -0
- package/android/src/main/jni/mdnsresponder/PrivateDNS.txt +275 -0
- package/android/src/main/jni/mdnsresponder/README.txt +166 -0
- package/android/src/main/jni/mdnsresponder/README.version +3 -0
- package/android/src/main/jni/mdnsresponder/android/caseMapping/Iphlpapi.h +1 -0
- package/android/src/main/jni/mdnsresponder/android/caseMapping/README +3 -0
- package/android/src/main/jni/mdnsresponder/android/caseMapping/Resource.h +1 -0
- package/android/src/main/jni/mdnsresponder/android/caseMapping/Ws2tcpip.h +1 -0
- package/android/src/main/jni/mdnsresponder/android/caseMapping/ipExport.h +1 -0
- package/android/src/main/jni/mdnsresponder/android/windows_firewall_dummy.c +10 -0
- package/android/src/main/jni/mdnsresponder/mDNSCore/DNSCommon.c +3157 -0
- package/android/src/main/jni/mdnsresponder/mDNSCore/DNSCommon.h +292 -0
- package/android/src/main/jni/mdnsresponder/mDNSCore/DNSDigest.c +1579 -0
- package/android/src/main/jni/mdnsresponder/mDNSCore/Implementer Notes.txt +66 -0
- package/android/src/main/jni/mdnsresponder/mDNSCore/mDNS.c +11469 -0
- package/android/src/main/jni/mdnsresponder/mDNSCore/mDNSDebug.h +164 -0
- package/android/src/main/jni/mdnsresponder/mDNSCore/mDNSEmbeddedAPI.h +2974 -0
- package/android/src/main/jni/mdnsresponder/mDNSCore/uDNS.c +4969 -0
- package/android/src/main/jni/mdnsresponder/mDNSCore/uDNS.h +132 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/Client.c +223 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/ExampleClientApp.c +91 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/ExampleClientApp.h +18 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/Identify.c +378 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/Makefile +520 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/NetMonitor.c +1010 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/PosixDaemon.c +329 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/ProxyResponder.c +300 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/ReadMe.txt +314 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/Responder.c +792 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/Services.txt +36 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/libnss_mdns.8 +148 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/mDNSPosix.c +1685 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/mDNSPosix.h +88 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/mDNSUNP.c +726 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/mDNSUNP.h +130 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/mdnsd.sh +73 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_ReadMe.txt +125 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_mdns.c +2723 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_mdns.conf +13 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_mdns.conf.5 +135 -0
- package/android/src/main/jni/mdnsresponder/mDNSPosix/parselog.py +247 -0
- package/android/src/main/jni/mdnsresponder/mDNSResponder.sln +400 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/CommonServices.h +1537 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/DebugServices.c +3075 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/DebugServices.h +1607 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/GenLinkedList.c +319 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/GenLinkedList.h +90 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/PlatformCommon.c +220 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/PlatformCommon.h +18 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/dns-sd.1 +194 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/dns_sd.h +2452 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.8 +69 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.c +3146 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.conf +60 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.h +163 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd_lexer.l +84 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd_parser.y +585 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_clientlib.c +368 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_clientshim.c +802 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_clientstub.c +1988 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_ipc.c +161 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_ipc.h +219 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/mDNS.1 +198 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/mDNSDebug.c +93 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/mDNSResponder.8 +116 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/uds_daemon.c +4758 -0
- package/android/src/main/jni/mdnsresponder/mDNSShared/uds_daemon.h +80 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/BrowsingPage.cpp +441 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/BrowsingPage.h +156 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigDialog.cpp +59 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigDialog.h +48 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigPropertySheet.cpp +301 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigPropertySheet.h +105 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.cpp +380 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.def +20 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.h +84 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.rc +141 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.vcproj +727 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelDll.rc +123 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.cpp +373 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.h +48 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.rc +123 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.vcproj +764 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelLocRes.rc +270 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelLocRes.vcproj +487 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelRes.rc +134 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelRes.vcproj +518 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/FourthPage.cpp +197 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/FourthPage.h +87 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/RegistrationPage.cpp +387 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/RegistrationPage.h +75 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SecondPage.cpp +544 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SecondPage.h +107 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ServicesPage.cpp +273 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ServicesPage.h +123 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SharedSecret.cpp +115 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SharedSecret.h +54 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.dll.manifest +10 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.exe.manifest +17 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.manifest +17 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.rc2 +13 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel64.manifest +17 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/EnergySaver.ico +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/controlpanel.ico +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/failure.ico +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/success.ico +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/resource.h +56 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/stdafx.cpp +20 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/stdafx.h +64 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dll.aps +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dll.rc +102 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dllmain.c +112 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dnssd.def +48 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dnssd.vcproj +472 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/resource.h +27 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/AssemblyInfo.cpp +84 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/PString.h +70 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/Stdafx.cpp +22 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/Stdafx.h +33 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.cpp +1234 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.h +1392 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.ico +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.rc +113 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.vcproj +446 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/resource.h +3 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLStub/DLLStub.cpp +693 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLStub/DLLStub.h +52 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLStub/DLLStub.vcproj +324 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.cpp +208 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.def +35 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.idl +491 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.rc +126 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.rgs +11 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.vcproj +625 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSD.cpp +892 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDEventManager.cpp +31 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDEventManager.h +133 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDEventManager.rgs +27 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDRecord.cpp +101 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDRecord.h +185 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDRecord.rgs +27 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDService.cpp +2095 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDService.h +429 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDService.rgs +27 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/StringServices.cpp +344 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/StringServices.h +102 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/TXTRecord.cpp +381 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/TXTRecord.h +203 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/TXTRecord.rgs +27 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/_IDNSSDEvents_CP.h +358 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/dlldatax.c +51 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/dlldatax.h +49 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/resource.h +30 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/stdafx.h +88 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2002.sln +21 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2002.vcproj +253 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2003.sln +21 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2003.vcproj +267 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Application.ico +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Application.rc +323 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Application.rc2 +20 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Resource.h +53 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/AboutDialog.cpp +71 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/AboutDialog.h +62 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/Application.cpp +111 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/Application.h +68 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/ChooserDialog.cpp +1426 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/ChooserDialog.h +131 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/LoginDialog.cpp +109 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/LoginDialog.h +53 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/StdAfx.cpp +18 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/StdAfx.h +48 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Application.vcc +37 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Application.vcp +868 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Application.vcw +29 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/Application.ico +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/Application.rc +194 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/Application.rc2 +13 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/newres.h +28 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/resource.h +22 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/Application.cpp +92 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/Application.h +57 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/BrowserDialog.cpp +394 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/BrowserDialog.h +84 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/StdAfx.cpp +18 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/StdAfx.h +46 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/Java.vcproj +111 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/jdns_sd.rc +62 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/makefile +143 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/makefile64 +143 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.aps +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.c +581 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.rc +103 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.vcproj +409 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/Prefix.h +28 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/resource.h +27 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/PosixCompat.c +128 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/PosixCompat.h +70 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/README.txt +85 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/RegNames.h +57 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/Secret.c +338 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/Secret.h +42 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/EventLog.mc +11 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/EventLogMessages.bin +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Firewall.cpp +484 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Firewall.h +79 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Prefix.h +30 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.aps +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.c +2669 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.h +30 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.mcp +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.rc +114 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.vcproj +562 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/main.c +32 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/res/mDNSResponder.manifest +12 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/res/mDNSResponder64.manifest +12 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/resource.h +17 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/resrc1.h +15 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/VPCDetect.cpp +165 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/VPCDetect.h +36 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/WinServices.cpp +93 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/WinServices.h +34 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/WinVersRes.h +35 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/isocode.h +135 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/loclibrary.c +268 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/loclibrary.h +54 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mDNSWin32.c +5200 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mDNSWin32.h +208 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/ReadMe.txt +15 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.aps +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.c +2430 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.def +24 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.rc +104 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.vcproj +457 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/resource.h +27 -0
- package/android/src/main/jni/mdnsresponder/mdnsd.rc +7 -0
- package/android/src/main/jni/nameser.h +588 -0
- package/dist/index.js +160 -1
- package/index.d.ts +91 -0
- package/ios/RNZeroconf/RNNetServiceSerializer.m +7 -3
- package/ios/RNZeroconf/RNZeroconf.m +8 -0
- package/package.json +25 -17
- package/src/index.js +183 -0
|
@@ -0,0 +1,1140 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4 -*-
|
|
2
|
+
*
|
|
3
|
+
* Copyright (c) 2004 Apple Computer, Inc. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
|
|
17
|
+
This file contains the platform support for DNSSD and related Java classes.
|
|
18
|
+
It is used to shim through to the underlying <dns_sd.h> API.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
// AUTO_CALLBACKS should be set to 1 if the underlying mDNS implementation fires response
|
|
22
|
+
// callbacks automatically (as in the early Windows prototypes).
|
|
23
|
+
// AUTO_CALLBACKS should be set to 0 if the client must call DNSServiceProcessResult() to
|
|
24
|
+
// invoke response callbacks (as is true on Mac OS X, Posix, Windows, etc.).
|
|
25
|
+
// (Invoking callbacks automatically on a different thread sounds attractive, but while
|
|
26
|
+
// the client gains by not needing to add an event source to its main event loop, it loses
|
|
27
|
+
// by being forced to deal with concurrency and locking, which can be a bigger burden.)
|
|
28
|
+
#ifndef AUTO_CALLBACKS
|
|
29
|
+
#define AUTO_CALLBACKS 0
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
#if !AUTO_CALLBACKS
|
|
33
|
+
#ifdef _WIN32
|
|
34
|
+
#include <winsock2.h>
|
|
35
|
+
#else //_WIN32
|
|
36
|
+
#include <sys/types.h>
|
|
37
|
+
#include <sys/select.h>
|
|
38
|
+
#endif // _WIN32
|
|
39
|
+
#endif // AUTO_CALLBACKS
|
|
40
|
+
|
|
41
|
+
#include "dns_sd.h"
|
|
42
|
+
|
|
43
|
+
#include <stdio.h>
|
|
44
|
+
#include <stdlib.h>
|
|
45
|
+
#include <string.h>
|
|
46
|
+
#ifdef _WIN32
|
|
47
|
+
#include <winsock2.h>
|
|
48
|
+
#include <iphlpapi.h>
|
|
49
|
+
static char * if_indextoname( DWORD ifIndex, char * nameBuff);
|
|
50
|
+
static DWORD if_nametoindex( const char * nameStr );
|
|
51
|
+
#define IF_NAMESIZE MAX_ADAPTER_NAME_LENGTH
|
|
52
|
+
#else // _WIN32
|
|
53
|
+
#include <sys/socket.h>
|
|
54
|
+
#include <net/if.h>
|
|
55
|
+
#endif // _WIN32
|
|
56
|
+
|
|
57
|
+
// When compiling with "-Wshadow" set, including jni.h produces the following error:
|
|
58
|
+
// /System/Library/Frameworks/JavaVM.framework/Versions/A/Headers/jni.h:609: warning: declaration of 'index' shadows a global declaration
|
|
59
|
+
// To work around this, we use the preprocessor to map the identifier 'index', which appears harmlessly in function prototype declarations,
|
|
60
|
+
// to something 'jni_index', which doesn't conflict
|
|
61
|
+
#define index jni_index
|
|
62
|
+
#include "DNSSD.java.h"
|
|
63
|
+
#undef index
|
|
64
|
+
|
|
65
|
+
//#include <syslog.h>
|
|
66
|
+
|
|
67
|
+
// convenience definition
|
|
68
|
+
#ifdef __GNUC__
|
|
69
|
+
#define _UNUSED __attribute__ ((unused))
|
|
70
|
+
#else
|
|
71
|
+
#define _UNUSED
|
|
72
|
+
#endif
|
|
73
|
+
|
|
74
|
+
#include <stdio.h>
|
|
75
|
+
#include <stdlib.h>
|
|
76
|
+
#include <string.h>
|
|
77
|
+
#include <unistd.h>
|
|
78
|
+
#include <errno.h>
|
|
79
|
+
#include <netinet/in.h>
|
|
80
|
+
#include <arpa/inet.h>
|
|
81
|
+
#include <netdb.h>
|
|
82
|
+
#include <signal.h>
|
|
83
|
+
|
|
84
|
+
#ifdef EMBEDDED
|
|
85
|
+
#include "mDNSEmbeddedAPI.h"
|
|
86
|
+
#include "mDNSPosix.h"
|
|
87
|
+
#endif
|
|
88
|
+
#include <android/log.h>
|
|
89
|
+
|
|
90
|
+
enum {
|
|
91
|
+
kInterfaceVersionOne = 1,
|
|
92
|
+
kInterfaceVersionCurrent // Must match version in .jar file
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
typedef struct OpContext OpContext;
|
|
96
|
+
|
|
97
|
+
struct OpContext
|
|
98
|
+
{
|
|
99
|
+
DNSServiceRef ServiceRef;
|
|
100
|
+
JNIEnv *Env;
|
|
101
|
+
jobject JavaObj;
|
|
102
|
+
jobject ClientObj;
|
|
103
|
+
jmethodID Callback;
|
|
104
|
+
jmethodID Callback2;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
//For AUTO_CALLBACKS, we must attach the callback thread to the Java VM prior to upcall.
|
|
109
|
+
#if AUTO_CALLBACKS
|
|
110
|
+
JNIEnv *pLoopEnv = NULL;
|
|
111
|
+
#endif
|
|
112
|
+
|
|
113
|
+
#ifdef EMBEDDED
|
|
114
|
+
int init();
|
|
115
|
+
int loop();
|
|
116
|
+
void stopLoop();
|
|
117
|
+
|
|
118
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_DNSSDEmbedded_nativeInit( JNIEnv *pEnv, jclass cls)
|
|
119
|
+
{
|
|
120
|
+
pLoopEnv = pEnv;
|
|
121
|
+
return init();
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_DNSSDEmbedded_nativeLoop( JNIEnv *pEnv, jclass cls)
|
|
125
|
+
{
|
|
126
|
+
return loop();
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
JNIEXPORT void JNICALL Java_com_github_druk_dnssd_DNSSDEmbedded_nativeExit( JNIEnv *pEnv, jclass cls)
|
|
130
|
+
{
|
|
131
|
+
stopLoop();
|
|
132
|
+
}
|
|
133
|
+
#endif
|
|
134
|
+
|
|
135
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_AppleDNSSD_InitLibrary( JNIEnv *pEnv, jclass cls,
|
|
136
|
+
jint callerVersion)
|
|
137
|
+
{
|
|
138
|
+
/* Ensure that caller & interface versions match. */
|
|
139
|
+
if ( callerVersion != kInterfaceVersionCurrent)
|
|
140
|
+
return kDNSServiceErr_Incompatible;
|
|
141
|
+
|
|
142
|
+
#if AUTO_CALLBACKS
|
|
143
|
+
// {
|
|
144
|
+
// jsize numVMs;
|
|
145
|
+
|
|
146
|
+
// if ( 0 != JNI_GetCreatedJavaVMs( &gJavaVM, 1, &numVMs))
|
|
147
|
+
// return kDNSServiceErr_BadState;
|
|
148
|
+
// }
|
|
149
|
+
#endif
|
|
150
|
+
|
|
151
|
+
// Set AppleDNSSD.hasAutoCallbacks
|
|
152
|
+
{
|
|
153
|
+
#if AUTO_CALLBACKS
|
|
154
|
+
jboolean hasAutoC = JNI_TRUE;
|
|
155
|
+
#else
|
|
156
|
+
jboolean hasAutoC = JNI_FALSE;
|
|
157
|
+
#endif
|
|
158
|
+
jfieldID hasAutoCField = (*pEnv)->GetStaticFieldID( pEnv, cls, "hasAutoCallbacks", "Z");
|
|
159
|
+
(*pEnv)->SetStaticBooleanField( pEnv, cls, hasAutoCField, hasAutoC);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return kDNSServiceErr_NoError;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
static const char* SafeGetUTFChars( JNIEnv *pEnv, jstring str)
|
|
167
|
+
// Wrapper for JNI GetStringUTFChars() that returns NULL for null str.
|
|
168
|
+
{
|
|
169
|
+
return str != NULL ? (*pEnv)->GetStringUTFChars( pEnv, str, 0) : NULL;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
static void SafeReleaseUTFChars( JNIEnv *pEnv, jstring str, const char *buff)
|
|
173
|
+
// Wrapper for JNI GetStringUTFChars() that handles null str.
|
|
174
|
+
{
|
|
175
|
+
if ( str != NULL)
|
|
176
|
+
(*pEnv)->ReleaseStringUTFChars( pEnv, str, buff);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
#if AUTO_CALLBACKS
|
|
181
|
+
static void SetupCallbackState( JNIEnv **ppEnv)
|
|
182
|
+
{
|
|
183
|
+
(*ppEnv) = pLoopEnv;
|
|
184
|
+
//(*gJavaVM)->AttachCurrentThread( gJavaVM, (void**) ppEnv, NULL);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
static void TeardownCallbackState( void )
|
|
188
|
+
{
|
|
189
|
+
//(*gJavaVM)->DetachCurrentThread( gJavaVM);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
#else // AUTO_CALLBACKS
|
|
193
|
+
|
|
194
|
+
static void SetupCallbackState( JNIEnv **ppEnv _UNUSED)
|
|
195
|
+
{
|
|
196
|
+
// No setup necessary if ProcessResults() has been called
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
static void TeardownCallbackState( void )
|
|
200
|
+
{
|
|
201
|
+
// No teardown necessary if ProcessResults() has been called
|
|
202
|
+
}
|
|
203
|
+
#endif // AUTO_CALLBACKS
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
static OpContext *NewContext( JNIEnv *pEnv, jobject owner,
|
|
207
|
+
const char *callbackName, const char *callbackSig)
|
|
208
|
+
// Create and initialize a new OpContext.
|
|
209
|
+
{
|
|
210
|
+
OpContext *pContext = (OpContext*) malloc( sizeof *pContext);
|
|
211
|
+
|
|
212
|
+
if ( pContext != NULL)
|
|
213
|
+
{
|
|
214
|
+
jfieldID clientField = (*pEnv)->GetFieldID( pEnv, (*pEnv)->GetObjectClass( pEnv, owner),
|
|
215
|
+
"fListener", "Lcom/github/druk/dnssd/BaseListener;");
|
|
216
|
+
|
|
217
|
+
pContext->JavaObj = (*pEnv)->NewWeakGlobalRef( pEnv, owner); // must convert local ref to global to cache;
|
|
218
|
+
pContext->ClientObj = (*pEnv)->GetObjectField( pEnv, owner, clientField);
|
|
219
|
+
pContext->ClientObj = (*pEnv)->NewWeakGlobalRef( pEnv, pContext->ClientObj); // must convert local ref to global to cache
|
|
220
|
+
pContext->Callback = (*pEnv)->GetMethodID( pEnv,
|
|
221
|
+
(*pEnv)->GetObjectClass( pEnv, pContext->ClientObj),
|
|
222
|
+
callbackName, callbackSig);
|
|
223
|
+
pContext->Callback2 = NULL; // not always used
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
return pContext;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
static void ReportError( JNIEnv *pEnv, jobject target, jobject service, DNSServiceErrorType err)
|
|
231
|
+
// Invoke operationFailed() method on target with err.
|
|
232
|
+
{
|
|
233
|
+
jclass cls = (*pEnv)->GetObjectClass( pEnv, target);
|
|
234
|
+
jmethodID opFailed = (*pEnv)->GetMethodID( pEnv, cls, "operationFailed",
|
|
235
|
+
"(Lcom/github/druk/dnssd/DNSSDService;I)V");
|
|
236
|
+
|
|
237
|
+
(*pEnv)->CallVoidMethod( pEnv, target, opFailed, service, err);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
JNIEXPORT void JNICALL Java_com_github_druk_dnssd_AppleService_HaltOperation( JNIEnv *pEnv, jobject pThis)
|
|
241
|
+
/* Deallocate the dns_sd service browser and set the Java object's fNativeContext field to 0. */
|
|
242
|
+
{
|
|
243
|
+
jclass cls = (*pEnv)->GetObjectClass( pEnv, pThis);
|
|
244
|
+
jfieldID contextField = (*pEnv)->GetFieldID( pEnv, cls, "fNativeContext", "J");
|
|
245
|
+
|
|
246
|
+
if ( contextField != 0)
|
|
247
|
+
{
|
|
248
|
+
OpContext *pContext = (OpContext*) (long) (*pEnv)->GetLongField(pEnv, pThis, contextField);
|
|
249
|
+
if ( pContext != NULL)
|
|
250
|
+
{
|
|
251
|
+
// MUST clear fNativeContext first, BEFORE calling DNSServiceRefDeallocate()
|
|
252
|
+
(*pEnv)->SetLongField(pEnv, pThis, contextField, 0);
|
|
253
|
+
if ( pContext->ServiceRef != NULL)
|
|
254
|
+
DNSServiceRefDeallocate( pContext->ServiceRef);
|
|
255
|
+
|
|
256
|
+
(*pEnv)->DeleteWeakGlobalRef( pEnv, pContext->JavaObj);
|
|
257
|
+
(*pEnv)->DeleteWeakGlobalRef( pEnv, pContext->ClientObj);
|
|
258
|
+
free( pContext);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_AppleService_BlockForData( JNIEnv *pEnv, jobject pThis)
|
|
265
|
+
/* Block until data arrives, or one second passes. Returns 1 if data present, 0 otherwise. */
|
|
266
|
+
{
|
|
267
|
+
// BlockForData() not supported with AUTO_CALLBACKS
|
|
268
|
+
#if !AUTO_CALLBACKS
|
|
269
|
+
jclass cls = (*pEnv)->GetObjectClass( pEnv, pThis);
|
|
270
|
+
jfieldID contextField = (*pEnv)->GetFieldID( pEnv, cls, "fNativeContext", "J");
|
|
271
|
+
|
|
272
|
+
if ( contextField != 0)
|
|
273
|
+
{
|
|
274
|
+
OpContext *pContext = (OpContext*) (long) (*pEnv)->GetLongField(pEnv, pThis, contextField);
|
|
275
|
+
if ( pContext != NULL)
|
|
276
|
+
{
|
|
277
|
+
fd_set readFDs;
|
|
278
|
+
int sd = DNSServiceRefSockFD( pContext->ServiceRef);
|
|
279
|
+
struct timeval timeout = { 1, 0 };
|
|
280
|
+
FD_ZERO( &readFDs);
|
|
281
|
+
FD_SET( sd, &readFDs);
|
|
282
|
+
|
|
283
|
+
// Q: Why do we poll here?
|
|
284
|
+
// A: Because there's no other thread-safe way to do it.
|
|
285
|
+
// Mac OS X terminates a select() call if you close one of the sockets it's listening on, but Linux does not,
|
|
286
|
+
// and arguably Linux is correct (See <http://www.ussg.iu.edu/hypermail/linux/kernel/0405.1/0418.html>)
|
|
287
|
+
// The problem is that the Mac OS X behaviour assumes that it's okay for one thread to close a socket while
|
|
288
|
+
// some other thread is monitoring that socket in select(), but the difficulty is that there's no general way
|
|
289
|
+
// to make that thread-safe, because there's no atomic way to enter select() and release a lock simultaneously.
|
|
290
|
+
// If we try to do this without holding any lock, then right as we jump to the select() routine,
|
|
291
|
+
// some other thread could stop our operation (thereby closing the socket),
|
|
292
|
+
// and then that thread (or even some third, unrelated thread)
|
|
293
|
+
// could do some other DNS-SD operation (or some other operation that opens a new file descriptor)
|
|
294
|
+
// and then we'd blindly resume our fall into the select() call, now blocking on a file descriptor
|
|
295
|
+
// that may coincidentally have the same numerical value, but is semantically unrelated
|
|
296
|
+
// to the true file descriptor we thought we were blocking on.
|
|
297
|
+
// We can't stop this race condition from happening, but at least if we wake up once a second we can detect
|
|
298
|
+
// when fNativeContext has gone to zero, and thereby discover that we were blocking on the wrong fd.
|
|
299
|
+
|
|
300
|
+
if (select( sd + 1, &readFDs, (fd_set*) NULL, (fd_set*) NULL, &timeout) == 1) return(1);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
#endif // !AUTO_CALLBACKS
|
|
304
|
+
return(0);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_AppleService_ProcessResults( JNIEnv *pEnv, jobject pThis)
|
|
309
|
+
/* Call through to DNSServiceProcessResult() while data remains on socket. */
|
|
310
|
+
{
|
|
311
|
+
#if !AUTO_CALLBACKS // ProcessResults() not supported with AUTO_CALLBACKS
|
|
312
|
+
|
|
313
|
+
jclass cls = (*pEnv)->GetObjectClass( pEnv, pThis);
|
|
314
|
+
jfieldID contextField = (*pEnv)->GetFieldID( pEnv, cls, "fNativeContext", "J");
|
|
315
|
+
OpContext *pContext = (OpContext*) (long) (*pEnv)->GetLongField(pEnv, pThis, contextField);
|
|
316
|
+
DNSServiceErrorType err = kDNSServiceErr_BadState;
|
|
317
|
+
|
|
318
|
+
if ( pContext != NULL)
|
|
319
|
+
{
|
|
320
|
+
int sd = DNSServiceRefSockFD( pContext->ServiceRef);
|
|
321
|
+
fd_set readFDs;
|
|
322
|
+
struct timeval zeroTimeout = { 0, 0 };
|
|
323
|
+
|
|
324
|
+
pContext->Env = pEnv;
|
|
325
|
+
|
|
326
|
+
FD_ZERO( &readFDs);
|
|
327
|
+
FD_SET( sd, &readFDs);
|
|
328
|
+
|
|
329
|
+
err = kDNSServiceErr_NoError;
|
|
330
|
+
if (0 < select(sd + 1, &readFDs, (fd_set*) NULL, (fd_set*) NULL, &zeroTimeout))
|
|
331
|
+
{
|
|
332
|
+
err = DNSServiceProcessResult(pContext->ServiceRef);
|
|
333
|
+
// Use caution here!
|
|
334
|
+
// We cannot touch any data structures associated with this operation!
|
|
335
|
+
// The DNSServiceProcessResult() routine should have invoked our callback,
|
|
336
|
+
// and our callback could have terminated the operation with op.stop();
|
|
337
|
+
// and that means HaltOperation() will have been called, which frees pContext.
|
|
338
|
+
// Basically, from here we just have to get out without touching any stale
|
|
339
|
+
// data structures that could blow up on us! Particularly, any attempt
|
|
340
|
+
// to loop here reading more results from the file descriptor is unsafe.
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
return err;
|
|
344
|
+
#else
|
|
345
|
+
return kDNSServiceErr_NoError;
|
|
346
|
+
#endif // AUTO_CALLBACKS
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
static void DNSSD_API ServiceBrowseReply( DNSServiceRef sdRef _UNUSED, DNSServiceFlags flags, uint32_t interfaceIndex,
|
|
351
|
+
DNSServiceErrorType errorCode, const char *serviceName, const char *regtype,
|
|
352
|
+
const char *replyDomain, void *context)
|
|
353
|
+
{
|
|
354
|
+
OpContext *pContext = (OpContext*) context;
|
|
355
|
+
|
|
356
|
+
SetupCallbackState( &pContext->Env);
|
|
357
|
+
|
|
358
|
+
jobject clientObj = (*pContext->Env)->NewLocalRef(pContext->Env, pContext->ClientObj);
|
|
359
|
+
|
|
360
|
+
if ( clientObj != NULL && pContext->Callback != NULL)
|
|
361
|
+
{
|
|
362
|
+
if ( errorCode == kDNSServiceErr_NoError)
|
|
363
|
+
{
|
|
364
|
+
jbyteArray jServiceName = (*pContext->Env)->NewByteArray(pContext->Env, (jsize)strlen(serviceName));
|
|
365
|
+
(*pContext->Env)->SetByteArrayRegion (pContext->Env, jServiceName, 0, (jsize)strlen(serviceName), (const jbyte *) serviceName);
|
|
366
|
+
jbyteArray jRegType = (*pContext->Env)->NewByteArray(pContext->Env, (jsize)strlen(regtype));
|
|
367
|
+
(*pContext->Env)->SetByteArrayRegion (pContext->Env, jRegType, 0, (jsize)strlen(regtype), (const jbyte *) regtype);
|
|
368
|
+
jbyteArray jReplyDomain = (*pContext->Env)->NewByteArray(pContext->Env, (jsize)strlen(replyDomain));
|
|
369
|
+
(*pContext->Env)->SetByteArrayRegion (pContext->Env, jReplyDomain, 0, (jsize)strlen(replyDomain), (const jbyte *) replyDomain);
|
|
370
|
+
(*pContext->Env)->CallVoidMethod( pContext->Env, clientObj,
|
|
371
|
+
( flags & kDNSServiceFlagsAdd) != 0 ? pContext->Callback : pContext->Callback2,
|
|
372
|
+
pContext->JavaObj, flags, interfaceIndex, jServiceName, jRegType, jReplyDomain);
|
|
373
|
+
(*pContext->Env)->DeleteLocalRef( pContext->Env, jServiceName);
|
|
374
|
+
(*pContext->Env)->DeleteLocalRef( pContext->Env, jRegType);
|
|
375
|
+
(*pContext->Env)->DeleteLocalRef( pContext->Env, jReplyDomain);
|
|
376
|
+
}
|
|
377
|
+
else
|
|
378
|
+
ReportError( pContext->Env, clientObj, pContext->JavaObj, errorCode);
|
|
379
|
+
|
|
380
|
+
(*pContext->Env)->DeleteLocalRef(pContext->Env, clientObj);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
TeardownCallbackState();
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_AppleBrowser_CreateBrowser( JNIEnv *pEnv, jobject pThis,
|
|
387
|
+
jint flags, jint ifIndex, jstring regType, jstring domain)
|
|
388
|
+
{
|
|
389
|
+
jclass cls = (*pEnv)->GetObjectClass( pEnv, pThis);
|
|
390
|
+
jfieldID contextField = (*pEnv)->GetFieldID( pEnv, cls, "fNativeContext", "J");
|
|
391
|
+
OpContext *pContext = NULL;
|
|
392
|
+
DNSServiceErrorType err = kDNSServiceErr_NoError;
|
|
393
|
+
|
|
394
|
+
if ( contextField != 0)
|
|
395
|
+
pContext = NewContext( pEnv, pThis, "serviceFound",
|
|
396
|
+
"(Lcom/github/druk/dnssd/DNSSDService;II[B[B[B)V");
|
|
397
|
+
else
|
|
398
|
+
err = kDNSServiceErr_BadParam;
|
|
399
|
+
|
|
400
|
+
if ( pContext != NULL)
|
|
401
|
+
{
|
|
402
|
+
const char *regStr = SafeGetUTFChars( pEnv, regType);
|
|
403
|
+
const char *domainStr = SafeGetUTFChars( pEnv, domain);
|
|
404
|
+
|
|
405
|
+
pContext->Callback2 = (*pEnv)->GetMethodID( pEnv,
|
|
406
|
+
(*pEnv)->GetObjectClass( pEnv, pContext->ClientObj),
|
|
407
|
+
"serviceLost", "(Lcom/github/druk/dnssd/DNSSDService;II[B[B[B)V");
|
|
408
|
+
|
|
409
|
+
err = DNSServiceBrowse( &pContext->ServiceRef, flags, ifIndex, regStr, domainStr, ServiceBrowseReply, pContext);
|
|
410
|
+
if ( err == kDNSServiceErr_NoError)
|
|
411
|
+
{
|
|
412
|
+
(*pEnv)->SetLongField(pEnv, pThis, contextField, (long) pContext);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
SafeReleaseUTFChars( pEnv, regType, regStr);
|
|
416
|
+
SafeReleaseUTFChars( pEnv, domain, domainStr);
|
|
417
|
+
}
|
|
418
|
+
else
|
|
419
|
+
err = kDNSServiceErr_NoMemory;
|
|
420
|
+
|
|
421
|
+
return err;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
|
|
425
|
+
static void DNSSD_API ServiceResolveReply( DNSServiceRef sdRef _UNUSED, DNSServiceFlags flags, uint32_t interfaceIndex,
|
|
426
|
+
DNSServiceErrorType errorCode, const char *fullname, const char *hosttarget,
|
|
427
|
+
uint16_t port, uint16_t txtLen, const unsigned char *txtRecord, void *context)
|
|
428
|
+
{
|
|
429
|
+
OpContext *pContext = (OpContext*) context;
|
|
430
|
+
jclass txtCls;
|
|
431
|
+
jmethodID txtCtor;
|
|
432
|
+
jbyteArray txtBytes;
|
|
433
|
+
jobject txtObj;
|
|
434
|
+
jbyte *pBytes;
|
|
435
|
+
|
|
436
|
+
SetupCallbackState( &pContext->Env);
|
|
437
|
+
|
|
438
|
+
txtCls = (*pContext->Env)->FindClass( pContext->Env, "com/github/druk/dnssd/TXTRecord");
|
|
439
|
+
txtCtor = (*pContext->Env)->GetMethodID( pContext->Env, txtCls, "<init>", "([B)V");
|
|
440
|
+
|
|
441
|
+
if ( pContext->ClientObj != NULL && pContext->Callback != NULL && txtCtor != NULL &&
|
|
442
|
+
NULL != ( txtBytes = (*pContext->Env)->NewByteArray( pContext->Env, txtLen)))
|
|
443
|
+
{
|
|
444
|
+
if ( errorCode == kDNSServiceErr_NoError)
|
|
445
|
+
{
|
|
446
|
+
// Since Java ints are defined to be big-endian, we canonicalize 'port' from a 16-bit
|
|
447
|
+
// pattern into a number here.
|
|
448
|
+
port = ( ((unsigned char*) &port)[0] << 8) | ((unsigned char*) &port)[1];
|
|
449
|
+
|
|
450
|
+
// Initialize txtBytes with contents of txtRecord
|
|
451
|
+
pBytes = (*pContext->Env)->GetByteArrayElements( pContext->Env, txtBytes, NULL);
|
|
452
|
+
memcpy( pBytes, txtRecord, txtLen);
|
|
453
|
+
(*pContext->Env)->ReleaseByteArrayElements( pContext->Env, txtBytes, pBytes, JNI_COMMIT);
|
|
454
|
+
|
|
455
|
+
// Construct txtObj with txtBytes
|
|
456
|
+
txtObj = (*pContext->Env)->NewObject( pContext->Env, txtCls, txtCtor, txtBytes);
|
|
457
|
+
(*pContext->Env)->DeleteLocalRef( pContext->Env, txtBytes);
|
|
458
|
+
|
|
459
|
+
jbyteArray jFullName = (*pContext->Env)->NewByteArray(pContext->Env, (jsize)strlen(fullname));
|
|
460
|
+
(*pContext->Env)->SetByteArrayRegion (pContext->Env, jFullName, 0, (jsize)strlen(fullname), (const jbyte *) fullname);
|
|
461
|
+
jbyteArray jHostTarget = (*pContext->Env)->NewByteArray(pContext->Env, (jsize)strlen(hosttarget));
|
|
462
|
+
(*pContext->Env)->SetByteArrayRegion (pContext->Env, jHostTarget, 0, (jsize)strlen(hosttarget), (const jbyte *) hosttarget);
|
|
463
|
+
(*pContext->Env)->CallVoidMethod( pContext->Env, pContext->ClientObj, pContext->Callback,
|
|
464
|
+
pContext->JavaObj, flags, interfaceIndex, jFullName, jHostTarget, port, txtObj);
|
|
465
|
+
(*pContext->Env)->DeleteLocalRef( pContext->Env, jFullName);
|
|
466
|
+
(*pContext->Env)->DeleteLocalRef( pContext->Env, jHostTarget);
|
|
467
|
+
(*pContext->Env)->DeleteLocalRef( pContext->Env, txtObj);
|
|
468
|
+
}
|
|
469
|
+
else
|
|
470
|
+
ReportError( pContext->Env, pContext->ClientObj, pContext->JavaObj, errorCode);
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
TeardownCallbackState();
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_AppleResolver_CreateResolver( JNIEnv *pEnv, jobject pThis,
|
|
477
|
+
jint flags, jint ifIndex, jstring serviceName, jstring regType, jstring domain)
|
|
478
|
+
{
|
|
479
|
+
jclass cls = (*pEnv)->GetObjectClass( pEnv, pThis);
|
|
480
|
+
jfieldID contextField = (*pEnv)->GetFieldID( pEnv, cls, "fNativeContext", "J");
|
|
481
|
+
OpContext *pContext = NULL;
|
|
482
|
+
DNSServiceErrorType err = kDNSServiceErr_NoError;
|
|
483
|
+
|
|
484
|
+
if ( contextField != 0)
|
|
485
|
+
pContext = NewContext( pEnv, pThis, "serviceResolved",
|
|
486
|
+
"(Lcom/github/druk/dnssd/DNSSDService;II[B[BILcom/github/druk/dnssd/TXTRecord;)V");
|
|
487
|
+
else
|
|
488
|
+
err = kDNSServiceErr_BadParam;
|
|
489
|
+
|
|
490
|
+
if ( pContext != NULL)
|
|
491
|
+
{
|
|
492
|
+
const char *servStr = SafeGetUTFChars( pEnv, serviceName);
|
|
493
|
+
const char *regStr = SafeGetUTFChars( pEnv, regType);
|
|
494
|
+
const char *domainStr = SafeGetUTFChars( pEnv, domain);
|
|
495
|
+
|
|
496
|
+
err = DNSServiceResolve( &pContext->ServiceRef, flags, ifIndex,
|
|
497
|
+
servStr, regStr, domainStr, ServiceResolveReply, pContext);
|
|
498
|
+
if ( err == kDNSServiceErr_NoError)
|
|
499
|
+
{
|
|
500
|
+
(*pEnv)->SetLongField(pEnv, pThis, contextField, (long) pContext);
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
SafeReleaseUTFChars( pEnv, serviceName, servStr);
|
|
504
|
+
SafeReleaseUTFChars( pEnv, regType, regStr);
|
|
505
|
+
SafeReleaseUTFChars( pEnv, domain, domainStr);
|
|
506
|
+
}
|
|
507
|
+
else
|
|
508
|
+
err = kDNSServiceErr_NoMemory;
|
|
509
|
+
|
|
510
|
+
return err;
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
static void DNSSD_API ServiceRegisterReply( DNSServiceRef sdRef _UNUSED, DNSServiceFlags flags,
|
|
515
|
+
DNSServiceErrorType errorCode, const char *serviceName,
|
|
516
|
+
const char *regType, const char *domain, void *context)
|
|
517
|
+
{
|
|
518
|
+
OpContext *pContext = (OpContext*) context;
|
|
519
|
+
|
|
520
|
+
SetupCallbackState( &pContext->Env);
|
|
521
|
+
|
|
522
|
+
if ( pContext->ClientObj != NULL && pContext->Callback != NULL)
|
|
523
|
+
{
|
|
524
|
+
if ( errorCode == kDNSServiceErr_NoError)
|
|
525
|
+
{
|
|
526
|
+
jbyteArray jServiceName = (*pContext->Env)->NewByteArray(pContext->Env, (jsize)strlen(serviceName));
|
|
527
|
+
(*pContext->Env)->SetByteArrayRegion (pContext->Env, jServiceName, 0, (jsize)strlen(serviceName), (const jbyte *) serviceName);
|
|
528
|
+
jbyteArray jRegType = (*pContext->Env)->NewByteArray(pContext->Env, (jsize)strlen(regType));
|
|
529
|
+
(*pContext->Env)->SetByteArrayRegion (pContext->Env, jRegType, 0, (jsize)strlen(regType), (const jbyte *) regType);
|
|
530
|
+
jbyteArray jDomain = (*pContext->Env)->NewByteArray(pContext->Env, (jsize)strlen(domain));
|
|
531
|
+
(*pContext->Env)->SetByteArrayRegion (pContext->Env, jDomain, 0, (jsize)strlen(domain), (const jbyte *) domain);
|
|
532
|
+
|
|
533
|
+
(*pContext->Env)->CallVoidMethod( pContext->Env, pContext->ClientObj, pContext->Callback,
|
|
534
|
+
pContext->JavaObj, flags,jServiceName, jRegType, jDomain);
|
|
535
|
+
(*pContext->Env)->DeleteLocalRef( pContext->Env, jServiceName);
|
|
536
|
+
(*pContext->Env)->DeleteLocalRef( pContext->Env, jRegType);
|
|
537
|
+
(*pContext->Env)->DeleteLocalRef( pContext->Env, jDomain);
|
|
538
|
+
}
|
|
539
|
+
else
|
|
540
|
+
ReportError( pContext->Env, pContext->ClientObj, pContext->JavaObj, errorCode);
|
|
541
|
+
}
|
|
542
|
+
TeardownCallbackState();
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_AppleRegistration_BeginRegister( JNIEnv *pEnv, jobject pThis,
|
|
546
|
+
jint ifIndex, jint flags, jstring serviceName, jstring regType,
|
|
547
|
+
jstring domain, jstring host, jint port, jbyteArray txtRecord)
|
|
548
|
+
{
|
|
549
|
+
//syslog(LOG_ERR, "BR");
|
|
550
|
+
jclass cls = (*pEnv)->GetObjectClass( pEnv, pThis);
|
|
551
|
+
jfieldID contextField = (*pEnv)->GetFieldID( pEnv, cls, "fNativeContext", "J");
|
|
552
|
+
OpContext *pContext = NULL;
|
|
553
|
+
DNSServiceErrorType err = kDNSServiceErr_NoError;
|
|
554
|
+
jbyte *pBytes;
|
|
555
|
+
jsize numBytes;
|
|
556
|
+
|
|
557
|
+
//syslog(LOG_ERR, "BR: contextField %d", contextField);
|
|
558
|
+
|
|
559
|
+
if ( contextField != 0)
|
|
560
|
+
pContext = NewContext( pEnv, pThis, "serviceRegistered",
|
|
561
|
+
"(Lcom/github/druk/dnssd/DNSSDRegistration;I[B[B[B)V");
|
|
562
|
+
else
|
|
563
|
+
err = kDNSServiceErr_BadParam;
|
|
564
|
+
|
|
565
|
+
if ( pContext != NULL)
|
|
566
|
+
{
|
|
567
|
+
const char *servStr = SafeGetUTFChars( pEnv, serviceName);
|
|
568
|
+
const char *regStr = SafeGetUTFChars( pEnv, regType);
|
|
569
|
+
const char *domainStr = SafeGetUTFChars( pEnv, domain);
|
|
570
|
+
const char *hostStr = SafeGetUTFChars( pEnv, host);
|
|
571
|
+
|
|
572
|
+
//syslog(LOG_ERR, "BR: regStr %s", regStr);
|
|
573
|
+
|
|
574
|
+
// Since Java ints are defined to be big-endian, we de-canonicalize 'port' from a
|
|
575
|
+
// big-endian number into a 16-bit pattern here.
|
|
576
|
+
uint16_t portBits = port;
|
|
577
|
+
portBits = ( ((unsigned char*) &portBits)[0] << 8) | ((unsigned char*) &portBits)[1];
|
|
578
|
+
|
|
579
|
+
pBytes = txtRecord ? (*pEnv)->GetByteArrayElements( pEnv, txtRecord, NULL) : NULL;
|
|
580
|
+
numBytes = txtRecord ? (*pEnv)->GetArrayLength( pEnv, txtRecord) : 0;
|
|
581
|
+
|
|
582
|
+
err = DNSServiceRegister( &pContext->ServiceRef, flags, ifIndex, servStr, regStr,
|
|
583
|
+
domainStr, hostStr, portBits,
|
|
584
|
+
numBytes, pBytes, ServiceRegisterReply, pContext);
|
|
585
|
+
if ( err == kDNSServiceErr_NoError)
|
|
586
|
+
{
|
|
587
|
+
(*pEnv)->SetLongField(pEnv, pThis, contextField, (long) pContext);
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
if ( pBytes != NULL)
|
|
591
|
+
(*pEnv)->ReleaseByteArrayElements( pEnv, txtRecord, pBytes, 0);
|
|
592
|
+
|
|
593
|
+
SafeReleaseUTFChars( pEnv, serviceName, servStr);
|
|
594
|
+
SafeReleaseUTFChars( pEnv, regType, regStr);
|
|
595
|
+
SafeReleaseUTFChars( pEnv, domain, domainStr);
|
|
596
|
+
SafeReleaseUTFChars( pEnv, host, hostStr);
|
|
597
|
+
}
|
|
598
|
+
else
|
|
599
|
+
err = kDNSServiceErr_NoMemory;
|
|
600
|
+
|
|
601
|
+
return err;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_AppleRegistration_AddRecord( JNIEnv *pEnv, jobject pThis,
|
|
605
|
+
jint flags, jint rrType, jbyteArray rData, jint ttl, jobject destObj)
|
|
606
|
+
{
|
|
607
|
+
jclass cls = (*pEnv)->GetObjectClass( pEnv, pThis);
|
|
608
|
+
jfieldID contextField = (*pEnv)->GetFieldID( pEnv, cls, "fNativeContext", "J");
|
|
609
|
+
jclass destCls = (*pEnv)->GetObjectClass( pEnv, destObj);
|
|
610
|
+
jfieldID recField = (*pEnv)->GetFieldID( pEnv, destCls, "fRecord", "J");
|
|
611
|
+
OpContext *pContext = NULL;
|
|
612
|
+
DNSServiceErrorType err = kDNSServiceErr_NoError;
|
|
613
|
+
jbyte *pBytes;
|
|
614
|
+
jsize numBytes;
|
|
615
|
+
DNSRecordRef recRef;
|
|
616
|
+
|
|
617
|
+
if ( contextField != 0)
|
|
618
|
+
pContext = (OpContext*) (long) (*pEnv)->GetLongField(pEnv, pThis, contextField);
|
|
619
|
+
if ( pContext == NULL || pContext->ServiceRef == NULL)
|
|
620
|
+
return kDNSServiceErr_BadParam;
|
|
621
|
+
|
|
622
|
+
pBytes = (*pEnv)->GetByteArrayElements( pEnv, rData, NULL);
|
|
623
|
+
numBytes = (*pEnv)->GetArrayLength( pEnv, rData);
|
|
624
|
+
|
|
625
|
+
err = DNSServiceAddRecord( pContext->ServiceRef, &recRef, flags, rrType, numBytes, pBytes, ttl);
|
|
626
|
+
if ( err == kDNSServiceErr_NoError)
|
|
627
|
+
{
|
|
628
|
+
(*pEnv)->SetLongField(pEnv, destObj, recField, (long) recRef);
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
if ( pBytes != NULL)
|
|
632
|
+
(*pEnv)->ReleaseByteArrayElements( pEnv, rData, pBytes, 0);
|
|
633
|
+
|
|
634
|
+
return err;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_AppleDNSRecord_Update( JNIEnv *pEnv, jobject pThis,
|
|
638
|
+
jint flags, jbyteArray rData, jint ttl)
|
|
639
|
+
{
|
|
640
|
+
jclass cls = (*pEnv)->GetObjectClass( pEnv, pThis);
|
|
641
|
+
jfieldID ownerField = (*pEnv)->GetFieldID( pEnv, cls, "fOwner", "Lcom/github/druk/dnssd/AppleService;");
|
|
642
|
+
jfieldID recField = (*pEnv)->GetFieldID( pEnv, cls, "fRecord", "J");
|
|
643
|
+
OpContext *pContext = NULL;
|
|
644
|
+
DNSServiceErrorType err = kDNSServiceErr_NoError;
|
|
645
|
+
jbyte *pBytes;
|
|
646
|
+
jsize numBytes;
|
|
647
|
+
DNSRecordRef recRef = NULL;
|
|
648
|
+
|
|
649
|
+
if ( ownerField != 0)
|
|
650
|
+
{
|
|
651
|
+
jobject ownerObj = (*pEnv)->GetObjectField( pEnv, pThis, ownerField);
|
|
652
|
+
jclass ownerClass = (*pEnv)->GetObjectClass( pEnv, ownerObj);
|
|
653
|
+
jfieldID contextField = (*pEnv)->GetFieldID( pEnv, ownerClass, "fNativeContext", "J");
|
|
654
|
+
if ( contextField != 0)
|
|
655
|
+
pContext = (OpContext*) (long) (*pEnv)->GetLongField(pEnv, ownerObj, contextField);
|
|
656
|
+
}
|
|
657
|
+
if ( recField != 0)
|
|
658
|
+
recRef = (DNSRecordRef) (long) (*pEnv)->GetLongField(pEnv, pThis, recField);
|
|
659
|
+
if ( pContext == NULL || pContext->ServiceRef == NULL)
|
|
660
|
+
return kDNSServiceErr_BadParam;
|
|
661
|
+
|
|
662
|
+
pBytes = (*pEnv)->GetByteArrayElements( pEnv, rData, NULL);
|
|
663
|
+
numBytes = (*pEnv)->GetArrayLength( pEnv, rData);
|
|
664
|
+
|
|
665
|
+
err = DNSServiceUpdateRecord( pContext->ServiceRef, recRef, flags, numBytes, pBytes, ttl);
|
|
666
|
+
|
|
667
|
+
if ( pBytes != NULL)
|
|
668
|
+
(*pEnv)->ReleaseByteArrayElements( pEnv, rData, pBytes, 0);
|
|
669
|
+
|
|
670
|
+
return err;
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_AppleDNSRecord_Remove( JNIEnv *pEnv, jobject pThis)
|
|
674
|
+
{
|
|
675
|
+
jclass cls = (*pEnv)->GetObjectClass( pEnv, pThis);
|
|
676
|
+
jfieldID ownerField = (*pEnv)->GetFieldID( pEnv, cls, "fOwner", "Lcom/github/druk/dnssd/AppleService;");
|
|
677
|
+
jfieldID recField = (*pEnv)->GetFieldID( pEnv, cls, "fRecord", "J");
|
|
678
|
+
OpContext *pContext = NULL;
|
|
679
|
+
DNSServiceErrorType err = kDNSServiceErr_NoError;
|
|
680
|
+
DNSRecordRef recRef = NULL;
|
|
681
|
+
|
|
682
|
+
if ( ownerField != 0)
|
|
683
|
+
{
|
|
684
|
+
jobject ownerObj = (*pEnv)->GetObjectField( pEnv, pThis, ownerField);
|
|
685
|
+
jclass ownerClass = (*pEnv)->GetObjectClass( pEnv, ownerObj);
|
|
686
|
+
jfieldID contextField = (*pEnv)->GetFieldID( pEnv, ownerClass, "fNativeContext", "J");
|
|
687
|
+
if ( contextField != 0)
|
|
688
|
+
pContext = (OpContext*) (long) (*pEnv)->GetLongField(pEnv, ownerObj, contextField);
|
|
689
|
+
}
|
|
690
|
+
if ( recField != 0)
|
|
691
|
+
recRef = (DNSRecordRef) (long) (*pEnv)->GetLongField(pEnv, pThis, recField);
|
|
692
|
+
if ( pContext == NULL || pContext->ServiceRef == NULL)
|
|
693
|
+
return kDNSServiceErr_BadParam;
|
|
694
|
+
|
|
695
|
+
err = DNSServiceRemoveRecord( pContext->ServiceRef, recRef, 0);
|
|
696
|
+
|
|
697
|
+
return err;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
|
|
701
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_AppleRecordRegistrar_CreateConnection( JNIEnv *pEnv, jobject pThis)
|
|
702
|
+
{
|
|
703
|
+
jclass cls = (*pEnv)->GetObjectClass( pEnv, pThis);
|
|
704
|
+
jfieldID contextField = (*pEnv)->GetFieldID( pEnv, cls, "fNativeContext", "J");
|
|
705
|
+
OpContext *pContext = NULL;
|
|
706
|
+
DNSServiceErrorType err = kDNSServiceErr_NoError;
|
|
707
|
+
|
|
708
|
+
if ( contextField != 0)
|
|
709
|
+
pContext = NewContext( pEnv, pThis, "recordRegistered", "(Lcom/github/druk/dnssd/DNSRecord;I)V");
|
|
710
|
+
else
|
|
711
|
+
err = kDNSServiceErr_BadParam;
|
|
712
|
+
|
|
713
|
+
if ( pContext != NULL)
|
|
714
|
+
{
|
|
715
|
+
err = DNSServiceCreateConnection( &pContext->ServiceRef);
|
|
716
|
+
if ( err == kDNSServiceErr_NoError)
|
|
717
|
+
{
|
|
718
|
+
(*pEnv)->SetLongField(pEnv, pThis, contextField, (long) pContext);
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
else
|
|
722
|
+
err = kDNSServiceErr_NoMemory;
|
|
723
|
+
|
|
724
|
+
return err;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
struct RecordRegistrationRef
|
|
728
|
+
{
|
|
729
|
+
OpContext *Context;
|
|
730
|
+
jobject RecordObj;
|
|
731
|
+
};
|
|
732
|
+
typedef struct RecordRegistrationRef RecordRegistrationRef;
|
|
733
|
+
|
|
734
|
+
static void DNSSD_API RegisterRecordReply( DNSServiceRef sdRef _UNUSED,
|
|
735
|
+
DNSRecordRef recordRef _UNUSED, DNSServiceFlags flags,
|
|
736
|
+
DNSServiceErrorType errorCode, void *context)
|
|
737
|
+
{
|
|
738
|
+
RecordRegistrationRef *regEnvelope = (RecordRegistrationRef*) context;
|
|
739
|
+
OpContext *pContext = regEnvelope->Context;
|
|
740
|
+
|
|
741
|
+
SetupCallbackState( &pContext->Env);
|
|
742
|
+
|
|
743
|
+
if ( pContext->ClientObj != NULL && pContext->Callback != NULL)
|
|
744
|
+
{
|
|
745
|
+
if ( errorCode == kDNSServiceErr_NoError)
|
|
746
|
+
{
|
|
747
|
+
(*pContext->Env)->CallVoidMethod( pContext->Env, pContext->ClientObj, pContext->Callback,
|
|
748
|
+
regEnvelope->RecordObj, flags);
|
|
749
|
+
}
|
|
750
|
+
else
|
|
751
|
+
ReportError( pContext->Env, pContext->ClientObj, pContext->JavaObj, errorCode);
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
(*pContext->Env)->DeleteWeakGlobalRef( pContext->Env, regEnvelope->RecordObj);
|
|
755
|
+
free( regEnvelope);
|
|
756
|
+
|
|
757
|
+
TeardownCallbackState();
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_AppleRecordRegistrar_RegisterRecord( JNIEnv *pEnv, jobject pThis,
|
|
761
|
+
jint flags, jint ifIndex, jstring fullname, jint rrType, jint rrClass,
|
|
762
|
+
jbyteArray rData, jint ttl, jobject destObj)
|
|
763
|
+
{
|
|
764
|
+
jclass cls = (*pEnv)->GetObjectClass( pEnv, pThis);
|
|
765
|
+
jfieldID contextField = (*pEnv)->GetFieldID( pEnv, cls, "fNativeContext", "J");
|
|
766
|
+
jclass destCls = (*pEnv)->GetObjectClass( pEnv, destObj);
|
|
767
|
+
jfieldID recField = (*pEnv)->GetFieldID( pEnv, destCls, "fRecord", "J");
|
|
768
|
+
const char *nameStr = SafeGetUTFChars( pEnv, fullname);
|
|
769
|
+
OpContext *pContext = NULL;
|
|
770
|
+
DNSServiceErrorType err = kDNSServiceErr_NoError;
|
|
771
|
+
jbyte *pBytes;
|
|
772
|
+
jsize numBytes;
|
|
773
|
+
DNSRecordRef recRef;
|
|
774
|
+
RecordRegistrationRef *regEnvelope;
|
|
775
|
+
|
|
776
|
+
if ( contextField != 0)
|
|
777
|
+
pContext = (OpContext*) (long) (*pEnv)->GetLongField(pEnv, pThis, contextField);
|
|
778
|
+
if ( pContext == NULL || pContext->ServiceRef == NULL || nameStr == NULL)
|
|
779
|
+
return kDNSServiceErr_BadParam;
|
|
780
|
+
|
|
781
|
+
regEnvelope = calloc( 1, sizeof *regEnvelope);
|
|
782
|
+
if ( regEnvelope == NULL)
|
|
783
|
+
return kDNSServiceErr_NoMemory;
|
|
784
|
+
regEnvelope->Context = pContext;
|
|
785
|
+
regEnvelope->RecordObj = (*pEnv)->NewWeakGlobalRef( pEnv, destObj); // must convert local ref to global to cache
|
|
786
|
+
|
|
787
|
+
pBytes = (*pEnv)->GetByteArrayElements( pEnv, rData, NULL);
|
|
788
|
+
numBytes = (*pEnv)->GetArrayLength( pEnv, rData);
|
|
789
|
+
|
|
790
|
+
err = DNSServiceRegisterRecord( pContext->ServiceRef, &recRef, flags, ifIndex,
|
|
791
|
+
nameStr, rrType, rrClass, numBytes, pBytes, ttl,
|
|
792
|
+
RegisterRecordReply, regEnvelope);
|
|
793
|
+
|
|
794
|
+
if ( err == kDNSServiceErr_NoError)
|
|
795
|
+
{
|
|
796
|
+
(*pEnv)->SetLongField(pEnv, destObj, recField, (long) recRef);
|
|
797
|
+
}
|
|
798
|
+
else
|
|
799
|
+
{
|
|
800
|
+
if ( regEnvelope->RecordObj != NULL)
|
|
801
|
+
(*pEnv)->DeleteWeakGlobalRef( pEnv, regEnvelope->RecordObj);
|
|
802
|
+
free( regEnvelope);
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
if ( pBytes != NULL)
|
|
806
|
+
(*pEnv)->ReleaseByteArrayElements( pEnv, rData, pBytes, 0);
|
|
807
|
+
|
|
808
|
+
SafeReleaseUTFChars( pEnv, fullname, nameStr);
|
|
809
|
+
|
|
810
|
+
return err;
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
|
|
814
|
+
static void DNSSD_API ServiceQueryReply( DNSServiceRef sdRef _UNUSED, DNSServiceFlags flags, uint32_t interfaceIndex,
|
|
815
|
+
DNSServiceErrorType errorCode, const char *serviceName,
|
|
816
|
+
uint16_t rrtype, uint16_t rrclass, uint16_t rdlen,
|
|
817
|
+
const void *rdata, uint32_t ttl, void *context)
|
|
818
|
+
{
|
|
819
|
+
OpContext *pContext = (OpContext*) context;
|
|
820
|
+
jbyteArray rDataObj;
|
|
821
|
+
jbyte *pBytes;
|
|
822
|
+
|
|
823
|
+
SetupCallbackState( &pContext->Env);
|
|
824
|
+
|
|
825
|
+
if ( pContext->ClientObj != NULL && pContext->Callback != NULL &&
|
|
826
|
+
NULL != ( rDataObj = (*pContext->Env)->NewByteArray( pContext->Env, rdlen)))
|
|
827
|
+
{
|
|
828
|
+
if ( errorCode == kDNSServiceErr_NoError)
|
|
829
|
+
{
|
|
830
|
+
// Initialize rDataObj with contents of rdata
|
|
831
|
+
pBytes = (*pContext->Env)->GetByteArrayElements( pContext->Env, rDataObj, NULL);
|
|
832
|
+
memcpy( pBytes, rdata, rdlen);
|
|
833
|
+
(*pContext->Env)->ReleaseByteArrayElements( pContext->Env, rDataObj, pBytes, JNI_COMMIT);
|
|
834
|
+
|
|
835
|
+
jbyteArray jServiceName = (*pContext->Env)->NewByteArray(pContext->Env, (jsize)strlen(serviceName));
|
|
836
|
+
(*pContext->Env)->SetByteArrayRegion (pContext->Env, jServiceName, 0, (jsize)strlen(serviceName), (const jbyte *) serviceName);
|
|
837
|
+
(*pContext->Env)->CallVoidMethod( pContext->Env, pContext->ClientObj, pContext->Callback,
|
|
838
|
+
pContext->JavaObj, flags, interfaceIndex, jServiceName, rrtype, rrclass, rDataObj, ttl);
|
|
839
|
+
(*pContext->Env)->DeleteLocalRef( pContext->Env, jServiceName);
|
|
840
|
+
(*pContext->Env)->DeleteLocalRef( pContext->Env, rDataObj);
|
|
841
|
+
}
|
|
842
|
+
else
|
|
843
|
+
ReportError( pContext->Env, pContext->ClientObj, pContext->JavaObj, errorCode);
|
|
844
|
+
}
|
|
845
|
+
TeardownCallbackState();
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_AppleQuery_CreateQuery( JNIEnv *pEnv, jobject pThis,
|
|
849
|
+
jint flags, jint ifIndex, jstring serviceName, jint rrtype, jint rrclass)
|
|
850
|
+
{
|
|
851
|
+
jclass cls = (*pEnv)->GetObjectClass( pEnv, pThis);
|
|
852
|
+
jfieldID contextField = (*pEnv)->GetFieldID( pEnv, cls, "fNativeContext", "J");
|
|
853
|
+
OpContext *pContext = NULL;
|
|
854
|
+
DNSServiceErrorType err = kDNSServiceErr_NoError;
|
|
855
|
+
|
|
856
|
+
if ( contextField != 0)
|
|
857
|
+
pContext = NewContext( pEnv, pThis, "queryAnswered",
|
|
858
|
+
"(Lcom/github/druk/dnssd/DNSSDService;II[BII[BI)V");
|
|
859
|
+
else
|
|
860
|
+
err = kDNSServiceErr_BadParam;
|
|
861
|
+
|
|
862
|
+
if ( pContext != NULL)
|
|
863
|
+
{
|
|
864
|
+
const char *servStr = SafeGetUTFChars( pEnv, serviceName);
|
|
865
|
+
|
|
866
|
+
err = DNSServiceQueryRecord( &pContext->ServiceRef, flags, ifIndex, servStr,
|
|
867
|
+
rrtype, rrclass, ServiceQueryReply, pContext);
|
|
868
|
+
if ( err == kDNSServiceErr_NoError)
|
|
869
|
+
{
|
|
870
|
+
(*pEnv)->SetLongField(pEnv, pThis, contextField, (long) pContext);
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
SafeReleaseUTFChars( pEnv, serviceName, servStr);
|
|
874
|
+
}
|
|
875
|
+
else
|
|
876
|
+
err = kDNSServiceErr_NoMemory;
|
|
877
|
+
|
|
878
|
+
return err;
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
|
|
882
|
+
static void DNSSD_API DomainEnumReply( DNSServiceRef sdRef _UNUSED, DNSServiceFlags flags, uint32_t interfaceIndex,
|
|
883
|
+
DNSServiceErrorType errorCode, const char *replyDomain, void *context)
|
|
884
|
+
{
|
|
885
|
+
OpContext *pContext = (OpContext*) context;
|
|
886
|
+
|
|
887
|
+
SetupCallbackState( &pContext->Env);
|
|
888
|
+
|
|
889
|
+
if ( pContext->ClientObj != NULL && pContext->Callback != NULL)
|
|
890
|
+
{
|
|
891
|
+
if ( errorCode == kDNSServiceErr_NoError)
|
|
892
|
+
{
|
|
893
|
+
jbyteArray jReplyDomain = (*pContext->Env)->NewByteArray(pContext->Env, (jsize)strlen(replyDomain));
|
|
894
|
+
(*pContext->Env)->SetByteArrayRegion (pContext->Env, jReplyDomain, 0, (jsize)strlen(replyDomain), (const jbyte *) replyDomain);
|
|
895
|
+
(*pContext->Env)->CallVoidMethod( pContext->Env, pContext->ClientObj,
|
|
896
|
+
( flags & kDNSServiceFlagsAdd) != 0 ? pContext->Callback : pContext->Callback2,
|
|
897
|
+
pContext->JavaObj, flags, interfaceIndex, jReplyDomain);
|
|
898
|
+
(*pContext->Env)->DeleteLocalRef( pContext->Env, jReplyDomain);
|
|
899
|
+
}
|
|
900
|
+
else
|
|
901
|
+
ReportError( pContext->Env, pContext->ClientObj, pContext->JavaObj, errorCode);
|
|
902
|
+
}
|
|
903
|
+
TeardownCallbackState();
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_AppleDomainEnum_BeginEnum( JNIEnv *pEnv, jobject pThis,
|
|
907
|
+
jint flags, jint ifIndex)
|
|
908
|
+
{
|
|
909
|
+
jclass cls = (*pEnv)->GetObjectClass( pEnv, pThis);
|
|
910
|
+
jfieldID contextField = (*pEnv)->GetFieldID( pEnv, cls, "fNativeContext", "J");
|
|
911
|
+
OpContext *pContext = NULL;
|
|
912
|
+
DNSServiceErrorType err = kDNSServiceErr_NoError;
|
|
913
|
+
|
|
914
|
+
if ( contextField != 0)
|
|
915
|
+
pContext = NewContext( pEnv, pThis, "domainFound",
|
|
916
|
+
"(Lcom/github/druk/dnssd/DNSSDService;II[B)V");
|
|
917
|
+
else
|
|
918
|
+
err = kDNSServiceErr_BadParam;
|
|
919
|
+
|
|
920
|
+
if ( pContext != NULL)
|
|
921
|
+
{
|
|
922
|
+
pContext->Callback2 = (*pEnv)->GetMethodID( pEnv,
|
|
923
|
+
(*pEnv)->GetObjectClass( pEnv, pContext->ClientObj),
|
|
924
|
+
"domainLost", "(Lcom/github/druk/dnssd/DNSSDService;II[B)V");
|
|
925
|
+
|
|
926
|
+
err = DNSServiceEnumerateDomains( &pContext->ServiceRef, flags, ifIndex,
|
|
927
|
+
DomainEnumReply, pContext);
|
|
928
|
+
if ( err == kDNSServiceErr_NoError)
|
|
929
|
+
{
|
|
930
|
+
(*pEnv)->SetLongField(pEnv, pThis, contextField, (long) pContext);
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
else
|
|
934
|
+
err = kDNSServiceErr_NoMemory;
|
|
935
|
+
|
|
936
|
+
return err;
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
|
|
940
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_AppleDNSSD_ConstructName( JNIEnv *pEnv, jobject pThis _UNUSED,
|
|
941
|
+
jstring serviceName, jstring regtype, jstring domain, jobjectArray pOut)
|
|
942
|
+
{
|
|
943
|
+
DNSServiceErrorType err = kDNSServiceErr_NoError;
|
|
944
|
+
const char *nameStr = SafeGetUTFChars( pEnv, serviceName);
|
|
945
|
+
const char *regStr = SafeGetUTFChars( pEnv, regtype);
|
|
946
|
+
const char *domStr = SafeGetUTFChars( pEnv, domain);
|
|
947
|
+
char buff[ kDNSServiceMaxDomainName + 1];
|
|
948
|
+
|
|
949
|
+
err = DNSServiceConstructFullName( buff, nameStr, regStr, domStr);
|
|
950
|
+
|
|
951
|
+
if ( err == kDNSServiceErr_NoError)
|
|
952
|
+
{
|
|
953
|
+
// pOut is expected to be a String[1] array.
|
|
954
|
+
(*pEnv)->SetObjectArrayElement( pEnv, pOut, 0, (*pEnv)->NewStringUTF( pEnv, buff));
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
SafeReleaseUTFChars( pEnv, serviceName, nameStr);
|
|
958
|
+
SafeReleaseUTFChars( pEnv, regtype, regStr);
|
|
959
|
+
SafeReleaseUTFChars( pEnv, domain, domStr);
|
|
960
|
+
|
|
961
|
+
return err;
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_AppleDNSSD_ReconfirmRecord( JNIEnv *pEnv, jobject pThis _UNUSED,
|
|
965
|
+
jint flags, jint ifIndex, jstring fullName,
|
|
966
|
+
jint rrtype, jint rrclass, jbyteArray rdata)
|
|
967
|
+
{
|
|
968
|
+
jbyte *pBytes;
|
|
969
|
+
jsize numBytes;
|
|
970
|
+
const char *nameStr = SafeGetUTFChars( pEnv, fullName);
|
|
971
|
+
DNSServiceErrorType err = kDNSServiceErr_NoError;
|
|
972
|
+
|
|
973
|
+
pBytes = (*pEnv)->GetByteArrayElements( pEnv, rdata, NULL);
|
|
974
|
+
numBytes = (*pEnv)->GetArrayLength( pEnv, rdata);
|
|
975
|
+
|
|
976
|
+
err = DNSServiceReconfirmRecord( flags, ifIndex, nameStr, rrtype, rrclass, numBytes, pBytes);
|
|
977
|
+
|
|
978
|
+
if ( pBytes != NULL)
|
|
979
|
+
(*pEnv)->ReleaseByteArrayElements( pEnv, rdata, pBytes, 0);
|
|
980
|
+
|
|
981
|
+
SafeReleaseUTFChars( pEnv, fullName, nameStr);
|
|
982
|
+
return err;
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
#define LOCAL_ONLY_NAME "loo"
|
|
986
|
+
#define P2P_NAME "p2p"
|
|
987
|
+
|
|
988
|
+
JNIEXPORT jstring JNICALL Java_com_github_druk_dnssd_AppleDNSSD_GetNameForIfIndex( JNIEnv *pEnv, jobject pThis _UNUSED,
|
|
989
|
+
jint ifIndex)
|
|
990
|
+
{
|
|
991
|
+
char *p = LOCAL_ONLY_NAME, nameBuff[IF_NAMESIZE];
|
|
992
|
+
|
|
993
|
+
if (ifIndex == (jint) kDNSServiceInterfaceIndexP2P)
|
|
994
|
+
p = P2P_NAME;
|
|
995
|
+
else if (ifIndex != (jint) kDNSServiceInterfaceIndexLocalOnly)
|
|
996
|
+
p = if_indextoname( ifIndex, nameBuff );
|
|
997
|
+
|
|
998
|
+
jbyteArray jP = (*pEnv)->NewByteArray(pEnv, (jsize)strlen(p));
|
|
999
|
+
(*pEnv)->SetByteArrayRegion (pEnv, jP, 0, (jsize)strlen(p), (const jbyte *) p);
|
|
1000
|
+
return jP;
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
|
|
1004
|
+
JNIEXPORT jint JNICALL Java_com_github_druk_dnssd_AppleDNSSD_GetIfIndexForName( JNIEnv *pEnv, jobject pThis _UNUSED,
|
|
1005
|
+
jstring ifName)
|
|
1006
|
+
{
|
|
1007
|
+
uint32_t ifIndex = kDNSServiceInterfaceIndexLocalOnly;
|
|
1008
|
+
const char *nameStr = SafeGetUTFChars( pEnv, ifName);
|
|
1009
|
+
|
|
1010
|
+
if (strcmp(nameStr, P2P_NAME) == 0)
|
|
1011
|
+
ifIndex = kDNSServiceInterfaceIndexP2P;
|
|
1012
|
+
else if (strcmp(nameStr, LOCAL_ONLY_NAME))
|
|
1013
|
+
ifIndex = if_nametoindex( nameStr);
|
|
1014
|
+
|
|
1015
|
+
SafeReleaseUTFChars( pEnv, ifName, nameStr);
|
|
1016
|
+
|
|
1017
|
+
return ifIndex;
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
|
|
1021
|
+
#if defined(_WIN32)
|
|
1022
|
+
static char*
|
|
1023
|
+
if_indextoname( DWORD ifIndex, char * nameBuff)
|
|
1024
|
+
{
|
|
1025
|
+
PIP_ADAPTER_INFO pAdapterInfo = NULL;
|
|
1026
|
+
PIP_ADAPTER_INFO pAdapter = NULL;
|
|
1027
|
+
DWORD dwRetVal = 0;
|
|
1028
|
+
char * ifName = NULL;
|
|
1029
|
+
ULONG ulOutBufLen = 0;
|
|
1030
|
+
|
|
1031
|
+
if (GetAdaptersInfo( NULL, &ulOutBufLen) != ERROR_BUFFER_OVERFLOW)
|
|
1032
|
+
{
|
|
1033
|
+
goto exit;
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
pAdapterInfo = (IP_ADAPTER_INFO *) malloc(ulOutBufLen);
|
|
1037
|
+
|
|
1038
|
+
if (pAdapterInfo == NULL)
|
|
1039
|
+
{
|
|
1040
|
+
goto exit;
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen );
|
|
1044
|
+
|
|
1045
|
+
if (dwRetVal != NO_ERROR)
|
|
1046
|
+
{
|
|
1047
|
+
goto exit;
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
pAdapter = pAdapterInfo;
|
|
1051
|
+
while (pAdapter)
|
|
1052
|
+
{
|
|
1053
|
+
if (pAdapter->Index == ifIndex)
|
|
1054
|
+
{
|
|
1055
|
+
// It would be better if we passed in the length of nameBuff to this
|
|
1056
|
+
// function, so we would have absolute certainty that no buffer
|
|
1057
|
+
// overflows would occur. Buffer overflows *shouldn't* occur because
|
|
1058
|
+
// nameBuff is of size MAX_ADAPTER_NAME_LENGTH.
|
|
1059
|
+
strcpy( nameBuff, pAdapter->AdapterName );
|
|
1060
|
+
ifName = nameBuff;
|
|
1061
|
+
break;
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
pAdapter = pAdapter->Next;
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
exit:
|
|
1068
|
+
|
|
1069
|
+
if (pAdapterInfo != NULL)
|
|
1070
|
+
{
|
|
1071
|
+
free( pAdapterInfo );
|
|
1072
|
+
pAdapterInfo = NULL;
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
return ifName;
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
|
|
1079
|
+
static DWORD
|
|
1080
|
+
if_nametoindex( const char * nameStr )
|
|
1081
|
+
{
|
|
1082
|
+
PIP_ADAPTER_INFO pAdapterInfo = NULL;
|
|
1083
|
+
PIP_ADAPTER_INFO pAdapter = NULL;
|
|
1084
|
+
DWORD dwRetVal = 0;
|
|
1085
|
+
DWORD ifIndex = 0;
|
|
1086
|
+
ULONG ulOutBufLen = 0;
|
|
1087
|
+
|
|
1088
|
+
if (GetAdaptersInfo( NULL, &ulOutBufLen) != ERROR_BUFFER_OVERFLOW)
|
|
1089
|
+
{
|
|
1090
|
+
goto exit;
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
pAdapterInfo = (IP_ADAPTER_INFO *) malloc(ulOutBufLen);
|
|
1094
|
+
|
|
1095
|
+
if (pAdapterInfo == NULL)
|
|
1096
|
+
{
|
|
1097
|
+
goto exit;
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1100
|
+
dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen );
|
|
1101
|
+
|
|
1102
|
+
if (dwRetVal != NO_ERROR)
|
|
1103
|
+
{
|
|
1104
|
+
goto exit;
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
|
+
pAdapter = pAdapterInfo;
|
|
1108
|
+
while (pAdapter)
|
|
1109
|
+
{
|
|
1110
|
+
if (strcmp(pAdapter->AdapterName, nameStr) == 0)
|
|
1111
|
+
{
|
|
1112
|
+
ifIndex = pAdapter->Index;
|
|
1113
|
+
break;
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
pAdapter = pAdapter->Next;
|
|
1117
|
+
}
|
|
1118
|
+
|
|
1119
|
+
exit:
|
|
1120
|
+
|
|
1121
|
+
if (pAdapterInfo != NULL)
|
|
1122
|
+
{
|
|
1123
|
+
free( pAdapterInfo );
|
|
1124
|
+
pAdapterInfo = NULL;
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1127
|
+
return ifIndex;
|
|
1128
|
+
}
|
|
1129
|
+
#endif
|
|
1130
|
+
|
|
1131
|
+
|
|
1132
|
+
// Note: The C preprocessor stringify operator ('#') makes a string from its argument, without macro expansion
|
|
1133
|
+
// e.g. If "version" is #define'd to be "4", then STRINGIFY_AWE(version) will return the string "version", not "4"
|
|
1134
|
+
// To expand "version" to its value before making the string, use STRINGIFY(version) instead
|
|
1135
|
+
#define STRINGIFY_ARGUMENT_WITHOUT_EXPANSION(s) #s
|
|
1136
|
+
#define STRINGIFY(s) STRINGIFY_ARGUMENT_WITHOUT_EXPANSION(s)
|
|
1137
|
+
|
|
1138
|
+
// NOT static -- otherwise the compiler may optimize it out
|
|
1139
|
+
// The "@(#) " pattern is a special prefix the "what" command looks for
|
|
1140
|
+
const char VersionString_SCCS[] = "@(#) libjdns_sd " STRINGIFY(mDNSResponderVersion) " (" __DATE__ " " __TIME__ ")";
|