react-native-zeroconf 0.13.7 → 0.14.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 (295) hide show
  1. package/NOTICE +49 -0
  2. package/README.md +473 -65
  3. package/android/build.gradle +28 -22
  4. package/android/src/main/AndroidManifest.xml +1 -2
  5. package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroconfModule.java +5 -5
  6. package/android/src/main/java/com/balthazargronon/RCTZeroconf/rx2dnssd/DnssdImpl.java +19 -3
  7. package/android/src/main/java/com/github/druk/dnssd/BaseListener.java +33 -0
  8. package/android/src/main/java/com/github/druk/dnssd/BrowseListener.java +67 -0
  9. package/android/src/main/java/com/github/druk/dnssd/DNSRecord.java +47 -0
  10. package/android/src/main/java/com/github/druk/dnssd/DNSSD.java +650 -0
  11. package/android/src/main/java/com/github/druk/dnssd/DNSSDBindable.java +67 -0
  12. package/android/src/main/java/com/github/druk/dnssd/DNSSDEmbedded.java +135 -0
  13. package/android/src/main/java/com/github/druk/dnssd/DNSSDException.java +66 -0
  14. package/android/src/main/java/com/github/druk/dnssd/DNSSDRecordRegistrar.java +55 -0
  15. package/android/src/main/java/com/github/druk/dnssd/DNSSDRegistration.java +54 -0
  16. package/android/src/main/java/com/github/druk/dnssd/DNSSDService.java +35 -0
  17. package/android/src/main/java/com/github/druk/dnssd/DomainListener.java +57 -0
  18. package/android/src/main/java/com/github/druk/dnssd/InternalBrowseListener.java +76 -0
  19. package/android/src/main/java/com/github/druk/dnssd/InternalDNSSD.java +870 -0
  20. package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDRecordRegistrar.java +30 -0
  21. package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDRegistration.java +34 -0
  22. package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDService.java +29 -0
  23. package/android/src/main/java/com/github/druk/dnssd/InternalDomainListener.java +62 -0
  24. package/android/src/main/java/com/github/druk/dnssd/InternalQueryListener.java +61 -0
  25. package/android/src/main/java/com/github/druk/dnssd/InternalRegisterListener.java +51 -0
  26. package/android/src/main/java/com/github/druk/dnssd/InternalResolveListener.java +58 -0
  27. package/android/src/main/java/com/github/druk/dnssd/NSClass.java +16 -0
  28. package/android/src/main/java/com/github/druk/dnssd/NSType.java +58 -0
  29. package/android/src/main/java/com/github/druk/dnssd/QueryListener.java +54 -0
  30. package/android/src/main/java/com/github/druk/dnssd/RegisterListener.java +46 -0
  31. package/android/src/main/java/com/github/druk/dnssd/RegisterRecordListener.java +35 -0
  32. package/android/src/main/java/com/github/druk/dnssd/ResolveListener.java +55 -0
  33. package/android/src/main/java/com/github/druk/dnssd/TXTRecord.java +293 -0
  34. package/android/src/main/java/com/github/druk/rx2dnssd/BonjourService.java +400 -0
  35. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2BrowseListener.java +55 -0
  36. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2Dnssd.java +127 -0
  37. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2DnssdBindable.java +35 -0
  38. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2DnssdCommon.java +280 -0
  39. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2DnssdEmbedded.java +31 -0
  40. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2QueryListener.java +70 -0
  41. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2RegisterListener.java +47 -0
  42. package/android/src/main/java/com/github/druk/rx2dnssd/Rx2ResolveListener.java +51 -0
  43. package/android/src/main/jni/Android.mk +95 -0
  44. package/android/src/main/jni/Application.mk +3 -0
  45. package/android/src/main/jni/DNSSD.java.h +290 -0
  46. package/android/src/main/jni/JNISupport.c +1140 -0
  47. package/android/src/main/jni/mdnsresponder/Android.bp +215 -0
  48. package/android/src/main/jni/mdnsresponder/Clients/ClientCommon.c +75 -0
  49. package/android/src/main/jni/mdnsresponder/Clients/ClientCommon.h +41 -0
  50. package/android/src/main/jni/mdnsresponder/Clients/Makefile +54 -0
  51. package/android/src/main/jni/mdnsresponder/Clients/ReadMe.txt +25 -0
  52. package/android/src/main/jni/mdnsresponder/Clients/dns-sd.c +1351 -0
  53. package/android/src/main/jni/mdnsresponder/LICENSE +13 -0
  54. package/android/src/main/jni/mdnsresponder/MODULE_LICENSE_APACHE2 +0 -0
  55. package/android/src/main/jni/mdnsresponder/Makefile +41 -0
  56. package/android/src/main/jni/mdnsresponder/NOTICE +13 -0
  57. package/android/src/main/jni/mdnsresponder/PrivateDNS.txt +275 -0
  58. package/android/src/main/jni/mdnsresponder/README.txt +166 -0
  59. package/android/src/main/jni/mdnsresponder/README.version +3 -0
  60. package/android/src/main/jni/mdnsresponder/android/caseMapping/Iphlpapi.h +1 -0
  61. package/android/src/main/jni/mdnsresponder/android/caseMapping/README +3 -0
  62. package/android/src/main/jni/mdnsresponder/android/caseMapping/Resource.h +1 -0
  63. package/android/src/main/jni/mdnsresponder/android/caseMapping/Ws2tcpip.h +1 -0
  64. package/android/src/main/jni/mdnsresponder/android/caseMapping/ipExport.h +1 -0
  65. package/android/src/main/jni/mdnsresponder/android/windows_firewall_dummy.c +10 -0
  66. package/android/src/main/jni/mdnsresponder/mDNSCore/DNSCommon.c +3157 -0
  67. package/android/src/main/jni/mdnsresponder/mDNSCore/DNSCommon.h +292 -0
  68. package/android/src/main/jni/mdnsresponder/mDNSCore/DNSDigest.c +1579 -0
  69. package/android/src/main/jni/mdnsresponder/mDNSCore/Implementer Notes.txt +66 -0
  70. package/android/src/main/jni/mdnsresponder/mDNSCore/mDNS.c +11469 -0
  71. package/android/src/main/jni/mdnsresponder/mDNSCore/mDNSDebug.h +164 -0
  72. package/android/src/main/jni/mdnsresponder/mDNSCore/mDNSEmbeddedAPI.h +2974 -0
  73. package/android/src/main/jni/mdnsresponder/mDNSCore/uDNS.c +4969 -0
  74. package/android/src/main/jni/mdnsresponder/mDNSCore/uDNS.h +132 -0
  75. package/android/src/main/jni/mdnsresponder/mDNSPosix/Client.c +223 -0
  76. package/android/src/main/jni/mdnsresponder/mDNSPosix/ExampleClientApp.c +91 -0
  77. package/android/src/main/jni/mdnsresponder/mDNSPosix/ExampleClientApp.h +18 -0
  78. package/android/src/main/jni/mdnsresponder/mDNSPosix/Identify.c +378 -0
  79. package/android/src/main/jni/mdnsresponder/mDNSPosix/Makefile +520 -0
  80. package/android/src/main/jni/mdnsresponder/mDNSPosix/NetMonitor.c +1010 -0
  81. package/android/src/main/jni/mdnsresponder/mDNSPosix/PosixDaemon.c +329 -0
  82. package/android/src/main/jni/mdnsresponder/mDNSPosix/ProxyResponder.c +300 -0
  83. package/android/src/main/jni/mdnsresponder/mDNSPosix/ReadMe.txt +314 -0
  84. package/android/src/main/jni/mdnsresponder/mDNSPosix/Responder.c +792 -0
  85. package/android/src/main/jni/mdnsresponder/mDNSPosix/Services.txt +36 -0
  86. package/android/src/main/jni/mdnsresponder/mDNSPosix/libnss_mdns.8 +148 -0
  87. package/android/src/main/jni/mdnsresponder/mDNSPosix/mDNSPosix.c +1685 -0
  88. package/android/src/main/jni/mdnsresponder/mDNSPosix/mDNSPosix.h +88 -0
  89. package/android/src/main/jni/mdnsresponder/mDNSPosix/mDNSUNP.c +726 -0
  90. package/android/src/main/jni/mdnsresponder/mDNSPosix/mDNSUNP.h +130 -0
  91. package/android/src/main/jni/mdnsresponder/mDNSPosix/mdnsd.sh +73 -0
  92. package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_ReadMe.txt +125 -0
  93. package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_mdns.c +2723 -0
  94. package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_mdns.conf +13 -0
  95. package/android/src/main/jni/mdnsresponder/mDNSPosix/nss_mdns.conf.5 +135 -0
  96. package/android/src/main/jni/mdnsresponder/mDNSPosix/parselog.py +247 -0
  97. package/android/src/main/jni/mdnsresponder/mDNSResponder.sln +400 -0
  98. package/android/src/main/jni/mdnsresponder/mDNSShared/CommonServices.h +1537 -0
  99. package/android/src/main/jni/mdnsresponder/mDNSShared/DebugServices.c +3075 -0
  100. package/android/src/main/jni/mdnsresponder/mDNSShared/DebugServices.h +1607 -0
  101. package/android/src/main/jni/mdnsresponder/mDNSShared/GenLinkedList.c +319 -0
  102. package/android/src/main/jni/mdnsresponder/mDNSShared/GenLinkedList.h +90 -0
  103. package/android/src/main/jni/mdnsresponder/mDNSShared/PlatformCommon.c +220 -0
  104. package/android/src/main/jni/mdnsresponder/mDNSShared/PlatformCommon.h +18 -0
  105. package/android/src/main/jni/mdnsresponder/mDNSShared/dns-sd.1 +194 -0
  106. package/android/src/main/jni/mdnsresponder/mDNSShared/dns_sd.h +2452 -0
  107. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.8 +69 -0
  108. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.c +3146 -0
  109. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.conf +60 -0
  110. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd.h +163 -0
  111. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd_lexer.l +84 -0
  112. package/android/src/main/jni/mdnsresponder/mDNSShared/dnsextd_parser.y +585 -0
  113. package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_clientlib.c +368 -0
  114. package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_clientshim.c +802 -0
  115. package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_clientstub.c +1988 -0
  116. package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_ipc.c +161 -0
  117. package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_ipc.h +219 -0
  118. package/android/src/main/jni/mdnsresponder/mDNSShared/mDNS.1 +198 -0
  119. package/android/src/main/jni/mdnsresponder/mDNSShared/mDNSDebug.c +93 -0
  120. package/android/src/main/jni/mdnsresponder/mDNSShared/mDNSResponder.8 +116 -0
  121. package/android/src/main/jni/mdnsresponder/mDNSShared/uds_daemon.c +4758 -0
  122. package/android/src/main/jni/mdnsresponder/mDNSShared/uds_daemon.h +80 -0
  123. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/BrowsingPage.cpp +441 -0
  124. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/BrowsingPage.h +156 -0
  125. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigDialog.cpp +59 -0
  126. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigDialog.h +48 -0
  127. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigPropertySheet.cpp +301 -0
  128. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ConfigPropertySheet.h +105 -0
  129. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.cpp +380 -0
  130. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.def +20 -0
  131. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.h +84 -0
  132. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.rc +141 -0
  133. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanel.vcproj +727 -0
  134. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelDll.rc +123 -0
  135. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.cpp +373 -0
  136. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.h +48 -0
  137. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.rc +123 -0
  138. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelExe.vcproj +764 -0
  139. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelLocRes.rc +270 -0
  140. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelLocRes.vcproj +487 -0
  141. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelRes.rc +134 -0
  142. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ControlPanelRes.vcproj +518 -0
  143. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/FourthPage.cpp +197 -0
  144. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/FourthPage.h +87 -0
  145. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/RegistrationPage.cpp +387 -0
  146. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/RegistrationPage.h +75 -0
  147. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SecondPage.cpp +544 -0
  148. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SecondPage.h +107 -0
  149. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ServicesPage.cpp +273 -0
  150. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/ServicesPage.h +123 -0
  151. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SharedSecret.cpp +115 -0
  152. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/SharedSecret.h +54 -0
  153. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.dll.manifest +10 -0
  154. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.exe.manifest +17 -0
  155. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.manifest +17 -0
  156. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel.rc2 +13 -0
  157. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/ControlPanel64.manifest +17 -0
  158. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/EnergySaver.ico +0 -0
  159. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/controlpanel.ico +0 -0
  160. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/failure.ico +0 -0
  161. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/res/success.ico +0 -0
  162. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/resource.h +56 -0
  163. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/stdafx.cpp +20 -0
  164. package/android/src/main/jni/mdnsresponder/mDNSWindows/ControlPanel/stdafx.h +64 -0
  165. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dll.aps +0 -0
  166. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dll.rc +102 -0
  167. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dllmain.c +112 -0
  168. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dnssd.def +48 -0
  169. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/dnssd.vcproj +472 -0
  170. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL/resource.h +27 -0
  171. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/AssemblyInfo.cpp +84 -0
  172. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/PString.h +70 -0
  173. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/Stdafx.cpp +22 -0
  174. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/Stdafx.h +33 -0
  175. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.cpp +1234 -0
  176. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.h +1392 -0
  177. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.ico +0 -0
  178. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.rc +113 -0
  179. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.vcproj +446 -0
  180. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLL.NET/resource.h +3 -0
  181. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLStub/DLLStub.cpp +693 -0
  182. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLStub/DLLStub.h +52 -0
  183. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLStub/DLLStub.vcproj +324 -0
  184. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.cpp +208 -0
  185. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.def +35 -0
  186. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.idl +491 -0
  187. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.rc +126 -0
  188. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.rgs +11 -0
  189. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DLLX.vcproj +625 -0
  190. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSD.cpp +892 -0
  191. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDEventManager.cpp +31 -0
  192. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDEventManager.h +133 -0
  193. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDEventManager.rgs +27 -0
  194. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDRecord.cpp +101 -0
  195. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDRecord.h +185 -0
  196. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDRecord.rgs +27 -0
  197. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDService.cpp +2095 -0
  198. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDService.h +429 -0
  199. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/DNSSDService.rgs +27 -0
  200. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/StringServices.cpp +344 -0
  201. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/StringServices.h +102 -0
  202. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/TXTRecord.cpp +381 -0
  203. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/TXTRecord.h +203 -0
  204. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/TXTRecord.rgs +27 -0
  205. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/_IDNSSDEvents_CP.h +358 -0
  206. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/dlldatax.c +51 -0
  207. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/dlldatax.h +49 -0
  208. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/resource.h +30 -0
  209. package/android/src/main/jni/mdnsresponder/mDNSWindows/DLLX/stdafx.h +88 -0
  210. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2002.sln +21 -0
  211. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2002.vcproj +253 -0
  212. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2003.sln +21 -0
  213. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/ApplicationVS2003.vcproj +267 -0
  214. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Application.ico +0 -0
  215. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Application.rc +323 -0
  216. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Application.rc2 +20 -0
  217. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Resources/Resource.h +53 -0
  218. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/AboutDialog.cpp +71 -0
  219. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/AboutDialog.h +62 -0
  220. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/Application.cpp +111 -0
  221. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/Application.h +68 -0
  222. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/ChooserDialog.cpp +1426 -0
  223. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/ChooserDialog.h +131 -0
  224. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/LoginDialog.cpp +109 -0
  225. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/LoginDialog.h +53 -0
  226. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/StdAfx.cpp +18 -0
  227. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/Windows/Sources/StdAfx.h +48 -0
  228. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Application.vcc +37 -0
  229. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Application.vcp +868 -0
  230. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Application.vcw +29 -0
  231. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/Application.ico +0 -0
  232. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/Application.rc +194 -0
  233. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/Application.rc2 +13 -0
  234. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/newres.h +28 -0
  235. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Resources/resource.h +22 -0
  236. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/Application.cpp +92 -0
  237. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/Application.h +57 -0
  238. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/BrowserDialog.cpp +394 -0
  239. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/BrowserDialog.h +84 -0
  240. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/StdAfx.cpp +18 -0
  241. package/android/src/main/jni/mdnsresponder/mDNSWindows/DNSServiceBrowser/WindowsCE/Sources/StdAfx.h +46 -0
  242. package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/Java.vcproj +111 -0
  243. package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/jdns_sd.rc +62 -0
  244. package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/makefile +143 -0
  245. package/android/src/main/jni/mdnsresponder/mDNSWindows/Java/makefile64 +143 -0
  246. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.aps +0 -0
  247. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.c +581 -0
  248. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.rc +103 -0
  249. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/NSPTool.vcproj +409 -0
  250. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/Prefix.h +28 -0
  251. package/android/src/main/jni/mdnsresponder/mDNSWindows/NSPTool/resource.h +27 -0
  252. package/android/src/main/jni/mdnsresponder/mDNSWindows/PosixCompat.c +128 -0
  253. package/android/src/main/jni/mdnsresponder/mDNSWindows/PosixCompat.h +70 -0
  254. package/android/src/main/jni/mdnsresponder/mDNSWindows/README.txt +85 -0
  255. package/android/src/main/jni/mdnsresponder/mDNSWindows/RegNames.h +57 -0
  256. package/android/src/main/jni/mdnsresponder/mDNSWindows/Secret.c +338 -0
  257. package/android/src/main/jni/mdnsresponder/mDNSWindows/Secret.h +42 -0
  258. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/EventLog.mc +11 -0
  259. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/EventLogMessages.bin +0 -0
  260. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Firewall.cpp +484 -0
  261. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Firewall.h +79 -0
  262. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Prefix.h +30 -0
  263. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.aps +0 -0
  264. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.c +2669 -0
  265. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.h +30 -0
  266. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.mcp +0 -0
  267. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.rc +114 -0
  268. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/Service.vcproj +562 -0
  269. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/main.c +32 -0
  270. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/res/mDNSResponder.manifest +12 -0
  271. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/res/mDNSResponder64.manifest +12 -0
  272. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/resource.h +17 -0
  273. package/android/src/main/jni/mdnsresponder/mDNSWindows/SystemService/resrc1.h +15 -0
  274. package/android/src/main/jni/mdnsresponder/mDNSWindows/VPCDetect.cpp +165 -0
  275. package/android/src/main/jni/mdnsresponder/mDNSWindows/VPCDetect.h +36 -0
  276. package/android/src/main/jni/mdnsresponder/mDNSWindows/WinServices.cpp +93 -0
  277. package/android/src/main/jni/mdnsresponder/mDNSWindows/WinServices.h +34 -0
  278. package/android/src/main/jni/mdnsresponder/mDNSWindows/WinVersRes.h +35 -0
  279. package/android/src/main/jni/mdnsresponder/mDNSWindows/isocode.h +135 -0
  280. package/android/src/main/jni/mdnsresponder/mDNSWindows/loclibrary.c +268 -0
  281. package/android/src/main/jni/mdnsresponder/mDNSWindows/loclibrary.h +54 -0
  282. package/android/src/main/jni/mdnsresponder/mDNSWindows/mDNSWin32.c +5200 -0
  283. package/android/src/main/jni/mdnsresponder/mDNSWindows/mDNSWin32.h +208 -0
  284. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/ReadMe.txt +15 -0
  285. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.aps +0 -0
  286. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.c +2430 -0
  287. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.def +24 -0
  288. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.rc +104 -0
  289. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/mdnsNSP.vcproj +457 -0
  290. package/android/src/main/jni/mdnsresponder/mDNSWindows/mdnsNSP/resource.h +27 -0
  291. package/android/src/main/jni/mdnsresponder/mdnsd.rc +7 -0
  292. package/android/src/main/jni/nameser.h +588 -0
  293. package/dist/index.js +148 -1
  294. package/package.json +23 -17
  295. package/src/index.js +166 -0
