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.
- package/NOTICE +2 -6
- package/Package.swift +19 -3
- package/README.md +1 -3
- package/android/CMakeLists.txt +64 -0
- package/android/build.gradle +1 -17
- package/android/generated/java/com/balthazargronon/RCTZeroconf/NativeZeroconfSpec.java +96 -0
- package/android/generated/jni/CMakeLists.txt +28 -0
- package/android/generated/jni/RNZeroconfSpec-generated.cpp +77 -0
- package/android/generated/jni/RNZeroconfSpec.h +31 -0
- package/android/generated/jni/react/renderer/components/RNZeroconfSpec/RNZeroconfSpecJSI.h +798 -0
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/{ZeroconfModule.java → NsdHost.java} +97 -140
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/NsdPayload.java +87 -0
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/NsdPromise.java +40 -0
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/Zeroconf.java +4 -6
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroconfNativeSupport.java +60 -0
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroconfOptions.java +15 -26
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroconfReactPackage.java +5 -15
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/nsd/NsdServiceImpl.java +90 -96
- package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_clientshim.c +31 -6
- package/cpp/Backend.cpp +16 -0
- package/cpp/Backend.h +116 -0
- package/cpp/ZeroconfModule.cpp +280 -0
- package/cpp/ZeroconfModule.h +144 -0
- package/cpp/android/NsdBackend.cpp +462 -0
- package/cpp/android/NsdBackend.h +61 -0
- package/cpp/android/ZeroconfAndroidModule.cpp +49 -0
- package/cpp/android/ZeroconfAndroidModule.h +15 -0
- package/cpp/apple/DispatchExecutor.cpp +66 -0
- package/cpp/apple/DispatchExecutor.h +37 -0
- package/cpp/apple/LocalNetworkAccess.h +19 -0
- package/cpp/apple/LocalNetworkAccess.mm +87 -0
- package/cpp/dnssd/DnssdBackend.cpp +976 -0
- package/cpp/dnssd/DnssdBackend.h +114 -0
- package/cpp/dnssd/Executor.h +28 -0
- package/cpp/embedded/EmbeddedExecutor.cpp +124 -0
- package/cpp/embedded/EmbeddedExecutor.h +57 -0
- package/ios/ZeroconfOnLoad.mm +34 -0
- package/ios/generated/ReactCodegen/RNZeroconfSpec/RNZeroconfSpec-generated.mm +140 -0
- package/ios/generated/ReactCodegen/RNZeroconfSpec/RNZeroconfSpec.h +189 -0
- package/ios/generated/ReactCodegen/RNZeroconfSpecJSI.h +798 -0
- package/lib/module/NativeZeroconf.js +15 -0
- package/lib/module/NativeZeroconf.js.map +1 -0
- package/lib/module/bridge.js +124 -0
- package/lib/module/bridge.js.map +1 -0
- package/{dist → lib/module}/index.js +149 -149
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types.js +24 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/NativeZeroconf.d.ts +75 -0
- package/lib/typescript/src/NativeZeroconf.d.ts.map +1 -0
- package/lib/typescript/src/bridge.d.ts +22 -0
- package/lib/typescript/src/bridge.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +111 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +175 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/package.json +64 -29
- package/react-native-zeroconf.podspec +2 -1
- package/react-native.config.js +17 -0
- package/src/NativeZeroconf.ts +120 -0
- package/src/bridge.ts +153 -0
- package/src/index.ts +607 -0
- package/{index.d.ts → src/types.ts} +5 -99
- package/windows/RNZeroconf/RNZeroconf.vcxproj +17 -2
- package/windows/RNZeroconf/RNZeroconf.vcxproj.filters +0 -6
- package/windows/RNZeroconf/ReactPackageProvider.cpp +23 -20
- package/windows/RNZeroconf/WindowsBackend.cpp +156 -0
- package/windows/RNZeroconf/WindowsBackend.h +13 -0
- package/windows/RNZeroconf/ZeroconfCore.cpp +2 -2
- package/windows/RNZeroconf/ZeroconfCore.h +2 -2
- package/windows/RNZeroconf/ZeroconfWindowsModule.cpp +22 -0
- package/windows/RNZeroconf/ZeroconfWindowsModule.h +14 -0
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroConfImplFactory.java +0 -56
- package/android/src/main/java/com/balthazargronon/RCTZeroconf/dnssd/DnssdImpl.java +0 -654
- package/android/src/main/java/com/github/druk/dnssd/BaseListener.java +0 -33
- package/android/src/main/java/com/github/druk/dnssd/BrowseListener.java +0 -67
- package/android/src/main/java/com/github/druk/dnssd/DNSRecord.java +0 -47
- package/android/src/main/java/com/github/druk/dnssd/DNSSD.java +0 -681
- package/android/src/main/java/com/github/druk/dnssd/DNSSDEmbedded.java +0 -198
- package/android/src/main/java/com/github/druk/dnssd/DNSSDException.java +0 -66
- package/android/src/main/java/com/github/druk/dnssd/DNSSDRecordRegistrar.java +0 -55
- package/android/src/main/java/com/github/druk/dnssd/DNSSDRegistration.java +0 -54
- package/android/src/main/java/com/github/druk/dnssd/DNSSDService.java +0 -35
- package/android/src/main/java/com/github/druk/dnssd/DomainListener.java +0 -57
- package/android/src/main/java/com/github/druk/dnssd/InternalBrowseListener.java +0 -76
- package/android/src/main/java/com/github/druk/dnssd/InternalDNSSD.java +0 -870
- package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDRecordRegistrar.java +0 -30
- package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDRegistration.java +0 -34
- package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDService.java +0 -29
- package/android/src/main/java/com/github/druk/dnssd/InternalDomainListener.java +0 -62
- package/android/src/main/java/com/github/druk/dnssd/InternalQueryListener.java +0 -61
- package/android/src/main/java/com/github/druk/dnssd/InternalRegisterListener.java +0 -51
- package/android/src/main/java/com/github/druk/dnssd/InternalResolveListener.java +0 -58
- package/android/src/main/java/com/github/druk/dnssd/NSClass.java +0 -16
- package/android/src/main/java/com/github/druk/dnssd/NSType.java +0 -58
- package/android/src/main/java/com/github/druk/dnssd/QueryListener.java +0 -54
- package/android/src/main/java/com/github/druk/dnssd/RegisterListener.java +0 -46
- package/android/src/main/java/com/github/druk/dnssd/RegisterRecordListener.java +0 -35
- package/android/src/main/java/com/github/druk/dnssd/ResolveListener.java +0 -55
- package/android/src/main/java/com/github/druk/dnssd/TXTRecord.java +0 -293
- package/android/src/main/jni/Android.mk +0 -73
- package/android/src/main/jni/Application.mk +0 -3
- package/android/src/main/jni/DNSSD.java.h +0 -290
- package/android/src/main/jni/JNISupport.c +0 -1221
- package/ios/RNZeroconf/RNNetServiceSerializer.h +0 -31
- package/ios/RNZeroconf/RNNetServiceSerializer.m +0 -84
- package/ios/RNZeroconf/RNZeroconf.h +0 -17
- package/ios/RNZeroconf/RNZeroconf.m +0 -1025
- package/ios/RNZeroconf.xcodeproj/project.pbxproj +0 -261
- package/ios/RNZeroconf.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/src/index.js +0 -563
- package/windows/RNZeroconf/RNZeroconf.cpp +0 -228
- 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
|