react-native-zeroconf 0.13.8 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/NOTICE +49 -0
  2. package/README.md +489 -65
  3. package/android/build.gradle +23 -24
  4. package/android/src/main/AndroidManifest.xml +5 -2
  5. package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroConfImplFactory.java +10 -3
  6. package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroconfModule.java +3 -2
  7. package/android/src/main/java/com/balthazargronon/RCTZeroconf/nsd/NsdServiceImpl.java +83 -22
  8. package/android/src/main/java/com/balthazargronon/RCTZeroconf/rx2dnssd/DnssdImpl.java +61 -16
  9. package/android/src/main/java/com/github/druk/dnssd/BaseListener.java +33 -0
  10. package/android/src/main/java/com/github/druk/dnssd/BrowseListener.java +67 -0
  11. package/android/src/main/java/com/github/druk/dnssd/DNSRecord.java +47 -0
  12. package/android/src/main/java/com/github/druk/dnssd/DNSSD.java +650 -0
  13. package/android/src/main/java/com/github/druk/dnssd/DNSSDBindable.java +67 -0
  14. package/android/src/main/java/com/github/druk/dnssd/DNSSDEmbedded.java +135 -0
  15. package/android/src/main/java/com/github/druk/dnssd/DNSSDException.java +66 -0
  16. package/android/src/main/java/com/github/druk/dnssd/DNSSDRecordRegistrar.java +55 -0
  17. package/android/src/main/java/com/github/druk/dnssd/DNSSDRegistration.java +54 -0
  18. package/android/src/main/java/com/github/druk/dnssd/DNSSDService.java +35 -0
  19. package/android/src/main/java/com/github/druk/dnssd/DomainListener.java +57 -0
  20. package/android/src/main/java/com/github/druk/dnssd/InternalBrowseListener.java +76 -0
  21. package/android/src/main/java/com/github/druk/dnssd/InternalDNSSD.java +870 -0
  22. package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDRecordRegistrar.java +30 -0
  23. package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDRegistration.java +34 -0
  24. package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDService.java +29 -0
  25. package/android/src/main/java/com/github/druk/dnssd/InternalDomainListener.java +62 -0
  26. package/android/src/main/java/com/github/druk/dnssd/InternalQueryListener.java +61 -0
  27. package/android/src/main/java/com/github/druk/dnssd/InternalRegisterListener.java +51 -0
  28. package/android/src/main/java/com/github/druk/dnssd/InternalResolveListener.java +58 -0
  29. package/android/src/main/java/com/github/druk/dnssd/NSClass.java +16 -0
  30. package/android/src/main/java/com/github/druk/dnssd/NSType.java +58 -0
  31. package/android/src/main/java/com/github/druk/dnssd/QueryListener.java +54 -0
  32. package/android/src/main/java/com/github/druk/dnssd/RegisterListener.java +46 -0
  33. package/android/src/main/java/com/github/druk/dnssd/RegisterRecordListener.java +35 -0
  34. package/android/src/main/java/com/github/druk/dnssd/ResolveListener.java +55 -0
  35. package/android/src/main/java/com/github/druk/dnssd/TXTRecord.java +293 -0
  36. package/android/src/main/java/com/github/druk/rx2dnssd/BonjourService.java +400 -0
  37. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2BrowseListener.java +55 -0
  38. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2Dnssd.java +127 -0
  39. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2DnssdBindable.java +35 -0
  40. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2DnssdCommon.java +280 -0
  41. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2DnssdEmbedded.java +31 -0
  42. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2QueryListener.java +70 -0
  43. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2RegisterListener.java +47 -0
  44. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2ResolveListener.java +51 -0
  45. package/android/src/main/jni/Android.mk +95 -0
  46. package/android/src/main/jni/Application.mk +3 -0
  47. package/android/src/main/jni/DNSSD.java.h +290 -0
  48. package/android/src/main/jni/JNISupport.c +1140 -0
  49. package/android/src/main/jni/mdnsresponder/Android.bp +215 -0
  50. package/android/src/main/jni/mdnsresponder/Clients/ClientCommon.c +75 -0
  51. package/android/src/main/jni/mdnsresponder/Clients/ClientCommon.h +41 -0
  52. package/android/src/main/jni/mdnsresponder/Clients/Makefile +54 -0
  53. package/android/src/main/jni/mdnsresponder/Clients/ReadMe.txt +25 -0
  54. package/android/src/main/jni/mdnsresponder/Clients/dns-sd.c +1351 -0
  55. package/android/src/main/jni/mdnsresponder/LICENSE +13 -0
  56. package/android/src/main/jni/mdnsresponder/MODULE_LICENSE_APACHE2 +0 -0
  57. package/android/src/main/jni/mdnsresponder/Makefile +41 -0
  58. package/android/src/main/jni/mdnsresponder/NOTICE +13 -0
  59. package/android/src/main/jni/mdnsresponder/PrivateDNS.txt +275 -0
  60. package/android/src/main/jni/mdnsresponder/README.txt +166 -0
  61. package/android/src/main/jni/mdnsresponder/README.version +3 -0
  62. package/android/src/main/jni/mdnsresponder/android/caseMapping/Iphlpapi.h +1 -0
  63. package/android/src/main/jni/mdnsresponder/android/caseMapping/README +3 -0
  64. package/android/src/main/jni/mdnsresponder/android/caseMapping/Resource.h +1 -0
  65. package/android/src/main/jni/mdnsresponder/android/caseMapping/Ws2tcpip.h +1 -0
  66. package/android/src/main/jni/mdnsresponder/android/caseMapping/ipExport.h +1 -0
  67. package/android/src/main/jni/mdnsresponder/android/windows_firewall_dummy.c +10 -0
  68. package/android/src/main/jni/mdnsresponder/mDNSCore/DNSCommon.c +3157 -0
  69. package/android/src/main/jni/mdnsresponder/mDNSCore/DNSCommon.h +292 -0
  70. package/android/src/main/jni/mdnsresponder/mDNSCore/DNSDigest.c +1579 -0
  71. package/android/src/main/jni/mdnsresponder/mDNSCore/Implementer Notes.txt +66 -0
  72. package/android/src/main/jni/mdnsresponder/mDNSCore/mDNS.c +11469 -0
  73. package/android/src/main/jni/mdnsresponder/mDNSCore/mDNSDebug.h +164 -0
  74. package/android/src/main/jni/mdnsresponder/mDNSCore/mDNSEmbeddedAPI.h +2974 -0
  75. package/android/src/main/jni/mdnsresponder/mDNSCore/uDNS.c +4969 -0
  76. package/android/src/main/jni/mdnsresponder/mDNSCore/uDNS.h +132 -0
  77. package/android/src/main/jni/mdnsresponder/mDNSPosix/Client.c +223 -0
  78. package/android/src/main/jni/mdnsresponder/mDNSPosix/ExampleClientApp.c +91 -0
  79. package/android/src/main/jni/mdnsresponder/mDNSPosix/ExampleClientApp.h +18 -0
  80. package/android/src/main/jni/mdnsresponder/mDNSPosix/Identify.c +378 -0
  81. package/android/src/main/jni/mdnsresponder/mDNSPosix/Makefile +520 -0
  82. package/android/src/main/jni/mdnsresponder/mDNSPosix/NetMonitor.c +1010 -0
  83. package/android/src/main/jni/mdnsresponder/mDNSPosix/PosixDaemon.c +329 -0
  84. package/android/src/main/jni/mdnsresponder/mDNSPosix/ProxyResponder.c +300 -0
  85. package/android/src/main/jni/mdnsresponder/mDNSPosix/ReadMe.txt +314 -0
  86. package/android/src/main/jni/mdnsresponder/mDNSPosix/Responder.c +792 -0
  87. package/android/src/main/jni/mdnsresponder/mDNSPosix/Services.txt +36 -0
  88. package/android/src/main/jni/mdnsresponder/mDNSPosix/libnss_mdns.8 +148 -0
  89. package/android/src/main/jni/mdnsresponder/mDNSPosix/mDNSPosix.c +1685 -0
  90. package/android/src/main/jni/mdnsresponder/mDNSPosix/mDNSPosix.h +88 -0
  91. package/android/src/main/jni/mdnsresponder/mDNSPosix/mDNSUNP.c +726 -0
  92. package/android/src/main/jni/mdnsresponder/mDNSPosix/mDNSUNP.h +130 -0
  93. package/android/src/main/jni/mdnsresponder/mDNSPosix/mdnsd.sh +73 -0
  94. package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_ReadMe.txt +125 -0
  95. package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_mdns.c +2723 -0
  96. package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_mdns.conf +13 -0
  97. package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_mdns.conf.5 +135 -0
  98. package/android/src/main/jni/mdnsresponder/mDNSPosix/parselog.py +247 -0
  99. package/android/src/main/jni/mdnsresponder/mDNSResponder.sln +400 -0
  100. package/android/src/main/jni/mdnsresponder/mDNSShared/CommonServices.h +1537 -0
  101. package/android/src/main/jni/mdnsresponder/mDNSShared/DebugServices.c +3075 -0
  102. package/android/src/main/jni/mdnsresponder/mDNSShared/DebugServices.h +1607 -0
  103. package/android/src/main/jni/mdnsresponder/mDNSShared/GenLinkedList.c +319 -0
  104. package/android/src/main/jni/mdnsresponder/mDNSShared/GenLinkedList.h +90 -0
  105. package/android/src/main/jni/mdnsresponder/mDNSShared/PlatformCommon.c +220 -0
  106. package/android/src/main/jni/mdnsresponder/mDNSShared/PlatformCommon.h +18 -0
  107. package/android/src/main/jni/mdnsresponder/mDNSShared/dns-sd.1 +194 -0
  108. package/android/src/main/jni/mdnsresponder/mDNSShared/dns_sd.h +2452 -0
  109. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.8 +69 -0
  110. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.c +3146 -0
  111. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.conf +60 -0
  112. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.h +163 -0
  113. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd_lexer.l +84 -0
  114. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd_parser.y +585 -0
  115. package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_clientlib.c +368 -0
  116. package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_clientshim.c +802 -0
  117. package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_clientstub.c +1988 -0
  118. package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_ipc.c +161 -0
  119. package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_ipc.h +219 -0
  120. package/android/src/main/jni/mdnsresponder/mDNSShared/mDNS.1 +198 -0
  121. package/android/src/main/jni/mdnsresponder/mDNSShared/mDNSDebug.c +93 -0
  122. package/android/src/main/jni/mdnsresponder/mDNSShared/mDNSResponder.8 +116 -0
  123. package/android/src/main/jni/mdnsresponder/mDNSShared/uds_daemon.c +4758 -0
  124. package/android/src/main/jni/mdnsresponder/mDNSShared/uds_daemon.h +80 -0
  125. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/BrowsingPage.cpp +441 -0
  126. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/BrowsingPage.h +156 -0
  127. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigDialog.cpp +59 -0
  128. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigDialog.h +48 -0
  129. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigPropertySheet.cpp +301 -0
  130. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigPropertySheet.h +105 -0
  131. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.cpp +380 -0
  132. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.def +20 -0
  133. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.h +84 -0
  134. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.rc +141 -0
  135. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.vcproj +727 -0
  136. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelDll.rc +123 -0
  137. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.cpp +373 -0
  138. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.h +48 -0
  139. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.rc +123 -0
  140. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.vcproj +764 -0
  141. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelLocRes.rc +270 -0
  142. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelLocRes.vcproj +487 -0
  143. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelRes.rc +134 -0
  144. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelRes.vcproj +518 -0
  145. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/FourthPage.cpp +197 -0
  146. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/FourthPage.h +87 -0
  147. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/RegistrationPage.cpp +387 -0
  148. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/RegistrationPage.h +75 -0
  149. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SecondPage.cpp +544 -0
  150. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SecondPage.h +107 -0
  151. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ServicesPage.cpp +273 -0
  152. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ServicesPage.h +123 -0
  153. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SharedSecret.cpp +115 -0
  154. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SharedSecret.h +54 -0
  155. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.dll.manifest +10 -0
  156. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.exe.manifest +17 -0
  157. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.manifest +17 -0
  158. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.rc2 +13 -0
  159. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel64.manifest +17 -0
  160. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/EnergySaver.ico +0 -0
  161. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/controlpanel.ico +0 -0
  162. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/failure.ico +0 -0
  163. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/success.ico +0 -0
  164. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/resource.h +56 -0
  165. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/stdafx.cpp +20 -0
  166. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/stdafx.h +64 -0
  167. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dll.aps +0 -0
  168. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dll.rc +102 -0
  169. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dllmain.c +112 -0
  170. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dnssd.def +48 -0
  171. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dnssd.vcproj +472 -0
  172. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/resource.h +27 -0
  173. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/AssemblyInfo.cpp +84 -0
  174. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/PString.h +70 -0
  175. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/Stdafx.cpp +22 -0
  176. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/Stdafx.h +33 -0
  177. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.cpp +1234 -0
  178. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.h +1392 -0
  179. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.ico +0 -0
  180. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.rc +113 -0
  181. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.vcproj +446 -0
  182. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/resource.h +3 -0
  183. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLStub/DLLStub.cpp +693 -0
  184. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLStub/DLLStub.h +52 -0
  185. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLStub/DLLStub.vcproj +324 -0
  186. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.cpp +208 -0
  187. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.def +35 -0
  188. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.idl +491 -0
  189. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.rc +126 -0
  190. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.rgs +11 -0
  191. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.vcproj +625 -0
  192. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSD.cpp +892 -0
  193. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDEventManager.cpp +31 -0
  194. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDEventManager.h +133 -0
  195. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDEventManager.rgs +27 -0
  196. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDRecord.cpp +101 -0
  197. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDRecord.h +185 -0
  198. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDRecord.rgs +27 -0
  199. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDService.cpp +2095 -0
  200. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDService.h +429 -0
  201. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDService.rgs +27 -0
  202. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/StringServices.cpp +344 -0
  203. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/StringServices.h +102 -0
  204. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/TXTRecord.cpp +381 -0
  205. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/TXTRecord.h +203 -0
  206. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/TXTRecord.rgs +27 -0
  207. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/_IDNSSDEvents_CP.h +358 -0
  208. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/dlldatax.c +51 -0
  209. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/dlldatax.h +49 -0
  210. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/resource.h +30 -0
  211. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/stdafx.h +88 -0
  212. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2002.sln +21 -0
  213. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2002.vcproj +253 -0
  214. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2003.sln +21 -0
  215. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2003.vcproj +267 -0
  216. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Application.ico +0 -0
  217. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Application.rc +323 -0
  218. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Application.rc2 +20 -0
  219. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Resource.h +53 -0
  220. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/AboutDialog.cpp +71 -0
  221. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/AboutDialog.h +62 -0
  222. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/Application.cpp +111 -0
  223. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/Application.h +68 -0
  224. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/ChooserDialog.cpp +1426 -0
  225. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/ChooserDialog.h +131 -0
  226. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/LoginDialog.cpp +109 -0
  227. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/LoginDialog.h +53 -0
  228. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/StdAfx.cpp +18 -0
  229. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/StdAfx.h +48 -0
  230. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Application.vcc +37 -0
  231. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Application.vcp +868 -0
  232. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Application.vcw +29 -0
  233. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/Application.ico +0 -0
  234. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/Application.rc +194 -0
  235. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/Application.rc2 +13 -0
  236. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/newres.h +28 -0
  237. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/resource.h +22 -0
  238. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/Application.cpp +92 -0
  239. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/Application.h +57 -0
  240. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/BrowserDialog.cpp +394 -0
  241. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/BrowserDialog.h +84 -0
  242. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/StdAfx.cpp +18 -0
  243. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/StdAfx.h +46 -0
  244. package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/Java.vcproj +111 -0
  245. package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/jdns_sd.rc +62 -0
  246. package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/makefile +143 -0
  247. package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/makefile64 +143 -0
  248. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.aps +0 -0
  249. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.c +581 -0
  250. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.rc +103 -0
  251. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.vcproj +409 -0
  252. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/Prefix.h +28 -0
  253. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/resource.h +27 -0
  254. package/android/src/main/jni/mdnsresponder/mDNSWindows/PosixCompat.c +128 -0
  255. package/android/src/main/jni/mdnsresponder/mDNSWindows/PosixCompat.h +70 -0
  256. package/android/src/main/jni/mdnsresponder/mDNSWindows/README.txt +85 -0
  257. package/android/src/main/jni/mdnsresponder/mDNSWindows/RegNames.h +57 -0
  258. package/android/src/main/jni/mdnsresponder/mDNSWindows/Secret.c +338 -0
  259. package/android/src/main/jni/mdnsresponder/mDNSWindows/Secret.h +42 -0
  260. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/EventLog.mc +11 -0
  261. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/EventLogMessages.bin +0 -0
  262. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Firewall.cpp +484 -0
  263. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Firewall.h +79 -0
  264. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Prefix.h +30 -0
  265. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.aps +0 -0
  266. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.c +2669 -0
  267. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.h +30 -0
  268. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.mcp +0 -0
  269. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.rc +114 -0
  270. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.vcproj +562 -0
  271. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/main.c +32 -0
  272. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/res/mDNSResponder.manifest +12 -0
  273. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/res/mDNSResponder64.manifest +12 -0
  274. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/resource.h +17 -0
  275. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/resrc1.h +15 -0
  276. package/android/src/main/jni/mdnsresponder/mDNSWindows/VPCDetect.cpp +165 -0
  277. package/android/src/main/jni/mdnsresponder/mDNSWindows/VPCDetect.h +36 -0
  278. package/android/src/main/jni/mdnsresponder/mDNSWindows/WinServices.cpp +93 -0
  279. package/android/src/main/jni/mdnsresponder/mDNSWindows/WinServices.h +34 -0
  280. package/android/src/main/jni/mdnsresponder/mDNSWindows/WinVersRes.h +35 -0
  281. package/android/src/main/jni/mdnsresponder/mDNSWindows/isocode.h +135 -0
  282. package/android/src/main/jni/mdnsresponder/mDNSWindows/loclibrary.c +268 -0
  283. package/android/src/main/jni/mdnsresponder/mDNSWindows/loclibrary.h +54 -0
  284. package/android/src/main/jni/mdnsresponder/mDNSWindows/mDNSWin32.c +5200 -0
  285. package/android/src/main/jni/mdnsresponder/mDNSWindows/mDNSWin32.h +208 -0
  286. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/ReadMe.txt +15 -0
  287. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.aps +0 -0
  288. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.c +2430 -0
  289. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.def +24 -0
  290. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.rc +104 -0
  291. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.vcproj +457 -0
  292. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/resource.h +27 -0
  293. package/android/src/main/jni/mdnsresponder/mdnsd.rc +7 -0
  294. package/android/src/main/jni/nameser.h +588 -0
  295. package/dist/index.js +160 -1
  296. package/index.d.ts +91 -0
  297. package/ios/RNZeroconf/RNNetServiceSerializer.m +7 -3
  298. package/ios/RNZeroconf/RNZeroconf.m +8 -0
  299. package/package.json +25 -17
  300. package/src/index.js +183 -0
