#ifndef _BLE_H_
#define _BLE_H_
+#if ENABLE_BLE_TRIGGERED_BONJOUR
+
#include "dns_sd.h"
-#include "dns_sd_private.h"
+#include "dns_sd_internal.h"
+
+typedef unsigned long serviceHash_t;
-typedef unsigned int serviceHash_t;
+bool shouldUseBLE(mDNSInterfaceID interfaceID, DNS_TypeValues rrtype, domainname *serviceType, domainname *domain);
-void start_BLE_browse(DNSQuestion * q, const domainname *const typeDomain, DNS_TypeValues type, DNSServiceFlags flags,
+void start_BLE_browse(mDNSInterfaceID InterfaceID, const domainname *const domain, DNS_TypeValues type, DNSServiceFlags flags,
mDNSu8 *key, size_t keySize);
-bool stop_BLE_browse(const domainname *const typeDomain, DNS_TypeValues type, DNSServiceFlags flags);
+bool stop_BLE_browse(mDNSInterfaceID InterfaceID, const domainname *const domain, DNS_TypeValues type, DNSServiceFlags flags);
-void start_BLE_advertise(ServiceRecordSet * serviceRecordSet, const domainname *const domain, DNS_TypeValues type, DNSServiceFlags flags);
-void stop_BLE_advertise(const domainname *const typeDomain, DNS_TypeValues type, DNSServiceFlags flags);
+void start_BLE_advertise(const ResourceRecord *const resourceRecord, const domainname *const domain, DNS_TypeValues type, DNSServiceFlags flags);
+void stop_BLE_advertise(const domainname *const domain, DNS_TypeValues type, DNSServiceFlags flags);
-void responseReceived(serviceHash_t browseHash, serviceHash_t registeredHash, mDNSEthAddr *ptrToMAC);
+void responseReceived(serviceHash_t peerBloomFilter, mDNSEthAddr *ptrToMAC);
void serviceBLE(void);
// C interfaces to Objective-C beacon management code.
-void updateBLEBeaconAndScan(serviceHash_t browseHash, serviceHash_t registeredHash);
+void updateBLEBeacon(serviceHash_t bloomFilter);
void stopBLEBeacon(void);
+void startBLEScan(void);
+void stopBLEScan(void);
+bool currentlyBeaconing(void);
+
+extern bool suppressBeacons;
+extern bool finalBeacon;
extern mDNS mDNSStorage;
extern mDNSBool EnableBLEBasedDiscovery;
+extern mDNSBool DefaultToBLETriggered;
+
+extern mDNSInterfaceID AWDLInterfaceID;
+#define applyToBLE(interface, flags) ((interface == mDNSInterface_BLE) || (((interface == mDNSInterface_Any) || (interface == AWDLInterfaceID)) && (flags & kDNSServiceFlagsAutoTrigger)))
+
+#ifdef UNIT_TEST
+#pragma mark - Unit test declarations
-// TODO: Add the following to a local D2D.h file
-#include <DeviceToDeviceManager/DeviceToDeviceManager.h>
+// Unit test entry points, which are not used in the mDNSResponder runtime code paths.
+void BLE_unitTest(void);
-// Just define as the current max value for now.
-// TODO: Will need to define in DeviceToDeviceManager.framework if we convert this
-// BLE discovery code to a D2D plugin.
-#define D2DBLETransport D2DTransportMax
+#endif // UNIT_TEST
-#define applyToBLE(interface, flags) ((interface == mDNSInterface_BLE) || ((interface == mDNSInterface_Any) && (flags & kDNSServiceFlagsAutoTrigger)))
+#endif // ENABLE_BLE_TRIGGERED_BONJOUR
#endif /* _BLE_H_ */