digraph { rankdir = "BT" audio_server [label = "internal/audio_server.sock", shape = "rectangle"] browser [label = "Browser"] confirmationui_sign [label = "internal/confui_sign.sock", shape = "rectangle"] gnss_grpc_proxy gnss_grpc_server [label = "GNSS gRPC server", shape = "rectangle"] host_bluetooth [label = "Host bluetooth (netsim / rootcanal)"] host_confirmationui_in [label = "internal/confui_fifo_vm.in", shape = "rectangle"] host_confirmationui_out [label = "internal/confui_fifo_vm.out", shape = "rectangle"] keyboard_server [label = "internal/keyboard.sock", shape = "rectangle"] touch_server [label = "internal/touch_N.sock", shape = "rectangle"] run_cvd operator_proxy secure_env socket_vsock_proxy wayland_socket [label = "internal/frames.sock", shape = "rectangle"] webrtc [label = < webrtc >, penwidth = 2] vmm [label = "crosvm"] subgraph cluster_host { label = "cuttlefish-user Debian package" operator [label = "Host Orchestrator"] operator_socket [label = "/run/cuttlefish/operator", shape = "rectangle"] } subgraph cluster_android { label = "Cuttlefish VM" subgraph devices { rank = same; confirmationui_console [label = "/dev/hvc8", shape = "rectangle"] keyboard_input [label = "/dev/input/event3 | keyboard", shape = "rectangle"] touch_input [label = "/dev/input/event2 | touch", shape = "rectangle"] } adb_daemon [label = "ADB Daemon"] confirmationui [label = "ConfirmationUI HAL"] } operator -> browser [label = < HTTPS (1443) >, dir = both] webrtc -> browser [label = < WebRTC >, dir = both] operator_proxy -> browser [label = < HTTPS (8443) >, dir = both] operator -> operator_proxy [label = < HTTP (1080) >, dir = both] operator_socket -> operator [label = < JSON >, dir = both] webrtc -> operator_socket [label = < JSON >, dir = both] webrtc -> run_cvd [dir = back] webrtc -> host_bluetooth webrtc -> confirmationui_sign -> secure_env [dir = both] webrtc -> gnss_grpc_server -> gnss_grpc_proxy [dir = both, label = "TCP"] adb_daemon -> socket_vsock_proxy -> webrtc [dir = both] audio_server -> webrtc [dir = both] vmm -> audio_server [dir = both] vmm -> wayland_socket -> webrtc [label = < Wayland >, dir = both] vmm -> keyboard_server -> webrtc [dir = back] vmm -> touch_server -> webrtc [dir = back] vmm -> host_confirmationui_out -> webrtc vmm -> host_confirmationui_in -> webrtc [dir = back] confirmationui -> confirmationui_console -> vmm [dir = both] keyboard_input -> vmm touch_input -> vmm }