start fixing tests
This commit is contained in:
@ -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
|
Reference in New Issue
Block a user