# 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

### 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
```

### 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
```
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.)

## 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