# Native Vivox validation MetaCrate's Vivox support is a cross-platform Rust implementation of the SDK control protocol. `VivoxControlClient` connects to a caller-supplied TCP socket, writes bounded XML requests terminated by the Vivox three-newline delimiter, correlates responses by request ID and action, and queues asynchronous login, session, and participant events. It does not start or ship proprietary code. The client owns connector, account, and session state. Invalid ordering is rejected locally. `shutdown()` is idempotent and reverses active state in this order: sessions, account, connector, TCP writer. Response failures preserve the action and numeric return/status codes while passwords, handles, and URIs remain opaque. XML is escaped on output; input is capped at 1 MiB and rejects DTD or entity declarations. `vivox-test --fake-script FILE` launches a deterministic fake control service on IPv4 loopback. It validates the same wire requests used with a real daemon, scripts device responses and participant events, and waits for both client and server teardown. Live mode additionally logs into a grid, waits for the event queue, requests `ProvisionVoiceAccountRequest` and `ParcelVoiceInfoRequest`, and then exercises the control service. Live login requires both `--allow-live-login` and `--confirm-live-login LOGIN`; joining audio also requires `--allow-session-audio`. Use environment variables for live credentials so they are not copied into a shell history or process argument list: ```sh GRID_FIRST_NAME=... GRID_LAST_NAME=... GRID_PASSWORD=... \ cargo run -p libremetaverse-programs --bin vivox-test -- \ --allow-live-login --confirm-live-login LOGIN ``` The Vivox daemon/SDK is proprietary and must be installed, configured, and started independently. MetaCrate never discovers or invokes it.