@@ -1,14 +1,3 @@
1
- buildscript {
2
- repositories {
3
- google()
4
- mavenCentral()
5
- }
6
-
7
- dependencies {
8
- classpath 'com.android.tools.build:gradle:3.5.1'
9
- }
10
- }
11
-
12
1
  apply plugin: 'com.android.library'
13
2
 
14
3
  def safeExtGet(prop, fallback) {
@@ -16,34 +5,44 @@ def safeExtGet(prop, fallback) {
16
5
  }
17
6
 
18
7
  android {
19
- compileSdkVersion safeExtGet('compileSdkVersion', 28)
20
- buildToolsVersion "23.0.1"
8
+ compileSdkVersion safeExtGet('compileSdkVersion', 34)
9
+ ndkVersion safeExtGet('ndkVersion', '27.1.12297006')
21
10
 
22
11
  defaultConfig {
23
- minSdkVersion safeExtGet('minSdkVersion', 16)
24
- targetSdkVersion safeExtGet('targetSdkVersion', 28)
12
+ minSdkVersion safeExtGet('minSdkVersion', 21)
13
+ targetSdkVersion safeExtGet('targetSdkVersion', 34)
25
14
  versionCode 1
26
15
  versionName "1.0"
16
+
27
17
  ndk {
28
- abiFilters "armeabi-v7a", "x86"
18
+ abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
19
+ }
20
+
21
+ }
22
+
23
+ externalNativeBuild {
24
+ ndkBuild {
25
+ path "src/main/jni/Android.mk"
29
26
  }
30
27
  }
31
28
 
32
29
  compileOptions {
33
- sourceCompatibility = 1.8
34
- targetCompatibility = 1.8
30
+ sourceCompatibility = JavaVersion.VERSION_1_8
31
+ targetCompatibility = JavaVersion.VERSION_1_8
35
32
  }
33
+
34
+ // Namespace for Android Gradle Plugin 8.0+
35
+ namespace 'com.balthazargronon.RCTZeroconf'
36
36
  }
37
37
 
38
38
  repositories {
39
- google()
40
- mavenCentral()
39
+ google()
40
+ mavenCentral()
41
41
  }
42
42
 
43
43
  dependencies {
44
44
  implementation "com.facebook.react:react-native:${safeExtGet('reactNativeVersion', '+')}"
45
- // https://mvnrepository.com/artifact/com.github.andriydruk/rx2dnssd
46
- api group: 'com.github.andriydruk', name: 'rx2dnssd', version: '0.9.16'
47
- // https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
48
- api group: 'org.apache.commons', name: 'commons-lang3', version: '3.11'
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'
49
48
  }
@@ -1,3 +1,6 @@
1
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
- package="com.balthazargronon.RCTZeroconf">
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+ <uses-permission android:name="android.permission.INTERNET" />
3
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
4
+ <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
5
+ <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
3
6
  </manifest>
@@ -5,9 +5,9 @@ import com.balthazargronon.RCTZeroconf.rx2dnssd.DnssdImpl;
5
5
  import com.facebook.react.bridge.ReactApplicationContext;
6
6
  import com.facebook.react.bridge.ReactContext;
7
7
 
8
- import org.apache.commons.lang3.StringUtils;
9
-
8
+ import java.util.ArrayList;
10
9
  import java.util.HashMap;
10
+ import java.util.List;
11
11
  import java.util.Map;
12
12
 
13
13
  public class ZeroConfImplFactory {
@@ -25,7 +25,7 @@ public class ZeroConfImplFactory {
25
25
  }
26
26
 
27
27
  public Zeroconf getZeroconf(String implType) {
28
- if (StringUtils.isBlank(implType)) implType = ZeroConfImplFactory.NSD_IMPL;
28
+ if (implType == null || implType.trim().isEmpty()) implType = ZeroConfImplFactory.NSD_IMPL;
29
29
  return getOrCreateImpl(implType);
30
30
  }
31
31
 
@@ -46,4 +46,11 @@ public class ZeroConfImplFactory {
46
46
  return zeroconfMap.get(implType);
47
47
  }
48
48
 
49
+ /**
50
+ * Implementations that have already been created, without instantiating new ones
51
+ */
52
+ public List<Zeroconf> getCreatedImpls() {
53
+ return new ArrayList<>(zeroconfMap.values());
54
+ }
55
+
49
56
  }
@@ -104,8 +104,9 @@ public class ZeroconfModule extends ReactContextBaseJavaModule {
104
104
  public void onCatalystInstanceDestroy() {
105
105
  super.onCatalystInstanceDestroy();
106
106
  try {
107
- stop(ZeroConfImplFactory.NSD_IMPL);
108
- stop(ZeroConfImplFactory.DNSSD_IMPL);
107
+ for (Zeroconf impl : zeroConfFactory.getCreatedImpls()) {
108
+ impl.stop();
109
+ }
109
110
  } catch (Throwable e) {
110
111
  Log.e(getClass().getName(), e.getMessage(), e);
111
112
  sendEvent(getReactApplicationContext(), ZeroconfModule.EVENT_ERROR, "Exception During Catalyst Destroy: " + e.getMessage());
@@ -6,6 +6,9 @@ import android.net.nsd.NsdManager;
6
6
  import android.net.nsd.NsdServiceInfo;
7
7
  import android.net.wifi.WifiManager;
8
8
  import android.os.Build;
9
+ import android.os.Handler;
10
+ import android.os.Looper;
11
+ import android.util.Log;
9
12
 
10
13
  import com.balthazargronon.RCTZeroconf.Zeroconf;
11
14
  import com.balthazargronon.RCTZeroconf.ZeroconfModule;
@@ -18,13 +21,17 @@ import com.facebook.react.bridge.WritableMap;
18
21
  import com.facebook.react.bridge.WritableNativeArray;
19
22
  import com.facebook.react.bridge.WritableNativeMap;
20
23
 
21
- import java.io.UnsupportedEncodingException;
22
24
  import java.net.InetAddress;
23
- import java.util.HashMap;
25
+ import java.nio.charset.StandardCharsets;
26
+ import java.util.ArrayDeque;
24
27
  import java.util.Locale;
25
28
  import java.util.Map;
29
+ import java.util.concurrent.ConcurrentHashMap;
26
30
 
27
31
  public class NsdServiceImpl implements Zeroconf {
32
+ private static final String TAG = "NsdServiceImpl";
33
+ private static final long RESOLVE_RETRY_DELAY_MS = 100;
34
+
28
35
  private NsdManager mNsdManager;
29
36
  private NsdManager.DiscoveryListener mDiscoveryListener;
30
37
  private WifiManager.MulticastLock multicastLock;
@@ -32,10 +39,15 @@ public class NsdServiceImpl implements Zeroconf {
32
39
  private ZeroconfModule zeroconfModule;
33
40
  private ReactApplicationContext reactApplicationContext;
34
41
 
42
+ // NsdManager can only resolve one service at a time before API 34, so resolves are queued
43
+ private final ArrayDeque<NsdServiceInfo> mResolveQueue = new ArrayDeque<>();
44
+ private boolean mIsResolving = false;
45
+ private final Handler mHandler = new Handler(Looper.getMainLooper());
46
+
35
47
  public NsdServiceImpl(ZeroconfModule zeroconfModule, ReactApplicationContext reactApplicationContext) {
36
48
  this.zeroconfModule = zeroconfModule;
37
49
  this.reactApplicationContext = reactApplicationContext;
38
- mPublishedServices = new HashMap<String, NsdManager.RegistrationListener>();
50
+ mPublishedServices = new ConcurrentHashMap<String, NsdManager.RegistrationListener>();
39
51
  }
40
52
 
41
53
  @Override
@@ -68,29 +80,29 @@ public class NsdServiceImpl implements Zeroconf {
68
80
 
69
81
  @Override
70
82
  public void onDiscoveryStarted(String serviceType) {
71
- System.out.println("On Discovery Started");
83
+ Log.d(TAG, "Discovery started");
72
84
  zeroconfModule.sendEvent(getReactApplicationContext(), ZeroconfModule.EVENT_START, null);
73
85
  }
74
86
 
75
87
  @Override
76
88
  public void onDiscoveryStopped(String serviceType) {
77
- System.out.println("On Discovery Stopped");
89
+ Log.d(TAG, "Discovery stopped");
78
90
  zeroconfModule.sendEvent(getReactApplicationContext(), ZeroconfModule.EVENT_STOP, null);
79
91
  }
80
92
 
81
93
  @Override
82
94
  public void onServiceFound(NsdServiceInfo serviceInfo) {
83
- System.out.println("On Service Found");
95
+ Log.d(TAG, "Service found");
84
96
  WritableMap service = new WritableNativeMap();
85
97
  service.putString(ZeroconfModule.KEY_SERVICE_NAME, serviceInfo.getServiceName());
86
98
 
87
99
  zeroconfModule.sendEvent(getReactApplicationContext(), ZeroconfModule.EVENT_FOUND, service);
88
- mNsdManager.resolveService(serviceInfo, new NsdServiceImpl.ZeroResolveListener());
100
+ enqueueResolve(serviceInfo);
89
101
  }
90
102
 
91
103
  @Override
92
104
  public void onServiceLost(NsdServiceInfo serviceInfo) {
93
- System.out.println("On Service Lost");
105
+ Log.d(TAG, "Service lost");
94
106
  WritableMap service = new WritableNativeMap();
95
107
  service.putString(ZeroconfModule.KEY_SERVICE_NAME, serviceInfo.getServiceName());
96
108
  zeroconfModule.sendEvent(getReactApplicationContext(), ZeroconfModule.EVENT_REMOVE, service);
@@ -103,8 +115,19 @@ public class NsdServiceImpl implements Zeroconf {
103
115
 
104
116
  @Override
105
117
  public void stop() {
106
- if (mDiscoveryListener != null) {
107
- mNsdManager.stopServiceDiscovery(mDiscoveryListener);
118
+ if (mDiscoveryListener != null && mNsdManager != null) {
119
+ try {
120
+ mNsdManager.stopServiceDiscovery(mDiscoveryListener);
121
+ } catch (IllegalArgumentException e) {
122
+ // Listener was never registered or already unregistered (e.g. discovery failed to start)
123
+ Log.w(TAG, "stopServiceDiscovery failed", e);
124
+ }
125
+ }
126
+
127
+ mHandler.removeCallbacksAndMessages(null);
128
+ synchronized (mResolveQueue) {
129
+ mResolveQueue.clear();
130
+ mIsResolving = false;
108
131
  }
109
132
 
110
133
  if (multicastLock != null) {
@@ -159,21 +182,60 @@ public class NsdServiceImpl implements Zeroconf {
159
182
  return reactApplicationContext;
160
183
  }
161
184
 
185
+ private void enqueueResolve(NsdServiceInfo serviceInfo) {
186
+ synchronized (mResolveQueue) {
187
+ mResolveQueue.add(serviceInfo);
188
+ }
189
+ resolveNext();
190
+ }
191
+
192
+ private void resolveNext() {
193
+ NsdServiceInfo next;
194
+ synchronized (mResolveQueue) {
195
+ if (mIsResolving || mResolveQueue.isEmpty()) {
196
+ return;
197
+ }
198
+ next = mResolveQueue.poll();
199
+ mIsResolving = true;
200
+ }
201
+ try {
202
+ getNsdManager().resolveService(next, new ZeroResolveListener());
203
+ } catch (Throwable e) {
204
+ Log.e(TAG, "resolveService failed", e);
205
+ zeroconfModule.sendEvent(getReactApplicationContext(), ZeroconfModule.EVENT_ERROR, "Resolving service failed: " + e.getMessage());
206
+ onResolveDone();
207
+ }
208
+ }
209
+
210
+ private void onResolveDone() {
211
+ synchronized (mResolveQueue) {
212
+ mIsResolving = false;
213
+ }
214
+ resolveNext();
215
+ }
216
+
162
217
  private class ZeroResolveListener implements NsdManager.ResolveListener {
163
218
  @Override
164
219
  public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
165
220
  if (errorCode == NsdManager.FAILURE_ALREADY_ACTIVE) {
166
- mNsdManager.resolveService(serviceInfo, this);
167
- } else {
168
- String error = "Resolving service failed with code: " + errorCode;
169
- zeroconfModule.sendEvent(getReactApplicationContext(), ZeroconfModule.EVENT_ERROR, error);
221
+ // Another resolve (possibly from another app or listener) is in flight: retry shortly
222
+ synchronized (mResolveQueue) {
223
+ mResolveQueue.addFirst(serviceInfo);
224
+ mIsResolving = false;
225
+ }
226
+ mHandler.postDelayed(NsdServiceImpl.this::resolveNext, RESOLVE_RETRY_DELAY_MS);
227
+ return;
170
228
  }
229
+ String error = "Resolving service failed with code: " + errorCode;
230
+ zeroconfModule.sendEvent(getReactApplicationContext(), ZeroconfModule.EVENT_ERROR, error);
231
+ onResolveDone();
171
232
  }
172
233
 
173
234
  @Override
174
235
  public void onServiceResolved(NsdServiceInfo serviceInfo) {
175
236
  WritableMap service = serviceInfoToMap(serviceInfo);
176
237
  zeroconfModule.sendEvent(getReactApplicationContext(), ZeroconfModule.EVENT_RESOLVE, service);
238
+ onResolveDone();
177
239
  }
178
240
  }
179
241
 
@@ -194,7 +256,8 @@ public class NsdServiceImpl implements Zeroconf {
194
256
 
195
257
  @Override
196
258
  public void onRegistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
197
- // Registration failed! Put debugging code here to determine why.
259
+ String error = "Registering service " + serviceInfo.getServiceName() + " failed with code: " + errorCode;
260
+ zeroconfModule.sendEvent(getReactApplicationContext(), ZeroconfModule.EVENT_ERROR, error);
198
261
  }
199
262
 
200
263
  @Override
@@ -207,7 +270,8 @@ public class NsdServiceImpl implements Zeroconf {
207
270
 
208
271
  @Override
209
272
  public void onUnregistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
210
- // Unregistration failed. Put debugging code here to determine why.
273
+ String error = "Unregistering service " + serviceInfo.getServiceName() + " failed with code: " + errorCode;
274
+ zeroconfModule.sendEvent(getReactApplicationContext(), ZeroconfModule.EVENT_ERROR, error);
211
275
  }
212
276
  }
213
277
 
@@ -234,13 +298,10 @@ public class NsdServiceImpl implements Zeroconf {
234
298
 
235
299
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
236
300
  Map<String, byte[]> attributes = serviceInfo.getAttributes();
237
- for (String key : attributes.keySet()) {
238
- try {
301
+ if (attributes != null) {
302
+ for (String key : attributes.keySet()) {
239
303
  byte[] recordValue = attributes.get(key);
240
- txtRecords.putString(String.format(Locale.getDefault(), "%s", key), String.format(Locale.getDefault(), "%s", recordValue != null ? new String(recordValue, "UTF_8") : ""));
241
- } catch (UnsupportedEncodingException e) {
242
- String error = "Failed to encode txtRecord: " + e;
243
- zeroconfModule.sendEvent(getReactApplicationContext(), ZeroconfModule.EVENT_ERROR, error);
304
+ txtRecords.putString(String.format(Locale.getDefault(), "%s", key), recordValue != null ? new String(recordValue, StandardCharsets.UTF_8) : "");
244
305
  }
245
306
  }
246
307
  }
@@ -16,7 +16,7 @@ import com.facebook.react.bridge.WritableNativeArray;
16
16
  import com.facebook.react.bridge.WritableNativeMap;
17
17
  import com.github.druk.rx2dnssd.BonjourService;
18
18
  import com.github.druk.rx2dnssd.Rx2Dnssd;
19
- import com.github.druk.rx2dnssd.Rx2DnssdBindable;
19
+ import com.github.druk.rx2dnssd.Rx2DnssdEmbedded;
20
20
 
21
21
  import java.net.InetAddress;
22
22
  import java.util.HashMap;
@@ -26,11 +26,14 @@ import java.util.List;
26
26
 
27
27
  import javax.annotation.Nullable;
28
28
 
29
+ import io.reactivex.Flowable;
29
30
  import io.reactivex.android.schedulers.AndroidSchedulers;
30
31
  import io.reactivex.disposables.Disposable;
31
32
  import io.reactivex.schedulers.Schedulers;
32
33
 
33
34
  public class DnssdImpl implements Zeroconf {
35
+ private static final String TAG = "DnssdImpl";
36
+
34
37
  private Rx2Dnssd rxDnssd;
35
38
 
36
39
  @Nullable
@@ -49,7 +52,17 @@ public class DnssdImpl implements Zeroconf {
49
52
  this.reactApplicationContext = reactApplicationContext;
50
53
  mPublishedServices = new HashMap<String, BonjourService>();
51
54
  mRegisteredDisposables = new HashMap<String, Disposable>();
52
- rxDnssd = new Rx2DnssdBindable(reactApplicationContext);
55
+ rxDnssd = createDnssd(reactApplicationContext);
56
+ }
57
+
58
+ /**
59
+ * Creates the Rx2Dnssd implementation.
60
+ * Always uses embedded mDNSResponder since it works across all Android versions.
61
+ * The daemonic version (Rx2DnssdBindable) is unreliable on Android as the
62
+ * system daemon at /dev/socket/mdnsd doesn't exist on most devices.
63
+ */
64
+ private Rx2Dnssd createDnssd(Context context) {
65
+ return new Rx2DnssdEmbedded(context);
53
66
  }
54
67
 
55
68
  @Override
@@ -63,21 +76,50 @@ public class DnssdImpl implements Zeroconf {
63
76
  multicastLock.acquire();
64
77
  }
65
78
 
66
- browseDisposable = rxDnssd.browse(getServiceType(type, protocol), "local.")
67
- .compose(rxDnssd.resolve())
68
- .compose(rxDnssd.queryRecords())
79
+ String serviceType = getServiceType(type, protocol);
80
+ Log.d(TAG, "Starting DNSSD scan for: " + serviceType);
81
+
82
+ // Emit start event
83
+ zeroconfModule.sendEvent(reactApplicationContext, ZeroconfModule.EVENT_START, null);
84
+
85
+ browseDisposable = rxDnssd.browse(serviceType, "local.")
86
+ .doOnNext(bonjourService -> {
87
+ if (!bonjourService.isLost()) {
88
+ zeroconfModule.sendEvent(reactApplicationContext, ZeroconfModule.EVENT_FOUND, serviceNameToMap(bonjourService));
89
+ }
90
+ })
91
+ // Resolve each service independently so a single failure doesn't end the whole browse
92
+ .flatMap(bonjourService -> bonjourService.isLost()
93
+ ? Flowable.just(bonjourService)
94
+ : Flowable.just(bonjourService)
95
+ .compose(rxDnssd.resolve())
96
+ .compose(rxDnssd.queryRecords())
97
+ .onErrorResumeNext((Throwable throwable) -> {
98
+ Log.e(TAG, "Error resolving service: ", throwable);
99
+ zeroconfModule.sendEvent(reactApplicationContext, ZeroconfModule.EVENT_ERROR, "Resolving service failed: " + throwable.getMessage());
100
+ return Flowable.empty();
101
+ }))
69
102
  .subscribeOn(Schedulers.io())
70
103
  .observeOn(AndroidSchedulers.mainThread())
71
104
  .subscribe(bonjourService -> {
72
- WritableMap service = serviceInfoToMap(bonjourService);
73
- Log.d(getClass().getName(), service.toString());
74
- zeroconfModule.sendEvent(reactApplicationContext, ZeroconfModule.EVENT_RESOLVE, service);
105
+ if (bonjourService.isLost()) {
106
+ zeroconfModule.sendEvent(reactApplicationContext, ZeroconfModule.EVENT_REMOVE, serviceNameToMap(bonjourService));
107
+ return;
108
+ }
109
+ zeroconfModule.sendEvent(reactApplicationContext, ZeroconfModule.EVENT_RESOLVE, serviceInfoToMap(bonjourService));
75
110
  }, throwable -> {
76
- Log.e(getClass().getName(), "Error resolving service: ", throwable);
77
- zeroconfModule.sendEvent(reactApplicationContext, ZeroconfModule.EVENT_ERROR, throwable.getMessage());
111
+ Log.e(TAG, "Error browsing services: ", throwable);
112
+ zeroconfModule.sendEvent(reactApplicationContext, ZeroconfModule.EVENT_ERROR, "Browsing services failed: " + throwable.getMessage());
113
+ zeroconfModule.sendEvent(reactApplicationContext, ZeroconfModule.EVENT_STOP, null);
78
114
  });
79
115
  }
80
116
 
117
+ private WritableMap serviceNameToMap(BonjourService serviceInfo) {
118
+ WritableMap service = new WritableNativeMap();
119
+ service.putString(ZeroconfModule.KEY_SERVICE_NAME, serviceInfo.getServiceName());
120
+ return service;
121
+ }
122
+
81
123
  private String getServiceType(String type, String protocol) {
82
124
  return String.format("_%s._%s", type, protocol);
83
125
  }
@@ -86,10 +128,11 @@ public class DnssdImpl implements Zeroconf {
86
128
  WritableMap service = new WritableNativeMap();
87
129
  service.putString(ZeroconfModule.KEY_SERVICE_NAME, serviceInfo.getServiceName());
88
130
  final List<InetAddress> hostList = serviceInfo.getInetAddresses();
89
- final String fullServiceName;
90
- Log.d("TAG", serviceInfo.getServiceName());
91
- fullServiceName = serviceInfo.getServiceName();
92
- service.putString(ZeroconfModule.KEY_SERVICE_HOST, fullServiceName);
131
+ final String hostname = serviceInfo.getHostname();
132
+ final String fullServiceName = hostname != null
133
+ ? hostname + serviceInfo.getRegType()
134
+ : serviceInfo.getServiceName();
135
+ service.putString(ZeroconfModule.KEY_SERVICE_HOST, hostname != null ? hostname : serviceInfo.getServiceName());
93
136
 
94
137
  WritableArray addresses = new WritableNativeArray();
95
138
  for (InetAddress host : hostList) {
@@ -154,12 +197,14 @@ public class DnssdImpl implements Zeroconf {
154
197
  .subscribeOn(Schedulers.io())
155
198
  .observeOn(AndroidSchedulers.mainThread())
156
199
  .subscribe(bonjourService -> {
157
- Log.i("TAG", "Register successfully " + bonjourService.toString());
200
+ Log.i(TAG, "Registered service " + bonjourService.toString());
158
201
 
159
202
  mPublishedServices.put(bs.getServiceName(), bs);
160
203
  zeroconfModule.sendEvent(reactApplicationContext, ZeroconfModule.EVENT_PUBLISHED, serviceInfoToMap(bonjourService));
161
204
  }, throwable -> {
162
- Log.e("TAG", "error", throwable);
205
+ Log.e(TAG, "Error registering service: ", throwable);
206
+ zeroconfModule.sendEvent(reactApplicationContext, ZeroconfModule.EVENT_ERROR, "Registering service failed: " + throwable.getMessage());
207
+ mRegisteredDisposables.remove(name);
163
208
  });
164
209
 
165
210
  mRegisteredDisposables.put(name, registerDisposable);
@@ -0,0 +1,33 @@
1
+ /*
2
+ * Copyright (C) 2016 Andriy Druk
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.github.druk.dnssd;
18
+
19
+
20
+ /** A base class for DNSSD listeners. */
21
+
22
+ public interface BaseListener {
23
+ /** Called to report DNSSD operation failures.<P>
24
+
25
+ @param service
26
+ The service that encountered the failure.
27
+ <P>
28
+ @param errorCode
29
+ Indicates the failure that occurred. See {@link DNSSDException} for error codes.
30
+ */
31
+ void operationFailed(DNSSDService service, int errorCode);
32
+ }
33
+
@@ -0,0 +1,67 @@
1
+ /*
2
+ * Copyright (C) 2016 Andriy Druk
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.github.druk.dnssd;
18
+
19
+ /** A listener that receives results from {@link InternalDNSSD#browse}. */
20
+
21
+ public interface BrowseListener extends BaseListener {
22
+ /** Called to report discovered services.<P>
23
+
24
+ @param browser
25
+ The active browse service.
26
+ <P>
27
+ @param flags
28
+ Possible values are DNSSD.MORE_COMING.
29
+ <P>
30
+ @param ifIndex
31
+ The interface on which the service is advertised. This index should be passed
32
+ to {@link InternalDNSSD#resolve} when resolving the service.
33
+ <P>
34
+ @param serviceName
35
+ The service name discovered.
36
+ <P>
37
+ @param regType
38
+ The registration type, as passed in to DNSSD.browse().
39
+ <P>
40
+ @param domain
41
+ The domain in which the service was discovered.
42
+ */
43
+ void serviceFound(DNSSDService browser, int flags, int ifIndex, String serviceName, String regType, String domain);
44
+
45
+ /** Called to report services which have been deregistered.<P>
46
+
47
+ @param browser
48
+ The active browse service.
49
+ <P>
50
+ @param flags
51
+ Possible values are DNSSD.MORE_COMING.
52
+ <P>
53
+ @param ifIndex
54
+ The interface on which the service is advertised.
55
+ <P>
56
+ @param serviceName
57
+ The service name which has deregistered.
58
+ <P>
59
+ @param regType
60
+ The registration type, as passed in to DNSSD.browse().
61
+ <P>
62
+ @param domain
63
+ The domain in which the service was discovered.
64
+ */
65
+ void serviceLost(DNSSDService browser, int flags, int ifIndex, String serviceName, String regType, String domain);
66
+ }
67
+
@@ -0,0 +1,47 @@
1
+ /*
2
+ * Copyright (C) 2016 Andriy Druk
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.github.druk.dnssd;
18
+
19
+
20
+ /**
21
+ Reference to a record returned by {@link DNSSDRegistration#addRecord}.<P>
22
+
23
+ Note: client is responsible for serializing access to these objects if
24
+ they are shared between concurrent threads.
25
+ */
26
+
27
+ public interface DNSRecord {
28
+ /** Update a registered resource record.<P>
29
+ The record must either be the primary txt record of a service registered via DNSSD.register(),
30
+ or a record added to a registered service via addRecord().<P>
31
+
32
+ @param flags
33
+ Currently unused, reserved for future use.
34
+ <P>
35
+ @param rData
36
+ The new rdata to be contained in the updated resource record.
37
+ <P>
38
+ @param ttl
39
+ The time to live of the updated resource record, in seconds.
40
+ */
41
+ void update(int flags, byte[] rData, int ttl) throws DNSSDException;
42
+
43
+ /** Remove a registered resource record.<P>
44
+ */
45
+ void remove() throws DNSSDException;
46
+ }
47
+