@push.rocks/smartproxy 3.32.0 → 3.32.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,662 +1,153 @@
1
1
  import * as plugins from './plugins.js';
2
2
  import { NetworkProxy } from './classes.networkproxy.js';
3
- // Default configuration for session cache
4
- const DEFAULT_SESSION_CACHE_CONFIG = {
5
- maxEntries: 10000, // Default max 10,000 entries
6
- expiryTime: 24 * 60 * 60 * 1000, // 24 hours default
7
- cleanupInterval: 10 * 60 * 1000, // Clean up every 10 minutes
8
- enabled: true // Enabled by default
9
- };
10
- // Enhanced TLS session cache with size limits and better performance
11
- class TlsSessionCache {
12
- constructor(config) {
13
- this.cache = new Map();
14
- this.cleanupTimer = null;
15
- this.lastCleanupTime = 0;
16
- this.cacheStats = {
17
- hits: 0,
18
- misses: 0,
19
- expirations: 0,
20
- evictions: 0,
21
- total: 0
22
- };
23
- this.config = { ...DEFAULT_SESSION_CACHE_CONFIG, ...config };
24
- this.startCleanupTimer();
25
- }
26
- /**
27
- * Get a session from the cache
28
- */
29
- get(key) {
30
- // Skip if cache is disabled
31
- if (!this.config.enabled)
32
- return undefined;
33
- const entry = this.cache.get(key);
34
- if (entry) {
35
- // Update access information
36
- entry.lastAccessed = Date.now();
37
- entry.accessCount = (entry.accessCount || 0) + 1;
38
- this.cache.set(key, entry);
39
- this.cacheStats.hits++;
40
- return entry;
41
- }
42
- this.cacheStats.misses++;
43
- return undefined;
44
- }
45
- /**
46
- * Check if the cache has a key
47
- */
48
- has(key) {
49
- // Skip if cache is disabled
50
- if (!this.config.enabled)
51
- return false;
52
- const exists = this.cache.has(key);
53
- if (exists) {
54
- const entry = this.cache.get(key);
55
- // Check if entry has expired
56
- if (Date.now() - entry.ticketTimestamp > this.config.expiryTime) {
57
- this.cache.delete(key);
58
- this.cacheStats.expirations++;
59
- return false;
60
- }
61
- // Update last accessed time
62
- entry.lastAccessed = Date.now();
63
- this.cache.set(key, entry);
64
- }
65
- return exists;
66
- }
67
- /**
68
- * Set a session in the cache
69
- */
70
- set(key, value) {
71
- // Skip if cache is disabled
72
- if (!this.config.enabled)
73
- return;
74
- // Ensure timestamps are set
75
- const entry = {
76
- ...value,
77
- lastAccessed: Date.now(),
78
- accessCount: 0
79
- };
80
- // Check if we need to evict entries
81
- if (!this.cache.has(key) && this.cache.size >= this.config.maxEntries) {
82
- this.evictOldest();
83
- }
84
- this.cache.set(key, entry);
85
- this.cacheStats.total = this.cache.size;
86
- // Run cleanup if it's been a while
87
- const timeSinceCleanup = Date.now() - this.lastCleanupTime;
88
- if (timeSinceCleanup > this.config.cleanupInterval * 2) {
89
- this.cleanup();
90
- }
91
- }
92
- /**
93
- * Delete a session from the cache
94
- */
95
- delete(key) {
96
- return this.cache.delete(key);
97
- }
98
- /**
99
- * Clear the entire cache
100
- */
101
- clear() {
102
- this.cache.clear();
103
- this.cacheStats.total = 0;
104
- }
105
- /**
106
- * Get cache statistics
107
- */
108
- getStats() {
109
- return {
110
- ...this.cacheStats,
111
- size: this.cache.size,
112
- enabled: this.config.enabled,
113
- maxEntries: this.config.maxEntries,
114
- expiryTimeHours: this.config.expiryTime / (60 * 60 * 1000)
115
- };
116
- }
117
- /**
118
- * Update cache configuration
119
- */
120
- updateConfig(config) {
121
- this.config = { ...this.config, ...config };
122
- // Restart the cleanup timer with new interval
123
- this.startCleanupTimer();
124
- // Run immediate cleanup if max entries was reduced
125
- if (config.maxEntries && this.cache.size > config.maxEntries) {
126
- while (this.cache.size > config.maxEntries) {
127
- this.evictOldest();
128
- }
129
- }
130
- }
131
- /**
132
- * Start the cleanup timer
133
- */
134
- startCleanupTimer() {
135
- if (this.cleanupTimer) {
136
- clearInterval(this.cleanupTimer);
137
- this.cleanupTimer = null;
138
- }
139
- if (!this.config.enabled)
140
- return;
141
- this.cleanupTimer = setInterval(() => {
142
- this.cleanup();
143
- }, this.config.cleanupInterval);
144
- // Make sure the interval doesn't keep the process alive
145
- if (this.cleanupTimer.unref) {
146
- this.cleanupTimer.unref();
147
- }
148
- }
149
- /**
150
- * Clean up expired entries
151
- */
152
- cleanup() {
153
- this.lastCleanupTime = Date.now();
154
- const now = Date.now();
155
- let expiredCount = 0;
156
- for (const [key, info] of this.cache.entries()) {
157
- if (now - info.ticketTimestamp > this.config.expiryTime) {
158
- this.cache.delete(key);
159
- expiredCount++;
160
- }
161
- }
162
- if (expiredCount > 0) {
163
- this.cacheStats.expirations += expiredCount;
164
- this.cacheStats.total = this.cache.size;
165
- console.log(`TLS Session Cache: Cleaned up ${expiredCount} expired entries. ${this.cache.size} entries remaining.`);
166
- }
167
- }
168
- /**
169
- * Evict the oldest entries when cache is full
170
- */
171
- evictOldest() {
172
- if (this.cache.size === 0)
173
- return;
174
- let oldestKey = null;
175
- let oldestTime = Date.now();
176
- // Strategy: Find least recently accessed entry
177
- for (const [key, info] of this.cache.entries()) {
178
- const lastAccess = info.lastAccessed || info.ticketTimestamp;
179
- if (lastAccess < oldestTime) {
180
- oldestTime = lastAccess;
181
- oldestKey = key;
182
- }
183
- }
184
- if (oldestKey) {
185
- this.cache.delete(oldestKey);
186
- this.cacheStats.evictions++;
187
- }
188
- }
189
- /**
190
- * Stop cleanup timer (used during shutdown)
191
- */
192
- stop() {
193
- if (this.cleanupTimer) {
194
- clearInterval(this.cleanupTimer);
195
- this.cleanupTimer = null;
196
- }
197
- }
198
- }
199
- // Create the global session cache
200
- const tlsSessionCache = new TlsSessionCache();
201
- // Legacy function for backward compatibility
202
- function stopSessionCleanupTimer() {
203
- tlsSessionCache.stop();
204
- }
205
3
  /**
206
4
  * Extracts the SNI (Server Name Indication) from a TLS ClientHello packet.
207
5
  * Enhanced for robustness and detailed logging.
208
- * Also extracts and tracks TLS Session IDs for session resumption handling.
209
- *
210
- * Improved to handle:
211
- * - Multiple TLS records in a single buffer
212
- * - Fragmented TLS handshakes across multiple records
213
- * - Partial TLS records that may continue in future chunks
214
- *
215
6
  * @param buffer - Buffer containing the TLS ClientHello.
216
7
  * @param enableLogging - Whether to enable detailed logging.
217
- * @returns An object containing SNI and session information, or undefined if parsing fails.
8
+ * @returns The server name if found, otherwise undefined.
218
9
  */
