/** * SMTP Connection Manager * Responsible for managing socket connections to the SMTP server */ import * as plugins from '../../../plugins.js'; import type { IConnectionManager, ISmtpServer } from './interfaces.js'; /** * Manager for SMTP connections * Handles connection setup, event listeners, and lifecycle management * Provides resource management, connection tracking, and monitoring */ export declare class ConnectionManager implements IConnectionManager { /** * Reference to the SMTP server instance */ private smtpServer; /** * Set of active socket connections */ private activeConnections; /** * Connection tracking for resource management */ private connectionStats; /** * Per-IP connection tracking for rate limiting */ private ipConnections; /** * Resource monitoring interval */ private resourceCheckInterval; /** * Track cleanup timers so we can clear them */ private cleanupTimers; /** * SMTP server options with enhanced resource controls */ private options; /** * Creates a new connection manager with enhanced resource management * @param smtpServer - SMTP server instance */ constructor(smtpServer: ISmtpServer); /** * Start resource monitoring interval to check resource usage */ private startResourceMonitoring; /** * Monitor resource usage and log statistics */ private monitorResourceUsage; /** * Clean up expired IP rate limits and perform additional resource monitoring */ private cleanupIpRateLimits; /** * Validate and repair resource tracking to prevent leaks */ private validateResourceTracking; /** * Handle a new connection with resource management * @param socket - Client socket */ handleNewConnection(socket: plugins.net.Socket): Promise; /** * Check if an IP has exceeded the rate limit * @param ip - Client IP address * @returns True if rate limited */ private isIPRateLimited; /** * Track a new connection from an IP * @param ip - Client IP address */ private trackIPConnection; /** * Check if an IP has reached its connection limit * @param ip - Client IP address * @returns True if limit reached */ private hasReachedIPConnectionLimit; /** * Handle a new secure TLS connection with resource management * @param socket - Client TLS socket */ handleNewSecureConnection(socket: plugins.tls.TLSSocket): Promise; /** * Set up event handlers for a socket with enhanced resource management * @param socket - Client socket */ setupSocketEventHandlers(socket: plugins.net.Socket | plugins.tls.TLSSocket): void; /** * Get the current connection count * @returns Number of active connections */ getConnectionCount(): number; /** * Check if the server has reached the maximum number of connections * @returns True if max connections reached */ hasReachedMaxConnections(): boolean; /** * Close all active connections */ closeAllConnections(): void; /** * Handle socket close event * @param socket - Client socket * @param hadError - Whether the socket was closed due to error */ private handleSocketClose; /** * Handle socket error event * @param socket - Client socket * @param error - Error object */ private handleSocketError; /** * Handle socket timeout event * @param socket - Client socket */ private handleSocketTimeout; /** * Reject a connection * @param socket - Client socket * @param reason - Reason for rejection */ private rejectConnection; /** * Send greeting message * @param socket - Client socket */ private sendGreeting; /** * Send service closing notification * @param socket - Client socket */ private sendServiceClosing; /** * Send response to client * @param socket - Client socket * @param response - Response to send */ private sendResponse; /** * Handle a new connection (interface requirement) */ handleConnection(socket: plugins.net.Socket | plugins.tls.TLSSocket, secure: boolean): Promise; /** * Check if accepting new connections (interface requirement) */ canAcceptConnection(): boolean; /** * Clean up resources */ destroy(): void; }