react-native-zeroconf 0.15.1 → 0.16.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.
Files changed (231) hide show
  1. package/README.md +27 -536
  2. package/android/build.gradle +2 -2
  3. package/android/src/main/java/com/balthazargronon/RCTZeroconf/Zeroconf.java +16 -4
  4. package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroconfModule.java +95 -13
  5. package/android/src/main/java/com/balthazargronon/RCTZeroconf/nsd/NsdServiceImpl.java +184 -64
  6. package/android/src/main/java/com/balthazargronon/RCTZeroconf/nsd/ServiceInfoCallbacks.java +89 -0
  7. package/android/src/main/java/com/balthazargronon/RCTZeroconf/rx2dnssd/DnssdImpl.java +114 -39
  8. package/android/src/main/jni/Android.mk +1 -24
  9. package/android/src/main/jni/Application.mk +1 -1
  10. package/dist/index.js +244 -27
  11. package/index.d.ts +95 -9
  12. package/ios/RNZeroconf/RNNetServiceSerializer.h +10 -2
  13. package/ios/RNZeroconf/RNNetServiceSerializer.m +51 -59
  14. package/ios/RNZeroconf/RNZeroconf.h +1 -3
  15. package/ios/RNZeroconf/RNZeroconf.m +648 -142
  16. package/package.json +39 -1
  17. package/react-native-zeroconf.podspec +12 -6
  18. package/src/index.js +222 -31
  19. package/android/src/main/java/com/github/druk/dnssd/DNSSDBindable.java +0 -67
  20. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2DnssdBindable.java +0 -35
  21. package/android/src/main/jni/mdnsresponder/Android.bp +0 -215
  22. package/android/src/main/jni/mdnsresponder/Clients/ClientCommon.c +0 -75
  23. package/android/src/main/jni/mdnsresponder/Clients/ClientCommon.h +0 -41
  24. package/android/src/main/jni/mdnsresponder/Clients/Makefile +0 -54
  25. package/android/src/main/jni/mdnsresponder/Clients/ReadMe.txt +0 -25
  26. package/android/src/main/jni/mdnsresponder/Clients/dns-sd.c +0 -1351
  27. package/android/src/main/jni/mdnsresponder/Makefile +0 -41
  28. package/android/src/main/jni/mdnsresponder/PrivateDNS.txt +0 -275
  29. package/android/src/main/jni/mdnsresponder/android/caseMapping/Iphlpapi.h +0 -1
  30. package/android/src/main/jni/mdnsresponder/android/caseMapping/README +0 -3
  31. package/android/src/main/jni/mdnsresponder/android/caseMapping/Resource.h +0 -1
  32. package/android/src/main/jni/mdnsresponder/android/caseMapping/Ws2tcpip.h +0 -1
  33. package/android/src/main/jni/mdnsresponder/android/caseMapping/ipExport.h +0 -1
  34. package/android/src/main/jni/mdnsresponder/android/windows_firewall_dummy.c +0 -10
  35. package/android/src/main/jni/mdnsresponder/mDNSCore/Implementer Notes.txt +0 -66
  36. package/android/src/main/jni/mdnsresponder/mDNSPosix/Client.c +0 -223
  37. package/android/src/main/jni/mdnsresponder/mDNSPosix/ExampleClientApp.c +0 -91
  38. package/android/src/main/jni/mdnsresponder/mDNSPosix/ExampleClientApp.h +0 -18
  39. package/android/src/main/jni/mdnsresponder/mDNSPosix/Identify.c +0 -378
  40. package/android/src/main/jni/mdnsresponder/mDNSPosix/Makefile +0 -520
  41. package/android/src/main/jni/mdnsresponder/mDNSPosix/NetMonitor.c +0 -1010
  42. package/android/src/main/jni/mdnsresponder/mDNSPosix/ProxyResponder.c +0 -300
  43. package/android/src/main/jni/mdnsresponder/mDNSPosix/ReadMe.txt +0 -314
  44. package/android/src/main/jni/mdnsresponder/mDNSPosix/Responder.c +0 -792
  45. package/android/src/main/jni/mdnsresponder/mDNSPosix/Services.txt +0 -36
  46. package/android/src/main/jni/mdnsresponder/mDNSPosix/libnss_mdns.8 +0 -148
  47. package/android/src/main/jni/mdnsresponder/mDNSPosix/mdnsd.sh +0 -73
  48. package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_ReadMe.txt +0 -125
  49. package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_mdns.c +0 -2723
  50. package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_mdns.conf +0 -13
  51. package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_mdns.conf.5 +0 -135
  52. package/android/src/main/jni/mdnsresponder/mDNSPosix/parselog.py +0 -247
  53. package/android/src/main/jni/mdnsresponder/mDNSResponder.sln +0 -400
  54. package/android/src/main/jni/mdnsresponder/mDNSShared/DebugServices.c +0 -3075
  55. package/android/src/main/jni/mdnsresponder/mDNSShared/dns-sd.1 +0 -194
  56. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.8 +0 -69
  57. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.c +0 -3146
  58. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.conf +0 -60
  59. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd_lexer.l +0 -84
  60. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd_parser.y +0 -585
  61. package/android/src/main/jni/mdnsresponder/mDNSShared/mDNS.1 +0 -198
  62. package/android/src/main/jni/mdnsresponder/mDNSShared/mDNSResponder.8 +0 -116
  63. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/BrowsingPage.cpp +0 -441
  64. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/BrowsingPage.h +0 -156
  65. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigDialog.cpp +0 -59
  66. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigDialog.h +0 -48
  67. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigPropertySheet.cpp +0 -301
  68. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigPropertySheet.h +0 -105
  69. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.cpp +0 -380
  70. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.def +0 -20
  71. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.h +0 -84
  72. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.rc +0 -141
  73. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.vcproj +0 -727
  74. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelDll.rc +0 -123
  75. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.cpp +0 -373
  76. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.h +0 -48
  77. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.rc +0 -123
  78. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.vcproj +0 -764
  79. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelLocRes.rc +0 -270
  80. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelLocRes.vcproj +0 -487
  81. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelRes.rc +0 -134
  82. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelRes.vcproj +0 -518
  83. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/FourthPage.cpp +0 -197
  84. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/FourthPage.h +0 -87
  85. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/RegistrationPage.cpp +0 -387
  86. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/RegistrationPage.h +0 -75
  87. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SecondPage.cpp +0 -544
  88. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SecondPage.h +0 -107
  89. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ServicesPage.cpp +0 -273
  90. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ServicesPage.h +0 -123
  91. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SharedSecret.cpp +0 -115
  92. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SharedSecret.h +0 -54
  93. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.dll.manifest +0 -10
  94. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.exe.manifest +0 -17
  95. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.manifest +0 -17
  96. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.rc2 +0 -13
  97. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel64.manifest +0 -17
  98. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/EnergySaver.ico +0 -0
  99. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/controlpanel.ico +0 -0
  100. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/failure.ico +0 -0
  101. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/success.ico +0 -0
  102. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/resource.h +0 -56
  103. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/stdafx.cpp +0 -20
  104. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/stdafx.h +0 -64
  105. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dll.aps +0 -0
  106. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dll.rc +0 -102
  107. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dllmain.c +0 -112
  108. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dnssd.def +0 -48
  109. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dnssd.vcproj +0 -472
  110. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/resource.h +0 -27
  111. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/AssemblyInfo.cpp +0 -84
  112. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/PString.h +0 -70
  113. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/Stdafx.cpp +0 -22
  114. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/Stdafx.h +0 -33
  115. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.cpp +0 -1234
  116. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.h +0 -1392
  117. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.ico +0 -0
  118. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.rc +0 -113
  119. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.vcproj +0 -446
  120. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/resource.h +0 -3
  121. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLStub/DLLStub.cpp +0 -693
  122. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLStub/DLLStub.h +0 -52
  123. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLStub/DLLStub.vcproj +0 -324
  124. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.cpp +0 -208
  125. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.def +0 -35
  126. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.idl +0 -491
  127. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.rc +0 -126
  128. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.rgs +0 -11
  129. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.vcproj +0 -625
  130. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSD.cpp +0 -892
  131. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDEventManager.cpp +0 -31
  132. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDEventManager.h +0 -133
  133. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDEventManager.rgs +0 -27
  134. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDRecord.cpp +0 -101
  135. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDRecord.h +0 -185
  136. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDRecord.rgs +0 -27
  137. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDService.cpp +0 -2095
  138. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDService.h +0 -429
  139. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDService.rgs +0 -27
  140. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/StringServices.cpp +0 -344
  141. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/StringServices.h +0 -102
  142. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/TXTRecord.cpp +0 -381
  143. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/TXTRecord.h +0 -203
  144. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/TXTRecord.rgs +0 -27
  145. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/_IDNSSDEvents_CP.h +0 -358
  146. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/dlldatax.c +0 -51
  147. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/dlldatax.h +0 -49
  148. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/resource.h +0 -30
  149. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/stdafx.h +0 -88
  150. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2002.sln +0 -21
  151. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2002.vcproj +0 -253
  152. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2003.sln +0 -21
  153. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2003.vcproj +0 -267
  154. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Application.ico +0 -0
  155. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Application.rc +0 -323
  156. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Application.rc2 +0 -20
  157. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Resource.h +0 -53
  158. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/AboutDialog.cpp +0 -71
  159. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/AboutDialog.h +0 -62
  160. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/Application.cpp +0 -111
  161. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/Application.h +0 -68
  162. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/ChooserDialog.cpp +0 -1426
  163. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/ChooserDialog.h +0 -131
  164. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/LoginDialog.cpp +0 -109
  165. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/LoginDialog.h +0 -53
  166. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/StdAfx.cpp +0 -18
  167. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/StdAfx.h +0 -48
  168. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Application.vcc +0 -37
  169. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Application.vcp +0 -868
  170. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Application.vcw +0 -29
  171. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/Application.ico +0 -0
  172. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/Application.rc +0 -194
  173. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/Application.rc2 +0 -13
  174. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/newres.h +0 -28
  175. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/resource.h +0 -22
  176. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/Application.cpp +0 -92
  177. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/Application.h +0 -57
  178. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/BrowserDialog.cpp +0 -394
  179. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/BrowserDialog.h +0 -84
  180. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/StdAfx.cpp +0 -18
  181. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/StdAfx.h +0 -46
  182. package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/Java.vcproj +0 -111
  183. package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/jdns_sd.rc +0 -62
  184. package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/makefile +0 -143
  185. package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/makefile64 +0 -143
  186. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.aps +0 -0
  187. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.c +0 -581
  188. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.rc +0 -103
  189. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.vcproj +0 -409
  190. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/Prefix.h +0 -28
  191. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/resource.h +0 -27
  192. package/android/src/main/jni/mdnsresponder/mDNSWindows/PosixCompat.c +0 -128
  193. package/android/src/main/jni/mdnsresponder/mDNSWindows/PosixCompat.h +0 -70
  194. package/android/src/main/jni/mdnsresponder/mDNSWindows/README.txt +0 -85
  195. package/android/src/main/jni/mdnsresponder/mDNSWindows/RegNames.h +0 -57
  196. package/android/src/main/jni/mdnsresponder/mDNSWindows/Secret.c +0 -338
  197. package/android/src/main/jni/mdnsresponder/mDNSWindows/Secret.h +0 -42
  198. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/EventLog.mc +0 -11
  199. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/EventLogMessages.bin +0 -0
  200. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Firewall.cpp +0 -484
  201. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Firewall.h +0 -79
  202. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Prefix.h +0 -30
  203. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.aps +0 -0
  204. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.c +0 -2669
  205. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.h +0 -30
  206. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.mcp +0 -0
  207. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.rc +0 -114
  208. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.vcproj +0 -562
  209. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/main.c +0 -32
  210. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/res/mDNSResponder.manifest +0 -12
  211. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/res/mDNSResponder64.manifest +0 -12
  212. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/resource.h +0 -17
  213. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/resrc1.h +0 -15
  214. package/android/src/main/jni/mdnsresponder/mDNSWindows/VPCDetect.cpp +0 -165
  215. package/android/src/main/jni/mdnsresponder/mDNSWindows/VPCDetect.h +0 -36
  216. package/android/src/main/jni/mdnsresponder/mDNSWindows/WinServices.cpp +0 -93
  217. package/android/src/main/jni/mdnsresponder/mDNSWindows/WinServices.h +0 -34
  218. package/android/src/main/jni/mdnsresponder/mDNSWindows/WinVersRes.h +0 -35
  219. package/android/src/main/jni/mdnsresponder/mDNSWindows/isocode.h +0 -135
  220. package/android/src/main/jni/mdnsresponder/mDNSWindows/loclibrary.c +0 -268
  221. package/android/src/main/jni/mdnsresponder/mDNSWindows/loclibrary.h +0 -54
  222. package/android/src/main/jni/mdnsresponder/mDNSWindows/mDNSWin32.c +0 -5200
  223. package/android/src/main/jni/mdnsresponder/mDNSWindows/mDNSWin32.h +0 -208
  224. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/ReadMe.txt +0 -15
  225. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.aps +0 -0
  226. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.c +0 -2430
  227. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.def +0 -24
  228. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.rc +0 -104
  229. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.vcproj +0 -457
  230. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/resource.h +0 -27
  231. package/android/src/main/jni/mdnsresponder/mdnsd.rc +0 -7
