Notes techniques
Analyses approfondies de l'architecture pair à pair, de la conception du transport et de la cryptographie de PlainApp — directement depuis le code source.
DLNA Cast : Construire un émetteur et un récepteur UPnP de zéro
Comment PlainApp implémente le protocole DLNA/UPnP AV des deux côtés : scanner et contrôler les téléviseurs via SOAP en tant qu'émetteur, et transformer le téléphone lui-même en MediaRenderer UPnP en tant que récepteur — avec la découverte SSDP, les métadonnées DIDL-Lite, le service de médias avec requêtes Range, les rappels d'événements GENA, et un modèle de confiance par liste autorisée/refusée basée sur l'IP de l'émetteur, le tout en pur Kotlin Multiplatform.
Screen Mirror : Architecture de Cast à Faible Latence
Cet article couvre la conception de bout en bout du système de screen mirror de PlainApp : comment Android capture et encode en dur H.264/Opus via MediaCodec, comment les trames transitent par WebSocket avec un protocole binaire personnalisé, comment le côté web décode via WebCodecs et rend via WebGL2 sans copie CPU, comment la détection de perte, le changement d'orientation et le contrôle tactile à distance sont gérés, et comment le cycle de vie du MediaProjection système est maintenu synchronisé.
PlainApp Sécurité : analyse approfondie
Comment PlainApp protège vos données sur le Wi-Fi local — avec des preuves issues du code open source.
Conception du transport Wi-Fi Aware — Découverte de voisins et chemins de données
Cet article explique comment PlainApp utilise Wi-Fi Aware (NAN — Neighbor Awareness Networking) comme palier intermédiaire de sa chaîne de repli de transport pair, entre LAN (HTTPS même sous-réseau) et BLE (RPC GATT en dernier recours). Wi-Fi Aware est ce qui permet à deux appareils PlainApp de communiquer lorsqu'ils sont sur des SSID différents, des VLAN invité vs IoT, ou sans aucune infrastructure Wi-Fi — sans jamais avoir besoin d'une adresse IP d'un serveur DHCP.
Conception du transport BLE — Messages et téléchargements de fichiers
Cet article explique comment PlainApp pousse les messages de chat et télécharge des fichiers via Bluetooth Low Energy lorsque ni le LAN ni Wi-Fi Aware ne sont disponibles. BLE est l'alternative garantie : lente, mais qui fonctionne sans aucune connectivité IP. L'article couvre le format filaire, la conception de découpage à deux couches, comment le trafic concurrent est (ou non) priorisé, et pourquoi chaque connexion est démontée après chaque requête.
Architecture du chat pair-à-pair et par canaux
Cet article explique comment fonctionne le chat offline-first de PlainApp de bout en bout : comment un message voyage depuis une pression dans l'UI jusqu'à un autre appareil via le transport pair, comment les canaux de groupe diffusent les messages à de nombreux membres, et comment le système reste résilient lorsque les réseaux disparaissent. Le jumelage (l'échange de confiance et de clés qui amorce deux appareils) est traité dans l'article séparé Flux de jumelage.
Flux de jumelage
Cet article explique comment deux appareils PlainApp établissent une relation de confiance lors d'une première utilisation — comment ils se découvrent, échangent des clés, et aboutissent à la clé de transport ChaCha20 partagée qui sert ensuite à chiffrer chaque message de chat, transfert de fichier et signal de présence. L'architecture de chat et de canaux qui consomme cette clé est traitée dans l'article séparé Architecture du Chat.