150 lines
5.4 KiB
Markdown
150 lines
5.4 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to Starworld will be documented in this file.
|
|
|
|
## [Unreleased]
|
|
|
|
### Added - November 10, 2025
|
|
- **Connection Persistence Fix**
|
|
- Fixed Local ID byte order bug; connection now persists indefinitely
|
|
- HMAC-MD5 packet signing and verification implemented (OpenSSL)
|
|
- See NETWORK_PROTOCOL_INVESTIGATION.md for protocol details
|
|
|
|
- **Color/Texture Download Infrastructure**
|
|
- Color and texture data are parsed, stored, and logged
|
|
- Texture download and caching implemented (SHA256-based)
|
|
- Visual application of color/texture pending StardustXR API support
|
|
- See ENTITY_TROUBLESHOOTING.md for details
|
|
|
|
### Added - November 2025
|
|
- **Overte Protocol Implementation**
|
|
- Complete NLPacket protocol support for Overte domains
|
|
- DomainConnectRequest / DomainList handshake implementation
|
|
- QDataStream serialization compatible with Qt format
|
|
- Assignment client discovery from DomainList packets
|
|
- Session UUID generation and management
|
|
- Protocol signature verification (MD5)
|
|
- Keep-alive ping mechanism
|
|
- Entity query targeting with fallback support
|
|
|
|
- **Domain Connection**
|
|
- UDP domain server connection on port 40104
|
|
- Domain address parsing (host:port/position/orientation format)
|
|
- Anonymous connection mode (fully functional)
|
|
- Local ID assignment from domain server
|
|
- Connection retry logic with exponential backoff
|
|
|
|
- **Network Features**
|
|
- NLPacket encoder/decoder for Overte wire protocol
|
|
- QDataStream encoder for Qt-compatible serialization
|
|
- BigEndian integer handling for network packets
|
|
- Packet sequence numbering
|
|
- Source ID management for multi-client scenarios
|
|
|
|
- **OAuth Infrastructure** (disabled, needs completion)
|
|
- OverteAuth class for OAuth 2.0 client
|
|
- Token storage (access_token, refresh_token, expires_at)
|
|
- Login/logout methods (framework ready)
|
|
- See OVERTE_AUTH.md for implementation details
|
|
|
|
- **Documentation**
|
|
- NETWORK_PROTOCOL_INVESTIGATION.md - Comprehensive protocol analysis
|
|
- OVERTE_AUTH.md - Comprehensive OAuth implementation guide
|
|
- OVERTE_ASSIGNMENT_CLIENT_TASK.md - Protocol implementation details
|
|
- Updated README.md with connection instructions
|
|
- Protocol packet format documentation
|
|
|
|
### Changed
|
|
- Updated domain connection to use UDP port format (host:40104) instead of WebSocket URLs
|
|
- HTTP port auto-calculated as UDP port - 2 (e.g., 40102 for UDP 40104)
|
|
- Disabled OAuth login attempt (needs browser-based authorization code flow)
|
|
- Entity queries sent to domain server when no EntityServer advertised
|
|
|
|
### Known Issues
|
|
- **Color/Texture Not Visually Applied**: Color and texture data are captured and textures are downloaded, but not yet visually applied to models (pending StardustXR API support). See ENTITY_TROUBLESHOOTING.md.
|
|
- **ATP Protocol Not Supported**: atp:// asset protocol is not yet supported (requires AssetClient integration).
|
|
|
|
### Fixed
|
|
- Local ID byte order: now correctly reads little-endian uint16 (connection persistence fixed)
|
|
- Local ID offset: now correctly reads from bytes 34-35 in DomainList
|
|
- Source ID in Ping packets: now matches server assignment
|
|
- Domain handshake retry loop when username sent in DomainConnectRequest
|
|
- Removed username field from anonymous connections (field 14)
|
|
- Added missing #include <endian.h> for be64toh()
|
|
- Fixed incomplete type error with unique_ptr<OverteAuth> by moving destructor to .cpp
|
|
- Rebuilt Rust bridge to use actual 3D models instead of wireframes
|
|
|
|
### Technical Details
|
|
- **DomainConnectRequest Packet**: 225 bytes for anonymous, 245 bytes with username
|
|
- **Assignment Client Security**: Only advertised to authenticated users
|
|
- **Fallback Behavior**: EntityQuery sent to domain server when no EntityServer available
|
|
- **Protocol Signature**: eb1600e798dc5e03c755a968dc16b7fc (MD5 of version string)
|
|
|
|
## [0.2.0] - 2024-11 (Previous Release)
|
|
|
|
### Added
|
|
- 3D model rendering with GLTF/GLB support
|
|
- HTTP/HTTPS model downloader with ModelCache
|
|
- SHA256-based asset caching
|
|
- Blender primitive generation (cube, sphere, suzanne)
|
|
- Entity type differentiation (Box, Sphere, Model)
|
|
- Transform support (position, rotation, scale)
|
|
- Dimension support (xyz sizing)
|
|
- Simulation mode with demo entities
|
|
|
|
### Infrastructure
|
|
- Rust bridge for StardustXR integration
|
|
- C ABI interface between C++ and Rust
|
|
- Scene graph management via asteroids API
|
|
- Build system with CMake and Cargo integration
|
|
- CI/CD with Gitea workflows
|
|
|
|
## [0.1.0] - Initial Release
|
|
|
|
### Added
|
|
- Basic StardustXR client skeleton
|
|
- Overte connection framework
|
|
- Project structure and build system
|
|
- Initial README and documentation
|
|
|
|
---
|
|
|
|
## Version History
|
|
|
|
- **Unreleased**: Overte protocol implementation, anonymous connection mode
|
|
- **0.2.0**: 3D model rendering, asset pipeline, simulation mode
|
|
- **0.1.0**: Initial project setup
|
|
|
|
## Migration Guide
|
|
|
|
### From WebSocket URLs to UDP Addresses
|
|
**Old format:**
|
|
```bash
|
|
./build/starworld --overte=ws://domain.example.com:40102
|
|
```
|
|
|
|
**New format:**
|
|
```bash
|
|
./build/starworld --overte=domain.example.com:40104
|
|
```
|
|
|
|
The port should now be the **UDP domain server port** (typically 40104), not the HTTP port.
|
|
|
|
### Authentication Changes
|
|
OAuth authentication is not yet functional. All connections are currently anonymous.
|
|
|
|
**Before:**
|
|
```bash
|
|
export OVERTE_USERNAME=user
|
|
export OVERTE_PASSWORD=pass
|
|
./build/starworld --overte=...
|
|
```
|
|
|
|
**Now:**
|
|
```bash
|
|
# Just connect (anonymous mode)
|
|
./build/starworld --overte=127.0.0.1:40104
|
|
```
|
|
|
|
See OVERTE_AUTH.md for future OAuth implementation plans.
|