awdl

1.0.1 • Public • Published

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.

Package Sidebar

Install

npm i awdl

Weekly Downloads

0

Version

1.0.1

License

ISC

Unpacked Size

7.55 kB

Total Files

5

Last publish

Collaborators

  • derhuerst