# t5de-proxy T5DE's local proxy for IMVU Classic (see README.md, docs/hosts.md). Part of T5DE; the patches and the patcher are in the `t5de` repository (git.t5de.dev/t5de/t5de, usually checked out beside this one). The client side is t5de's `t5de-proxy` patch (`main/client.py` `t5deProxy*`, `Network.urlopen`/`post_multipart`, `IMQConnection.__buildStrategies`). A later goal is a backend of T5DE's own behind it. ## Rules - Never commit IMVU's code: no decompiled source, no captured traffic with account data. Our own declarations of IMVU's protocols (message type numbers, framing) and notes in our own words are fine. - Test with a throwaway IMVU account, never a real one. - Commits: author "dhkatz "; never the user's real name or email. - The user rejects designs that delay what's shown: the proxy streams responses and adds no waiting. ## Notes - The client's Python (2.7, OpenSSL 1.1.0f, TLS 1.2 only, `resources/cacert.pem` from IMVU) makes every HTTP request in `Network.urlopen`, including the embedded browser's: Gecko 1.9.2's http/https protocol handlers are replaced by IMVU's `PythonProtocolHandler` (imvugecko.dll), which calls `Network.performGeckoRequest`. No IMVU native code makes HTTP requests (Flash and `IMVUQualityAgent.exe` aside). - The log leaves out queries unless tracing (`-trace`, `T5DE_PROXY_TRACE=1` in the client's environment): they can hold session values. Never log headers or bodies. - t5de's `tools/drive.py` starts the built client, takes screenshots, clicks, and sends `imvu:` commands (`showMode?mode=shop`, ...), so the proxy can be tested in the real client without a person; the test account's saved login signs in by itself. The log is `%TEMP%\t5de-proxy.log`. - Community products (README): `internal/products`. What the client needs was worked out from captures (t5de-hub's `docs/imq-rooms.md` and this repo's README): a product's CFL holds `index.xml` (deriving from a parent with `__DATAIMPORT product:///index.xml`), materials and textures; `_contents.json` would make the client fetch files separately, so packs don't use it. Outfit saves happen only from some modes (Dress Up, not rooms). Test packs (never committed: they're built on IMVU products' templates) live outside the repo; tests use synthetic files. - Debugging: `-trace` (or `T5DE_PROXY_TRACE=1`) logs full URLs and IMQ frame types; changes to community products are logged as `products: ...`.