react-native-zeroconf 0.15.2 → 0.16.1
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/README.md +27 -536
- package/android/build.gradle +2 -2
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/Zeroconf.java +16 -4
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroconfModule.java +95 -13
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/nsd/NsdServiceImpl.java +184 -64
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/nsd/ServiceInfoCallbacks.java +89 -0
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/rx2dnssd/DnssdImpl.java +114 -39
- package/android/src/main/jni/Android.mk +2 -24
- package/android/src/main/jni/Application.mk +1 -1
- package/dist/index.js +244 -27
- package/index.d.ts +95 -9
- package/ios/RNZeroconf/RNNetServiceSerializer.h +10 -2
- package/ios/RNZeroconf/RNNetServiceSerializer.m +51 -59
- package/ios/RNZeroconf/RNZeroconf.h +1 -3
- package/ios/RNZeroconf/RNZeroconf.m +642 -175
- package/package.json +40 -2
- package/react-native-zeroconf.podspec +12 -6
- package/src/index.js +222 -31
- package/android/src/main/java/com/github/druk/dnssd/DNSSDBindable.java +0 -67
- package/android/src/main/java/com/github/druk/rx2dnssd/Rx2DnssdBindable.java +0 -35
- package/android/src/main/jni/mdnsresponder/Android.bp +0 -215
- package/android/src/main/jni/mdnsresponder/Clients/ClientCommon.c +0 -75
- package/android/src/main/jni/mdnsresponder/Clients/ClientCommon.h +0 -41
- package/android/src/main/jni/mdnsresponder/Clients/Makefile +0 -54
- package/android/src/main/jni/mdnsresponder/Clients/ReadMe.txt +0 -25
- package/android/src/main/jni/mdnsresponder/Clients/dns-sd.c +0 -1351
- package/android/src/main/jni/mdnsresponder/Makefile +0 -41
- package/android/src/main/jni/mdnsresponder/PrivateDNS.txt +0 -275
- package/android/src/main/jni/mdnsresponder/android/caseMapping/Iphlpapi.h +0 -1
- package/android/src/main/jni/mdnsresponder/android/caseMapping/README +0 -3
- package/android/src/main/jni/mdnsresponder/android/caseMapping/Resource.h +0 -1
- package/android/src/main/jni/mdnsresponder/android/caseMapping/Ws2tcpip.h +0 -1
- package/android/src/main/jni/mdnsresponder/android/caseMapping/ipExport.h +0 -1
- package/android/src/main/jni/mdnsresponder/android/windows_firewall_dummy.c +0 -10
- package/android/src/main/jni/mdnsresponder/mDNSCore/Implementer Notes.txt +0 -66
- package/android/src/main/jni/mdnsresponder/mDNSPosix/Client.c +0 -223
- package/android/src/main/jni/mdnsresponder/mDNSPosix/ExampleClientApp.c +0 -91
- package/android/src/main/jni/mdnsresponder/mDNSPosix/ExampleClientApp.h +0 -18
- package/android/src/main/jni/mdnsresponder/mDNSPosix/Identify.c +0 -378
- package/android/src/main/jni/mdnsresponder/mDNSPosix/Makefile +0 -520
- package/android/src/main/jni/mdnsresponder/mDNSPosix/NetMonitor.c +0 -1010
- package/android/src/main/jni/mdnsresponder/mDNSPosix/ProxyResponder.c +0 -300
- package/android/src/main/jni/mdnsresponder/mDNSPosix/ReadMe.txt +0 -314
- package/android/src/main/jni/mdnsresponder/mDNSPosix/Responder.c +0 -792
- package/android/src/main/jni/mdnsresponder/mDNSPosix/Services.txt +0 -36
- package/android/src/main/jni/mdnsresponder/mDNSPosix/libnss_mdns.8 +0 -148
- package/android/src/main/jni/mdnsresponder/mDNSPosix/mdnsd.sh +0 -73
- package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_ReadMe.txt +0 -125
- package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_mdns.c +0 -2723
- package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_mdns.conf +0 -13
- package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_mdns.conf.5 +0 -135
- package/android/src/main/jni/mdnsresponder/mDNSPosix/parselog.py +0 -247
- package/android/src/main/jni/mdnsresponder/mDNSResponder.sln +0 -400
- package/android/src/main/jni/mdnsresponder/mDNSShared/DebugServices.c +0 -3075
- package/android/src/main/jni/mdnsresponder/mDNSShared/dns-sd.1 +0 -194
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.8 +0 -69
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.c +0 -3146
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.conf +0 -60
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd_lexer.l +0 -84
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd_parser.y +0 -585
- package/android/src/main/jni/mdnsresponder/mDNSShared/mDNS.1 +0 -198
- package/android/src/main/jni/mdnsresponder/mDNSShared/mDNSResponder.8 +0 -116
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/BrowsingPage.cpp +0 -441
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/BrowsingPage.h +0 -156
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigDialog.cpp +0 -59
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigDialog.h +0 -48
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigPropertySheet.cpp +0 -301
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigPropertySheet.h +0 -105
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.cpp +0 -380
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.def +0 -20
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.h +0 -84
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.rc +0 -141
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.vcproj +0 -727
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelDll.rc +0 -123
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.cpp +0 -373
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.h +0 -48
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.rc +0 -123
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.vcproj +0 -764
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelLocRes.rc +0 -270
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelLocRes.vcproj +0 -487
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelRes.rc +0 -134
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelRes.vcproj +0 -518
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/FourthPage.cpp +0 -197
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/FourthPage.h +0 -87
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/RegistrationPage.cpp +0 -387
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/RegistrationPage.h +0 -75
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SecondPage.cpp +0 -544
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SecondPage.h +0 -107
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ServicesPage.cpp +0 -273
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ServicesPage.h +0 -123
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SharedSecret.cpp +0 -115
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SharedSecret.h +0 -54
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.dll.manifest +0 -10
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.exe.manifest +0 -17
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.manifest +0 -17
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.rc2 +0 -13
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel64.manifest +0 -17
- 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 +0 -56
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/stdafx.cpp +0 -20
- package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/stdafx.h +0 -64
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dll.aps +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dll.rc +0 -102
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dllmain.c +0 -112
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dnssd.def +0 -48
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dnssd.vcproj +0 -472
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/resource.h +0 -27
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/AssemblyInfo.cpp +0 -84
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/PString.h +0 -70
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/Stdafx.cpp +0 -22
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/Stdafx.h +0 -33
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.cpp +0 -1234
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.h +0 -1392
- 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 +0 -113
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.vcproj +0 -446
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/resource.h +0 -3
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLStub/DLLStub.cpp +0 -693
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLStub/DLLStub.h +0 -52
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLStub/DLLStub.vcproj +0 -324
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.cpp +0 -208
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.def +0 -35
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.idl +0 -491
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.rc +0 -126
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.rgs +0 -11
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.vcproj +0 -625
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSD.cpp +0 -892
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDEventManager.cpp +0 -31
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDEventManager.h +0 -133
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDEventManager.rgs +0 -27
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDRecord.cpp +0 -101
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDRecord.h +0 -185
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDRecord.rgs +0 -27
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDService.cpp +0 -2095
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDService.h +0 -429
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDService.rgs +0 -27
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/StringServices.cpp +0 -344
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/StringServices.h +0 -102
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/TXTRecord.cpp +0 -381
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/TXTRecord.h +0 -203
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/TXTRecord.rgs +0 -27
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/_IDNSSDEvents_CP.h +0 -358
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/dlldatax.c +0 -51
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/dlldatax.h +0 -49
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/resource.h +0 -30
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/stdafx.h +0 -88
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2002.sln +0 -21
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2002.vcproj +0 -253
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2003.sln +0 -21
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2003.vcproj +0 -267
- 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 +0 -323
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Application.rc2 +0 -20
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Resource.h +0 -53
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/AboutDialog.cpp +0 -71
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/AboutDialog.h +0 -62
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/Application.cpp +0 -111
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/Application.h +0 -68
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/ChooserDialog.cpp +0 -1426
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/ChooserDialog.h +0 -131
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/LoginDialog.cpp +0 -109
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/LoginDialog.h +0 -53
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/StdAfx.cpp +0 -18
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/StdAfx.h +0 -48
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Application.vcc +0 -37
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Application.vcp +0 -868
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Application.vcw +0 -29
- 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 +0 -194
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/Application.rc2 +0 -13
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/newres.h +0 -28
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/resource.h +0 -22
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/Application.cpp +0 -92
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/Application.h +0 -57
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/BrowserDialog.cpp +0 -394
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/BrowserDialog.h +0 -84
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/StdAfx.cpp +0 -18
- package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/StdAfx.h +0 -46
- package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/Java.vcproj +0 -111
- package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/jdns_sd.rc +0 -62
- package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/makefile +0 -143
- package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/makefile64 +0 -143
- package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.aps +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.c +0 -581
- package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.rc +0 -103
- package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.vcproj +0 -409
- package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/Prefix.h +0 -28
- package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/resource.h +0 -27
- package/android/src/main/jni/mdnsresponder/mDNSWindows/PosixCompat.c +0 -128
- package/android/src/main/jni/mdnsresponder/mDNSWindows/PosixCompat.h +0 -70
- package/android/src/main/jni/mdnsresponder/mDNSWindows/README.txt +0 -85
- package/android/src/main/jni/mdnsresponder/mDNSWindows/RegNames.h +0 -57
- package/android/src/main/jni/mdnsresponder/mDNSWindows/Secret.c +0 -338
- package/android/src/main/jni/mdnsresponder/mDNSWindows/Secret.h +0 -42
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/EventLog.mc +0 -11
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/EventLogMessages.bin +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Firewall.cpp +0 -484
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Firewall.h +0 -79
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Prefix.h +0 -30
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.aps +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.c +0 -2669
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.h +0 -30
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.mcp +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.rc +0 -114
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.vcproj +0 -562
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/main.c +0 -32
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/res/mDNSResponder.manifest +0 -12
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/res/mDNSResponder64.manifest +0 -12
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/resource.h +0 -17
- package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/resrc1.h +0 -15
- package/android/src/main/jni/mdnsresponder/mDNSWindows/VPCDetect.cpp +0 -165
- package/android/src/main/jni/mdnsresponder/mDNSWindows/VPCDetect.h +0 -36
- package/android/src/main/jni/mdnsresponder/mDNSWindows/WinServices.cpp +0 -93
- package/android/src/main/jni/mdnsresponder/mDNSWindows/WinServices.h +0 -34
- package/android/src/main/jni/mdnsresponder/mDNSWindows/WinVersRes.h +0 -35
- package/android/src/main/jni/mdnsresponder/mDNSWindows/isocode.h +0 -135
- package/android/src/main/jni/mdnsresponder/mDNSWindows/loclibrary.c +0 -268
- package/android/src/main/jni/mdnsresponder/mDNSWindows/loclibrary.h +0 -54
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mDNSWin32.c +0 -5200
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mDNSWin32.h +0 -208
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/ReadMe.txt +0 -15
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.aps +0 -0
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.c +0 -2430
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.def +0 -24
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.rc +0 -104
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.vcproj +0 -457
- package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/resource.h +0 -27
- package/android/src/main/jni/mdnsresponder/mdnsd.rc +0 -7
|
@@ -3,11 +3,14 @@ package com.balthazargronon.RCTZeroconf;
|
|
|
3
3
|
|
|
4
4
|
import android.util.Log;
|
|
5
5
|
|
|
6
|
+
import com.facebook.react.bridge.Promise;
|
|
6
7
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
7
8
|
import com.facebook.react.bridge.ReactContext;
|
|
8
9
|
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
9
10
|
import com.facebook.react.bridge.ReactMethod;
|
|
10
11
|
import com.facebook.react.bridge.ReadableArray;
|
|
12
|
+
import com.facebook.react.bridge.WritableMap;
|
|
13
|
+
import com.facebook.react.bridge.WritableNativeMap;
|
|
11
14
|
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
12
15
|
|
|
13
16
|
import javax.annotation.Nullable;
|
|
@@ -35,6 +38,15 @@ public class ZeroconfModule extends ReactContextBaseJavaModule {
|
|
|
35
38
|
public static final String KEY_SERVICE_PORT = "port";
|
|
36
39
|
public static final String KEY_SERVICE_ADDRESSES = "addresses";
|
|
37
40
|
public static final String KEY_SERVICE_TXT = "txt";
|
|
41
|
+
// Id of the JS instance whose scan an event belongs to
|
|
42
|
+
public static final String KEY_SCAN_ID = "scanId";
|
|
43
|
+
|
|
44
|
+
// Where an error code comes from
|
|
45
|
+
public static final String ERROR_DOMAIN_NSD = "NsdManager";
|
|
46
|
+
public static final String ERROR_DOMAIN_DNSSD = "DNSSD";
|
|
47
|
+
public static final String ERROR_DOMAIN_LIBRARY = "RNZeroconf";
|
|
48
|
+
public static final String ERROR_CODE_EXCEPTION = "EXCEPTION";
|
|
49
|
+
public static final String ERROR_CODE_NOT_PUBLISHED = "NOT_PUBLISHED";
|
|
38
50
|
|
|
39
51
|
private ZeroConfImplFactory zeroConfFactory;
|
|
40
52
|
|
|
@@ -49,22 +61,30 @@ public class ZeroconfModule extends ReactContextBaseJavaModule {
|
|
|
49
61
|
}
|
|
50
62
|
|
|
51
63
|
@ReactMethod
|
|
52
|
-
public void scan(String type, String protocol, String domain, String implType) {
|
|
64
|
+
public void scan(String scanId, String type, String protocol, String domain, String implType) {
|
|
53
65
|
try {
|
|
54
|
-
getZeroconfImpl(implType).scan(type, protocol, domain);
|
|
66
|
+
getZeroconfImpl(implType).scan(scanId, type, protocol, domain);
|
|
55
67
|
} catch (Throwable e) {
|
|
56
68
|
Log.e(getClass().getName(), e.getMessage(), e);
|
|
57
|
-
|
|
69
|
+
sendError(ERROR_DOMAIN_LIBRARY, ERROR_CODE_EXCEPTION, "Exception during scan: " + e.getMessage(), null, scanId);
|
|
58
70
|
}
|
|
59
71
|
}
|
|
60
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Stops the scan with this id, or every scan of the implementation without one
|
|
75
|
+
*/
|
|
61
76
|
@ReactMethod
|
|
62
|
-
public void stop(String implType) {
|
|
77
|
+
public void stop(@Nullable String scanId, String implType) {
|
|
63
78
|
try {
|
|
64
|
-
getZeroconfImpl(implType)
|
|
79
|
+
Zeroconf impl = getZeroconfImpl(implType);
|
|
80
|
+
if (scanId == null || scanId.isEmpty()) {
|
|
81
|
+
impl.stopAll();
|
|
82
|
+
} else {
|
|
83
|
+
impl.stop(scanId);
|
|
84
|
+
}
|
|
65
85
|
} catch (Throwable e) {
|
|
66
86
|
Log.e(getClass().getName(), e.getMessage(), e);
|
|
67
|
-
|
|
87
|
+
sendError(ERROR_DOMAIN_LIBRARY, ERROR_CODE_EXCEPTION, "Exception during stop: " + e.getMessage(), null, scanId);
|
|
68
88
|
}
|
|
69
89
|
}
|
|
70
90
|
|
|
@@ -73,22 +93,26 @@ public class ZeroconfModule extends ReactContextBaseJavaModule {
|
|
|
73
93
|
}
|
|
74
94
|
|
|
75
95
|
@ReactMethod
|
|
76
|
-
public void registerService(String type, String protocol, String domain, String name, int port, ReadableArray txt, String implType) {
|
|
96
|
+
public void registerService(String type, String protocol, String domain, String name, int port, ReadableArray txt, String implType, Promise promise) {
|
|
77
97
|
try {
|
|
78
|
-
getZeroconfImpl(implType).registerService(type, protocol, domain, name, port, txt);
|
|
98
|
+
getZeroconfImpl(implType).registerService(type, protocol, domain, name, port, txt, promise);
|
|
79
99
|
} catch (Throwable e) {
|
|
80
100
|
Log.e(getClass().getName(), e.getMessage(), e);
|
|
81
|
-
|
|
101
|
+
String message = "Exception while registering service: " + e.getMessage();
|
|
102
|
+
sendError(ERROR_DOMAIN_LIBRARY, ERROR_CODE_EXCEPTION, message, name);
|
|
103
|
+
reject(promise, ERROR_DOMAIN_LIBRARY, ERROR_CODE_EXCEPTION, message, name);
|
|
82
104
|
}
|
|
83
105
|
}
|
|
84
106
|
|
|
85
107
|
@ReactMethod
|
|
86
|
-
public void unregisterService(String serviceName, String implType) {
|
|
108
|
+
public void unregisterService(String serviceName, String implType, Promise promise) {
|
|
87
109
|
try {
|
|
88
|
-
getZeroconfImpl(implType).unregisterService(serviceName);
|
|
110
|
+
getZeroconfImpl(implType).unregisterService(serviceName, promise);
|
|
89
111
|
} catch (Throwable e) {
|
|
90
112
|
Log.e(getClass().getName(), e.getMessage(), e);
|
|
91
|
-
|
|
113
|
+
String message = "Exception while unregistering service: " + e.getMessage();
|
|
114
|
+
sendError(ERROR_DOMAIN_LIBRARY, ERROR_CODE_EXCEPTION, message, serviceName);
|
|
115
|
+
reject(promise, ERROR_DOMAIN_LIBRARY, ERROR_CODE_EXCEPTION, message, serviceName);
|
|
92
116
|
}
|
|
93
117
|
}
|
|
94
118
|
|
|
@@ -105,6 +129,64 @@ public class ZeroconfModule extends ReactContextBaseJavaModule {
|
|
|
105
129
|
}
|
|
106
130
|
}
|
|
107
131
|
|
|
132
|
+
/**
|
|
133
|
+
* Emits an error event as { message, code, domain, serviceName }
|
|
134
|
+
*
|
|
135
|
+
* @param code an Integer for platform error codes, a String for the library's own
|
|
136
|
+
*/
|
|
137
|
+
public void sendError(String domain, Object code, String message, @Nullable String serviceName) {
|
|
138
|
+
sendError(domain, code, message, serviceName, null);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* @param scanId the scan the error belongs to, null for errors not related to a scan
|
|
143
|
+
*/
|
|
144
|
+
public void sendError(String domain, Object code, String message, @Nullable String serviceName, @Nullable String scanId) {
|
|
145
|
+
WritableMap error = buildError(domain, code, message, serviceName);
|
|
146
|
+
if (scanId != null) {
|
|
147
|
+
error.putString(KEY_SCAN_ID, scanId);
|
|
148
|
+
}
|
|
149
|
+
sendEvent(getReactApplicationContext(), EVENT_ERROR, error);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Rejects a promise with the same { message, code, domain, serviceName } shape as error events, in userInfo
|
|
154
|
+
*/
|
|
155
|
+
public static void reject(@Nullable Promise promise, String domain, Object code, String message, @Nullable String serviceName) {
|
|
156
|
+
if (promise != null) {
|
|
157
|
+
promise.reject(String.valueOf(code), message, buildError(domain, code, message, serviceName));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
private static WritableMap buildError(String domain, Object code, String message, @Nullable String serviceName) {
|
|
162
|
+
WritableMap error = new WritableNativeMap();
|
|
163
|
+
error.putString("message", message);
|
|
164
|
+
error.putString("domain", domain);
|
|
165
|
+
if (code instanceof Integer) {
|
|
166
|
+
error.putInt("code", (Integer) code);
|
|
167
|
+
} else {
|
|
168
|
+
error.putString("code", String.valueOf(code));
|
|
169
|
+
}
|
|
170
|
+
if (serviceName != null) {
|
|
171
|
+
error.putString("serviceName", serviceName);
|
|
172
|
+
}
|
|
173
|
+
return error;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Readable description of an NsdManager failure code
|
|
178
|
+
*/
|
|
179
|
+
public static String describeNsdError(int errorCode) {
|
|
180
|
+
switch (errorCode) {
|
|
181
|
+
case 0: return "internal error"; // FAILURE_INTERNAL_ERROR
|
|
182
|
+
case 3: return "operation already active"; // FAILURE_ALREADY_ACTIVE
|
|
183
|
+
case 4: return "maximum number of requests reached"; // FAILURE_MAX_LIMIT
|
|
184
|
+
case 5: return "operation not running"; // FAILURE_OPERATION_NOT_RUNNING (API 34)
|
|
185
|
+
case 6: return "bad parameters"; // FAILURE_BAD_PARAMETERS (API 34)
|
|
186
|
+
default: return "error " + errorCode;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
108
190
|
// Called on teardown by current React Native versions.
|
|
109
191
|
// No @Override so it still compiles against versions that don't declare it.
|
|
110
192
|
public void invalidate() {
|
|
@@ -120,7 +202,7 @@ public class ZeroconfModule extends ReactContextBaseJavaModule {
|
|
|
120
202
|
private void teardown() {
|
|
121
203
|
try {
|
|
122
204
|
for (Zeroconf impl : zeroConfFactory.getCreatedImpls()) {
|
|
123
|
-
impl.
|
|
205
|
+
impl.stopAll();
|
|
124
206
|
impl.unregisterAllServices();
|
|
125
207
|
}
|
|
126
208
|
} catch (Throwable e) {
|
|
@@ -12,6 +12,7 @@ import android.util.Log;
|
|
|
12
12
|
|
|
13
13
|
import com.balthazargronon.RCTZeroconf.Zeroconf;
|
|
14
14
|
import com.balthazargronon.RCTZeroconf.ZeroconfModule;
|
|
15
|
+
import com.facebook.react.bridge.Promise;
|
|
15
16
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
16
17
|
|
|
17
18
|
import com.facebook.react.bridge.ReadableArray;
|
|
@@ -25,123 +26,210 @@ import java.nio.charset.StandardCharsets;
|
|
|
25
26
|
import java.util.ArrayDeque;
|
|
26
27
|
import java.util.ArrayList;
|
|
27
28
|
import java.util.Collections;
|
|
29
|
+
import java.util.Iterator;
|
|
28
30
|
import java.util.List;
|
|
29
31
|
import java.util.Locale;
|
|
30
32
|
import java.util.Map;
|
|
31
33
|
import java.util.concurrent.ConcurrentHashMap;
|
|
34
|
+
import java.util.concurrent.ExecutorService;
|
|
35
|
+
import java.util.concurrent.Executors;
|
|
36
|
+
|
|
37
|
+
import javax.annotation.Nullable;
|
|
32
38
|
|
|
33
39
|
public class NsdServiceImpl implements Zeroconf {
|
|
34
40
|
private static final String TAG = "NsdServiceImpl";
|
|
35
41
|
private static final long RESOLVE_RETRY_DELAY_MS = 100;
|
|
36
42
|
|
|
37
43
|
private NsdManager mNsdManager;
|
|
38
|
-
|
|
44
|
+
// Reference counted: acquired once per running scan
|
|
39
45
|
private WifiManager.MulticastLock multicastLock;
|
|
40
|
-
private Map<String,
|
|
46
|
+
private Map<String, ServiceRegistrationListener> mPublishedServices;
|
|
41
47
|
private ZeroconfModule zeroconfModule;
|
|
42
48
|
private ReactApplicationContext reactApplicationContext;
|
|
43
49
|
|
|
44
|
-
//
|
|
45
|
-
private final
|
|
50
|
+
// Running scans, keyed by the id of the JS instance that started them
|
|
51
|
+
private final Map<String, NsdScan> mScans = new ConcurrentHashMap<>();
|
|
52
|
+
// Not the main thread: serviceInfoToMap can do a blocking reverse lookup for the host name
|
|
53
|
+
private final ExecutorService mCallbackExecutor = Executors.newSingleThreadExecutor();
|
|
54
|
+
|
|
55
|
+
// NsdManager can only resolve one service at a time before API 34, so resolves are queued across scans
|
|
56
|
+
private final ArrayDeque<PendingResolve> mResolveQueue = new ArrayDeque<>();
|
|
46
57
|
private boolean mIsResolving = false;
|
|
47
58
|
private final Handler mHandler = new Handler(Looper.getMainLooper());
|
|
48
59
|
|
|
60
|
+
private static class NsdScan {
|
|
61
|
+
final String scanId;
|
|
62
|
+
NsdManager.DiscoveryListener discoveryListener;
|
|
63
|
+
// Android 14+: services are followed with registerServiceInfoCallback, null before
|
|
64
|
+
@Nullable ServiceInfoCallbacks infoCallbacks;
|
|
65
|
+
|
|
66
|
+
NsdScan(String scanId) {
|
|
67
|
+
this.scanId = scanId;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
private static class PendingResolve {
|
|
72
|
+
final String scanId;
|
|
73
|
+
final NsdServiceInfo serviceInfo;
|
|
74
|
+
|
|
75
|
+
PendingResolve(String scanId, NsdServiceInfo serviceInfo) {
|
|
76
|
+
this.scanId = scanId;
|
|
77
|
+
this.serviceInfo = serviceInfo;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
49
81
|
public NsdServiceImpl(ZeroconfModule zeroconfModule, ReactApplicationContext reactApplicationContext) {
|
|
50
82
|
this.zeroconfModule = zeroconfModule;
|
|
51
83
|
this.reactApplicationContext = reactApplicationContext;
|
|
52
|
-
mPublishedServices = new ConcurrentHashMap<String,
|
|
84
|
+
mPublishedServices = new ConcurrentHashMap<String, ServiceRegistrationListener>();
|
|
53
85
|
}
|
|
54
86
|
|
|
55
87
|
@Override
|
|
56
|
-
public void scan(String type, String protocol, String domain) {
|
|
57
|
-
|
|
58
|
-
mNsdManager = (NsdManager) getReactApplicationContext().getSystemService(Context.NSD_SERVICE);
|
|
59
|
-
}
|
|
88
|
+
public void scan(final String scanId, String type, String protocol, String domain) {
|
|
89
|
+
final NsdManager nsdManager = getNsdManager();
|
|
60
90
|
|
|
61
|
-
this.stop();
|
|
91
|
+
this.stop(scanId);
|
|
92
|
+
acquireMulticastLock();
|
|
62
93
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
94
|
+
final NsdScan scan = new NsdScan(scanId);
|
|
95
|
+
|
|
96
|
+
if (Build.VERSION.SDK_INT >= 34) {
|
|
97
|
+
scan.infoCallbacks = new ServiceInfoCallbacks(nsdManager, mCallbackExecutor, new ServiceInfoCallbacks.Listener() {
|
|
98
|
+
@Override
|
|
99
|
+
public void onServiceUpdated(NsdServiceInfo serviceInfo) {
|
|
100
|
+
if (getHostAddresses(serviceInfo).isEmpty()) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
sendScanEvent(ZeroconfModule.EVENT_RESOLVE, serviceInfoToMap(serviceInfo), scanId);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@Override
|
|
107
|
+
public void onRegistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
|
|
108
|
+
zeroconfModule.sendError(ZeroconfModule.ERROR_DOMAIN_NSD, errorCode, "Resolving service " + serviceInfo.getServiceName() + " failed: " + ZeroconfModule.describeNsdError(errorCode), serviceInfo.getServiceName(), scanId);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
68
111
|
}
|
|
69
112
|
|
|
70
|
-
|
|
113
|
+
scan.discoveryListener = new NsdManager.DiscoveryListener() {
|
|
71
114
|
@Override
|
|
72
115
|
public void onStartDiscoveryFailed(String serviceType, int errorCode) {
|
|
73
|
-
|
|
74
|
-
|
|
116
|
+
zeroconfModule.sendError(ZeroconfModule.ERROR_DOMAIN_NSD, errorCode, "Starting service discovery failed: " + ZeroconfModule.describeNsdError(errorCode), null, scanId);
|
|
117
|
+
// The discovery never started, nothing to stop
|
|
118
|
+
if (mScans.remove(scanId, scan)) {
|
|
119
|
+
releaseMulticastLock();
|
|
120
|
+
}
|
|
75
121
|
}
|
|
76
122
|
|
|
77
123
|
@Override
|
|
78
124
|
public void onStopDiscoveryFailed(String serviceType, int errorCode) {
|
|
79
|
-
|
|
80
|
-
zeroconfModule.sendEvent(getReactApplicationContext(), ZeroconfModule.EVENT_ERROR, error);
|
|
125
|
+
zeroconfModule.sendError(ZeroconfModule.ERROR_DOMAIN_NSD, errorCode, "Stopping service discovery failed: " + ZeroconfModule.describeNsdError(errorCode), null, scanId);
|
|
81
126
|
}
|
|
82
127
|
|
|
83
128
|
@Override
|
|
84
129
|
public void onDiscoveryStarted(String serviceType) {
|
|
85
|
-
Log.d(TAG, "Discovery started");
|
|
86
|
-
|
|
130
|
+
Log.d(TAG, "Discovery started for " + scanId);
|
|
131
|
+
sendScanEvent(ZeroconfModule.EVENT_START, new WritableNativeMap(), scanId);
|
|
87
132
|
}
|
|
88
133
|
|
|
89
134
|
@Override
|
|
90
135
|
public void onDiscoveryStopped(String serviceType) {
|
|
91
|
-
Log.d(TAG, "Discovery stopped");
|
|
92
|
-
|
|
136
|
+
Log.d(TAG, "Discovery stopped for " + scanId);
|
|
137
|
+
sendScanEvent(ZeroconfModule.EVENT_STOP, new WritableNativeMap(), scanId);
|
|
93
138
|
}
|
|
94
139
|
|
|
95
140
|
@Override
|
|
96
141
|
public void onServiceFound(NsdServiceInfo serviceInfo) {
|
|
97
142
|
Log.d(TAG, "Service found");
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
143
|
+
sendScanEvent(ZeroconfModule.EVENT_FOUND, serviceNameToMap(serviceInfo), scanId);
|
|
144
|
+
if (scan.infoCallbacks != null) {
|
|
145
|
+
scan.infoCallbacks.register(serviceInfo);
|
|
146
|
+
} else {
|
|
147
|
+
enqueueResolve(scanId, serviceInfo);
|
|
148
|
+
}
|
|
103
149
|
}
|
|
104
150
|
|
|
105
151
|
@Override
|
|
106
152
|
public void onServiceLost(NsdServiceInfo serviceInfo) {
|
|
107
153
|
Log.d(TAG, "Service lost");
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
154
|
+
sendScanEvent(ZeroconfModule.EVENT_REMOVE, serviceNameToMap(serviceInfo), scanId);
|
|
155
|
+
if (scan.infoCallbacks != null) {
|
|
156
|
+
scan.infoCallbacks.unregister(serviceInfo.getServiceName());
|
|
157
|
+
}
|
|
111
158
|
}
|
|
112
159
|
};
|
|
113
160
|
|
|
161
|
+
mScans.put(scanId, scan);
|
|
114
162
|
String serviceType = String.format("_%s._%s.", type, protocol);
|
|
115
|
-
|
|
163
|
+
nsdManager.discoverServices(serviceType, NsdManager.PROTOCOL_DNS_SD, scan.discoveryListener);
|
|
116
164
|
}
|
|
117
165
|
|
|
118
166
|
@Override
|
|
119
|
-
public void stop() {
|
|
120
|
-
|
|
167
|
+
public void stop(String scanId) {
|
|
168
|
+
NsdScan scan = mScans.remove(scanId);
|
|
169
|
+
if (scan == null) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (scan.discoveryListener != null && mNsdManager != null) {
|
|
121
174
|
try {
|
|
122
|
-
mNsdManager.stopServiceDiscovery(
|
|
175
|
+
mNsdManager.stopServiceDiscovery(scan.discoveryListener);
|
|
123
176
|
} catch (IllegalArgumentException e) {
|
|
124
177
|
// Listener was never registered or already unregistered (e.g. discovery failed to start)
|
|
125
178
|
Log.w(TAG, "stopServiceDiscovery failed", e);
|
|
126
179
|
}
|
|
127
180
|
}
|
|
128
181
|
|
|
129
|
-
|
|
182
|
+
if (scan.infoCallbacks != null) {
|
|
183
|
+
scan.infoCallbacks.unregisterAll();
|
|
184
|
+
}
|
|
185
|
+
|
|
130
186
|
synchronized (mResolveQueue) {
|
|
131
|
-
mResolveQueue.
|
|
132
|
-
|
|
187
|
+
Iterator<PendingResolve> iterator = mResolveQueue.iterator();
|
|
188
|
+
while (iterator.hasNext()) {
|
|
189
|
+
if (iterator.next().scanId.equals(scanId)) {
|
|
190
|
+
iterator.remove();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
releaseMulticastLock();
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
@Override
|
|
199
|
+
public void stopAll() {
|
|
200
|
+
for (String scanId : new ArrayList<>(mScans.keySet())) {
|
|
201
|
+
stop(scanId);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
private void acquireMulticastLock() {
|
|
206
|
+
if (multicastLock == null) {
|
|
207
|
+
@SuppressLint("WifiManagerLeak") WifiManager wifi = (WifiManager) getReactApplicationContext().getSystemService(Context.WIFI_SERVICE);
|
|
208
|
+
multicastLock = wifi.createMulticastLock("multicastLock");
|
|
209
|
+
multicastLock.setReferenceCounted(true);
|
|
133
210
|
}
|
|
211
|
+
multicastLock.acquire();
|
|
212
|
+
}
|
|
134
213
|
|
|
135
|
-
|
|
214
|
+
private void releaseMulticastLock() {
|
|
215
|
+
if (multicastLock != null && multicastLock.isHeld()) {
|
|
136
216
|
multicastLock.release();
|
|
137
217
|
}
|
|
218
|
+
}
|
|
138
219
|
|
|
139
|
-
|
|
140
|
-
|
|
220
|
+
private void sendScanEvent(String eventName, WritableMap body, String scanId) {
|
|
221
|
+
body.putString(ZeroconfModule.KEY_SCAN_ID, scanId);
|
|
222
|
+
zeroconfModule.sendEvent(getReactApplicationContext(), eventName, body);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
private static WritableMap serviceNameToMap(NsdServiceInfo serviceInfo) {
|
|
226
|
+
WritableMap service = new WritableNativeMap();
|
|
227
|
+
service.putString(ZeroconfModule.KEY_SERVICE_NAME, serviceInfo.getServiceName());
|
|
228
|
+
return service;
|
|
141
229
|
}
|
|
142
230
|
|
|
143
231
|
@Override
|
|
144
|
-
public void registerService(String type, String protocol, String domain, String name, int port, ReadableArray txt) {
|
|
232
|
+
public void registerService(String type, String protocol, String domain, String name, int port, ReadableArray txt, Promise promise) {
|
|
145
233
|
String serviceType = String.format("_%s._%s.", type, protocol);
|
|
146
234
|
|
|
147
235
|
final NsdManager nsdManager = this.getNsdManager();
|
|
@@ -156,26 +244,30 @@ public class NsdServiceImpl implements Zeroconf {
|
|
|
156
244
|
}
|
|
157
245
|
|
|
158
246
|
nsdManager.registerService(
|
|
159
|
-
serviceInfo, NsdManager.PROTOCOL_DNS_SD, new ServiceRegistrationListener());
|
|
247
|
+
serviceInfo, NsdManager.PROTOCOL_DNS_SD, new ServiceRegistrationListener(promise));
|
|
160
248
|
}
|
|
161
249
|
|
|
162
250
|
@Override
|
|
163
|
-
public void unregisterService(String serviceName) {
|
|
251
|
+
public void unregisterService(String serviceName, @Nullable Promise promise) {
|
|
164
252
|
|
|
165
253
|
final NsdManager nsdManager = this.getNsdManager();
|
|
166
254
|
|
|
167
|
-
|
|
255
|
+
ServiceRegistrationListener serviceListener = mPublishedServices.get(serviceName);
|
|
168
256
|
|
|
169
|
-
if (serviceListener
|
|
170
|
-
|
|
171
|
-
|
|
257
|
+
if (serviceListener == null) {
|
|
258
|
+
ZeroconfModule.reject(promise, ZeroconfModule.ERROR_DOMAIN_LIBRARY, ZeroconfModule.ERROR_CODE_NOT_PUBLISHED, "Service " + serviceName + " is not published", serviceName);
|
|
259
|
+
return;
|
|
172
260
|
}
|
|
261
|
+
|
|
262
|
+
mPublishedServices.remove(serviceName);
|
|
263
|
+
serviceListener.unregisterPromise = promise;
|
|
264
|
+
nsdManager.unregisterService(serviceListener);
|
|
173
265
|
}
|
|
174
266
|
|
|
175
267
|
@Override
|
|
176
268
|
public void unregisterAllServices() {
|
|
177
269
|
for (String serviceName : new ArrayList<>(mPublishedServices.keySet())) {
|
|
178
|
-
unregisterService(serviceName);
|
|
270
|
+
unregisterService(serviceName, null);
|
|
179
271
|
}
|
|
180
272
|
}
|
|
181
273
|
|
|
@@ -190,15 +282,15 @@ public class NsdServiceImpl implements Zeroconf {
|
|
|
190
282
|
return reactApplicationContext;
|
|
191
283
|
}
|
|
192
284
|
|
|
193
|
-
private void enqueueResolve(NsdServiceInfo serviceInfo) {
|
|
285
|
+
private void enqueueResolve(String scanId, NsdServiceInfo serviceInfo) {
|
|
194
286
|
synchronized (mResolveQueue) {
|
|
195
|
-
mResolveQueue.add(serviceInfo);
|
|
287
|
+
mResolveQueue.add(new PendingResolve(scanId, serviceInfo));
|
|
196
288
|
}
|
|
197
289
|
resolveNext();
|
|
198
290
|
}
|
|
199
291
|
|
|
200
292
|
private void resolveNext() {
|
|
201
|
-
|
|
293
|
+
PendingResolve next;
|
|
202
294
|
synchronized (mResolveQueue) {
|
|
203
295
|
if (mIsResolving || mResolveQueue.isEmpty()) {
|
|
204
296
|
return;
|
|
@@ -207,10 +299,11 @@ public class NsdServiceImpl implements Zeroconf {
|
|
|
207
299
|
mIsResolving = true;
|
|
208
300
|
}
|
|
209
301
|
try {
|
|
210
|
-
getNsdManager().resolveService(next, new ZeroResolveListener());
|
|
302
|
+
getNsdManager().resolveService(next.serviceInfo, new ZeroResolveListener(next.scanId));
|
|
211
303
|
} catch (Throwable e) {
|
|
212
304
|
Log.e(TAG, "resolveService failed", e);
|
|
213
|
-
|
|
305
|
+
String serviceName = next.serviceInfo.getServiceName();
|
|
306
|
+
zeroconfModule.sendError(ZeroconfModule.ERROR_DOMAIN_LIBRARY, ZeroconfModule.ERROR_CODE_EXCEPTION, "Resolving service " + serviceName + " failed: " + e.getMessage(), serviceName, next.scanId);
|
|
214
307
|
onResolveDone();
|
|
215
308
|
}
|
|
216
309
|
}
|
|
@@ -223,31 +316,46 @@ public class NsdServiceImpl implements Zeroconf {
|
|
|
223
316
|
}
|
|
224
317
|
|
|
225
318
|
private class ZeroResolveListener implements NsdManager.ResolveListener {
|
|
319
|
+
private final String scanId;
|
|
320
|
+
|
|
321
|
+
ZeroResolveListener(String scanId) {
|
|
322
|
+
this.scanId = scanId;
|
|
323
|
+
}
|
|
324
|
+
|
|
226
325
|
@Override
|
|
227
326
|
public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
|
|
228
327
|
if (errorCode == NsdManager.FAILURE_ALREADY_ACTIVE) {
|
|
229
328
|
// Another resolve (possibly from another app or listener) is in flight: retry shortly
|
|
230
329
|
synchronized (mResolveQueue) {
|
|
231
|
-
mResolveQueue.addFirst(serviceInfo);
|
|
330
|
+
mResolveQueue.addFirst(new PendingResolve(scanId, serviceInfo));
|
|
232
331
|
mIsResolving = false;
|
|
233
332
|
}
|
|
234
333
|
mHandler.postDelayed(NsdServiceImpl.this::resolveNext, RESOLVE_RETRY_DELAY_MS);
|
|
235
334
|
return;
|
|
236
335
|
}
|
|
237
|
-
|
|
238
|
-
|
|
336
|
+
if (mScans.containsKey(scanId)) {
|
|
337
|
+
zeroconfModule.sendError(ZeroconfModule.ERROR_DOMAIN_NSD, errorCode, "Resolving service " + serviceInfo.getServiceName() + " failed: " + ZeroconfModule.describeNsdError(errorCode), serviceInfo.getServiceName(), scanId);
|
|
338
|
+
}
|
|
239
339
|
onResolveDone();
|
|
240
340
|
}
|
|
241
341
|
|
|
242
342
|
@Override
|
|
243
343
|
public void onServiceResolved(NsdServiceInfo serviceInfo) {
|
|
244
|
-
|
|
245
|
-
|
|
344
|
+
// The scan may have been stopped while resolving
|
|
345
|
+
if (mScans.containsKey(scanId)) {
|
|
346
|
+
sendScanEvent(ZeroconfModule.EVENT_RESOLVE, serviceInfoToMap(serviceInfo), scanId);
|
|
347
|
+
}
|
|
246
348
|
onResolveDone();
|
|
247
349
|
}
|
|
248
350
|
}
|
|
249
351
|
|
|
250
352
|
private class ServiceRegistrationListener implements NsdManager.RegistrationListener {
|
|
353
|
+
@Nullable private Promise registerPromise;
|
|
354
|
+
@Nullable private Promise unregisterPromise;
|
|
355
|
+
|
|
356
|
+
ServiceRegistrationListener(@Nullable Promise registerPromise) {
|
|
357
|
+
this.registerPromise = registerPromise;
|
|
358
|
+
}
|
|
251
359
|
|
|
252
360
|
@Override
|
|
253
361
|
public void onServiceRegistered(NsdServiceInfo NsdServiceInfo) {
|
|
@@ -260,12 +368,18 @@ public class NsdServiceImpl implements Zeroconf {
|
|
|
260
368
|
|
|
261
369
|
WritableMap service = serviceInfoToMap(NsdServiceInfo);
|
|
262
370
|
zeroconfModule.sendEvent(getReactApplicationContext(), ZeroconfModule.EVENT_PUBLISHED, service);
|
|
371
|
+
if (registerPromise != null) {
|
|
372
|
+
registerPromise.resolve(serviceInfoToMap(NsdServiceInfo));
|
|
373
|
+
registerPromise = null;
|
|
374
|
+
}
|
|
263
375
|
}
|
|
264
376
|
|
|
265
377
|
@Override
|
|
266
378
|
public void onRegistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
|
|
267
|
-
String
|
|
268
|
-
zeroconfModule.
|
|
379
|
+
String message = "Registering service " + serviceInfo.getServiceName() + " failed: " + ZeroconfModule.describeNsdError(errorCode);
|
|
380
|
+
zeroconfModule.sendError(ZeroconfModule.ERROR_DOMAIN_NSD, errorCode, message, serviceInfo.getServiceName());
|
|
381
|
+
ZeroconfModule.reject(registerPromise, ZeroconfModule.ERROR_DOMAIN_NSD, errorCode, message, serviceInfo.getServiceName());
|
|
382
|
+
registerPromise = null;
|
|
269
383
|
}
|
|
270
384
|
|
|
271
385
|
@Override
|
|
@@ -274,12 +388,18 @@ public class NsdServiceImpl implements Zeroconf {
|
|
|
274
388
|
// NsdManager.unregisterService() and pass in this listener.
|
|
275
389
|
final WritableMap service = serviceInfoToMap(nsdServiceInfo);
|
|
276
390
|
zeroconfModule.sendEvent(getReactApplicationContext(), ZeroconfModule.EVENT_UNREGISTERED, service);
|
|
391
|
+
if (unregisterPromise != null) {
|
|
392
|
+
unregisterPromise.resolve(serviceInfoToMap(nsdServiceInfo));
|
|
393
|
+
unregisterPromise = null;
|
|
394
|
+
}
|
|
277
395
|
}
|
|
278
396
|
|
|
279
397
|
@Override
|
|
280
398
|
public void onUnregistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
|
|
281
|
-
String
|
|
282
|
-
zeroconfModule.
|
|
399
|
+
String message = "Unregistering service " + serviceInfo.getServiceName() + " failed: " + ZeroconfModule.describeNsdError(errorCode);
|
|
400
|
+
zeroconfModule.sendError(ZeroconfModule.ERROR_DOMAIN_NSD, errorCode, message, serviceInfo.getServiceName());
|
|
401
|
+
ZeroconfModule.reject(unregisterPromise, ZeroconfModule.ERROR_DOMAIN_NSD, errorCode, message, serviceInfo.getServiceName());
|
|
402
|
+
unregisterPromise = null;
|
|
283
403
|
}
|
|
284
404
|
}
|
|
285
405
|
|