1.0.1 • Published 4 years ago

awdl v1.0.1

Weekly downloads
2
License
ISC
Repository
github
Last release
4 years ago

awdl

Send data via Apple Wireless Direct Link (AWDL) using JavaScript.

npm version ISC-licensed minimum Node.js version chat with me on Gitter support me on Patreon

From the Open Wireless Link, an awesome project that seeks to reverse-engineer AWDL:

What is Apple Wireless Direct Link (AWDL)?

According to US patent 20180083858A1, AWDL was designed as a successor to the unsuccessful Wi-Fi IBSS a.k.a. ad hoc mode:

The limitations of IBSS mode (and its Wi-Fi infrastructure predecessors) led the Wi-Fi Alliance to define Wi-Fi Direct. Further, due to concerns regarding Wi-Fi Direct, Apple Wireless Direct Link (AWDL) was developed by Apple and eventually adopted by the Wi-Fi Alliance as the basis for Neighbor Awareness Networking (NAN).

Which services use AWDL?

We compiled a non-exhaustive list with applications which use ... AWDL ....

  • AirDrop
  • AirPlay
  • Auto Unlock
  • Universal Clipboard

How does AWDL work?

In technical terms, we found that AWDL works essentially works as follow:

In short, each AWDL node announces a sequence of Availability Windows (AWs) indicating its readiness to communicate with other AWDL nodes. An elected master node synchronizes these sequences. Outside the AWs, nodes can tune their Wi-Fi radio to a different channel to communicate with an access point, or could turn it off to save energy.

Installation

npm install awdl

Usage

This is a very low-level example, a more practical one will be added soon!

const {isSupported, listenOnAWDL} = require('awdl')
const {decode} = require('dns-packet')

if (isSupported()) {
	// mDNS + DNS-SD over AWDL a.k.a. "iPhone magically find Mac with AirDrop"
	const awdl = listenOnAWDL(5353, {udp: true, recvAnyif: true})

	awdl.on('error', (err) => {
		console.error(err)
		process.exit(1)
	})

	awdl.on('data', (msg) => {
		const {type, questions, answers} = decode(msg)
		console.log(type, questions, answers)
	})
}

API

listenOnAWDL(port, opt = {})

Returns a duplex stream.

opt may have the following fields:

Contributing

If you have a question or need support using awdl, please double-check your code and setup first. If you think you have found a bug or want to propose a feature, use the issues page.