react-native-zeroconf 0.17.4 → 1.0.0-rc.2

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 (115) hide show
  1. package/NOTICE +2 -6
  2. package/Package.swift +19 -3
  3. package/README.md +1 -3
  4. package/android/CMakeLists.txt +64 -0
  5. package/android/build.gradle +1 -17
  6. package/android/generated/java/com/balthazargronon/RCTZeroconf/NativeZeroconfSpec.java +96 -0
  7. package/android/generated/jni/CMakeLists.txt +28 -0
  8. package/android/generated/jni/RNZeroconfSpec-generated.cpp +77 -0
  9. package/android/generated/jni/RNZeroconfSpec.h +31 -0
  10. package/android/generated/jni/react/renderer/components/RNZeroconfSpec/RNZeroconfSpecJSI.h +798 -0
  11. package/android/src/main/java/com/balthazargronon/RCTZeroconf/{ZeroconfModule.java → NsdHost.java} +97 -140
  12. package/android/src/main/java/com/balthazargronon/RCTZeroconf/NsdPayload.java +87 -0
  13. package/android/src/main/java/com/balthazargronon/RCTZeroconf/NsdPromise.java +40 -0
  14. package/android/src/main/java/com/balthazargronon/RCTZeroconf/Zeroconf.java +4 -6
  15. package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroconfNativeSupport.java +60 -0
  16. package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroconfOptions.java +15 -26
  17. package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroconfReactPackage.java +5 -15
  18. package/android/src/main/java/com/balthazargronon/RCTZeroconf/nsd/NsdServiceImpl.java +90 -96
  19. package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_clientshim.c +31 -6
  20. package/cpp/Backend.cpp +16 -0
  21. package/cpp/Backend.h +116 -0
  22. package/cpp/ZeroconfModule.cpp +280 -0
  23. package/cpp/ZeroconfModule.h +144 -0
  24. package/cpp/android/NsdBackend.cpp +462 -0
  25. package/cpp/android/NsdBackend.h +61 -0
  26. package/cpp/android/ZeroconfAndroidModule.cpp +49 -0
  27. package/cpp/android/ZeroconfAndroidModule.h +15 -0
  28. package/cpp/apple/DispatchExecutor.cpp +66 -0
  29. package/cpp/apple/DispatchExecutor.h +37 -0
  30. package/cpp/apple/LocalNetworkAccess.h +19 -0
  31. package/cpp/apple/LocalNetworkAccess.mm +87 -0
  32. package/cpp/dnssd/DnssdBackend.cpp +976 -0
  33. package/cpp/dnssd/DnssdBackend.h +114 -0
  34. package/cpp/dnssd/Executor.h +28 -0
  35. package/cpp/embedded/EmbeddedExecutor.cpp +124 -0
  36. package/cpp/embedded/EmbeddedExecutor.h +57 -0
  37. package/ios/ZeroconfOnLoad.mm +34 -0
  38. package/ios/generated/ReactCodegen/RNZeroconfSpec/RNZeroconfSpec-generated.mm +140 -0
  39. package/ios/generated/ReactCodegen/RNZeroconfSpec/RNZeroconfSpec.h +189 -0
  40. package/ios/generated/ReactCodegen/RNZeroconfSpecJSI.h +798 -0
  41. package/lib/module/NativeZeroconf.js +15 -0
  42. package/lib/module/NativeZeroconf.js.map +1 -0
  43. package/lib/module/bridge.js +124 -0
  44. package/lib/module/bridge.js.map +1 -0
  45. package/{dist → lib/module}/index.js +149 -149
  46. package/lib/module/index.js.map +1 -0
  47. package/lib/module/package.json +1 -0
  48. package/lib/module/types.js +24 -0
  49. package/lib/module/types.js.map +1 -0
  50. package/lib/typescript/package.json +1 -0
  51. package/lib/typescript/src/NativeZeroconf.d.ts +75 -0
  52. package/lib/typescript/src/NativeZeroconf.d.ts.map +1 -0
  53. package/lib/typescript/src/bridge.d.ts +22 -0
  54. package/lib/typescript/src/bridge.d.ts.map +1 -0
  55. package/lib/typescript/src/index.d.ts +111 -0
  56. package/lib/typescript/src/index.d.ts.map +1 -0
  57. package/lib/typescript/src/types.d.ts +175 -0
  58. package/lib/typescript/src/types.d.ts.map +1 -0
  59. package/package.json +64 -29
  60. package/react-native-zeroconf.podspec +2 -1
  61. package/react-native.config.js +17 -0
  62. package/src/NativeZeroconf.ts +120 -0
  63. package/src/bridge.ts +153 -0
  64. package/src/index.ts +607 -0
  65. package/{index.d.ts → src/types.ts} +5 -99
  66. package/windows/RNZeroconf/RNZeroconf.vcxproj +17 -2
  67. package/windows/RNZeroconf/RNZeroconf.vcxproj.filters +0 -6
  68. package/windows/RNZeroconf/ReactPackageProvider.cpp +23 -20
  69. package/windows/RNZeroconf/WindowsBackend.cpp +156 -0
  70. package/windows/RNZeroconf/WindowsBackend.h +13 -0
  71. package/windows/RNZeroconf/ZeroconfCore.cpp +2 -2
  72. package/windows/RNZeroconf/ZeroconfCore.h +2 -2
  73. package/windows/RNZeroconf/ZeroconfWindowsModule.cpp +22 -0
  74. package/windows/RNZeroconf/ZeroconfWindowsModule.h +14 -0
  75. package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroConfImplFactory.java +0 -56
  76. package/android/src/main/java/com/balthazargronon/RCTZeroconf/dnssd/DnssdImpl.java +0 -654
  77. package/android/src/main/java/com/github/druk/dnssd/BaseListener.java +0 -33
  78. package/android/src/main/java/com/github/druk/dnssd/BrowseListener.java +0 -67
  79. package/android/src/main/java/com/github/druk/dnssd/DNSRecord.java +0 -47
  80. package/android/src/main/java/com/github/druk/dnssd/DNSSD.java +0 -681
  81. package/android/src/main/java/com/github/druk/dnssd/DNSSDEmbedded.java +0 -198
  82. package/android/src/main/java/com/github/druk/dnssd/DNSSDException.java +0 -66
  83. package/android/src/main/java/com/github/druk/dnssd/DNSSDRecordRegistrar.java +0 -55
  84. package/android/src/main/java/com/github/druk/dnssd/DNSSDRegistration.java +0 -54
  85. package/android/src/main/java/com/github/druk/dnssd/DNSSDService.java +0 -35
  86. package/android/src/main/java/com/github/druk/dnssd/DomainListener.java +0 -57
  87. package/android/src/main/java/com/github/druk/dnssd/InternalBrowseListener.java +0 -76
  88. package/android/src/main/java/com/github/druk/dnssd/InternalDNSSD.java +0 -870
  89. package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDRecordRegistrar.java +0 -30
  90. package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDRegistration.java +0 -34
  91. package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDService.java +0 -29
  92. package/android/src/main/java/com/github/druk/dnssd/InternalDomainListener.java +0 -62
  93. package/android/src/main/java/com/github/druk/dnssd/InternalQueryListener.java +0 -61
  94. package/android/src/main/java/com/github/druk/dnssd/InternalRegisterListener.java +0 -51
  95. package/android/src/main/java/com/github/druk/dnssd/InternalResolveListener.java +0 -58
  96. package/android/src/main/java/com/github/druk/dnssd/NSClass.java +0 -16
  97. package/android/src/main/java/com/github/druk/dnssd/NSType.java +0 -58
  98. package/android/src/main/java/com/github/druk/dnssd/QueryListener.java +0 -54
  99. package/android/src/main/java/com/github/druk/dnssd/RegisterListener.java +0 -46
  100. package/android/src/main/java/com/github/druk/dnssd/RegisterRecordListener.java +0 -35
  101. package/android/src/main/java/com/github/druk/dnssd/ResolveListener.java +0 -55
  102. package/android/src/main/java/com/github/druk/dnssd/TXTRecord.java +0 -293
  103. package/android/src/main/jni/Android.mk +0 -73
  104. package/android/src/main/jni/Application.mk +0 -3
  105. package/android/src/main/jni/DNSSD.java.h +0 -290
  106. package/android/src/main/jni/JNISupport.c +0 -1221
  107. package/ios/RNZeroconf/RNNetServiceSerializer.h +0 -31
  108. package/ios/RNZeroconf/RNNetServiceSerializer.m +0 -84
  109. package/ios/RNZeroconf/RNZeroconf.h +0 -17
  110. package/ios/RNZeroconf/RNZeroconf.m +0 -1025
  111. package/ios/RNZeroconf.xcodeproj/project.pbxproj +0 -261
  112. package/ios/RNZeroconf.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  113. package/src/index.js +0 -563
  114. package/windows/RNZeroconf/RNZeroconf.cpp +0 -228
  115. package/windows/RNZeroconf/RNZeroconf.h +0 -70
