Files
smartproxy/readme.plan.md

112 lines
3.8 KiB
Markdown
Raw Normal View History

# Protocol Detection Reorganization Plan
## Current Issues
1. **Triple Fragment Handling**: Three separate implementations of fragment buffering:
- `TlsDetector.detectWithFragments()`
- `HttpDetector.detectWithFragments()`
- `ClientHelloParser.handleFragmentedClientHello()`
2. **Overlapping Responsibilities**:
- Detectors are parsing full protocol details (ALPN, cipher suites, headers)
- Direct coupling between detectors and protocol parsers
- Detection and parsing are intermingled
3. **Unclear Boundaries**:
- Detection should be "what protocol?" but it's doing "parse everything"
- SNI extraction happens in both detection and SNI handler
## Proposed Reorganization
2025-07-12 21:58:46 +00:00
### 1. Simplify Detection Layer
- Make detectors lightweight - only identify protocol type
- Remove full parsing from detectors
- Return minimal routing info (protocol type, maybe domain)
### 2. Create Shared Fragment Handler
```
ts/protocols/common/
 fragment-handler.ts # Shared fragment buffering
 types.ts # Common protocol types
2025-07-12 21:58:46 +00:00
```
### 3. Separate Detection from Parsing
- **Detection**: Quick protocol identification (first few bytes)
- **Parsing**: Full protocol parsing (use existing protocol parsers)
- **Routing**: Extract just routing info (domain/SNI)
### 4. Reorganize Detection Module
2025-07-12 21:58:46 +00:00
```
ts/detection/
 protocol-detector.ts # Main orchestrator
 detectors/
  quick-detector.ts # Fast protocol identification
  routing-extractor.ts # Extract routing info only
 utils/
 fragment-manager.ts # Shared fragment handling
```
### 5. Clear Separation of Concerns
- **Protocols**: Pure protocol knowledge (constants, parsers)
- **Detection**: Protocol identification and minimal routing extraction
- **Handlers**: Full protocol handling (SNI Handler, HTTP Handler, etc.)
2025-07-12 21:58:46 +00:00
2025-07-17 15:13:09 +00:00
## Benefits
- Eliminate duplicate fragment handling code
- Faster detection (less parsing in hot path)
- Clearer boundaries between layers
- Better performance for routing decisions
- Easier to add new protocols
## Implementation Steps
### Phase 1: Create Shared Infrastructure
- [x] Create `ts/protocols/common/` directory
- [x] Implement shared fragment handler
- [x] Define common protocol types
### Phase 2: Simplify Detectors
- [x] Create lightweight protocol identifier
- [x] Create routing info extractor
- [x] Update detectors to use shared components
### Phase 3: Refactor Detection Module
- [x] Update ProtocolDetector to use new architecture (created V2)
- [ ] Remove duplicate fragment handling from old detectors
- [ ] Clean up detector interfaces
### Phase 4: Update Integration Points
- [ ] Update RouteConnectionHandler to use V2
- [ ] Update TlsManager to use V2
- [x] Ensure backward compatibility (both versions exported)
### Phase 5: Testing and Cleanup
- [x] Run all tests (passing)
- [ ] Remove deprecated code after migration
- [ ] Update documentation
## Current Status
The reorganization has been successfully implemented with a V2 architecture that:
- Uses a shared fragment handler to eliminate duplicate code
- Separates quick protocol detection from full parsing
- Provides lightweight routing extraction without full protocol parsing
- Maintains backward compatibility by exporting both V1 and V2 versions
### What's Complete
- All new V2 components are implemented and working
- Tests are passing with the new architecture
- Both old and new versions are available for gradual migration
### Remaining Work
1. **Migration**: Update integration points to use V2 detectors
- RouteConnectionHandler
- TlsManager
- route-helpers.ts
2. **Cleanup**: After migration is verified
- Remove old detector implementations
- Remove duplicate fragment handling code
- Update all imports to use V2
3. **Documentation**: Update docs to reflect new architecture