         }
         let lastDataWritten = max(self.lastDataNonKeepAliveWritten, self.lastDataKeepAliveWritten) // the most recent
         return "\n[\(displayName) is \(state) as \(role) on \(lastInterfaceName ?? "nil") with \(customData.count) customData keys. C:\(connectCount) D:\(disconnectCount) cFail:\(connectAttemptFailCount) cFailAuth:\(connectAttemptFailAuthRejectCount), Data In#:\(dataRecvCount) LastRecv: \(lastDataRead), LastWrite: \(lastDataWritten), Out#:\(dataSendCount). Socket: \(socketDesc), services#: \(services.count) (\(resolvedServices().count) resolved)]"
+    }
+    @objc open var isConnectedViaWifi: Bool {
+        guard let interface = self.lastInterfaceName else {
+            return false
+        }
+        return interface == BluepeerObject.iOS_wifi_interface
     }
 
     // fileprivates

    }
    
    func isWifiInterface() -> Bool {
        return self.interfaceName == iOS_wifi_interface
    }
    
    func socketAsData() -> Data {

                service.beginResolve(UInt32(kDNSServiceInterfaceIndexAny), includeP2P: true, addressLookupProtocols: prots)
                break
            case .notWifi:
                service.beginResolve(BluepeerObject.kDNSServiceInterfaceIndexP2PSwift, includeP2P: true, addressLookupProtocols: prots)
                break
            case .infrastructureModeWifiOnly:
                service.beginResolve(UInt32(kDNSServiceInterfaceIndexAny), includeP2P: false, addressLookupProtocols: prots)