package/README.md CHANGED
@@ -1,564 +1,55 @@
1
- # react-native-zeroconf
1
+ <p align="center">
2
+ <img src=".github/banner.png" alt="react-native-zeroconf: Bonjour / mDNS discovery and publishing for React Native, on iOS, Android, macOS, tvOS and Expo" width="100%">
3
+ </p>
2
4
 
3
- > Zeroconf (Bonjour/mDNS) implementation for React Native
5
+ Find the services other devices advertise on the local network (printers, speakers, cameras, your own servers) and advertise your own, on iOS, Android, macOS and tvOS.
4
6
 
5
- Discover and publish network services using Zeroconf protocols (Bonjour, Avahi, mDNS).
6
-
7
- ## Features
8
-
9
- - **Service Discovery**: Find services advertised on your local network
10
- - **Service Publishing**: Advertise your own services
11
- - **Cross-Platform**: Works on iOS and Android
12
- - **Dual Android Implementation**: Choose between NSD (Android native) or DNSSD (embedded mDNSResponder)
13
- - **Android 15+ Compatible**: Includes 16KB page size alignment (Google Play requirement starting November 1, 2025)
14
- - **TypeScript**: Type definitions included
7
+ **[Read the documentation](https://github.com/balthazar/react-native-zeroconf/wiki)**
15
8
 
16
9
  ## Installation
17
10
 
18
11
  ```bash
19
- # Install using yarn
20
12
  yarn add react-native-zeroconf
21
-
22
- # For React Native < 0.60 only (all platforms):
23
- react-native link
24
-
25
- # For iOS (using CocoaPods):
26
13
  cd ios && pod install
27
-
28
- # For macOS (using CocoaPods):
29
- cd macos && pod install
30
- ```
31
-
32
- For manual installation, see the [wiki](https://github.com/balthazar/react-native-zeroconf/wiki).
33
-
34
- ## Setup
35
-
36
- ### Android Permissions
37
-
38
- The library declares the following permissions in its own manifest, so they are merged into your app automatically:
39
-
40
- ```xml
41
- <uses-permission android:name="android.permission.INTERNET" />
42
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
43
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
44
- <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
45
- ```
46
-
47
- ### iOS 14+ Permissions
48
-
49
- iOS 14+ requires you to declare the services you want to discover in your `Info.plist`:
50
-
51
- ```xml
52
- <key>NSBonjourServices</key>
53
- <array>
54
- <string>_http._tcp.</string>
55
- <string>_printer._tcp.</string>
56
- <!-- Add other service types you need -->
57
- </array>
58
- <key>NSLocalNetworkUsageDescription</key>
59
- <string>This app uses the local network to discover printers and other devices.</string>
60
- ```
61
-
62
- ## Quick Start
63
-
64
- ```javascript
65
- import Zeroconf from 'react-native-zeroconf'
66
-
67
- const zeroconf = new Zeroconf()
68
-
69
- // Listen for resolved services
70
- zeroconf.on('resolved', service => {
71
- console.log('Found service:', service.name)
72
- console.log('IP addresses:', service.addresses)
73
- console.log('Port:', service.port)
74
- })
75
-
76
- // Start scanning for HTTP services
77
- zeroconf.scan('http', 'tcp', 'local.')
78
-
79
- // Stop scanning after 10 seconds
80
- setTimeout(() => {
81
- zeroconf.stop()
82
- console.log('All services:', zeroconf.getServices())
83
- }, 10000)
84
- ```
85
-
86
- ## TypeScript
87
-
88
- Type definitions ship with the package, so `@types/react-native-zeroconf` is no longer needed (uninstall it to avoid conflicting types). Event listeners are typed by event name:
89
-
90
- ```typescript
91
- import Zeroconf, { ImplType, Service } from 'react-native-zeroconf'
92
-
93
- const zeroconf = new Zeroconf()
94
-
95
- zeroconf.on('resolved', (service: Service) => {
96
- console.log(service.name, service.addresses, service.txt)
97
- })
98
- zeroconf.on('remove', name => console.log(`${name} left`))
99
-
100
- zeroconf.scan('http', 'tcp', 'local.', ImplType.DNSSD)
101
14
  ```
102
15
 
103
- ## API Reference
16
+ On iOS, declare the service types you use in `NSBonjourServices`, see [Permissions and Setup](https://github.com/balthazar/react-native-zeroconf/wiki/Permissions-and-Setup). Expo works with development builds, see [Installation](https://github.com/balthazar/react-native-zeroconf/wiki/Installation).
104
17
 
105
- ### Constructor
18
+ ## Usage
106
19
 
107
20
  ```javascript
108
- import Zeroconf from 'react-native-zeroconf'
109
- const zeroconf = new Zeroconf()
110
- ```
111
-
112
- ### Methods
113
-
114
- #### `scan(type, protocol, domain, implType)`
115
-
116
- Start scanning for services on the network.
117
-
118
- | Parameter | Type | Default | Description |
119
- | ---------- | ------ | ---------- | -------------------------------------------------------------------------------------------------- |
120
- | `type` | string | `'http'` | Service type (e.g., `'http'`, `'printer'`, `'ssh'`, `'pdl-datastream'`) |
121
- | `protocol` | string | `'tcp'` | Protocol (`'tcp'` or `'udp'`) |
122
- | `domain` | string | `'local.'` | Domain to search (typically `'local.'`) |
123
- | `implType` | string | `'NSD'` | **Android only**: `'NSD'` or `'DNSSD'` (see [Implementation Types](#android-implementation-types)) |
124
-
125
- ```javascript
126
- // Scan for HTTP services using default NSD implementation
127
- zeroconf.scan('http', 'tcp', 'local.')
128
-
129
- // Scan for printers using DNSSD (recommended for better compatibility)
130
- zeroconf.scan('pdl-datastream', 'tcp', 'local.', 'DNSSD')
131
- ```
132
-
133
- #### `stop(implType)`
134
-
135
- Stop the current scan.
21
+ import { useZeroconf } from 'react-native-zeroconf'
136
22
 
137
- | Parameter | Type | Default | Description |
138
- | ---------- | ------ | ------- | ---------------------------------------------- |
139
- | `implType` | string | last scan's | **Android only**: Which implementation to stop. Defaults to the one used by the last `scan()` |
23
+ function Printers() {
24
+ const { services } = useZeroconf({ type: 'ipp' })
140
25
 
141
- ```javascript
142
- zeroconf.stop()
143
- ```
144
-
145
- #### `getServices()`
146
-
147
- Returns all currently discovered services.
148
-
149
- ```javascript
150
- const services = zeroconf.getServices()
151
- // Returns: { 'ServiceName': { name, host, port, addresses, txt, fullName }, ... }
152
- ```
153
-
154
- #### `publishService(type, protocol, domain, name, port, txt, implType)`
155
-
156
- Publish a service on the network.
157
-
158
- | Parameter | Type | Default | Description |
159
- | ---------- | ------ | ---------- | -------------------------------------- |
160
- | `type` | string | required | Service type (e.g., `'http'`) |
161
- | `protocol` | string | required | Protocol (`'tcp'` or `'udp'`) |
162
- | `domain` | string | `'local.'` | Domain |
163
- | `name` | string | required | Service name (should be unique) |
164
- | `port` | number | required | Port number |
165
- | `txt` | object \| array | `{}` | TXT record key-value pairs, or `[key, value]` pairs to control the order |
166
- | `implType` | string | `'NSD'` | **Android only**: `'NSD'` or `'DNSSD'` |
167
-
168
- ```javascript
169
- zeroconf.publishService('http', 'tcp', 'local.', 'MyWebServer', 8080, {
170
- path: '/api',
171
- version: '1.0',
172
- })
173
-
174
- // TXT records are published in the order given. Use pairs when order matters and keys look like numbers
175
- zeroconf.publishService('http', 'tcp', 'local.', 'MyWebServer', 8080, [
176
- ['txtvers', '1'],
177
- ['path', '/api'],
178
- ])
179
- ```
180
-
181
- TXT order is preserved on iOS and with `DNSSD` on Android. With `NSD`, the order depends on the Android system.
182
-
183
- Published services are unpublished when the React Native instance is torn down (e.g. on reload). If the app process is killed, it can't announce anything: other devices only drop the service once its mDNS records expire.
184
-
185
- #### `unpublishService(name, implType)`
186
-
187
- Remove a published service.
188
-
189
- | Parameter | Type | Default | Description |
190
- | ---------- | ------ | -------- | -------------------------------------- |
191
- | `name` | string | required | Name of the service to unpublish |
192
- | `implType` | string | publish's | **Android only**: Which implementation. Defaults to the one the service was published with |
193
-
194
- ```javascript
195
- zeroconf.unpublishService('MyWebServer')
196
- ```
197
-
198
- #### `addDeviceListeners()`
199
-
200
- Manually add event listeners (called automatically in constructor).
201
-
202
- #### `removeDeviceListeners()`
203
-
204
- Remove all event listeners. Call this to prevent memory leaks when unmounting components.
205
-
206
- ```javascript
207
- // In React useEffect cleanup
208
- useEffect(() => {
209
- const zeroconf = new Zeroconf()
210
- zeroconf.scan('http', 'tcp', 'local.')
211
-
212
- return () => {
213
- zeroconf.stop()
214
- zeroconf.removeDeviceListeners()
215
- }
216
- }, [])
217
- ```
218
-
219
- ### Events
220
-
221
- #### Scan Events
222
-
223
- | Event | Payload | Description |
224
- | ---------- | ----------------------- | ---------------------------------------- |
225
- | `start` | none | Scan has started |
226
- | `stop` | none | Scan has stopped |
227
- | `found` | `string` (service name) | Service found (before resolution) |
228
- | `resolved` | `Service` object | Service fully resolved with network info |
229
- | `remove` | `string` (service name) | Service removed from network |
230
- | `update` | none | Services list changed (found or removed) |
231
- | `error` | `Error` object | An error occurred |
232
-
233
- #### Publishing Events
234
-
235
- | Event | Payload | Description |
236
- | ------------- | ---------------- | -------------------------------- |
237
- | `published` | `Service` object | Service successfully published |
238
- | `unpublished` | `Service` object | Service successfully unpublished |
239
-
240
- ### Service Object
241
-
242
- ```javascript
243
- {
244
- name: 'Xerox Printer', // Human-readable name
245
- fullName: 'XeroxPrinter._http._tcp.local.', // Full service name
246
- host: 'XeroxPrinter.local.', // Hostname
247
- port: 8080, // Port number
248
- addresses: [ // IP addresses, IPv4 first
249
- '192.168.1.23',
250
- 'fe80::aebc:123:ffff:abcd'
251
- ],
252
- ipv4: ['192.168.1.23'], // IPv4 addresses only
253
- ipv6: ['fe80::aebc:123:ffff:abcd'], // IPv6 addresses only
254
- txt: { // TXT record attributes
255
- path: '/status',
256
- color: 'yes'
257
- }
26
+ return services.map(service => (
27
+ <Text key={service.name}>
28
+ {service.name} {service.ipv4[0]}:{service.port}
29
+ </Text>
30
+ ))
258
31
  }
259
32
  ```
260
33
 
261
- On Android with `NSD`, `host` is the mDNS hostname on Android 16+. Older versions don't expose it, so `host` is usually the IP address (use `DNSSD` if you need the hostname there). `NSD` returns all addresses on Android 14+, and a single one before.
262
-
263
- ## Android Implementation Types
264
-
265
- This library supports two implementations on Android:
266
-
267
- ### NSD (Network Service Discovery)
268
-
269
- - Uses Android's built-in `NsdManager` API
270
- - Default implementation
271
- - Good for most use cases
272
-
273
- ### DNSSD (Embedded mDNSResponder)
274
-
275
- - Uses bundled Apple mDNSResponder
276
- - More reliable across different Android versions and manufacturers
277
- - Required for 16KB page size compliance (Android 15+)
278
- - Recommended for production apps
34
+ Without React:
279
35
 
280
36
  ```javascript
281
- import Zeroconf, { ImplType } from 'react-native-zeroconf'
37
+ import Zeroconf from 'react-native-zeroconf'
282
38
 
283
39
  const zeroconf = new Zeroconf()
284
-
285
- // Use DNSSD for better compatibility
286
- zeroconf.scan('http', 'tcp', 'local.', ImplType.DNSSD)
287
- ```
288
-
289
- ### When to Use DNSSD
290
-
291
- - **Targeting Android 15+**: Google Play requires 16KB page size alignment
292
- - **Cross-device compatibility**: More consistent behavior across manufacturers
293
- - **Printer discovery**: Better support for `_pdl-datastream._tcp` and similar services
294
- - **When NSD doesn't find services**: Some devices have buggy NSD implementations
295
-
296
- ## Platform Support
297
-
298
- | Feature | iOS | Android (NSD) | Android (DNSSD) |
299
- | ------------------ | ------ | ------------- | --------------- |
300
- | Service Discovery | ✅ | ✅ | ✅ |
301
- | Service Publishing | ✅ | ✅ | ✅ |
302
- | TXT Records | ✅ | ✅ (API 21+) | ✅ |
303
- | IPv4 Addresses | ✅ | ✅ | ✅ |
304
- | IPv6 Addresses | ✅ | ✅ | ✅ |
305
- | Min API Level | iOS 7+ | API 16+ | API 21+ |
306
-
307
- ## Android Emulator Limitations
308
-
309
- **Important:** The Android emulator does not support IGMP or multicast by default. This is a [documented limitation](https://developer.android.com/studio/run/emulator-networking).
310
-
311
- Since mDNS/Bonjour relies on multicast UDP packets to `224.0.0.251:5353`, Zeroconf discovery **will not work on Android emulators** without special configuration.
312
-
313
- ### Recommendations
314
-
315
- **Use a Real Device (Recommended)**
316
-
317
- For reliable mDNS testing, use a physical Android device connected to the same network as the services you want to discover.
318
-
319
- **TAP Bridged Networking (Linux - Really Advanced - Not Recommended for Most Users)**
320
-
321
- > **⚠️ Important:**
322
- >
323
- > - **Use "Google APIs" system image**, not "Google Play". Google Play images are production builds that don't allow root access (`adb root` fails). You need root to configure the `eth1` interface.
324
- > - **Always use `-no-snapshot-load`** when starting the emulator. Without this flag, the emulator loads from a saved state and ignores the QEMU network device parameters (eth1 won't exist).
325
- > - **Network configuration doesn't persist.** You must reconfigure eth1 after every emulator restart.
326
- > - **Only one emulator per TAP interface.** If running multiple emulators, create additional TAP interfaces (tap1, tap2, etc.).
327
- > - **Use your network's subnet.** Replace the example IPs below with addresses matching your actual network (e.g., if your network is `192.168.1.x`, use `192.168.1.213/24` and gateway `192.168.1.1`).
328
-
329
- On Linux with Ethernet, you can configure TAP bridged networking:
330
-
331
- 1. Create TAP interface and bridge (one-time setup):
332
-
333
- ```bash
334
- sudo ip tuntap add dev tap0 mode tap user $USER
335
- sudo ip link add name br0 type bridge
336
- sudo ip link show # Get the list of network interfaces
337
- sudo ip link set <your-ethernet-interface> master br0 # Replace with your ethernet interface (e.g. enp3s0)
338
- sudo ip link set tap0 master br0
339
- sudo ip link set dev tap0 up
340
- sudo ip link set dev br0 up
341
- sudo dhcpcd br0 # Or: sudo dhclient br0
342
- ```
343
-
344
- 2. Start emulator with TAP (must use `-no-snapshot-load`):
345
-
346
- ```bash
347
- emulator -avd <avd_name> \
348
- -no-snapshot-load \
349
- -qemu \
350
- -netdev tap,id=mynet0,ifname=tap0,script=no,downscript=no \
351
- -device virtio-net-pci,netdev=mynet0
352
- ```
353
-
354
- 3. Configure the emulator's eth1 interface:
355
-
356
- ```bash
357
- adb root
358
- adb shell ip link set eth1 up
359
- adb shell ip addr add <unused_ip> dev eth1 # e.g., 192.168.1.213
360
- adb shell ip route add default via <gateway> dev eth1 # e.g., 192.168.1.1
361
-
362
- # Verify connectivity
363
- adb shell ping -c 2 <your_printer_or_device_ip>
364
- ```
365
-
366
- 4. Start your dev server with the host's bridge IP:
367
-
368
- ```bash
369
- # Find your host's bridge IP
370
- ip addr show br0 | grep "inet "
371
- # Example output: inet 192.168.1.28/24 ...
372
-
373
- # Example to use that IP to start with Expo
374
- REACT_NATIVE_PACKAGER_HOSTNAME=192.168.1.28 npx expo start --android
375
- ```
376
-
377
- **Note:** WiFi bridging doesn't work on most systems. Use Ethernet for TAP networking.
378
-
379
- ## Common Service Types
380
-
381
- | Service | Type | Protocol |
382
- | ------------- | ---------------- | -------- |
383
- | HTTP | `http` | `tcp` |
384
- | HTTPS | `https` | `tcp` |
385
- | Printer (Raw) | `pdl-datastream` | `tcp` |
386
- | Printer (IPP) | `ipp` | `tcp` |
387
- | SSH | `ssh` | `tcp` |
388
- | FTP | `ftp` | `tcp` |
389
- | AirPlay | `airplay` | `tcp` |
390
- | Chromecast | `googlecast` | `tcp` |
391
-
392
- ## Example
393
-
394
- See the [example folder](./example) for a complete React Native app demonstrating service discovery and publishing.
395
-
396
- ```bash
397
- cd example
398
- yarn install
399
- cd ios && pod install && cd ..
400
- yarn ios # or yarn android
40
+ zeroconf.on('resolved', service => console.log(service.name, service.host, service.port))
41
+ zeroconf.scan({ type: 'http' })
401
42
  ```
402
43
 
403
- ## Troubleshooting
404
-
405
- ### Services not being discovered
406
-
407
- 1. **Check permissions**: Ensure all required permissions are granted
408
- 2. **iOS 14+**: Verify `NSBonjourServices` includes your service type
409
- 3. **Android emulator**: Use a real device (emulators don't support multicast)
410
- 4. **Try DNSSD**: Switch from NSD to DNSSD implementation on Android
411
- 5. **Same network**: Ensure device and services are on the same network/subnet
412
-
413
- ### TXT records empty or missing
414
-
415
- - TXT records require Android API 21+ (Android 5.0)
416
- - Verify the service actually publishes TXT records
417
-
418
- ### Memory leaks
419
-
420
- Call `removeDeviceListeners()` when unmounting:
421
-
422
- ```javascript
423
- useEffect(() => {
424
- const zeroconf = new Zeroconf()
425
- // ... setup
426
- return () => {
427
- zeroconf.stop()
428
- zeroconf.removeDeviceListeners()
429
- }
430
- }, [])
431
- ```
432
-
433
- ## Known Issues
434
-
435
- ### Android mDNS/NSD Reliability
436
-
437
- Android's Network Service Discovery (NSD) implementation has well-documented reliability issues that affect **all** mDNS libraries on Android, including this one. These are platform-level limitations, not bugs in this library.
438
-
439
- #### Symptoms
440
-
441
- - Discovery works initially, then stops finding services after a few scans
442
- - `start` event fires but no `resolved` events follow
443
- - Inconsistent results between scans on the same network
444
- - Discovery fails silently without error callbacks
44
+ ## Documentation
445
45
 
446
- #### Root Causes
447
-
448
- 1. **Android NSD limitations (Android 8–14+)**:
449
- - Discovery may silently stop without error callbacks
450
- - `onServiceFound` fires but resolve fails
451
- - Discovery stops after screen lock or app backgrounding
452
- - Multiple concurrent scans conflict with each other
453
-
454
- 2. **OEM-specific issues** (Samsung, Xiaomi, Huawei, etc.):
455
- - Multicast packets throttled or dropped
456
- - Background discovery threads killed by battery optimization
457
- - Aggressive Doze mode delays mDNS packets
458
-
459
- 3. **Network change sensitivity**:
460
- - mDNS breaks on WiFi reconnect, AP band switching (2.4↔5 GHz), mesh handoff, or VPN changes
461
-
462
- #### Recommended Workarounds
463
-
464
- **1. Implement retry logic**
465
-
466
- Since Android NSD fails silently, implement automatic retries:
467
-
468
- ```javascript
469
- async function scanWithRetry(zeroconf, maxAttempts = 5) {
470
- for (let attempt = 1; attempt <= maxAttempts; attempt++) {
471
- const results = await performScan(zeroconf)
472
- if (results.length > 0) return results
473
-
474
- // Stop and wait before retry
475
- zeroconf.stop('DNSSD')
476
- await new Promise(r => setTimeout(r, 1000))
477
- }
478
- return []
479
- }
480
- ```
481
-
482
- **2. Add delays between stop and start**
483
-
484
- The native DNSSD module needs time to fully stop before starting a new scan:
485
-
486
- ```javascript
487
- zeroconf.stop('DNSSD')
488
- await new Promise(r => setTimeout(r, 500)) // Wait 500ms
489
- zeroconf.scan('pdl-datastream', 'tcp', 'local.', 'DNSSD')
490
- ```
491
-
492
- **3. Use DNSSD instead of NSD**
493
-
494
- DNSSD (embedded mDNSResponder) is generally more reliable than Android's native NSD:
495
-
496
- ```javascript
497
- // Use DNSSD for better reliability
498
- zeroconf.scan('http', 'tcp', 'local.', 'DNSSD')
499
- ```
500
-
501
- **4. Handle app lifecycle**
502
-
503
- Stop scans when app backgrounds and restart when foregrounding:
504
-
505
- ```javascript
506
- import { AppState } from 'react-native'
507
-
508
- AppState.addEventListener('change', (state) => {
509
- if (state === 'background') {
510
- zeroconf.stop('DNSSD')
511
- } else if (state === 'active') {
512
- // Restart scan
513
- zeroconf.scan('http', 'tcp', 'local.', 'DNSSD')
514
- }
515
- })
516
- ```
517
-
518
- **5. Don't call stop() on already-stopped scans**
519
-
520
- Track scan state to avoid calling `stop()` multiple times, which can put the native module in a bad state:
521
-
522
- ```javascript
523
- let isScanning = false
524
-
525
- function startScan() {
526
- if (isScanning) return
527
- isScanning = true
528
- zeroconf.scan('http', 'tcp', 'local.', 'DNSSD')
529
- }
530
-
531
- function stopScan() {
532
- if (!isScanning) return
533
- isScanning = false
534
- zeroconf.stop('DNSSD')
535
- }
536
- ```
537
-
538
- #### What Doesn't Help
539
-
540
- - Creating multiple Zeroconf instances (native module is a singleton)
541
- - Calling `removeDeviceListeners()` + `addDeviceListeners()` rapidly
542
- - Very short scan timeouts (< 3 seconds)
543
-
544
- #### References
545
-
546
- - [Android NsdManager documentation](https://developer.android.com/reference/android/net/nsd/NsdManager)
547
- - [Android emulator multicast limitations](https://developer.android.com/studio/run/emulator-networking)
548
-
549
- ## About
550
-
551
- The library [react-native-zeroconf](https://github.com/balthazar/react-native-zeroconf) includes:
552
-
553
- - **16KB Page Size Support**: Native libraries built with 16KB alignment for Android 15+ (Google Play requirement as of November 1, 2025)
554
- - **Bundled RxDNSSD**: Native DNS-SD code from [Discord's RxDNSSD fork](https://github.com/discord/RxDNSSD) is embedded directly
555
- - **Embedded mDNSResponder**: Works reliably across all Android versions without depending on system daemons
556
- - **Zero Security Vulnerabilities**: All dependencies updated to modern versions
46
+ - **Getting started**: [Installation](https://github.com/balthazar/react-native-zeroconf/wiki/Installation), [Permissions and Setup](https://github.com/balthazar/react-native-zeroconf/wiki/Permissions-and-Setup)
47
+ - **Guides**: [Scanning](https://github.com/balthazar/react-native-zeroconf/wiki/Scanning), [Publishing](https://github.com/balthazar/react-native-zeroconf/wiki/Publishing), [React Integration](https://github.com/balthazar/react-native-zeroconf/wiki/React-Integration), [Error Handling](https://github.com/balthazar/react-native-zeroconf/wiki/Error-Handling)
48
+ - **Reference**: [API Reference](https://github.com/balthazar/react-native-zeroconf/wiki/API-Reference), [Platform Support](https://github.com/balthazar/react-native-zeroconf/wiki/Platform-Support)
49
+ - **Android**: [Android Implementations](https://github.com/balthazar/react-native-zeroconf/wiki/Android-Implementations), [Android Emulator](https://github.com/balthazar/react-native-zeroconf/wiki/Android-Emulator)
50
+ - **Help**: [Troubleshooting and FAQ](https://github.com/balthazar/react-native-zeroconf/wiki/Troubleshooting-and-FAQ), [Migration Guide](https://github.com/balthazar/react-native-zeroconf/wiki/Migration-Guide)
51
+ - **Project**: [Contributing](https://github.com/balthazar/react-native-zeroconf/wiki/Contributing), [example app](./example)
557
52
 
558
53
  ## License
559
54
 
560
- MIT License - see [LICENSE](LICENSE) file.
561
-
562
- ### Third-Party Licenses
563
-
564
- This project includes code from [RxDNSSD](https://github.com/discord/RxDNSSD) (originally by Andriy Druk, maintained by Discord), licensed under the Apache License 2.0. See [NOTICE](NOTICE) file.
55
+ MIT, see [LICENSE](LICENSE). Includes [RxDNSSD](https://github.com/discord/RxDNSSD) (Apache 2.0, see [NOTICE](NOTICE)) and Apple's mDNSResponder (mostly Apache 2.0, see its [LICENSE](android/src/main/jni/mdnsresponder/LICENSE)).
@@ -43,6 +43,6 @@ repositories {
43
43
  dependencies {
44
44
  implementation "com.facebook.react:react-native:${safeExtGet('reactNativeVersion', '+')}"
45
45
  // RxJava2 for Rx2Dnssd (bundled from Discord's RxDNSSD fork)
46
- api 'io.reactivex.rxjava2:rxjava:2.2.21'
47
- api 'io.reactivex.rxjava2:rxandroid:2.1.1'
46
+ implementation 'io.reactivex.rxjava2:rxjava:2.2.21'
47
+ implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
48
48
  }
@@ -1,19 +1,31 @@
1
1
  package com.balthazargronon.RCTZeroconf;
2
2
 
3
+ import com.facebook.react.bridge.Promise;
3
4
  import com.facebook.react.bridge.ReadableArray;
4
5
 
6
+ import javax.annotation.Nullable;
7
+
5
8
  public interface Zeroconf {
6
9
 
7
- void scan(String type, String protocol, String domain);
10
+ /**
11
+ * @param scanId id of the JS instance starting the scan, several scans can run at once
12
+ */
13
+ void scan(String scanId, String type, String protocol, String domain);
14
+
15
+ void stop(String scanId);
8
16
 
9
- void stop();
17
+ void stopAll();
10
18
 
11
- public void unregisterService(String serviceName);
19
+ /**
20
+ * @param promise resolved with the service once unregistered, null when nobody waits for it
21
+ */
22
+ public void unregisterService(String serviceName, @Nullable Promise promise);
12
23
 
13
24
  /**
14
25
  * @param txt TXT records as ordered [key, value] pairs
26
+ * @param promise resolved with the service once registered
15
27
  */
16
- public void registerService(String type, String protocol, String domain, String name, int port, ReadableArray txt);
28
+ public void registerService(String type, String protocol, String domain, String name, int port, ReadableArray txt, Promise promise);
17
29
 
18
30
  /**
19
31
  * Unregister every service published through this implementation