@@ -0,0 +1,19 @@
1
+ // The Local Network permission on Apple platforms
2
+ #pragma once
3
+
4
+ #include "../Backend.h"
5
+
6
+ #include <functional>
7
+ #include <string>
8
+
9
+ namespace rnzeroconf {
10
+
11
+ // Settles with 'granted', 'denied' or 'unknown', on the main queue. type is a service type from
12
+ // NSBonjourServices ("_http._tcp"), the first one listed when empty. Can show the permission prompt
13
+ void CheckLocalNetworkAccess(
14
+ const std::string &type,
15
+ double timeout,
16
+ std::function<void(const std::string &status)> resolve,
17
+ std::function<void(const Error &error)> reject);
18
+
19
+ } // namespace rnzeroconf
@@ -0,0 +1,87 @@
1
+ // The Local Network check of Apple platforms, with Network.framework. No React Native dependency:
2
+ // ios/ZeroconfOnLoad.mm hands it to the module, test/apple/local-network-access.mm tests it.
3
+ #import "LocalNetworkAccess.h"
4
+
5
+ #import <Foundation/Foundation.h>
6
+ #import <Network/Network.h>
7
+ #include <dns_sd.h>
8
+
9
+ namespace rnzeroconf {
10
+
11
+ /**
12
+ * Resolves 'granted', 'denied' or 'unknown'. There is no API to read the Local Network permission,
13
+ * so this advertises a temporary Bonjour service and browses for it: seeing it means access is granted,
14
+ * a browser waiting with kDNSServiceErr_PolicyDenied until the timeout means it is denied.
15
+ * The type must be listed in NSBonjourServices, defaults to the first one. It can show the permission prompt.
16
+ */
17
+ void CheckLocalNetworkAccess(
18
+ const std::string &type,
19
+ double timeout,
20
+ std::function<void(const std::string &status)> resolve,
21
+ std::function<void(const Error &error)> reject) {
22
+ NSString *serviceType = type.empty() ? nil : [NSString stringWithUTF8String:type.c_str()];
23
+ if (serviceType.length == 0) {
24
+ NSArray *declared = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSBonjourServices"];
25
+ serviceType = [declared isKindOfClass:[NSArray class]] ? declared.firstObject : nil;
26
+ }
27
+ if (serviceType.length == 0) {
28
+ reject(LibraryError("MISSING_BONJOUR_SERVICES", "No service type to check with, add one to NSBonjourServices in Info.plist"));
29
+ return;
30
+ }
31
+ // "_http._tcp." -> "_http._tcp"
32
+ if ([serviceType hasSuffix:@"."]) {
33
+ serviceType = [serviceType substringToIndex:serviceType.length - 1];
34
+ }
35
+
36
+ NSString *name = [NSString stringWithFormat:@"rnzeroconf-%@", [[NSUUID UUID].UUIDString substringToIndex:8]];
37
+ dispatch_queue_t queue = dispatch_get_main_queue();
38
+
39
+ nw_parameters_t parameters = nw_parameters_create_secure_tcp(NW_PARAMETERS_DISABLE_PROTOCOL, NW_PARAMETERS_DEFAULT_CONFIGURATION);
40
+ nw_listener_t listener = nw_listener_create(parameters);
41
+ nw_listener_set_advertise_descriptor(listener, nw_advertise_descriptor_create_bonjour_service(name.UTF8String, serviceType.UTF8String, "local."));
42
+ nw_listener_set_queue(listener, queue);
43
+ nw_listener_set_new_connection_handler(listener, ^(nw_connection_t connection) {
44
+ nw_connection_cancel(connection);
45
+ });
46
+
47
+ nw_browse_descriptor_t descriptor = nw_browse_descriptor_create_bonjour_service(serviceType.UTF8String, "local.");
48
+ nw_browser_t browser = nw_browser_create(descriptor, nw_parameters_create_secure_tcp(NW_PARAMETERS_DISABLE_PROTOCOL, NW_PARAMETERS_DEFAULT_CONFIGURATION));
49
+ nw_browser_set_queue(browser, queue);
50
+
51
+ __block BOOL finished = NO;
52
+ __block BOOL policyDenied = NO;
53
+ void (^finish)(NSString *) = ^(NSString *result) {
54
+ if (finished) {
55
+ return;
56
+ }
57
+ finished = YES;
58
+ nw_browser_cancel(browser);
59
+ nw_listener_cancel(listener);
60
+ resolve(result.UTF8String);
61
+ };
62
+
63
+ nw_browser_set_browse_results_changed_handler(browser, ^(nw_browse_result_t, nw_browse_result_t newResult, bool) {
64
+ nw_endpoint_t endpoint = newResult ? nw_browse_result_copy_endpoint(newResult) : nil;
65
+ const char *found = endpoint ? nw_endpoint_get_bonjour_service_name(endpoint) : NULL;
66
+ if (found && strcmp(found, name.UTF8String) == 0) {
67
+ finish(@"granted");
68
+ }
69
+ });
70
+ nw_browser_set_state_changed_handler(browser, ^(nw_browser_state_t state, nw_error_t error) {
71
+ if (error && nw_error_get_error_domain(error) == nw_error_domain_dns) {
72
+ // Stays waiting while the prompt is shown, only conclude on timeout
73
+ policyDenied = nw_error_get_error_code(error) == kDNSServiceErr_PolicyDenied;
74
+ } else if (state == nw_browser_state_ready) {
75
+ policyDenied = NO;
76
+ }
77
+ });
78
+
79
+ nw_listener_start(listener);
80
+ nw_browser_start(browser);
81
+
82
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)((timeout > 0 ? timeout : 5.0) * NSEC_PER_SEC)), queue, ^{
83
+ finish(policyDenied ? @"denied" : @"unknown");
84
+ });
85
+ }
86
+
87
+ } // namespace rnzeroconf