start fixing tests

This commit is contained in:
Juergen Kunz
2025-06-06 07:40:59 +00:00
parent 18d79ac7e1
commit b9be6533ae
15 changed files with 330 additions and 477 deletions

View File

@ -802,4 +802,51 @@ class ProxyProtocolSocket {
📋 **Consider full WrappedSocket for future major version**
- Cleaner architecture
- Better maintainability
- But requires significant refactoring
- But requires significant refactoring
## WrappedSocket Implementation (PROXY Protocol Phase 1) - v19.5.19+
The WrappedSocket class has been implemented as the foundation for PROXY protocol support:
### Implementation Details
1. **Design Approach**: Uses JavaScript Proxy to delegate all Socket methods/properties to the underlying socket while allowing override of specific properties (remoteAddress, remotePort).
2. **Key Design Decisions**:
- NOT a Duplex stream - Initially tried this approach but it created infinite loops
- Simple wrapper using Proxy pattern for transparent delegation
- All sockets are wrapped, not just those from trusted proxies
- Trusted proxy detection happens after wrapping
3. **Usage Pattern**:
```typescript
// In RouteConnectionHandler.handleConnection()
const wrappedSocket = new WrappedSocket(socket);
// Pass wrappedSocket throughout the flow
// When calling socket-utils functions, extract underlying socket:
const underlyingSocket = getUnderlyingSocket(socket);
setupBidirectionalForwarding(underlyingSocket, targetSocket, {...});
```
4. **Important Implementation Notes**:
- Socket utility functions (setupBidirectionalForwarding, cleanupSocket) expect raw net.Socket
- Always extract underlying socket before passing to these utilities using `getUnderlyingSocket()`
- WrappedSocket preserves all Socket functionality through Proxy delegation
- TypeScript typing handled via index signature: `[key: string]: any`
5. **Files Modified**:
- `ts/core/models/wrapped-socket.ts` - The WrappedSocket implementation
- `ts/core/models/socket-types.ts` - Helper functions and type guards
- `ts/proxies/smart-proxy/route-connection-handler.ts` - Updated to wrap all incoming sockets
- `ts/proxies/smart-proxy/connection-manager.ts` - Updated to accept WrappedSocket
- `ts/proxies/smart-proxy/http-proxy-bridge.ts` - Updated to handle WrappedSocket
6. **Test Coverage**:
- `test/test.wrapped-socket-forwarding.ts` - Verifies data forwarding through wrapped sockets
### Next Steps for PROXY Protocol
- Phase 2: Parse PROXY protocol header from trusted proxies
- Phase 3: Update real client IP/port after parsing
- Phase 4: Test with HAProxy and AWS ELB
- Phase 5: Documentation and configuration