Files
2026-10-29 03:17:30 -07:00

2.4 KiB

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 [email protected]"; 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://<id>/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: ....