- Created ts/detection module for unified protocol detection - Implemented TLS and HTTP detectors with fragmentation support - Moved TLS detection logic from existing code to centralized module - Updated RouteConnectionHandler to use ProtocolDetector for both TLS and HTTP - Refactored ACME HTTP parsing to use detection module - Added comprehensive tests for detection functionality - Eliminated duplicate protocol detection code across codebase This centralizes all non-destructive protocol detection into a single module, improving code organization and reducing duplication between ACME and routing.
115 lines
2.1 KiB
TypeScript
115 lines
2.1 KiB
TypeScript
/**
|
|
* Interface definitions for protocol detection components
|
|
*/
|
|
|
|
import type { IDetectionResult, IDetectionOptions } from './detection-types.js';
|
|
|
|
/**
|
|
* Interface for protocol detectors
|
|
*/
|
|
export interface IProtocolDetector {
|
|
/**
|
|
* Detect protocol from buffer data
|
|
* @param buffer The buffer to analyze
|
|
* @param options Detection options
|
|
* @returns Detection result or null if protocol cannot be determined
|
|
*/
|
|
detect(buffer: Buffer, options?: IDetectionOptions): IDetectionResult | null;
|
|
|
|
/**
|
|
* Check if buffer potentially contains this protocol
|
|
* @param buffer The buffer to check
|
|
* @returns True if buffer might contain this protocol
|
|
*/
|
|
canHandle(buffer: Buffer): boolean;
|
|
|
|
/**
|
|
* Get the minimum bytes needed for detection
|
|
*/
|
|
getMinimumBytes(): number;
|
|
}
|
|
|
|
/**
|
|
* Interface for connection tracking during fragmented detection
|
|
*/
|
|
export interface IConnectionTracker {
|
|
/**
|
|
* Connection identifier
|
|
*/
|
|
id: string;
|
|
|
|
/**
|
|
* Accumulated buffer data
|
|
*/
|
|
buffer: Buffer;
|
|
|
|
/**
|
|
* Timestamp of first data
|
|
*/
|
|
startTime: number;
|
|
|
|
/**
|
|
* Current detection state
|
|
*/
|
|
state: 'detecting' | 'complete' | 'failed';
|
|
|
|
/**
|
|
* Partial detection result (if any)
|
|
*/
|
|
partialResult?: Partial<IDetectionResult>;
|
|
}
|
|
|
|
/**
|
|
* Interface for buffer accumulator (handles fragmented data)
|
|
*/
|
|
export interface IBufferAccumulator {
|
|
/**
|
|
* Add data to accumulator
|
|
*/
|
|
append(data: Buffer): void;
|
|
|
|
/**
|
|
* Get accumulated buffer
|
|
*/
|
|
getBuffer(): Buffer;
|
|
|
|
/**
|
|
* Get buffer length
|
|
*/
|
|
length(): number;
|
|
|
|
/**
|
|
* Clear accumulated data
|
|
*/
|
|
clear(): void;
|
|
|
|
/**
|
|
* Check if accumulator has enough data
|
|
*/
|
|
hasMinimumBytes(minBytes: number): boolean;
|
|
}
|
|
|
|
/**
|
|
* Detection events
|
|
*/
|
|
export interface IDetectionEvents {
|
|
/**
|
|
* Emitted when protocol is successfully detected
|
|
*/
|
|
detected: (result: IDetectionResult) => void;
|
|
|
|
/**
|
|
* Emitted when detection fails
|
|
*/
|
|
failed: (error: Error) => void;
|
|
|
|
/**
|
|
* Emitted when detection times out
|
|
*/
|
|
timeout: () => void;
|
|
|
|
/**
|
|
* Emitted when more data is needed
|
|
*/
|
|
needMoreData: (bytesNeeded: number) => void;
|
|
} |