@@ -0,0 +1,650 @@
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
+ import android.content.Context;
20
+ import android.net.wifi.WifiManager;
21
+ import android.os.Handler;
22
+ import android.os.Looper;
23
+ import android.text.TextUtils;
24
+ import android.util.Log;
25
+
26
+ import java.nio.charset.Charset;
27
+ import java.util.HashMap;
28
+ import java.util.Map;
29
+
30
+ public abstract class DNSSD implements InternalDNSSDService.DnssdServiceListener {
31
+
32
+ public static final int DNSSD_DEFAULT_TIMEOUT = 60 * 1000; // 60 sec
33
+
34
+ /** Flag indicates to a {@link BrowseListener} that another result is
35
+ queued. Applications should not update their UI to display browse
36
+ results if the MORE_COMING flag is set; they will be called at least once
37
+ more with the flag clear.
38
+ */
39
+ public static final int MORE_COMING = 1 << 0;
40
+
41
+ /** If flag is set in a {@link DomainListener} callback, indicates that the result is the default domain. */
42
+ public static final int DEFAULT = 1 << 2;
43
+
44
+ /** If flag is set, a name conflict will trigger an exception when registering non-shared records.<P>
45
+ A name must be explicitly specified when registering a service if this bit is set
46
+ (i.e. the default name may not not be used).
47
+ */
48
+ public static final int NO_AUTO_RENAME = 1 << 3;
49
+
50
+ /** If flag is set, allow multiple records with this name on the network (e.g. PTR records)
51
+ when registering individual records on a {@link DNSSDRegistration}.
52
+ */
53
+ public static final int SHARED = 1 << 4;
54
+
55
+ /** If flag is set, records with this name must be unique on the network (e.g. SRV records). */
56
+ public static final int UNIQUE = 1 << 5;
57
+
58
+ /** Set flag when calling enumerateDomains() to restrict results to domains recommended for browsing. */
59
+ public static final int BROWSE_DOMAINS = 1 << 6;
60
+ /** Set flag when calling enumerateDomains() to restrict results to domains recommended for registration. */
61
+ public static final int REGISTRATION_DOMAINS = 1 << 7;
62
+
63
+ /** Maximum length, in bytes, of a domain name represented as an escaped C-String. */
64
+ public static final int MAX_DOMAIN_NAME = 1009;
65
+
66
+ /** Pass for ifIndex to specify all available interfaces. */
67
+ public static final int ALL_INTERFACES = 0;
68
+
69
+ /** Pass for ifIndex to specify the localhost interface. */
70
+ public static final int LOCALHOST_ONLY = -1;
71
+
72
+ private static final Charset UTF_8 = Charset.forName("UTF-8");
73
+ private static final String MULTICAST_LOCK_NAME = "com.github.druk.dnssd.DNSSD";
74
+
75
+ private final Handler handler;
76
+ private final Context context;
77
+
78
+ // Lock for multicast packages
79
+ private volatile WifiManager.MulticastLock multicastLock = null;
80
+
81
+ /** Timeout for resolve and query records operations. Default value: {@value #DNSSD_DEFAULT_TIMEOUT} */
82
+ private final int serviceTimeout;
83
+
84
+ DNSSD(Context context, String lib) {
85
+ this(context, lib, Looper.getMainLooper());
86
+ }
87
+
88
+ DNSSD(Context context, String lib, Looper looper) {
89
+ this.context = context.getApplicationContext();
90
+ InternalDNSSD.init(lib);
91
+ this.handler = new Handler(looper);
92
+ this.serviceTimeout = DNSSD_DEFAULT_TIMEOUT;
93
+ }
94
+
95
+ DNSSD(Context context, String lib, Handler handler) {
96
+ this.context = context.getApplicationContext();
97
+ InternalDNSSD.init(lib);
98
+ this.handler = handler;
99
+ this.serviceTimeout = DNSSD_DEFAULT_TIMEOUT;
100
+ }
101
+
102
+ DNSSD(Context context, String lib, Handler handler, int serviceTimeout) {
103
+ this.context = context.getApplicationContext();
104
+ InternalDNSSD.init(lib);
105
+ this.handler = handler;
106
+ this.serviceTimeout = serviceTimeout;
107
+ }
108
+
109
+ /** Browse for instances of a service.<P>
110
+
111
+ Note: browsing consumes network bandwidth. Call {@link InternalDNSSDService#stop} when you have finished browsing.<P>
112
+
113
+ @param flags
114
+ Currently ignored, reserved for future use.
115
+ <P>
116
+ @param ifIndex
117
+ If non-zero, specifies the interface on which to browse for services
118
+ (the index for a given interface is determined via the if_nametoindex()
119
+ family of calls.) Most applications will pass 0 to browse on all available
120
+ interfaces. Pass -1 to only browse for services provided on the local host.
121
+ <P>
122
+ @param regType
123
+ The registration type being browsed for followed by the protocol, separated by a
124
+ dot (e.g. "_ftp._tcp"). The transport protocol must be "_tcp" or "_udp".
125
+ <P>
126
+ @param domain
127
+ If non-null, specifies the domain on which to browse for services.
128
+ Most applications will not specify a domain, instead browsing on the
129
+ default domain(s).
130
+ <P>
131
+ @param listener
132
+ This object will get called when instances of the service are discovered (or disappear).
133
+ <P>
134
+ @return A {@link InternalDNSSDService} that represents the active browse operation.
135
+
136
+ @throws SecurityException If a security manager is present and denies <tt>RuntimePermission("getDNSSDInstance")</tt>.
137
+ @see RuntimePermission
138
+ */
139
+ public DNSSDService browse(int flags, int ifIndex, String regType, String domain, final BrowseListener listener) throws DNSSDException {
140
+ onServiceStarting();
141
+ final InternalDNSSDService[] services = new InternalDNSSDService[1];
142
+ services[0] = new InternalDNSSDService(this, InternalDNSSD.browse(flags, ifIndex, regType, domain, new InternalBrowseListener() {
143
+ @Override
144
+ public void serviceFound(final DNSSDService browser, final int flags, final int ifIndex, final byte[] serviceName, final byte[] regType, final byte[] domain) {
145
+ final String serviceNameStr = new String(serviceName, UTF_8);
146
+ final String regTypeStr = new String(regType, UTF_8);
147
+ final String domainStr = new String(domain, UTF_8);
148
+ handler.post(() -> listener.serviceFound(services[0], flags, ifIndex, serviceNameStr, regTypeStr, domainStr));
149
+ }
150
+
151
+ @Override
152
+ public void serviceLost(DNSSDService browser, final int flags, final int ifIndex, byte[] serviceName, byte[] regType, byte[] domain) {
153
+ final String serviceNameStr = new String(serviceName, UTF_8);
154
+ final String regTypeStr = new String(regType, UTF_8);
155
+ final String domainStr = new String(domain, UTF_8);
156
+ handler.post(() -> listener.serviceLost(services[0], flags, ifIndex, serviceNameStr, regTypeStr, domainStr));
157
+ }
158
+
159
+ @Override
160
+ public void operationFailed(final DNSSDService service, final int errorCode) {
161
+ handler.post(() -> listener.operationFailed(services[0], errorCode));
162
+ }
163
+ }));
164
+ return services[0];
165
+
166
+ }
167
+
168
+ /** Browse for instances of a service. Use default flags, ifIndex and domain.<P>
169
+
170
+ @param regType
171
+ The registration type being browsed for followed by the protocol, separated by a
172
+ dot (e.g. "_ftp._tcp"). The transport protocol must be "_tcp" or "_udp".
173
+ <P>
174
+ @param listener
175
+ This object will get called when instances of the service are discovered (or disappear).
176
+ <P>
177
+ @return A {@link DNSSDService} that represents the active browse operation.
178
+
179
+ @throws SecurityException If a security manager is present and denies <tt>RuntimePermission("getDNSSDInstance")</tt>.
180
+ @see RuntimePermission
181
+ */
182
+ public DNSSDService browse(String regType, BrowseListener listener) throws DNSSDException {
183
+ return browse(0, 0, regType, "", listener);
184
+ }
185
+
186
+ /** Resolve a service name discovered via browse() to a target host name, port number, and txt record.<P>
187
+
188
+ Note: Applications should NOT use resolve() solely for txt record monitoring - use
189
+ queryRecord() instead, as it is more efficient for this task.<P>
190
+
191
+ Note: When the desired results have been returned, the client MUST terminate the resolve by
192
+ calling {@link DNSSDService#stop}.<P>
193
+
194
+ Note: resolve() behaves correctly for typical services that have a single SRV record and
195
+ a single TXT record (the TXT record may be empty.) To resolve non-standard services with
196
+ multiple SRV or TXT records, use queryRecord().<P>
197
+
198
+ @param flags
199
+ Currently ignored, reserved for future use.
200
+ <P>
201
+ @param ifIndex
202
+ The interface on which to resolve the service. The client should
203
+ pass the interface on which the serviceName was discovered (i.e.
204
+ the ifIndex passed to the serviceFound() callback)
205
+ or 0 to resolve the named service on all available interfaces.
206
+ <P>
207
+ @param serviceName
208
+ The servicename to be resolved.
209
+ <P>
210
+ @param regType
211
+ The registration type being resolved followed by the protocol, separated by a
212
+ dot (e.g. "_ftp._tcp"). The transport protocol must be "_tcp" or "_udp".
213
+ <P>
214
+ @param domain
215
+ The domain on which the service is registered, i.e. the domain passed
216
+ to the serviceFound() callback.
217
+ <P>
218
+ @param listener
219
+ This object will get called when the service is resolved.
220
+ <P>
221
+ @return A {@link DNSSDService} that represents the active resolve operation.
222
+
223
+ @throws SecurityException If a security manager is present and denies <tt>RuntimePermission("getDNSSDInstance")</tt>.
224
+ @see RuntimePermission
225
+ */
226
+ public DNSSDService resolve(int flags, int ifIndex, String serviceName, String regType, String domain, final ResolveListener listener) throws DNSSDException {
227
+ onServiceStarting();
228
+ final DNSSDService[] services = new DNSSDService[1];
229
+
230
+ final Runnable timeoutRunnable = () -> services[0].stop();
231
+
232
+ services[0] = new InternalDNSSDService(this, InternalDNSSD.resolve(flags, ifIndex, serviceName, regType, domain, new InternalResolveListener() {
233
+ @Override
234
+ public void serviceResolved(final DNSSDService resolver, final int flags, final int ifIndex, byte[] fullName, byte[] hostName, final int port, TXTRecord txtRecord) {
235
+ final String fullNameStr = new String(fullName, UTF_8);
236
+ final String hostNameStr = new String(hostName, UTF_8);
237
+ final Map<String, String> record = parseTXTRecords(txtRecord);
238
+ handler.removeCallbacks(timeoutRunnable);
239
+ handler.post(() -> {
240
+ listener.serviceResolved(services[0], flags, ifIndex, fullNameStr, hostNameStr, port, record);
241
+ services[0].stop();
242
+ });
243
+ }
244
+
245
+ @Override
246
+ public void operationFailed(final DNSSDService service, final int errorCode) {
247
+ handler.removeCallbacks(timeoutRunnable);
248
+ handler.post(() -> {
249
+ listener.operationFailed(services[0], errorCode);
250
+ services[0].stop();
251
+ });
252
+ }
253
+ }));
254
+
255
+ handler.postDelayed(timeoutRunnable, serviceTimeout);
256
+ return services[0];
257
+ }
258
+
259
+ /** Register a service, to be discovered via browse() and resolve() calls.<P>
260
+ @param flags
261
+ Possible values are: NO_AUTO_RENAME.
262
+ <P>
263
+ @param ifIndex
264
+ If non-zero, specifies the interface on which to register the service
265
+ (the index for a given interface is determined via the if_nametoindex()
266
+ family of calls.) Most applications will pass 0 to register on all
267
+ available interfaces. Pass -1 to register a service only on the local
268
+ machine (service will not be visible to remote hosts).
269
+ <P>
270
+ @param serviceName
271
+ If non-null, specifies the service name to be registered.
272
+ Applications need not specify a name, in which case the
273
+ computer name is used (this name is communicated to the client via
274
+ the serviceRegistered() callback).
275
+ <P>
276
+ @param regType
277
+ The registration type being registered followed by the protocol, separated by a
278
+ dot (e.g. "_ftp._tcp"). The transport protocol must be "_tcp" or "_udp".
279
+ <P>
280
+ @param domain
281
+ If non-null, specifies the domain on which to advertise the service.
282
+ Most applications will not specify a domain, instead automatically
283
+ registering in the default domain(s).
284
+ <P>
285
+ @param host
286
+ If non-null, specifies the SRV target host name. Most applications
287
+ will not specify a host, instead automatically using the machine's
288
+ default host name(s). Note that specifying a non-null host does NOT
289
+ create an address record for that host - the application is responsible
290
+ for ensuring that the appropriate address record exists, or creating it
291
+ via {@link DNSSDRegistration#addRecord}.
292
+ <P>
293
+ @param port
294
+ The port on which the service accepts connections. Pass 0 for a
295
+ "placeholder" service (i.e. a service that will not be discovered by
296
+ browsing, but will cause a name conflict if another client tries to
297
+ register that same name.) Most clients will not use placeholder services.
298
+ <P>
299
+ @param txtRecord
300
+ The txt record rdata. May be null. Note that a non-null txtRecord
301
+ MUST be a properly formatted DNS TXT record, i.e. &lt;length byte&gt; &lt;data&gt;
302
+ &lt;length byte&gt; &lt;data&gt; ...
303
+ <P>
304
+ @param listener
305
+ This object will get called when the service is registered.
306
+ <P>
307
+ @return A {@link DNSSDRegistration} that controls the active registration.
308
+
309
+ @throws SecurityException If a security manager is present and denies <tt>RuntimePermission("getDNSSDInstance")</tt>.
310
+ @see RuntimePermission
311
+ */
312
+ public DNSSDRegistration register(int flags, int ifIndex, String serviceName, String regType, String domain, String host, int port, TXTRecord txtRecord,
313
+ final RegisterListener listener) throws DNSSDException {
314
+ onServiceStarting();
315
+ final DNSSDRegistration[] services = new DNSSDRegistration[1];
316
+ services[0] = new InternalDNSSDRegistration(this, InternalDNSSD.register(flags, ifIndex, serviceName, regType, domain, host, port, txtRecord,
317
+ new InternalRegisterListener() {
318
+
319
+ @Override
320
+ public void serviceRegistered(DNSSDRegistration registration, final int flags, final byte[] serviceName, byte[] regType, final byte[] domain) {
321
+ final String serviceNameStr = new String(serviceName, UTF_8);
322
+ final String regTypeStr = new String(regType, UTF_8);
323
+ final String domainStr = new String(domain, UTF_8);
324
+ handler.post(() -> listener.serviceRegistered(services[0], flags, serviceNameStr, regTypeStr, domainStr));
325
+ }
326
+
327
+ @Override
328
+ public void operationFailed(DNSSDService service, final int errorCode) {
329
+ handler.post(() -> listener.operationFailed(services[0], errorCode));
330
+ }
331
+ }));
332
+ return services[0];
333
+ }
334
+
335
+ /** Register a service, to be discovered via browse() and resolve() calls. Use default flags, ifIndex, domain, host and txtRecord.<P>
336
+ @param serviceName
337
+ If non-null, specifies the service name to be registered.
338
+ Applications need not specify a name, in which case the
339
+ computer name is used (this name is communicated to the client via
340
+ the serviceRegistered() callback).
341
+ <P>
342
+ @param regType
343
+ The registration type being registered followed by the protocol, separated by a
344
+ dot (e.g. "_ftp._tcp"). The transport protocol must be "_tcp" or "_udp".
345
+ <P>
346
+ @param port
347
+ The port on which the service accepts connections. Pass 0 for a
348
+ "placeholder" service (i.e. a service that will not be discovered by
349
+ browsing, but will cause a name conflict if another client tries to
350
+ register that same name.) Most clients will not use placeholder services.
351
+ <P>
352
+ @param listener
353
+ This object will get called when the service is registered.
354
+ <P>
355
+ @return A {@link DNSSDRegistration} that controls the active registration.
356
+
357
+ @throws SecurityException If a security manager is present and denies <tt>RuntimePermission("getDNSSDInstance")</tt>.
358
+ @see RuntimePermission
359
+ */
360
+ public DNSSDService register(String serviceName, String regType, int port, RegisterListener listener) throws DNSSDException {
361
+ return register(0, 0, serviceName, regType, null, null, port, null, listener);
362
+ }
363
+
364
+ /** Create a {@link DNSSDRecordRegistrar} allowing efficient registration of
365
+ multiple individual records.<P>
366
+ <P>
367
+ @return A {@link DNSSDRecordRegistrar} that can be used to register records.
368
+
369
+ @throws SecurityException If a security manager is present and denies <tt>RuntimePermission("getDNSSDInstance")</tt>.
370
+ @see RuntimePermission
371
+ */
372
+ public DNSSDRecordRegistrar createRecordRegistrar(RegisterRecordListener listener) throws DNSSDException {
373
+ onServiceStarting();
374
+ return new InternalDNSSDRecordRegistrar(this, InternalDNSSD.createRecordRegistrar(listener));
375
+ }
376
+
377
+ /** Query for an arbitrary DNS record.<P>
378
+ @param flags
379
+ Possible values are: MORE_COMING.
380
+ <P>
381
+ @param ifIndex
382
+ If non-zero, specifies the interface on which to issue the query
383
+ (the index for a given interface is determined via the if_nametoindex()
384
+ family of calls.) Passing 0 causes the name to be queried for on all
385
+ interfaces. Passing -1 causes the name to be queried for only on the
386
+ local host.
387
+ <P>
388
+ @param serviceName
389
+ The full domain name of the resource record to be queried for.
390
+ <P>
391
+ @param rrtype
392
+ The numerical type of the resource record to be queried for (e.g. PTR, SRV, etc)
393
+ as defined in nameser.h.
394
+ <P>
395
+ @param rrclass
396
+ The class of the resource record, as defined in nameser.h
397
+ (usually 1 for the Internet class).
398
+ <P>
399
+ @param listener
400
+ This object will get called when the query completes.
401
+ <P>
402
+ @return A {@link DNSSDService} that controls the active query.
403
+
404
+ @throws SecurityException If a security manager is present and denies <tt>RuntimePermission("getDNSSDInstance")</tt>.
405
+ @see RuntimePermission
406
+ */
407
+ public DNSSDService queryRecord(int flags, int ifIndex, final String serviceName, int rrtype, int rrclass, final QueryListener listener) throws DNSSDException {
408
+ return this.queryRecord(flags, ifIndex, serviceName, rrtype, rrclass, false, listener);
409
+ }
410
+
411
+ /** Query for an arbitrary DNS record.<P>
412
+ @param flags
413
+ Possible values are: MORE_COMING.
414
+ <P>
415
+ @param ifIndex
416
+ If non-zero, specifies the interface on which to issue the query
417
+ (the index for a given interface is determined via the if_nametoindex()
418
+ family of calls.) Passing 0 causes the name to be queried for on all
419
+ interfaces. Passing -1 causes the name to be queried for only on the
420
+ local host.
421
+ <P>
422
+ @param serviceName
423
+ The full domain name of the resource record to be queried for.
424
+ <P>
425
+ @param rrtype
426
+ The numerical type of the resource record to be queried for (e.g. PTR, SRV, etc)
427
+ as defined in nameser.h.
428
+ <P>
429
+ @param rrclass
430
+ The class of the resource record, as defined in nameser.h
431
+ (usually 1 for the Internet class).
432
+ <P>
433
+ @param autoStop
434
+ Stop querying after the first response or timeout
435
+ <P>
436
+ @param listener
437
+ This object will get called when the query completes.
438
+ <P>
439
+ @return A {@link DNSSDService} that controls the active query.
440
+
441
+ @throws SecurityException If a security manager is present and denies <tt>RuntimePermission("getDNSSDInstance")</tt>.
442
+ @see RuntimePermission
443
+ */
444
+ public DNSSDService queryRecord(int flags, int ifIndex, final String serviceName, int rrtype, int rrclass, boolean autoStop, final QueryListener listener) throws DNSSDException {
445
+ onServiceStarting();
446
+ final DNSSDService[] services = new DNSSDService[1];
447
+
448
+ final Runnable timeoutRunnable = () -> services[0].stop();
449
+
450
+ services[0] = new InternalDNSSDService(this, InternalDNSSD.queryRecord(flags, ifIndex, serviceName, rrtype, rrclass, new InternalQueryListener() {
451
+ @Override
452
+ public void queryAnswered(DNSSDService query, final int flags, final int ifIndex, byte[] fullName, final int rrtype, final int rrclass, byte[] rdata, final int ttl) {
453
+ final String fullNameStr = new String(fullName, UTF_8);
454
+ handler.removeCallbacks(timeoutRunnable);
455
+ handler.post(() -> {
456
+ listener.queryAnswered(services[0], flags, ifIndex, fullNameStr, rrtype, rrclass, rdata, ttl);
457
+ if (autoStop) {
458
+ services[0].stop();
459
+ }
460
+ });
461
+ }
462
+
463
+ @Override
464
+ public void operationFailed(DNSSDService service, final int errorCode) {
465
+ handler.removeCallbacks(timeoutRunnable);
466
+ handler.post(() -> {
467
+ listener.operationFailed(services[0], errorCode);
468
+ services[0].stop();
469
+ });
470
+ }
471
+ }));
472
+
473
+ if (autoStop) {
474
+ handler.postDelayed(timeoutRunnable, serviceTimeout);
475
+ }
476
+
477
+ return services[0];
478
+ }
479
+
480
+ /** Asynchronously enumerate domains available for browsing and registration.<P>
481
+
482
+ Currently, the only domain returned is "local.", but other domains will be returned in future.<P>
483
+
484
+ The enumeration MUST be cancelled by calling {@link DNSSDService#stop} when no more domains
485
+ are to be found.<P>
486
+ @param flags
487
+ Possible values are: BROWSE_DOMAINS, REGISTRATION_DOMAINS.
488
+ <P>
489
+ @param ifIndex
490
+ If non-zero, specifies the interface on which to look for domains.
491
+ (the index for a given interface is determined via the if_nametoindex()
492
+ family of calls.) Most applications will pass 0 to enumerate domains on
493
+ all interfaces.
494
+ <P>
495
+ @param listener
496
+ This object will get called when domains are found.
497
+ <P>
498
+ @return A {@link DNSSDService} that controls the active enumeration.
499
+
500
+ @throws SecurityException If a security manager is present and denies <tt>RuntimePermission("getDNSSDInstance")</tt>.
501
+ @see RuntimePermission
502
+ */
503
+ public DNSSDService enumerateDomains(int flags, int ifIndex, final DomainListener listener) throws DNSSDException {
504
+ onServiceStarting();
505
+ final DNSSDService[] services = new DNSSDService[1];
506
+ services[0] = new InternalDNSSDService(this, InternalDNSSD.enumerateDomains(flags, ifIndex, new InternalDomainListener() {
507
+ @Override
508
+ public void domainFound(DNSSDService domainEnum, final int flags, final int ifIndex, byte[] domain) {
509
+ final String domainStr = new String(domain, UTF_8);
510
+ handler.post(() -> listener.domainFound(services[0], flags, ifIndex, domainStr));
511
+ }
512
+
513
+ @Override
514
+ public void domainLost(DNSSDService domainEnum, final int flags, final int ifIndex, byte[] domain) {
515
+ final String domainStr = new String(domain, UTF_8);
516
+ handler.post(() -> listener.domainLost(services[0], flags, ifIndex, domainStr));
517
+ }
518
+
519
+ @Override
520
+ public void operationFailed(final DNSSDService service, final int errorCode) {
521
+ handler.post(() -> listener.operationFailed(services[0], errorCode));
522
+ }
523
+ }));
524
+ return services[0];
525
+ }
526
+
527
+ /** Concatenate a three-part domain name (as provided to the listeners) into a
528
+ properly-escaped full domain name. Note that strings passed to listeners are
529
+ ALREADY ESCAPED where necessary.<P>
530
+ @param serviceName
531
+ The service name - any dots or slashes must NOT be escaped.
532
+ May be null (to construct a PTR record name, e.g. "_ftp._tcp.apple.com").
533
+ <P>
534
+ @param regType
535
+ The registration type followed by the protocol, separated by a dot (e.g. "_ftp._tcp").
536
+ <P>
537
+ @param domain
538
+ The domain name, e.g. "apple.com". Any literal dots or backslashes must be escaped.
539
+ <P>
540
+ @return The full domain name.
541
+
542
+ @throws SecurityException If a security manager is present and denies <tt>RuntimePermission("getDNSSDInstance")</tt>.
543
+ @see RuntimePermission
544
+ */
545
+ public String constructFullName(String serviceName, String regType, String domain) throws DNSSDException {
546
+ onServiceStarting();
547
+ String result = InternalDNSSD.constructFullName(serviceName, regType, domain);
548
+ onServiceStopped();
549
+ return result;
550
+ }
551
+
552
+ /** Instruct the daemon to verify the validity of a resource record that appears to
553
+ be out of date. (e.g. because tcp connection to a service's target failed.) <P>
554
+
555
+ Causes the record to be flushed from the daemon's cache (as well as all other
556
+ daemons' caches on the network) if the record is determined to be invalid.<P>
557
+ @param flags
558
+ Currently unused, reserved for future use.
559
+ <P>
560
+ @param ifIndex
561
+ If non-zero, specifies the interface on which to reconfirm the record
562
+ (the index for a given interface is determined via the if_nametoindex()
563
+ family of calls.) Passing 0 causes the name to be reconfirmed on all
564
+ interfaces. Passing -1 causes the name to be reconfirmed only on the
565
+ local host.
566
+ <P>
567
+ @param fullName
568
+ The resource record's full domain name.
569
+ <P>
570
+ @param rrtype
571
+ The resource record's type (e.g. PTR, SRV, etc) as defined in nameser.h.
572
+ <P>
573
+ @param rrclass
574
+ The class of the resource record, as defined in nameser.h (usually 1).
575
+ <P>
576
+ @param rdata
577
+ The raw rdata of the resource record.
578
+
579
+ @return Error DNSServiceErrorType
580
+
581
+ @throws SecurityException If a security manager is present and denies <tt>RuntimePermission("getDNSSDInstance")</tt>.
582
+ @see RuntimePermission
583
+ */
584
+ public int reconfirmRecord(int flags, int ifIndex, String fullName, int rrtype, int rrclass, byte[] rdata) {
585
+ onServiceStarting();
586
+ int error = InternalDNSSD.reconfirmRecord(flags, ifIndex, fullName, rrtype, rrclass, rdata);
587
+ onServiceStopped();
588
+ return error;
589
+ }
590
+
591
+ @Override
592
+ public void onServiceStarting() {
593
+ if (multicastLock == null) {
594
+ synchronized (this) { // Double-check lock
595
+ if (multicastLock == null) {
596
+ WifiManager wifi = (WifiManager) context.getApplicationContext()
597
+ .getSystemService(Context.WIFI_SERVICE);
598
+ if (wifi == null) {
599
+ Log.wtf("DNSSD", "Can't get WIFI Service");
600
+ return;
601
+ }
602
+ multicastLock = wifi.createMulticastLock(MULTICAST_LOCK_NAME);
603
+ multicastLock.setReferenceCounted(true);
604
+ }
605
+ }
606
+ }
607
+ multicastLock.acquire();
608
+ }
609
+
610
+ @Override
611
+ public void onServiceStopped() {
612
+ if (multicastLock == null) {
613
+ Log.wtf("DNSSD", "Multicast lock doesn't exist");
614
+ return;
615
+ }
616
+ multicastLock.release();
617
+ }
618
+
619
+ /** Return the index of a named interface.<P>
620
+ @param ifName
621
+ A valid interface name. An example is java.net.NetworkInterface.getName().
622
+ <P>
623
+ @return The interface index.
624
+
625
+ @throws SecurityException If a security manager is present and denies <tt>RuntimePermission("getDNSSDInstance")</tt>.
626
+ @see RuntimePermission
627
+ */
628
+ public static int getIfIndexForName(String ifName) {
629
+ return InternalDNSSD.getIfIndexForName(ifName);
630
+ }
631
+
632
+ public static Map<String, String> parseTXTRecords(byte[] data) {
633
+ return parseTXTRecords(new TXTRecord(data));
634
+ }
635
+
636
+ static Map<String, String> parseTXTRecords(TXTRecord record) {
637
+ Map<String, String> result = new HashMap<>(record.size());
638
+ for (int i = 0; i < record.size(); i++) {
639
+ try {
640
+ if (!TextUtils.isEmpty(record.getKey(i))) {
641
+ result.put(record.getKey(i), record.getValueAsString(i));
642
+ }
643
+ } catch (Exception e) {
644
+ Log.w("RxResolveListener", "Parsing error of " + i + " TXT record", e);
645
+ }
646
+ }
647
+ return result;
648
+ }
649
+
650
+ }