diff --git a/.obsidian/app.json b/.obsidian/app.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/.obsidian/app.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json new file mode 100644 index 0000000..4be7969 --- /dev/null +++ b/.obsidian/appearance.json @@ -0,0 +1,3 @@ +{ + "theme": "obsidian" +} \ No newline at end of file diff --git a/.obsidian/core-plugins.json b/.obsidian/core-plugins.json new file mode 100644 index 0000000..639b90d --- /dev/null +++ b/.obsidian/core-plugins.json @@ -0,0 +1,33 @@ +{ + "file-explorer": true, + "global-search": true, + "switcher": true, + "graph": true, + "backlink": true, + "canvas": true, + "outgoing-link": true, + "tag-pane": true, + "footnotes": false, + "properties": true, + "page-preview": true, + "daily-notes": true, + "templates": true, + "note-composer": true, + "command-palette": true, + "slash-command": false, + "editor-status": true, + "bookmarks": true, + "markdown-importer": false, + "zk-prefixer": false, + "random-note": false, + "outline": true, + "word-count": true, + "slides": false, + "audio-recorder": false, + "workspaces": false, + "file-recovery": true, + "publish": false, + "sync": true, + "bases": true, + "webviewer": false +} \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json new file mode 100644 index 0000000..a78aadb --- /dev/null +++ b/.obsidian/workspace.json @@ -0,0 +1,196 @@ +{ + "main": { + "id": "eb751e5ba612fc29", + "type": "split", + "children": [ + { + "id": "68f337dce2dd58f0", + "type": "tabs", + "children": [ + { + "id": "508fd810461abc23", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "API.md", + "mode": "source", + "source": false + }, + "icon": "lucide-file", + "title": "API" + } + } + ] + } + ], + "direction": "vertical" + }, + "left": { + "id": "0853603dee86d680", + "type": "split", + "children": [ + { + "id": "d8ec428621daff6b", + "type": "tabs", + "children": [ + { + "id": "5164625baaf5c774", + "type": "leaf", + "state": { + "type": "file-explorer", + "state": { + "sortOrder": "alphabetical", + "autoReveal": false + }, + "icon": "lucide-folder-closed", + "title": "Files" + } + }, + { + "id": "bd8f1e33775a9e17", + "type": "leaf", + "state": { + "type": "search", + "state": { + "query": "", + "matchingCase": false, + "explainSearch": false, + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical" + }, + "icon": "lucide-search", + "title": "Search" + } + }, + { + "id": "2adaba6e609cce78", + "type": "leaf", + "state": { + "type": "bookmarks", + "state": {}, + "icon": "lucide-bookmark", + "title": "Bookmarks" + } + } + ] + } + ], + "direction": "horizontal", + "width": 300 + }, + "right": { + "id": "e92484bce26a6e38", + "type": "split", + "children": [ + { + "id": "82a97f654317d457", + "type": "tabs", + "children": [ + { + "id": "312489bbf37e235f", + "type": "leaf", + "state": { + "type": "backlink", + "state": { + "file": "API.md", + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical", + "showSearch": false, + "searchQuery": "", + "backlinkCollapsed": false, + "unlinkedCollapsed": true + }, + "icon": "links-coming-in", + "title": "Backlinks for API" + } + }, + { + "id": "4149860958887f8d", + "type": "leaf", + "state": { + "type": "outgoing-link", + "state": { + "file": "API.md", + "linksCollapsed": false, + "unlinkedCollapsed": true + }, + "icon": "links-going-out", + "title": "Outgoing links from API" + } + }, + { + "id": "e17043b8b58405dd", + "type": "leaf", + "state": { + "type": "tag", + "state": { + "sortOrder": "frequency", + "useHierarchy": true, + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-tags", + "title": "Tags" + } + }, + { + "id": "befa8efde7a67b0e", + "type": "leaf", + "state": { + "type": "all-properties", + "state": { + "sortOrder": "frequency", + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-archive", + "title": "All properties" + } + }, + { + "id": "06062051184e958f", + "type": "leaf", + "state": { + "type": "outline", + "state": { + "file": "API.md", + "followCursor": false, + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-list", + "title": "Outline of API" + } + } + ] + } + ], + "direction": "horizontal", + "width": 300, + "collapsed": true + }, + "left-ribbon": { + "hiddenItems": { + "switcher:Open quick switcher": false, + "graph:Open graph view": false, + "canvas:Create new canvas": false, + "daily-notes:Open today's daily note": false, + "templates:Insert template": false, + "command-palette:Open command palette": false, + "bases:Create new base": false + } + }, + "active": "508fd810461abc23", + "lastOpenFiles": [ + "Bandwidth Upgrade.md", + "Discovery and Advertising.md", + "Feature Flags.md", + "Home.md", + "Mediums.md", + "API.md", + "Nearby Connections Overview.md" + ] +} \ No newline at end of file diff --git a/API.md b/API.md index 1ced44d..64524b2 100644 --- a/API.md +++ b/API.md @@ -1,4 +1,3 @@ -# Core API (Core, V1 & V3) and version notes This page documents the public Core API surface and how V3 maps to the legacy API in this codebase. diff --git a/Bandwidth_Upgrade.md b/Bandwidth Upgrade.md similarity index 99% rename from Bandwidth_Upgrade.md rename to Bandwidth Upgrade.md index ed92367..89e7c3e 100644 --- a/Bandwidth_Upgrade.md +++ b/Bandwidth Upgrade.md @@ -1,4 +1,3 @@ -# Bandwidth Upgrade (BWU) This document summarizes how Nearby Connections negotiates and performs bandwidth upgrades (e.g. Bluetooth -> Wi‑Fi). diff --git a/Discovery_and_Advertising.md b/Discovery and Advertising.md similarity index 99% rename from Discovery_and_Advertising.md rename to Discovery and Advertising.md index 628a0c8..a975794 100644 --- a/Discovery_and_Advertising.md +++ b/Discovery and Advertising.md @@ -1,4 +1,3 @@ -# Discovery & Advertising This page explains how advertising and discovery are implemented and wired into the Core API. diff --git a/FeatureFlags.md b/Feature Flags.md similarity index 99% rename from FeatureFlags.md rename to Feature Flags.md index 32dbbd5..6d21cf8 100644 --- a/FeatureFlags.md +++ b/Feature Flags.md @@ -1,5 +1,3 @@ -Feature Flags -============= This page documents the platform FeatureFlags (FeatureFlags::Flags) defined in internal/platform/feature_flags.h and their default values. These flags control diff --git a/Home.md b/Home.md index 02a862e..89bbc26 100644 --- a/Home.md +++ b/Home.md @@ -1 +1,33 @@ Welcome to the nearby wiki! + +**NOTE: This wiki is not maintained by google or anyone affiliated with google. I'm doing this because I'm developing the linux implementation of nearby connections and sharing because I think its pretty cool and should be available everywhere** +# Nearby Connections — Overview + +This page provides a concise architecture-level overview of Nearby Connections as implemented in the `nearby_latest` tree. + +**What Nearby Connections is** +- A medium-agnostic, encrypted, reliable socket-like protocol layered atop local radios (Bluetooth, BLE, Wi‑Fi, WebRTC, AWDL, etc.). +- Devices advertise and discover services, exchange connection requests, and (after establishing a baseline channel) optionally upgrade to a higher-bandwidth medium. + +**Core components (high level)** +- **Core**: public client API. See `connections/core.h` and `connections/core.cc`. +- **ServiceControllerRouter**: serializes Core-level requests and routes them to a ServiceController (see `connections/implementation/service_controller_router.*`). +- **ServiceController** (OfflineServiceController): orchestrates PCP handlers and medium lifecycle. +- **EndpointManager**: tracks remote endpoints and dispatches incoming frames to frame processors. +- **EndpointChannelManager**: holds the active EndpointChannel for each endpoint and manages encryption context and channel replacement (used during BWU). +- **PayloadManager** / Payload types: chunking and transfer of payloads. +- **BwuManager**: bandwidth-upgrade orchestrator; coordinates per-medium BwuHandlers. +- Medium implementations: per-platform/per-medium modules (Bluetooth, BLE, Wi‑Fi LAN/Hotspot/Direct, WebRTC, AWDL). + +**Typical lifecycle (short)** +1. App calls `Core::StartAdvertising(...)` or `Core::StartDiscovery(...)` (or V3 variants). +2. ServiceControllerRouter routes the request to OfflineServiceController, which starts/stops medium-specific advertising/scanning. +3. When a remote endpoint is found, `RequestConnection()` is used to send a connection request; the responder sees `OnConnectionInitiated`. +4. If accepted, the medium-specific EndpointChannel is registered in EndpointManager; payloads are sent via PayloadManager. +5. Optionally, `InitiateBandwidthUpgrade()` triggers BwuManager to negotiate a higher-bandwidth medium and swap the active EndpointChannel. + +**Where to read next** +- [[Bandwidth Upgrade]] +- [[Discovery and Advertising]] +- [[API]] +- [[Mediums]] \ No newline at end of file diff --git a/Mediums.md b/Mediums.md index d29b1d6..8cc8665 100644 --- a/Mediums.md +++ b/Mediums.md @@ -1,4 +1,3 @@ -# Mediums (implementations & overview) This page summarizes each medium implementation, responsibilities, and where to find the code. @@ -70,7 +69,8 @@ I can't really find any implementations on this. **BLE L2CAP (LE Connection-Oriented Channels)** -Has some quirks with requiring pairing/bonding. Doesn't really suit the 'it just works' paradigm when you need to pair each time you send a file does it? +Has some quirks with requiring pairing/bonding with linux. Doesn't really suit the 'it just works' paradigm when you need to pair each time you send a file does it? + - Code locations: - `connections/implementation/ble_l2cap_endpoint_channel.h` / `.cc` (BleL2capEndpointChannel wraps platform L2CAP sockets into an EndpointChannel) - `connections/implementation/mediums/ble_v2/ble_l2cap_packet.*` and `connections/implementation/mediums/ble_v2.cc` (L2CAP packet handling and BLE v2 integration) @@ -80,5 +80,4 @@ Has some quirks with requiring pairing/bonding. Doesn't really suit the 'it just - Feature flag: `connections/implementation/flags/nearby_connections_feature_flags.h` (kEnableBleL2cap) - Notes: - L2CAP CoC is modelled as an EndpointChannel that uses a PSM (protocol service multiplexer) when creating server sockets or connecting. - - Although the platform layer exposes lower-security options, Linux/BlueZ and kernel configurations often require pairing/bonding for L2CAP CoC; behavior depends on kernel/BlueZ version and bluetoothd configuration. - - If you plan to enable or test BLE L2CAP on Linux, verify kernel support, BlueZ version, and system-level policies that may enforce bonding. + - Although the platform layer exposes lower-security options, Linux/BlueZ and kernel configurations often require pairing/bonding for L2CAP CoC. \ No newline at end of file diff --git a/Nearby_Connections_Overview.md b/Nearby_Connections_Overview.md deleted file mode 100644 index 3e61a05..0000000 --- a/Nearby_Connections_Overview.md +++ /dev/null @@ -1,30 +0,0 @@ -# Nearby Connections — Overview - -This page provides a concise architecture-level overview of Nearby Connections as implemented in the `nearby_latest` tree. - -What Nearby Connections is -- A medium-agnostic, encrypted, reliable socket-like protocol layered atop local radios (Bluetooth, BLE, Wi‑Fi, WebRTC, AWDL, etc.). -- Devices advertise and discover services, exchange connection requests, and (after establishing a baseline channel) optionally upgrade to a higher-bandwidth medium. - -Core components (high level) -- Core: public client API. See `connections/core.h` and `connections/core.cc`. -- ServiceControllerRouter: serializes Core-level requests and routes them to a ServiceController (see `connections/implementation/service_controller_router.*`). -- ServiceController (OfflineServiceController): orchestrates PCP handlers and medium lifecycle. -- EndpointManager: tracks remote endpoints and dispatches incoming frames to frame processors. -- EndpointChannelManager: holds the active EndpointChannel for each endpoint and manages encryption context and channel replacement (used during BWU). -- PayloadManager / Payload types: chunking and transfer of payloads. -- BwuManager: bandwidth-upgrade orchestrator; coordinates per-medium BwuHandlers. -- Medium implementations: per-platform/per-medium modules (Bluetooth, BLE, Wi‑Fi LAN/Hotspot/Direct, WebRTC, AWDL). - -Typical lifecycle (short) -1. App calls `Core::StartAdvertising(...)` or `Core::StartDiscovery(...)` (or V3 variants). -2. ServiceControllerRouter routes the request to OfflineServiceController, which starts/stops medium-specific advertising/scanning. -3. When a remote endpoint is found, `RequestConnection()` is used to send a connection request; the responder sees `OnConnectionInitiated`. -4. If accepted, the medium-specific EndpointChannel is registered in EndpointManager; payloads are sent via PayloadManager. -5. Optionally, `InitiateBandwidthUpgrade()` triggers BwuManager to negotiate a higher-bandwidth medium and swap the active EndpointChannel. - -Where to read next -- Bandwidth upgrade: `Bandwidth_Upgrade.md` -- Advertising & discovery flow: `Discovery_and_Advertising.md` -- Medium-level implementation notes: `Mediums.md` -- Core API & versions: `API.md` \ No newline at end of file