219
- function extractSNIInfo(buffer, enableLogging = false) {
10
+ function extractSNI(buffer, enableLogging = false) {
220
11
  try {
221
12
  // Check if buffer is too small for TLS
222
13
  if (buffer.length < 5) {
223
14
  if (enableLogging)
224
15
  console.log('Buffer too small for TLS header');
225
- return {
226
- isResumption: false,
227
- partialExtract: true // Indicating we need more data
228
- };
16
+ return undefined;
229
17
  }
230
- // Check first record type (has to be handshake - 22)
18
+ // Check record type (has to be handshake - 22)
231
19
  const recordType = buffer.readUInt8(0);
232
20
  if (recordType !== 22) {
233
21
  if (enableLogging)
234
22
  console.log(`Not a TLS handshake. Record type: ${recordType}`);
235
23
  return undefined;
236
24
  }
237
- // Track multiple records and total records examined
238
- let recordsExamined = 0;
239
- let multipleRecords = false;
240
- let currentPosition = 0;
241
- let result;
242
- // Process potentially multiple TLS records in the buffer
243
- while (currentPosition + 5 <= buffer.length) {
244
- recordsExamined++;
245
- // Read record header
246
- const currentRecordType = buffer.readUInt8(currentPosition);
247
- // Only process handshake records (type 22)
248
- if (currentRecordType !== 22) {
249
- if (enableLogging)
250
- console.log(`Skipping non-handshake record at position ${currentPosition}, type: ${currentRecordType}`);
251
- // Move to next potential record
252
- if (currentPosition + 5 <= buffer.length) {
253
- // Need at least 5 bytes to determine next record length
254
- const nextRecordLength = buffer.readUInt16BE(currentPosition + 3);
255
- currentPosition += 5 + nextRecordLength;
256
- multipleRecords = true;
257
- continue;
258
- }
259
- else {
260
- // Not enough data to determine next record
261
- break;
262
- }
263
- }
264
- // Check TLS version
265
- const majorVersion = buffer.readUInt8(currentPosition + 1);
266
- const minorVersion = buffer.readUInt8(currentPosition + 2);
25
+ // Check TLS version (has to be 3.1 or higher)
26
+ const majorVersion = buffer.readUInt8(1);
27
+ const minorVersion = buffer.readUInt8(2);
28
+ if (enableLogging)
29
+ console.log(`TLS Version: ${majorVersion}.${minorVersion}`);
30
+ // Check record length
31
+ const recordLength = buffer.readUInt16BE(3);
32
+ if (buffer.length < 5 + recordLength) {
267
33
  if (enableLogging)
268
- console.log(`TLS Version: ${majorVersion}.${minorVersion} at position ${currentPosition}`);
269
- // Get record length
270
- const recordLength = buffer.readUInt16BE(currentPosition + 3);
271
- // Check if we have the complete record
272
- if (currentPosition + 5 + recordLength > buffer.length) {
273
- if (enableLogging) {
274
- console.log(`Incomplete TLS record at position ${currentPosition}. Expected: ${currentPosition + 5 + recordLength}, Got: ${buffer.length}`);
275
- }
276
- // Return partial info and signal that more data is needed
277
- return {
278
- isResumption: false,
279
- partialExtract: true,
280
- recordsExamined,
281
- multipleRecords
282
- };
283
- }
284
- // Process this record - extract handshake information
285
- const recordResult = extractSNIFromRecord(buffer.slice(currentPosition, currentPosition + 5 + recordLength), enableLogging);
286
- // If we found SNI or session info in this record, store it
287
- if (recordResult && (recordResult.serverName || recordResult.isResumption)) {
288
- result = recordResult;
289
- result.recordsExamined = recordsExamined;
290
- result.multipleRecords = multipleRecords;
291
- // Once we've found SNI or session resumption info, we can stop processing
292
- // But we'll still set the multipleRecords flag to indicate more records exist
293
- if (currentPosition + 5 + recordLength < buffer.length) {
294
- result.multipleRecords = true;
295
- }
296
- break;
297
- }
298
- // Move to the next record
299
- currentPosition += 5 + recordLength;
300
- // Set the flag if we've processed multiple records
301
- if (currentPosition < buffer.length) {
302
- multipleRecords = true;
303
- }
304
- }
305
- // If we processed records but didn't find SNI or session info
306
- if (recordsExamined > 0 && !result) {
307
- return {
308
- isResumption: false,
309
- recordsExamined,
310
- multipleRecords
311
- };
34
+ console.log(`Buffer too small for TLS record. Expected: ${5 + recordLength}, Got: ${buffer.length}`);
35
+ return undefined;
312
36
  }
313
- return result;
314
- }
315
- catch (err) {
316
- console.log(`Error extracting SNI: ${err}`);
317
- return undefined;
318
- }
319
- }
320
- /**
321
- * Extracts SNI information from a single TLS record
322
- * This helper function processes a single complete TLS record
323
- */
324
- function extractSNIFromRecord(recordBuffer, enableLogging = false) {
325
- try {
326
- // Skip the 5-byte TLS record header
327
37
  let offset = 5;
328
- // Verify this is a handshake message
329
- const handshakeType = recordBuffer.readUInt8(offset);
330
- if (handshakeType !== 1) { // 1 = ClientHello
38
+ const handshakeType = buffer.readUInt8(offset);
39
+ if (handshakeType !== 1) {
331
40
  if (enableLogging)
332
41
  console.log(`Not a ClientHello. Handshake type: ${handshakeType}`);
333
42
  return undefined;
334
43
  }
335
- // Skip the 4-byte handshake header (type + 3 bytes length)
336
- offset += 4;
337
- // Check if we have at least 38 more bytes for protocol version and random
338
- if (offset + 38 > recordBuffer.length) {
339
- if (enableLogging)
340
- console.log('Buffer too small for handshake header');
341
- return undefined;
342
- }
44
+ offset += 4; // Skip handshake header (type + length)
343
45
  // Client version
344
- const clientMajorVersion = recordBuffer.readUInt8(offset);
345
- const clientMinorVersion = recordBuffer.readUInt8(offset + 1);
46
+ const clientMajorVersion = buffer.readUInt8(offset);
47
+ const clientMinorVersion = buffer.readUInt8(offset + 1);
346
48
  if (enableLogging)
347
49
  console.log(`Client Version: ${clientMajorVersion}.${clientMinorVersion}`);
348
- // Skip version and random (2 + 32 bytes)
349
- offset += 2 + 32;
50
+ offset += 2 + 32; // Skip client version and random
350
51
  // Session ID
351
- if (offset + 1 > recordBuffer.length) {
352
- if (enableLogging)
353
- console.log('Buffer too small for session ID length');
354
- return undefined;
355
- }
356
- // Extract Session ID for session resumption tracking
357
- const sessionIDLength = recordBuffer.readUInt8(offset);
52
+ const sessionIDLength = buffer.readUInt8(offset);
358
53
  if (enableLogging)
359
54
  console.log(`Session ID Length: ${sessionIDLength}`);
360
- // If there's a session ID, extract it
361
- let sessionId;
362
- let sessionIdKey;
363
- let isResumption = false;
364
- let resumedDomain;
365
- if (sessionIDLength > 0) {
366
- if (offset + 1 + sessionIDLength > recordBuffer.length) {
367
- if (enableLogging)
368
- console.log('Buffer too small for session ID data');
369
- return undefined;
370
- }
371
- sessionId = Buffer.from(recordBuffer.slice(offset + 1, offset + 1 + sessionIDLength));
372
- // Convert sessionId to a string key for our cache
373
- sessionIdKey = sessionId.toString('hex');
374
- if (enableLogging) {
375
- console.log(`Session ID: ${sessionIdKey}`);
376
- }
377
- // Check if this is a session resumption attempt
378
- if (tlsSessionCache.has(sessionIdKey)) {
379
- const cachedInfo = tlsSessionCache.get(sessionIdKey);
380
- resumedDomain = cachedInfo.domain;
381
- isResumption = true;
382
- if (enableLogging) {
383
- console.log(`TLS Session Resumption detected for domain: ${resumedDomain}`);
384
- }
385
- }
386
- }
387
- offset += 1 + sessionIDLength; // Skip session ID length and data
55
+ offset += 1 + sessionIDLength; // Skip session ID
388
56
  // Cipher suites
389
- if (offset + 2 > recordBuffer.length) {
57
+ if (offset + 2 > buffer.length) {
390
58
  if (enableLogging)
391
59
  console.log('Buffer too small for cipher suites length');
392
60
  return undefined;
393
61
  }
394
- const cipherSuitesLength = recordBuffer.readUInt16BE(offset);
62
+ const cipherSuitesLength = buffer.readUInt16BE(offset);
395
63
  if (enableLogging)
396
64
  console.log(`Cipher Suites Length: ${cipherSuitesLength}`);
397
- if (offset + 2 + cipherSuitesLength > recordBuffer.length) {
398
- if (enableLogging)
399
- console.log('Buffer too small for cipher suites data');
400
- return undefined;
401
- }
402
- offset += 2 + cipherSuitesLength; // Skip cipher suites length and data
65
+ offset += 2 + cipherSuitesLength; // Skip cipher suites
403
66
  // Compression methods
404
- if (offset + 1 > recordBuffer.length) {
67
+ if (offset + 1 > buffer.length) {
405
68
  if (enableLogging)
406
69
  console.log('Buffer too small for compression methods length');
407
70
  return undefined;
408
71
  }
409
- const compressionMethodsLength = recordBuffer.readUInt8(offset);
72
+ const compressionMethodsLength = buffer.readUInt8(offset);
410
73
  if (enableLogging)
411
74
  console.log(`Compression Methods Length: ${compressionMethodsLength}`);
412
- if (offset + 1 + compressionMethodsLength > recordBuffer.length) {
75
+ offset += 1 + compressionMethodsLength; // Skip compression methods
76
+ // Extensions
77
+ if (offset + 2 > buffer.length) {
413
78
  if (enableLogging)
414
- console.log('Buffer too small for compression methods data');
79
+ console.log('Buffer too small for extensions length');
415
80
  return undefined;
416
81
  }
417
- offset += 1 + compressionMethodsLength; // Skip compression methods length and data
418
- // Check if we have extensions data
419
- if (offset + 2 > recordBuffer.length) {
420
- if (enableLogging)
421
- console.log('No extensions data found - end of ClientHello');
422
- // Even without SNI, we might be dealing with a session resumption
423
- if (isResumption && resumedDomain) {
424
- return {
425
- serverName: resumedDomain, // Use the domain from previous session
426
- sessionId,
427
- sessionIdKey,
428
- hasSessionTicket: false,
429
- isResumption: true,
430
- resumedDomain
431
- };
432
- }
433
- return {
434
- isResumption,
435
- sessionId,
436
- sessionIdKey
437
- };
438
- }
439
- // Extensions
440
- const extensionsLength = recordBuffer.readUInt16BE(offset);
82
+ const extensionsLength = buffer.readUInt16BE(offset);
441
83
  if (enableLogging)
442
84
  console.log(`Extensions Length: ${extensionsLength}`);
443
85
  offset += 2;
444
86
  const extensionsEnd = offset + extensionsLength;
445
- if (extensionsEnd > recordBuffer.length) {
446
- if (enableLogging) {
447
- console.log(`Buffer too small for extensions. Expected end: ${extensionsEnd}, Buffer length: ${recordBuffer.length}`);
448
- }
449
- // Even without complete extensions, we might be dealing with a session resumption
450
- if (isResumption && resumedDomain) {
451
- return {
452
- serverName: resumedDomain, // Use the domain from previous session
453
- sessionId,
454
- sessionIdKey,
455
- hasSessionTicket: false,
456
- isResumption: true,
457
- resumedDomain
458
- };
459
- }
460
- return {
461
- isResumption,
462
- sessionId,
463
- sessionIdKey,
464
- partialExtract: true // Indicating we have incomplete extensions data
465
- };
87
+ if (extensionsEnd > buffer.length) {
88
+ if (enableLogging)
89
+ console.log(`Buffer too small for extensions. Expected end: ${extensionsEnd}, Buffer length: ${buffer.length}`);
90
+ return undefined;
466
91
  }
467
- // Variables to track session tickets
468
- let hasSessionTicket = false;
469
- let sessionTicketId;
470
92
  // Parse extensions
471
93
  while (offset + 4 <= extensionsEnd) {
472
- const extensionType = recordBuffer.readUInt16BE(offset);
473
- const extensionLength = recordBuffer.readUInt16BE(offset + 2);
474
- if (enableLogging) {
94
+ const extensionType = buffer.readUInt16BE(offset);
95
+ const extensionLength = buffer.readUInt16BE(offset + 2);
96
+ if (enableLogging)
475
97
  console.log(`Extension Type: 0x${extensionType.toString(16)}, Length: ${extensionLength}`);
476
- }
477
- if (offset + 4 + extensionLength > recordBuffer.length) {
478
- if (enableLogging) {
479
- console.log(`Extension data incomplete. Expected: ${offset + 4 + extensionLength}, Got: ${recordBuffer.length}`);
480
- }
481
- return {
482
- isResumption,
483
- sessionId,
484
- sessionIdKey,
485
- hasSessionTicket,
486
- partialExtract: true
487
- };
488
- }
489
98
  offset += 4;
490
- // Check for Session Ticket extension (type 0x0023)
491
- if (extensionType === 0x0023 && extensionLength > 0) {
492
- hasSessionTicket = true;
493
- // Extract a hash of the ticket for tracking
494
- if (extensionLength > 16) { // Ensure we have enough bytes to create a meaningful ID
495
- const ticketBytes = recordBuffer.slice(offset, offset + Math.min(16, extensionLength));
496
- sessionTicketId = ticketBytes.toString('hex');
497
- if (enableLogging) {
498
- console.log(`Session Ticket found, ID: ${sessionTicketId}`);
499
- // Check if this is a known session ticket
500
- if (tlsSessionCache.has(`ticket:${sessionTicketId}`)) {
501
- const cachedInfo = tlsSessionCache.get(`ticket:${sessionTicketId}`);
502
- console.log(`TLS Session Ticket Resumption detected for domain: ${cachedInfo?.domain}`);
503
- // Set isResumption and resumedDomain if not already set
504
- if (!isResumption && !resumedDomain) {
505
- isResumption = true;
506
- resumedDomain = cachedInfo?.domain;
507
- }
508
- }
509
- }
510
- }
511
- }
512
- // Server Name Indication extension (type 0x0000)
513
99
  if (extensionType === 0x0000) {
514
- if (offset + 2 > recordBuffer.length) {
100
+ // SNI extension
101
+ if (offset + 2 > buffer.length) {
515
102
  if (enableLogging)
516
103
  console.log('Buffer too small for SNI list length');
517
- return {
518
- isResumption,
519
- sessionId,
520
- sessionIdKey,
521
- hasSessionTicket,
522
- partialExtract: true
523
- };
104
+ return undefined;
524
105
  }
525
- const sniListLength = recordBuffer.readUInt16BE(offset);
106
+ const sniListLength = buffer.readUInt16BE(offset);
526
107
  if (enableLogging)
527
108
  console.log(`SNI List Length: ${sniListLength}`);
528
109
  offset += 2;
529
110
  const sniListEnd = offset + sniListLength;
530
- if (sniListEnd > recordBuffer.length) {
531
- if (enableLogging) {
532
- console.log(`Buffer too small for SNI list. Expected end: ${sniListEnd}, Buffer length: ${recordBuffer.length}`);
533
- }
534
- return {
535
- isResumption,
536
- sessionId,
537
- sessionIdKey,
538
- hasSessionTicket,
539
- partialExtract: true
540
- };
111
+ if (sniListEnd > buffer.length) {
112
+ if (enableLogging)
113
+ console.log(`Buffer too small for SNI list. Expected end: ${sniListEnd}, Buffer length: ${buffer.length}`);
114
+ return undefined;
541
115
  }
542
116
  while (offset + 3 < sniListEnd) {
543
- const nameType = recordBuffer.readUInt8(offset++);
544
- if (offset + 2 > recordBuffer.length) {
545
- if (enableLogging)
546
- console.log('Buffer too small for SNI name length');
547
- return {
548
- isResumption,
549
- sessionId,
550
- sessionIdKey,
551
- hasSessionTicket,
552
- partialExtract: true
553
- };
554
- }
555
- const nameLen = recordBuffer.readUInt16BE(offset);
117
+ const nameType = buffer.readUInt8(offset++);
118
+ const nameLen = buffer.readUInt16BE(offset);
556
119
  offset += 2;
557
120
  if (enableLogging)
558
121
  console.log(`Name Type: ${nameType}, Name Length: ${nameLen}`);
559
- // Only process hostname entries (type 0)
560
122
  if (nameType === 0) {
561
- if (offset + nameLen > recordBuffer.length) {
562
- if (enableLogging) {
563
- console.log(`Buffer too small for hostname. Expected: ${offset + nameLen}, Got: ${recordBuffer.length}`);
564
- }
565
- return {
566
- isResumption,
567
- sessionId,
568
- sessionIdKey,
569
- hasSessionTicket,
570
- partialExtract: true
571
- };
123
+ // host_name
124
+ if (offset + nameLen > buffer.length) {
125
+ if (enableLogging)
126
+ console.log(`Buffer too small for hostname. Expected: ${offset + nameLen}, Got: ${buffer.length}`);
127
+ return undefined;
572
128
  }
573
- const serverName = recordBuffer.toString('utf8', offset, offset + nameLen);
129
+ const serverName = buffer.toString('utf8', offset, offset + nameLen);
574
130
  if (enableLogging)
575
131
  console.log(`Extracted SNI: ${serverName}`);
576
- // Store the session ID to domain mapping for future resumptions
577
- if (sessionIdKey && sessionId && serverName) {
578
- tlsSessionCache.set(sessionIdKey, {
579
- domain: serverName,
580
- sessionId: sessionId,
581
- ticketTimestamp: Date.now()
582
- });
583
- if (enableLogging) {
584
- console.log(`Stored session ${sessionIdKey} for domain ${serverName}`);
585
- }
586
- }
587
- // Also store session ticket information if present
588
- if (sessionTicketId && serverName) {
589
- tlsSessionCache.set(`ticket:${sessionTicketId}`, {
590
- domain: serverName,
591
- ticketId: sessionTicketId,
592
- ticketTimestamp: Date.now()
593
- });
594
- if (enableLogging) {
595
- console.log(`Stored session ticket ${sessionTicketId} for domain ${serverName}`);
596
- }
597
- }
598
- // Return the complete extraction result
599
- return {
600
- serverName,
601
- sessionId,
602
- sessionIdKey,
603
- sessionTicketId,
604
- isResumption,
605
- resumedDomain,
606
- hasSessionTicket
607
- };
132
+ return serverName;
608
133
  }
609
- // Skip this name entry
610
134
  offset += nameLen;
611
135
  }
612
- // Finished processing the SNI extension without finding a hostname
613
136
  break;
614
137
  }
615
138
  else {
616
- // Skip other extensions
617
139
  offset += extensionLength;
618
140
  }
619
141
  }
620
- // We finished processing all extensions without finding SNI
621
142
  if (enableLogging)
622
143
  console.log('No SNI extension found');
623
- // Even without SNI, we might be dealing with a session resumption
624
- if (isResumption && resumedDomain) {
625
- return {
626
- serverName: resumedDomain, // Use the domain from previous session
627
- sessionId,
628
- sessionIdKey,
629
- sessionTicketId,
630
- hasSessionTicket,
631
- isResumption: true,
632
- resumedDomain
633
- };
634
- }
635
- // Return a basic result with just the session info
636
- return {
637
- isResumption,
638
- sessionId,
639
- sessionIdKey,
640
- sessionTicketId,
641
- hasSessionTicket,
642
- resumedDomain
643
- };
144
+ return undefined;
644
145
  }
645
146
  catch (err) {
646
- console.log(`Error in extractSNIFromRecord: ${err}`);
147
+ console.log(`Error extracting SNI: ${err}`);
647
148
  return undefined;
648
149
  }
649
150
  }
650
- /**
651
- * Legacy wrapper for extractSNIInfo to maintain backward compatibility
652
- * @param buffer - Buffer containing the TLS ClientHello
653
- * @param enableLogging - Whether to enable detailed logging
654
- * @returns The server name if found, otherwise undefined
655
- */
656
- function extractSNI(buffer, enableLogging = false) {
657
- const result = extractSNIInfo(buffer, enableLogging);
658
- return result?.serverName;
659
- }
660
151
  // Helper: Check if a port falls within any of the given port ranges
661
152
  const isPortInRanges = (port, ranges) => {
662
153
  return ranges.some((range) => port >= range.from && port <= range.to);
@@ -728,93 +219,39 @@ export class PortProxy {
728
219
  this.connectionRateByIP = new Map();
729
220
  // New property to store NetworkProxy instances
730
221
  this.networkProxies = [];
731
- // Auto-detect if this is a chained proxy based on targetIP
732
- const targetIP = settingsArg.targetIP || 'localhost';
733
- const isChainedProxy = settingsArg.isChainedProxy !== undefined
734
- ? settingsArg.isChainedProxy
735
- : (targetIP === 'localhost' || targetIP === '127.0.0.1');
736
- // Use more aggressive timeouts for chained proxies
737
- const aggressiveTlsRefresh = settingsArg.aggressiveTlsRefresh !== undefined
738
- ? settingsArg.aggressiveTlsRefresh
739
- : isChainedProxy;
740
- // Configure TLS session cache if specified
741
- if (settingsArg.tlsSessionCache) {
742
- tlsSessionCache.updateConfig({
743
- enabled: settingsArg.tlsSessionCache.enabled,
744
- maxEntries: settingsArg.tlsSessionCache.maxEntries,
745
- expiryTime: settingsArg.tlsSessionCache.expiryTime,
746
- cleanupInterval: settingsArg.tlsSessionCache.cleanupInterval
747
- });
748
- console.log(`Configured TLS session cache with custom settings. Current stats: ${JSON.stringify(tlsSessionCache.getStats())}`);
749
- }
750
- // Determine appropriate timeouts based on proxy chain position
751
- let socketTimeout = 1800000; // 30 minutes default
752
- if (isChainedProxy) {
753
- // Use shorter timeouts for chained proxies to prevent certificate issues
754
- const chainPosition = settingsArg.chainPosition || 'middle';
755
- // Adjust timeouts based on position in chain
756
- switch (chainPosition) {
757
- case 'first':
758
- // First proxy can be a bit more lenient as it handles browser connections
759
- socketTimeout = 1500000; // 25 minutes
760
- break;
761
- case 'middle':
762
- // Middle proxies need shorter timeouts
763
- socketTimeout = 1200000; // 20 minutes
764
- break;
765
- case 'last':
766
- // Last proxy directly connects to backend
767
- socketTimeout = 1800000; // 30 minutes
768
- break;
769
- }
770
- console.log(`Configured as ${chainPosition} proxy in chain. Using adjusted timeouts for optimal TLS handling.`);
771
- }
772
- // Set hardcoded sensible defaults for all settings with chain-aware adjustments
222
+ // Set reasonable defaults for all settings
773
223
  this.settings = {
774
224
  ...settingsArg,
775
- targetIP: targetIP,
776
- // Record the chained proxy status for use in other methods
777
- isChainedProxy: isChainedProxy,
778
- chainPosition: settingsArg.chainPosition || (isChainedProxy ? 'middle' : 'last'),
779
- aggressiveTlsRefresh: aggressiveTlsRefresh,
780
- // Hardcoded timeout settings optimized for TLS safety in all deployment scenarios
781
- initialDataTimeout: 60000, // 60 seconds for initial handshake
782
- socketTimeout: socketTimeout, // Adjusted based on chain position
783
- inactivityCheckInterval: isChainedProxy ? 30000 : 60000, // More frequent checks for chains
784
- maxConnectionLifetime: isChainedProxy ? 2700000 : 3600000, // 45min or 1hr lifetime
785
- inactivityTimeout: isChainedProxy ? 1200000 : 1800000, // 20min or 30min inactivity timeout
225
+ targetIP: settingsArg.targetIP || 'localhost',
226
+ // Timeout settings with reasonable defaults
227
+ initialDataTimeout: settingsArg.initialDataTimeout || 60000, // 60 seconds for initial handshake
228
+ socketTimeout: ensureSafeTimeout(settingsArg.socketTimeout || 3600000), // 1 hour socket timeout
229
+ inactivityCheckInterval: settingsArg.inactivityCheckInterval || 60000, // 60 seconds interval
230
+ maxConnectionLifetime: ensureSafeTimeout(settingsArg.maxConnectionLifetime || 86400000), // 24 hours default
231
+ inactivityTimeout: ensureSafeTimeout(settingsArg.inactivityTimeout || 14400000), // 4 hours inactivity timeout
786
232
  gracefulShutdownTimeout: settingsArg.gracefulShutdownTimeout || 30000, // 30 seconds
787
233
  // Socket optimization settings
788
234
  noDelay: settingsArg.noDelay !== undefined ? settingsArg.noDelay : true,
789
235
  keepAlive: settingsArg.keepAlive !== undefined ? settingsArg.keepAlive : true,
790
- keepAliveInitialDelay: settingsArg.keepAliveInitialDelay || 10000, // 10 seconds
236
+ keepAliveInitialDelay: settingsArg.keepAliveInitialDelay || 10000, // 10 seconds (reduced for responsiveness)
791
237
  maxPendingDataSize: settingsArg.maxPendingDataSize || 10 * 1024 * 1024, // 10MB to handle large TLS handshakes
792
- // Feature flags - simplified with sensible defaults
793
- disableInactivityCheck: false, // Always enable inactivity checks for TLS safety
794
- enableKeepAliveProbes: true, // Always enable keep-alive probes for connection health
238
+ // Feature flags
239
+ disableInactivityCheck: settingsArg.disableInactivityCheck || false,
240
+ enableKeepAliveProbes: settingsArg.enableKeepAliveProbes !== undefined
241
+ ? settingsArg.enableKeepAliveProbes : true, // Enable by default
795
242
  enableDetailedLogging: settingsArg.enableDetailedLogging || false,
796
243
  enableTlsDebugLogging: settingsArg.enableTlsDebugLogging || false,
797
- enableRandomizedTimeouts: settingsArg.enableRandomizedTimeouts || false,
244
+ enableRandomizedTimeouts: settingsArg.enableRandomizedTimeouts || false, // Disable randomization by default
798
245
  // Rate limiting defaults
799
246
  maxConnectionsPerIP: settingsArg.maxConnectionsPerIP || 100, // 100 connections per IP
800
247
  connectionRateLimitPerMinute: settingsArg.connectionRateLimitPerMinute || 300, // 300 per minute
801
- // Keep-alive settings with sensible defaults that ensure certificate safety
802
- keepAliveTreatment: 'standard', // Always use standard treatment for certificate safety
803
- keepAliveInactivityMultiplier: 2, // 2x normal inactivity timeout for minimal extension
804
- // Use shorter lifetime for chained proxies
805
- extendedKeepAliveLifetime: isChainedProxy
806
- ? 2 * 60 * 60 * 1000 // 2 hours for chained proxies
807
- : 3 * 60 * 60 * 1000, // 3 hours for standalone proxies
248
+ // Enhanced keep-alive settings
249
+ keepAliveTreatment: settingsArg.keepAliveTreatment || 'extended', // Extended by default
250
+ keepAliveInactivityMultiplier: settingsArg.keepAliveInactivityMultiplier || 6, // 6x normal inactivity timeout
251
+ extendedKeepAliveLifetime: settingsArg.extendedKeepAliveLifetime || 7 * 24 * 60 * 60 * 1000, // 7 days
808
252
  };
809
253
  // Store NetworkProxy instances if provided
810
254
  this.networkProxies = settingsArg.networkProxies || [];
811
- // Log proxy configuration details
812
- console.log(`PortProxy initialized with ${isChainedProxy ? 'chained proxy' : 'standalone'} configuration.`);
813
- if (isChainedProxy) {
814
- console.log(`TLS certificate refresh: ${aggressiveTlsRefresh ? 'Aggressive' : 'Standard'}`);
815
- console.log(`Connection lifetime: ${plugins.prettyMs(this.settings.maxConnectionLifetime)}`);
816
- console.log(`Inactivity timeout: ${plugins.prettyMs(this.settings.inactivityTimeout)}`);
817
- }
818
255
  }
819
256
  /**
820
257
  * Forwards a TLS connection to a NetworkProxy for handling
@@ -827,7 +264,9 @@ export class PortProxy {
827
264
  */
828
265
  forwardToNetworkProxy(connectionId, socket, record, domainConfig, initialData, serverName) {
829
266
  // Determine which NetworkProxy to use
830
- const proxyIndex = domainConfig.networkProxyIndex !== undefined ? domainConfig.networkProxyIndex : 0;
267
+ const proxyIndex = domainConfig.networkProxyIndex !== undefined
268
+ ? domainConfig.networkProxyIndex
269
+ : 0;
831
270
  // Validate the NetworkProxy index
832
271
  if (proxyIndex < 0 || proxyIndex >= this.networkProxies.length) {
833
272
  console.log(`[${connectionId}] Invalid NetworkProxy index: ${proxyIndex}. Using fallback direct connection.`);
@@ -843,7 +282,7 @@ export class PortProxy {
843
282
  // Create a connection to the NetworkProxy
844
283
  const proxySocket = plugins.net.connect({
845
284
  host: proxyHost,
846
- port: proxyPort,
285
+ port: proxyPort
847
286
  });
848
287
  // Store the outgoing socket in the record
849
288
  record.outgoing = proxySocket;
@@ -878,15 +317,8 @@ export class PortProxy {
878
317
  }
879
318
  this.cleanupConnection(record, 'client_closed');
880
319
  });
881
- // Special handler for TLS handshake detection with NetworkProxy
882
- socket.on('data', (chunk) => {
883
- // Check for TLS handshake packets (ContentType.handshake)
884
- if (chunk.length > 0 && chunk[0] === 22) {
885
- console.log(`[${connectionId}] Detected potential TLS handshake with NetworkProxy, updating activity`);
886
- this.updateActivity(record);
887
- }
888
- });
889
- // Update activity on data transfer from the proxy socket
320
+ // Update activity on data transfer
321
+ socket.on('data', () => this.updateActivity(record));
890
322
  proxySocket.on('data', () => this.updateActivity(record));
891
323
  if (this.settings.enableDetailedLogging) {
892
324
  console.log(`[${connectionId}] TLS connection successfully forwarded to NetworkProxy[${proxyIndex}]`);
@@ -898,34 +330,15 @@ export class PortProxy {
898
330
  * This is used when NetworkProxy isn't configured or as a fallback
899
331
  */
900
332
  setupDirectConnection(connectionId, socket, record, domainConfig, serverName, initialChunk, overridePort) {
901
- // Enhanced logging for initial connection troubleshooting
902
- if (serverName) {
903
- console.log(`[${connectionId}] Setting up direct connection for domain: ${serverName}`);
904
- }
905
- else {
906
- console.log(`[${connectionId}] Setting up direct connection without SNI`);
907
- }
908
- // Log domain config details to help diagnose routing issues
909
- if (domainConfig) {
910
- console.log(`[${connectionId}] Using domain config: ${domainConfig.domains.join(', ')}`);
911
- }
912
- else {
913
- console.log(`[${connectionId}] No specific domain config found, using default settings`);
914
- }
915
- // Ensure we maximize connection chances by setting appropriate timeouts
916
- socket.setTimeout(30000); // 30 second initial connect timeout
917
333
  // Existing connection setup logic
918
334
  const targetHost = domainConfig ? this.getTargetIP(domainConfig) : this.settings.targetIP;
919
335
  const connectionOptions = {
920
336
  host: targetHost,
921
337
  port: overridePort !== undefined ? overridePort : this.settings.toPort,
922
- // Add connection timeout to ensure we don't hang indefinitely
923
- timeout: 15000 // 15 second connection timeout
924
338
  };
925
339
  if (this.settings.preserveSourceIP) {
926
340
  connectionOptions.localAddress = record.remoteIP.replace('::ffff:', '');
927
341
  }
928
- console.log(`[${connectionId}] Connecting to backend: ${targetHost}:${connectionOptions.port}`);
929
342
  // Pause the incoming socket to prevent buffer overflows
930
343
  socket.pause();
931
344
  // Temporary handler to collect data during connection setup
@@ -953,22 +366,11 @@ export class PortProxy {
953
366
  };
954
367
  // Add the temp handler to capture all incoming data during connection setup
955
368
  socket.on('data', tempDataHandler);
956
- // Add initial chunk to pending data if present - this is critical for SNI forwarding
369
+ // Add initial chunk to pending data if present
957
370
  if (initialChunk) {
958
- // Make explicit copy of the buffer to ensure it doesn't get modified
959
- const initialDataCopy = Buffer.from(initialChunk);
960
- record.bytesReceived += initialDataCopy.length;
961
- record.pendingData.push(initialDataCopy);
962
- record.pendingDataSize = initialDataCopy.length;
963
- // Log TLS handshake for debug purposes
964
- if (isTlsHandshake(initialChunk)) {
965
- record.isTLS = true;
966
- console.log(`[${connectionId}] Buffered TLS handshake data: ${initialDataCopy.length} bytes, SNI: ${serverName || 'none'}`);
967
- }
968
- }
969
- else if (record.isTLS) {
970
- // This shouldn't happen, but log a warning if we have a TLS connection with no initial data
971
- console.log(`[${connectionId}] WARNING: TLS connection without initial handshake data`);
371
+ record.bytesReceived += initialChunk.length;
372
+ record.pendingData.push(Buffer.from(initialChunk));
373
+ record.pendingDataSize = initialChunk.length;
972
374
  }
973
375
  // Create the target socket but don't set up piping immediately
974
376
  const targetSocket = plugins.net.connect(connectionOptions);
@@ -997,14 +399,13 @@ export class PortProxy {
997
399
  }
998
400
  }
999
401
  }
1000
- // Setup specific error handler for connection phase with enhanced retries
402
+ // Setup specific error handler for connection phase
1001
403
  targetSocket.once('error', (err) => {
1002
404
  // This handler runs only once during the initial connection phase
1003
405
  const code = err.code;
1004
406
  console.log(`[${connectionId}] Connection setup error to ${targetHost}:${connectionOptions.port}: ${err.message} (${code})`);
1005
407
  // Resume the incoming socket to prevent it from hanging
1006
408
  socket.resume();
1007
- // Add detailed logging for connection problems
1008
409
  if (code === 'ECONNREFUSED') {
1009
410
  console.log(`[${connectionId}] Target ${targetHost}:${connectionOptions.port} refused connection`);
1010
411
  }
@@ -1017,26 +418,6 @@ export class PortProxy {
1017
418
  else if (code === 'EHOSTUNREACH') {
1018
419
  console.log(`[${connectionId}] Host ${targetHost} is unreachable`);
1019
420
  }
1020
- // Log additional diagnostics
1021
- console.log(`[${connectionId}] Connection details - SNI: ${serverName || 'none'}, HasChunk: ${!!initialChunk}, ChunkSize: ${initialChunk ? initialChunk.length : 0}`);
1022
- // For TLS connections, provide even more detailed diagnostics
1023
- if (record.isTLS) {
1024
- console.log(`[${connectionId}] TLS connection failure details - TLS detected: ${record.isTLS}, Server: ${targetHost}:${connectionOptions.port}, Domain config: ${domainConfig ? 'Present' : 'Missing'}`);
1025
- }
1026
- // For connection refusal or timeouts, try a more aggressive error response
1027
- // This helps browsers quickly realize there's an issue rather than waiting
1028
- if (code === 'ECONNREFUSED' || code === 'ETIMEDOUT' || code === 'EHOSTUNREACH') {
1029
- try {
1030
- // Send a RST packet rather than a graceful close
1031
- // This signals to browsers to try a new connection immediately
1032
- socket.destroy(new Error(`Backend connection failed: ${code}`));
1033
- console.log(`[${connectionId}] Forced connection termination to trigger immediate browser retry`);
1034
- return; // Skip normal cleanup
1035
- }
1036
- catch (destroyErr) {
1037
- console.log(`[${connectionId}] Error during forced connection termination: ${destroyErr}`);
1038
- }
1039
- }
1040
421
  // Clear any existing error handler after connection phase
1041
422
  targetSocket.removeAllListeners('error');
1042
423
  // Re-add the normal error handler for established connections
@@ -1112,89 +493,11 @@ export class PortProxy {
1112
493
  // Flush all pending data to target
1113
494
  if (record.pendingData.length > 0) {
1114
495
  const combinedData = Buffer.concat(record.pendingData);
1115
- // Add critical debugging for SNI forwarding issues
1116
- if (record.isTLS && this.settings.enableTlsDebugLogging) {
1117
- console.log(`[${connectionId}] Forwarding TLS handshake data: ${combinedData.length} bytes, SNI: ${serverName || 'none'}`);
1118
- // Additional check to verify we're forwarding the ClientHello properly
1119
- if (combinedData[0] === 22) { // TLS handshake
1120
- console.log(`[${connectionId}] Initial data is a TLS handshake record`);
1121
- }
1122
- }
1123
- // Write the combined data to the target
1124
496
  targetSocket.write(combinedData, (err) => {
1125
497
  if (err) {
1126
498
  console.log(`[${connectionId}] Error writing pending data to target: ${err.message}`);
1127
499
  return this.initiateCleanupOnce(record, 'write_error');
1128
500
  }
1129
- if (record.isTLS) {
1130
- // Log successful forwarding of initial TLS data
1131
- console.log(`[${connectionId}] Successfully forwarded initial TLS data to backend`);
1132
- }
1133
- // Set up the renegotiation listener *before* piping if this is a TLS connection with SNI
1134
- if (serverName && record.isTLS) {
1135
- // This listener handles TLS renegotiation detection
1136
- socket.on('data', (renegChunk) => {
1137
- if (renegChunk.length > 0 && renegChunk.readUInt8(0) === 22) {
1138
- // Always update activity timestamp for any handshake packet
1139
- this.updateActivity(record);
1140
- try {
1141
- // Extract all TLS information including session resumption data
1142
- const sniInfo = extractSNIInfo(renegChunk, this.settings.enableTlsDebugLogging);
1143
- let newSNI = sniInfo?.serverName;
1144
- // Handle session resumption - if we recognize the session ID, we know what domain it belongs to
1145
- if (sniInfo?.isResumption && sniInfo.resumedDomain) {
1146
- console.log(`[${connectionId}] Rehandshake with session resumption for domain: ${sniInfo.resumedDomain}`);
1147
- newSNI = sniInfo.resumedDomain;
1148
- }
1149
- // IMPORTANT: If we can't extract an SNI from renegotiation, we MUST allow it through
1150
- if (newSNI === undefined) {
1151
- console.log(`[${connectionId}] Rehandshake detected without SNI, allowing it through.`);
1152
- return;
1153
- }
1154
- // Check if the SNI has changed
1155
- if (newSNI !== serverName) {
1156
- console.log(`[${connectionId}] Rehandshake with different SNI: ${newSNI} vs original ${serverName}`);
1157
- // Allow if the new SNI matches existing domain config or find a new matching config
1158
- let allowed = false;
1159
- if (record.domainConfig) {
1160
- allowed = record.domainConfig.domains.some(d => plugins.minimatch(newSNI, d));
1161
- }
1162
- if (!allowed) {
1163
- const newDomainConfig = this.settings.domainConfigs.find((config) => config.domains.some((d) => plugins.minimatch(newSNI, d)));
1164
- if (newDomainConfig) {
1165
- const effectiveAllowedIPs = [
1166
- ...newDomainConfig.allowedIPs,
1167
- ...(this.settings.defaultAllowedIPs || []),
1168
- ];
1169
- const effectiveBlockedIPs = [
1170
- ...(newDomainConfig.blockedIPs || []),
1171
- ...(this.settings.defaultBlockedIPs || []),
1172
- ];
1173
- allowed = isGlobIPAllowed(record.remoteIP, effectiveAllowedIPs, effectiveBlockedIPs);
1174
- if (allowed) {
1175
- record.domainConfig = newDomainConfig;
1176
- }
1177
- }
1178
- }
1179
- if (allowed) {
1180
- console.log(`[${connectionId}] Updated domain for connection from ${record.remoteIP} to: ${newSNI}`);
1181
- record.lockedDomain = newSNI;
1182
- }
1183
- else {
1184
- console.log(`[${connectionId}] Rehandshake SNI ${newSNI} not allowed. Terminating connection.`);
1185
- this.initiateCleanupOnce(record, 'sni_mismatch');
1186
- }
1187
- }
1188
- else {
1189
- console.log(`[${connectionId}] Rehandshake with same SNI: ${newSNI}`);
1190
- }
1191
- }
1192
- catch (err) {
1193
- console.log(`[${connectionId}] Error processing renegotiation: ${err}. Allowing to continue.`);
1194
- }
1195
- }
1196
- });
1197
- }
1198
501
  // Now set up piping for future data and resume the socket
1199
502
  socket.pipe(targetSocket);
1200
503
  targetSocket.pipe(socket);
@@ -1219,93 +522,7 @@ export class PortProxy {
1219
522
  });
1220
523
  }
1221
524
  else {
1222
- // Set up the renegotiation listener *before* piping if this is a TLS connection with SNI
1223
- if (serverName && record.isTLS) {
1224
- // This listener handles TLS renegotiation detection
1225
- socket.on('data', (renegChunk) => {
1226
- if (renegChunk.length > 0 && renegChunk.readUInt8(0) === 22) {
1227
- // Always update activity timestamp for any handshake packet
1228
- this.updateActivity(record);
1229
- try {
1230
- // Extract all TLS information including session resumption data
1231
- const sniInfo = extractSNIInfo(renegChunk, this.settings.enableTlsDebugLogging);
1232
- let newSNI = sniInfo?.serverName;
1233
- // Handle session resumption - if we recognize the session ID, we know what domain it belongs to
1234
- if (sniInfo?.isResumption && sniInfo.resumedDomain) {
1235
- console.log(`[${connectionId}] Rehandshake with session resumption for domain: ${sniInfo.resumedDomain}`);
1236
- newSNI = sniInfo.resumedDomain;
1237
- }
1238
- // IMPORTANT: If we can't extract an SNI from renegotiation, we MUST allow it through
1239
- if (newSNI === undefined) {
1240
- console.log(`[${connectionId}] Rehandshake detected without SNI, allowing it through.`);
1241
- return;
1242
- }
1243
- // Check if the SNI has changed
1244
- if (newSNI !== serverName) {
1245
- console.log(`[${connectionId}] Rehandshake with different SNI: ${newSNI} vs original ${serverName}`);
1246
- // Allow if the new SNI matches existing domain config or find a new matching config
1247
- let allowed = false;
1248
- // First check if the new SNI is allowed under the existing domain config
1249
- // This is the preferred approach as it maintains the existing connection context
1250
- if (record.domainConfig) {
1251
- allowed = record.domainConfig.domains.some(d => plugins.minimatch(newSNI, d));
1252
- if (allowed) {
1253
- console.log(`[${connectionId}] Rehandshake SNI ${newSNI} allowed by existing domain config`);
1254
- }
1255
- }
1256
- // If not allowed by existing config, try to find an alternative domain config
1257
- if (!allowed) {
1258
- // First try exact match
1259
- let newDomainConfig = this.settings.domainConfigs.find((config) => config.domains.some((d) => plugins.minimatch(newSNI, d)));
1260
- // If no exact match, try flexible matching with domain parts (for wildcard domains)
1261
- if (!newDomainConfig) {
1262
- console.log(`[${connectionId}] No exact domain config match for rehandshake SNI: ${newSNI}, trying flexible matching`);
1263
- const domainParts = newSNI.split('.');
1264
- // Try matching with parent domains or wildcard patterns
1265
- if (domainParts.length > 2) {
1266
- const parentDomain = domainParts.slice(1).join('.');
1267
- const wildcardDomain = '*.' + parentDomain;
1268
- console.log(`[${connectionId}] Trying alternative patterns: ${parentDomain} or ${wildcardDomain}`);
1269
- newDomainConfig = this.settings.domainConfigs.find((config) => config.domains.some((d) => d === parentDomain ||
1270
- d === wildcardDomain ||
1271
- plugins.minimatch(parentDomain, d)));
1272
- }
1273
- }
1274
- if (newDomainConfig) {
1275
- const effectiveAllowedIPs = [
1276
- ...newDomainConfig.allowedIPs,
1277
- ...(this.settings.defaultAllowedIPs || []),
1278
- ];
1279
- const effectiveBlockedIPs = [
1280
- ...(newDomainConfig.blockedIPs || []),
1281
- ...(this.settings.defaultBlockedIPs || []),
1282
- ];
1283
- allowed = isGlobIPAllowed(record.remoteIP, effectiveAllowedIPs, effectiveBlockedIPs);
1284
- if (allowed) {
1285
- record.domainConfig = newDomainConfig;
1286
- }
1287
- }
1288
- }
1289
- if (allowed) {
1290
- console.log(`[${connectionId}] Updated domain for connection from ${record.remoteIP} to: ${newSNI}`);
1291
- record.lockedDomain = newSNI;
1292
- }
1293
- else {
1294
- console.log(`[${connectionId}] Rehandshake SNI ${newSNI} not allowed. Terminating connection.`);
1295
- this.initiateCleanupOnce(record, 'sni_mismatch');
1296
- }
1297
- }
1298
- else {
1299
- console.log(`[${connectionId}] Rehandshake with same SNI: ${newSNI}`);
1300
- }
1301
- }
1302
- catch (err) {
1303
- console.log(`[${connectionId}] Error processing renegotiation: ${err}. Allowing to continue.`);
1304
- }
1305
- }
1306
- });
1307
- }
1308
- // Now set up piping
525
+ // No pending data, so just set up piping
1309
526
  socket.pipe(targetSocket);
1310
527
  targetSocket.pipe(socket);
1311
528
  socket.resume(); // Resume the socket after piping is established
@@ -1330,8 +547,27 @@ export class PortProxy {
1330
547
  // Clear the buffer now that we've processed it
1331
548
  record.pendingData = [];
1332
549
  record.pendingDataSize = 0;
1333
- // Renegotiation detection is now handled before piping is established
1334
- // This ensures the data listener receives all packets properly
550
+ // Add the renegotiation listener for SNI validation
551
+ if (serverName) {
552
+ socket.on('data', (renegChunk) => {
553
+ if (renegChunk.length > 0 && renegChunk.readUInt8(0) === 22) {
554
+ try {
555
+ // Try to extract SNI from potential renegotiation
556
+ const newSNI = extractSNI(renegChunk, this.settings.enableTlsDebugLogging);
557
+ if (newSNI && newSNI !== record.lockedDomain) {
558
+ console.log(`[${connectionId}] Rehandshake detected with different SNI: ${newSNI} vs locked ${record.lockedDomain}. Terminating connection.`);
559
+ this.initiateCleanupOnce(record, 'sni_mismatch');
560
+ }
561
+ else if (newSNI && this.settings.enableDetailedLogging) {
562
+ console.log(`[${connectionId}] Rehandshake detected with same SNI: ${newSNI}. Allowing.`);
563
+ }
564
+ }
565
+ catch (err) {
566
+ console.log(`[${connectionId}] Error processing potential renegotiation: ${err}. Allowing connection to continue.`);
567
+ }
568
+ }
569
+ });
570
+ }
1335
571
  // Set connection timeout with simpler logic
1336
572
  if (record.cleanupTimer) {
1337
573
  clearTimeout(record.cleanupTimer);
@@ -1343,25 +579,6 @@ export class PortProxy {
1343
579
  }
1344
580
  // No cleanup timer for immortal connections
1345
581
  }
1346
- // For TLS keep-alive connections, use a more generous timeout now that
1347
- // we've fixed the renegotiation handling issue that was causing certificate problems
1348
- else if (record.hasKeepAlive && record.isTLS) {
1349
- // Use a longer timeout for TLS connections now that renegotiation handling is fixed
1350
- // This reduces unnecessary reconnections while still ensuring certificate freshness
1351
- const tlsKeepAliveTimeout = 4 * 60 * 60 * 1000; // 4 hours for TLS keep-alive - increased from 30 minutes
1352
- const safeTimeout = ensureSafeTimeout(tlsKeepAliveTimeout);
1353
- record.cleanupTimer = setTimeout(() => {
1354
- console.log(`[${connectionId}] TLS keep-alive connection from ${record.remoteIP} exceeded max lifetime (${plugins.prettyMs(tlsKeepAliveTimeout)}), forcing cleanup to refresh certificate context.`);
1355
- this.initiateCleanupOnce(record, 'tls_certificate_refresh');
1356
- }, safeTimeout);
1357
- // Make sure timeout doesn't keep the process alive
1358
- if (record.cleanupTimer.unref) {
1359
- record.cleanupTimer.unref();
1360
- }
1361
- if (this.settings.enableDetailedLogging) {
1362
- console.log(`[${connectionId}] TLS keep-alive connection with aggressive certificate refresh protection, lifetime: ${plugins.prettyMs(tlsKeepAliveTimeout)}`);
1363
- }
1364
- }
1365
582
  // For extended keep-alive connections, use extended timeout
1366
583
  else if (record.hasKeepAlive && this.settings.keepAliveTreatment === 'extended') {
1367
584
  const extendedTimeout = this.settings.extendedKeepAliveLifetime || 7 * 24 * 60 * 60 * 1000; // 7 days
@@ -1451,177 +668,6 @@ export class PortProxy {
1451
668
  incrementTerminationStat(side, reason) {
1452
669
  this.terminationStats[side][reason] = (this.terminationStats[side][reason] || 0) + 1;
1453
670
  }
1454
- /**
1455
- * Update connection activity timestamp with enhanced sleep detection
1456
- * Improved for chained proxy scenarios and more aggressive handling of stale connections
1457
- */
1458
- updateActivity(record) {
1459
- // Get the current time
1460
- const now = Date.now();
1461
- // Check if there was a large time gap that suggests system sleep
1462
- if (record.lastActivity > 0) {
1463
- const timeDiff = now - record.lastActivity;
1464
- // Enhanced sleep detection with graduated thresholds
1465
- // For chained proxies, we need to be more aggressive about refreshing connections
1466
- const isChainedProxy = this.settings.targetIP === 'localhost' || this.settings.targetIP === '127.0.0.1';
1467
- const minuteInMs = 60 * 1000;
1468
- // Different thresholds based on connection type and configuration
1469
- const shortInactivityThreshold = isChainedProxy ? 10 * minuteInMs : 15 * minuteInMs;
1470
- const mediumInactivityThreshold = isChainedProxy ? 20 * minuteInMs : 30 * minuteInMs;
1471
- const longInactivityThreshold = isChainedProxy ? 60 * minuteInMs : 120 * minuteInMs;
1472
- // Short inactivity (10-15 mins) - Might be temporary network issue or short sleep
1473
- if (timeDiff > shortInactivityThreshold) {
1474
- if (record.isTLS && !record.possibleSystemSleep) {
1475
- // Record first detection of possible sleep/inactivity
1476
- record.possibleSystemSleep = true;
1477
- record.lastSleepDetection = now;
1478
- if (this.settings.enableDetailedLogging) {
1479
- console.log(`[${record.id}] Detected possible short inactivity for ${plugins.prettyMs(timeDiff)}. ` +
1480
- `Monitoring for TLS connection health.`);
1481
- }
1482
- // For TLS connections, send a minimal probe to check connection health
1483
- if (!record.usingNetworkProxy && record.outgoing && !record.outgoing.destroyed) {
1484
- try {
1485
- record.outgoing.write(Buffer.alloc(0));
1486
- }
1487
- catch (err) {
1488
- console.log(`[${record.id}] Error sending TLS probe: ${err}`);
1489
- }
1490
- }
1491
- }
1492
- }
1493
- // Medium inactivity (20-30 mins) - Likely a sleep event or network change
1494
- if (timeDiff > mediumInactivityThreshold && record.hasKeepAlive) {
1495
- console.log(`[${record.id}] Detected medium inactivity period for ${plugins.prettyMs(timeDiff)}. ` +
1496
- `Taking proactive steps for connection health.`);
1497
- // For TLS connections, we need more aggressive handling
1498
- if (record.isTLS && record.tlsHandshakeComplete) {
1499
- // If in a chained proxy, we should be even more aggressive about refreshing
1500
- if (isChainedProxy) {
1501
- console.log(`[${record.id}] TLS connection in chained proxy inactive for ${plugins.prettyMs(timeDiff)}. ` +
1502
- `Closing to prevent certificate inconsistencies across chain.`);
1503
- return this.initiateCleanupOnce(record, 'chained_proxy_inactivity');
1504
- }
1505
- // For TLS in single proxy, try refresh first
1506
- console.log(`[${record.id}] TLS connection inactive for ${plugins.prettyMs(timeDiff)}. ` +
1507
- `Attempting active refresh of TLS state.`);
1508
- // Attempt deep TLS state refresh with buffer flush
1509
- this.performDeepTlsRefresh(record);
1510
- // Schedule verification check with tighter timing for chained setups
1511
- const verificationTimeout = isChainedProxy ? 5 * minuteInMs : 10 * minuteInMs;
1512
- const refreshCheckId = record.id;
1513
- const refreshCheck = setTimeout(() => {
1514
- const currentRecord = this.connectionRecords.get(refreshCheckId);
1515
- if (currentRecord) {
1516
- const verificationTimeDiff = Date.now() - currentRecord.lastActivity;
1517
- if (verificationTimeDiff > verificationTimeout / 2) {
1518
- console.log(`[${refreshCheckId}] No activity detected after TLS refresh (${plugins.prettyMs(verificationTimeDiff)}). ` +
1519
- `Closing connection to ensure proper browser reconnection.`);
1520
- this.initiateCleanupOnce(currentRecord, 'tls_refresh_verification_failed');
1521
- }
1522
- }
1523
- }, verificationTimeout);
1524
- // Make sure timeout doesn't keep the process alive
1525
- if (refreshCheck.unref) {
1526
- refreshCheck.unref();
1527
- }
1528
- }
1529
- // Update sleep detection markers
1530
- record.possibleSystemSleep = true;
1531
- record.lastSleepDetection = now;
1532
- }
1533
- // Long inactivity (60-120 mins) - Definite sleep/suspend or major network change
1534
- if (timeDiff > longInactivityThreshold) {
1535
- console.log(`[${record.id}] Detected long inactivity period of ${plugins.prettyMs(timeDiff)}. ` +
1536
- `Closing connection to ensure fresh certificate context.`);
1537
- // For long periods, we always want to force close and let browser reconnect
1538
- // This ensures fresh certificates and proper TLS context across the chain
1539
- return this.initiateCleanupOnce(record, 'extended_inactivity_refresh');
1540
- }
1541
- }
1542
- // Update the activity timestamp
1543
- record.lastActivity = now;
1544
- // Clear any inactivity warning
1545
- if (record.inactivityWarningIssued) {
1546
- record.inactivityWarningIssued = false;
1547
- }
1548
- }
1549
- /**
1550
- * Perform deep TLS state refresh after sleep detection
1551
- * More aggressive than the standard refresh, specifically designed for
1552
- * recovering connections after system sleep in chained proxy setups
1553
- */
1554
- performDeepTlsRefresh(record) {
1555
- // Skip if we're using a NetworkProxy as it handles its own TLS state
1556
- if (record.usingNetworkProxy) {
1557
- return;
1558
- }
1559
- try {
1560
- // For outgoing connections that might need to be refreshed
1561
- if (record.outgoing && !record.outgoing.destroyed) {
1562
- // Check how long this connection has been established
1563
- const connectionAge = Date.now() - record.incomingStartTime;
1564
- const hourInMs = 60 * 60 * 1000;
1565
- // For very long-lived connections, just close them
1566
- if (connectionAge > 4 * hourInMs) { // Reduced from 8 hours to 4 hours for chained proxies
1567
- console.log(`[${record.id}] Long-lived TLS connection (${plugins.prettyMs(connectionAge)}). ` +
1568
- `Closing to ensure proper certificate handling across proxy chain.`);
1569
- return this.initiateCleanupOnce(record, 'certificate_age_refresh');
1570
- }
1571
- // Perform a series of actions to try to refresh the TLS state
1572
- // 1. Send a zero-length buffer to trigger any pending errors
1573
- record.outgoing.write(Buffer.alloc(0));
1574
- // 2. Check socket state
1575
- if (record.outgoing.writableEnded || !record.outgoing.writable) {
1576
- console.log(`[${record.id}] Socket no longer writable during refresh`);
1577
- return this.initiateCleanupOnce(record, 'socket_state_error');
1578
- }
1579
- // 3. For TLS connections, try to force background renegotiation
1580
- // by manipulating socket timeouts
1581
- const originalTimeout = record.outgoing.timeout;
1582
- record.outgoing.setTimeout(100); // Set very short timeout
1583
- // 4. Create a small delay to allow timeout to process
1584
- setTimeout(() => {
1585
- try {
1586
- if (record.outgoing && !record.outgoing.destroyed) {
1587
- // Reset timeout to original value
1588
- record.outgoing.setTimeout(originalTimeout || 0);
1589
- // Send another probe with random data (16 bytes) that will be ignored by TLS layer
1590
- // but might trigger internal state updates in the TLS implementation
1591
- const probeBuffer = Buffer.alloc(16);
1592
- // Fill with random data
1593
- for (let i = 0; i < 16; i++) {
1594
- probeBuffer[i] = Math.floor(Math.random() * 256);
1595
- }
1596
- record.outgoing.write(Buffer.alloc(0));
1597
- if (this.settings.enableDetailedLogging) {
1598
- console.log(`[${record.id}] Completed deep TLS refresh sequence`);
1599
- }
1600
- }
1601
- }
1602
- catch (innerErr) {
1603
- console.log(`[${record.id}] Error during deep TLS refresh: ${innerErr}`);
1604
- this.initiateCleanupOnce(record, 'deep_refresh_error');
1605
- }
1606
- }, 150);
1607
- if (this.settings.enableDetailedLogging) {
1608
- console.log(`[${record.id}] Initiated deep TLS refresh sequence`);
1609
- }
1610
- }
1611
- }
1612
- catch (err) {
1613
- console.log(`[${record.id}] Error starting TLS state refresh: ${err}`);
1614
- // If we hit an error, it's likely the connection is already broken
1615
- // Force cleanup to ensure browser reconnects cleanly
1616
- return this.initiateCleanupOnce(record, 'tls_refresh_error');
1617
- }
1618
- }
1619
- /**
1620
- * Legacy refresh method for backward compatibility
1621
- */
1622
- refreshTlsStateAfterSleep(record) {
1623
- return this.performDeepTlsRefresh(record);
1624
- }
1625
671
  /**
1626
672
  * Cleans up a connection record.
1627
673
  * Destroys both incoming and outgoing sockets, clears timers, and removes the record.
@@ -1720,6 +766,16 @@ export class PortProxy {
1720
766
  }
1721
767
  }
1722
768
  }
769
+ /**
770
+ * Update connection activity timestamp
771
+ */
772
+ updateActivity(record) {
773
+ record.lastActivity = Date.now();
774
+ // Clear any inactivity warning
775
+ if (record.inactivityWarningIssued) {
776
+ record.inactivityWarningIssued = false;
777
+ }
778
+ }
1723
779
  /**
1724
780
  * Get target IP with round-robin support
1725
781
  */
@@ -1739,8 +795,7 @@ export class PortProxy {
1739
795
  if (this.settings.enableDetailedLogging) {
1740
796
  console.log(`[${record.id}] Connection cleanup initiated for ${record.remoteIP} (${reason})`);
1741
797
  }
1742
- if (record.incomingTerminationReason === null ||
1743
- record.incomingTerminationReason === undefined) {
798
+ if (record.incomingTerminationReason === null || record.incomingTerminationReason === undefined) {
1744
799
  record.incomingTerminationReason = reason;
1745
800
  this.incrementTerminationStat('incoming', reason);
1746
801
  }
@@ -1856,9 +911,7 @@ export class PortProxy {
1856
911
  incomingTerminationReason: null,
1857
912
  outgoingTerminationReason: null,
1858
913
  // Initialize NetworkProxy tracking fields
1859
- usingNetworkProxy: false,
1860
- // Initialize sleep detection fields
1861
- possibleSystemSleep: false,
914
+ usingNetworkProxy: false
1862
915
  };
1863
916
  // Apply keep-alive settings if enabled
1864
917
  if (this.settings.keepAlive) {
@@ -1968,73 +1021,13 @@ export class PortProxy {
1968
1021
  }
1969
1022
  }
1970
1023
  // If a forcedDomain is provided (port-based routing), use it; otherwise, use SNI-based lookup.
1971
- let domainConfig = forcedDomain
1024
+ const domainConfig = forcedDomain
1972
1025
  ? forcedDomain
1973
1026
  : serverName
1974
1027
  ? this.settings.domainConfigs.find((config) => config.domains.some((d) => plugins.minimatch(serverName, d)))
1975
1028
  : undefined;
1976
- // Enhanced logging to diagnose domain config selection issues
1977
- if (serverName && !domainConfig) {
1978
- console.log(`[${connectionId}] WARNING: No domain config found for SNI: ${serverName}`);
1979
- console.log(`[${connectionId}] Available domains:`, this.settings.domainConfigs.map(config => config.domains.join(',')).join(' | '));
1980
- }
1981
- else if (serverName && domainConfig) {
1982
- console.log(`[${connectionId}] Found domain config for SNI: ${serverName} -> ${domainConfig.domains.join(',')}`);
1983
- }
1984
- // For session resumption, ensure we use the domain config matching the resumed domain
1985
- // The resumed domain will be in serverName if this is a session resumption
1986
- if (serverName && connectionRecord.lockedDomain === serverName && serverName !== '') {
1987
- // Override domain config lookup for session resumption - crucial for certificate selection
1988
- // First try an exact match
1989
- let resumedDomainConfig = this.settings.domainConfigs.find((config) => config.domains.some((d) => plugins.minimatch(serverName, d)));
1990
- // If no exact match found, try a more flexible approach using domain parts
1991
- if (!resumedDomainConfig) {
1992
- console.log(`[${connectionId}] No exact domain config match for resumed domain: ${serverName}, trying flexible matching`);
1993
- // Extract domain parts (e.g., for "sub.example.com" try matching with "*.example.com")
1994
- const domainParts = serverName.split('.');
1995
- // Try matching with parent domains or wildcard patterns
1996
- if (domainParts.length > 2) {
1997
- const parentDomain = domainParts.slice(1).join('.');
1998
- const wildcardDomain = '*.' + parentDomain;
1999
- console.log(`[${connectionId}] Trying alternative patterns: ${parentDomain} or ${wildcardDomain}`);
2000
- resumedDomainConfig = this.settings.domainConfigs.find((config) => config.domains.some((d) => d === parentDomain ||
2001
- d === wildcardDomain ||
2002
- plugins.minimatch(parentDomain, d)));
2003
- }
2004
- }
2005
- if (resumedDomainConfig) {
2006
- domainConfig = resumedDomainConfig;
2007
- console.log(`[${connectionId}] Found domain config for resumed session: ${serverName} -> ${resumedDomainConfig.domains.join(',')}`);
2008
- }
2009
- else {
2010
- // As a fallback, use the first domain config with the same target IP if possible
2011
- if (domainConfig && domainConfig.targetIPs && domainConfig.targetIPs.length > 0) {
2012
- const targetIP = domainConfig.targetIPs[0];
2013
- const similarConfig = this.settings.domainConfigs.find((config) => config.targetIPs && config.targetIPs.includes(targetIP));
2014
- if (similarConfig && similarConfig !== domainConfig) {
2015
- console.log(`[${connectionId}] Using similar domain config with matching target IP for resumed domain: ${serverName}`);
2016
- domainConfig = similarConfig;
2017
- }
2018
- else {
2019
- console.log(`[${connectionId}] WARNING: Cannot find domain config for resumed domain: ${serverName}`);
2020
- // Log available domains to help diagnose the issue
2021
- console.log(`[${connectionId}] Available domains:`, this.settings.domainConfigs.map(config => config.domains.join(',')).join(' | '));
2022
- }
2023
- }
2024
- else {
2025
- console.log(`[${connectionId}] WARNING: Cannot find domain config for resumed domain: ${serverName}`);
2026
- // Log available domains to help diagnose the issue
2027
- console.log(`[${connectionId}] Available domains:`, this.settings.domainConfigs.map(config => config.domains.join(',')).join(' | '));
2028
- }
2029
- }
2030
- }
2031
1029
  // Save domain config in connection record
2032
1030
  connectionRecord.domainConfig = domainConfig;
2033
- // Always set the lockedDomain, even for non-SNI connections
2034
- if (serverName) {
2035
- connectionRecord.lockedDomain = serverName;
2036
- console.log(`[${connectionId}] Locked connection to domain: ${serverName}`);
2037
- }
2038
1031
  // IP validation is skipped if allowedIPs is empty
2039
1032
  if (domainConfig) {
2040
1033
  const effectiveAllowedIPs = [
@@ -2127,41 +1120,14 @@ export class PortProxy {
2127
1120
  initialTimeout = null;
2128
1121
  }
2129
1122
  initialDataReceived = true;
2130
- // Try to extract SNI - with enhanced logging for troubleshooting
1123
+ // Try to extract SNI
2131
1124
  let serverName = '';
2132
- // Record the chunk size for diagnostic purposes
2133
- console.log(`[${connectionId}] Received initial data: ${chunk.length} bytes`);
2134
1125
  if (isTlsHandshake(chunk)) {
2135
1126
  connectionRecord.isTLS = true;
2136
- console.log(`[${connectionId}] Detected TLS handshake`);
2137
1127
  if (this.settings.enableTlsDebugLogging) {
2138
1128
  console.log(`[${connectionId}] Extracting SNI from TLS handshake, ${chunk.length} bytes`);
2139
1129
  }
2140
- // Extract all TLS information including session resumption
2141
- const sniInfo = extractSNIInfo(chunk, this.settings.enableTlsDebugLogging);
2142
- if (sniInfo?.isResumption && sniInfo.resumedDomain) {
2143
- // This is a session resumption with a known domain
2144
- serverName = sniInfo.resumedDomain;
2145
- console.log(`[${connectionId}] TLS Session resumption detected for domain: ${serverName}`);
2146
- // When resuming a session, explicitly set the domain in the record to ensure proper routing
2147
- // This is CRITICAL for ensuring we select the correct backend/certificate
2148
- connectionRecord.lockedDomain = serverName;
2149
- // Force detailed logging for resumed sessions to help with troubleshooting
2150
- console.log(`[${connectionId}] Resuming TLS session for domain ${serverName} - will use original certificate`);
2151
- }
2152
- else {
2153
- // Normal SNI extraction
2154
- serverName = sniInfo?.serverName || '';
2155
- if (serverName) {
2156
- console.log(`[${connectionId}] Extracted SNI domain: ${serverName}`);
2157
- }
2158
- else {
2159
- console.log(`[${connectionId}] No SNI found in TLS handshake`);
2160
- }
2161
- }
2162
- }
2163
- else {
2164
- console.log(`[${connectionId}] Non-TLS connection detected`);
1130
+ serverName = extractSNI(chunk, this.settings.enableTlsDebugLogging) || '';
2165
1131
  }
2166
1132
  // Lock the connection to the negotiated SNI.
2167
1133
  connectionRecord.lockedDomain = serverName;
@@ -2269,37 +1235,6 @@ export class PortProxy {
2269
1235
  if (!this.settings.disableInactivityCheck &&
2270
1236
  !(record.hasKeepAlive && this.settings.keepAliveTreatment === 'immortal')) {
2271
1237
  const inactivityTime = now - record.lastActivity;
2272
- // Special handling for TLS keep-alive connections
2273
- if (record.hasKeepAlive &&
2274
- record.isTLS &&
2275
- inactivityTime > this.settings.inactivityTimeout / 2) {
2276
- // For TLS keep-alive connections that are getting stale, try to refresh before closing
2277
- if (!record.inactivityWarningIssued) {
2278
- console.log(`[${id}] TLS keep-alive connection from ${record.remoteIP} inactive for ${plugins.prettyMs(inactivityTime)}. ` +
2279
- `Attempting to preserve connection.`);
2280
- // Set warning flag but give a much longer grace period for TLS connections
2281
- record.inactivityWarningIssued = true;
2282
- // For TLS connections, extend the last activity time considerably
2283
- // This gives browsers more time to re-establish the connection properly
2284
- record.lastActivity = now - this.settings.inactivityTimeout / 3;
2285
- // Try to stimulate the connection with a probe packet
2286
- if (record.outgoing && !record.outgoing.destroyed) {
2287
- try {
2288
- // For TLS connections, send a proper TLS heartbeat-like packet
2289
- // This is just a small empty buffer that won't affect the TLS session
2290
- record.outgoing.write(Buffer.alloc(0));
2291
- if (this.settings.enableDetailedLogging) {
2292
- console.log(`[${id}] Sent TLS keep-alive probe packet`);
2293
- }
2294
- }
2295
- catch (err) {
2296
- console.log(`[${id}] Error sending TLS probe packet: ${err}`);
2297
- }
2298
- }
2299
- // Don't proceed to the normal inactivity check logic
2300
- continue;
2301
- }
2302
- }
2303
1238
  // Use extended timeout for extended-treatment keep-alive connections
2304
1239
  let effectiveTimeout = this.settings.inactivityTimeout;
2305
1240
  if (record.hasKeepAlive && this.settings.keepAliveTreatment === 'extended') {
@@ -2328,32 +1263,11 @@ export class PortProxy {
2328
1263
  }
2329
1264
  }
2330
1265
  else {
2331
- // MODIFIED: For TLS connections, be more lenient before closing
2332
- // For TLS browser connections, we need to handle certificate context properly
2333
- if (record.isTLS && record.hasKeepAlive) {
2334
- // For very long inactivity, it's better to close the connection
2335
- // so the browser establishes a new one with a fresh certificate context
2336
- if (inactivityTime > 6 * 60 * 60 * 1000) {
2337
- // 6 hours
2338
- console.log(`[${id}] TLS keep-alive connection from ${record.remoteIP} inactive for ${plugins.prettyMs(inactivityTime)}. ` +
2339
- `Closing to ensure proper certificate handling on browser reconnect.`);
2340
- this.cleanupConnection(record, 'tls_certificate_refresh');
2341
- }
2342
- else {
2343
- // For shorter inactivity periods, add grace period
2344
- console.log(`[${id}] TLS keep-alive connection from ${record.remoteIP} inactive for ${plugins.prettyMs(inactivityTime)}. ` +
2345
- `Adding extra grace period.`);
2346
- // Give additional time for browsers to reconnect properly
2347
- record.lastActivity = now - effectiveTimeout / 2;
2348
- }
2349
- }
2350
- else {
2351
- // For non-keep-alive or after warning, close the connection
2352
- console.log(`[${id}] Inactivity check: No activity on connection from ${record.remoteIP} ` +
2353
- `for ${plugins.prettyMs(inactivityTime)}.` +
2354
- (record.hasKeepAlive ? ' Despite keep-alive being enabled.' : ''));
2355
- this.cleanupConnection(record, 'inactivity');
2356
- }
1266
+ // For non-keep-alive or after warning, close the connection
1267
+ console.log(`[${id}] Inactivity check: No activity on connection from ${record.remoteIP} ` +
1268
+ `for ${plugins.prettyMs(inactivityTime)}.` +
1269
+ (record.hasKeepAlive ? ' Despite keep-alive being enabled.' : ''));
1270
+ this.cleanupConnection(record, 'inactivity');
2357
1271
  }
2358
1272
  }
2359
1273
  else if (inactivityTime <= effectiveTimeout && record.inactivityWarningIssued) {
@@ -2399,8 +1313,6 @@ export class PortProxy {
2399
1313
  async stop() {
2400
1314
  console.log('PortProxy shutting down...');
2401
1315
  this.isShuttingDown = true;
2402
- // Stop the session cleanup timer
2403
- stopSessionCleanupTimer();
2404
1316
  // Stop accepting new connections
2405
1317
  const closeServerPromises = this.netServers.map((server) => new Promise((resolve) => {
2406
1318
  if (!server.listening) {
@@ -2488,4 +1400,4 @@ export class PortProxy {
2488
1400
  console.log('PortProxy shutdown complete.');
2489
1401
  }
2490
1402
  }
2491
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wb3J0cHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLnBvcnRwcm94eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUF3SXpELDBDQUEwQztBQUMxQyxNQUFNLDRCQUE0QixHQUEyQjtJQUMzRCxVQUFVLEVBQUUsS0FBSyxFQUFXLDZCQUE2QjtJQUN6RCxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLG1CQUFtQjtJQUNwRCxlQUFlLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsNEJBQTRCO0lBQzdELE9BQU8sRUFBRSxJQUFJLENBQWUscUJBQXFCO0NBQ2xELENBQUM7QUFFRixxRUFBcUU7QUFDckUsTUFBTSxlQUFlO0lBYW5CLFlBQVksTUFBd0M7UUFaNUMsVUFBSyxHQUFHLElBQUksR0FBRyxFQUEyQixDQUFDO1FBRTNDLGlCQUFZLEdBQTBCLElBQUksQ0FBQztRQUMzQyxvQkFBZSxHQUFXLENBQUMsQ0FBQztRQUM1QixlQUFVLEdBQUc7WUFDbkIsSUFBSSxFQUFFLENBQUM7WUFDUCxNQUFNLEVBQUUsQ0FBQztZQUNULFdBQVcsRUFBRSxDQUFDO1lBQ2QsU0FBUyxFQUFFLENBQUM7WUFDWixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUM7UUFHQSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyw0QkFBNEIsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQzdELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLEdBQUcsQ0FBQyxHQUFXO1FBQ3BCLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1lBQUUsT0FB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
1403
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wb3J0cHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLnBvcnRwcm94eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUF1R3pEOzs7Ozs7R0FNRztBQUNILFNBQVMsVUFBVSxDQUFDLE1BQWMsRUFBRSxnQkFBeUIsS0FBSztJQUNoRSxJQUFJLENBQUM7UUFDSCx1Q0FBdUM7UUFDdkMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RCLElBQUksYUFBYTtnQkFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7WUFDbEUsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELCtDQUErQztRQUMvQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksVUFBVSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLElBQUksYUFBYTtnQkFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHFDQUFxQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ2xGLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCw4Q0FBOEM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksYUFBYTtZQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLFlBQVksSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRS9FLHNCQUFzQjtRQUN0QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFD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