update
This commit is contained in:
@ -10,7 +10,6 @@ import { HttpProxyBridge } from './http-proxy-bridge.js';
|
||||
import { TimeoutManager } from './timeout-manager.js';
|
||||
import { RouteManager } from './route-manager.js';
|
||||
import type { ForwardingHandler } from '../../forwarding/handlers/base-handler.js';
|
||||
import { RedirectHandler, StaticHandler } from '../http-proxy/handlers/index.js';
|
||||
|
||||
/**
|
||||
* Handles new connection processing and setup logic with support for route-based configuration
|
||||
@ -389,16 +388,6 @@ export class RouteConnectionHandler {
|
||||
case 'forward':
|
||||
return this.handleForwardAction(socket, record, route, initialChunk);
|
||||
|
||||
case 'redirect':
|
||||
return this.handleRedirectAction(socket, record, route);
|
||||
|
||||
case 'block':
|
||||
return this.handleBlockAction(socket, record, route);
|
||||
|
||||
case 'static':
|
||||
this.handleStaticAction(socket, record, route, initialChunk);
|
||||
return;
|
||||
|
||||
case 'socket-handler':
|
||||
logger.log('info', `Handling socket-handler action for route ${route.name}`, {
|
||||
connectionId,
|
||||
@ -718,73 +707,6 @@ export class RouteConnectionHandler {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle a redirect action for a route
|
||||
*/
|
||||
private handleRedirectAction(
|
||||
socket: plugins.net.Socket,
|
||||
record: IConnectionRecord,
|
||||
route: IRouteConfig
|
||||
): void {
|
||||
// For TLS connections, we can't do redirects at the TCP level
|
||||
if (record.isTLS) {
|
||||
logger.log('warn', `Cannot redirect TLS connection ${record.id} at TCP level`, {
|
||||
connectionId: record.id,
|
||||
component: 'route-handler'
|
||||
});
|
||||
socket.end();
|
||||
this.connectionManager.cleanupConnection(record, 'tls_redirect_error');
|
||||
return;
|
||||
}
|
||||
|
||||
// Delegate to HttpProxy's RedirectHandler
|
||||
RedirectHandler.handleRedirect(socket, route, {
|
||||
connectionId: record.id,
|
||||
connectionManager: this.connectionManager,
|
||||
settings: this.settings
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle a block action for a route
|
||||
*/
|
||||
private handleBlockAction(
|
||||
socket: plugins.net.Socket,
|
||||
record: IConnectionRecord,
|
||||
route: IRouteConfig
|
||||
): void {
|
||||
const connectionId = record.id;
|
||||
|
||||
if (this.settings.enableDetailedLogging) {
|
||||
logger.log('info', `Blocking connection ${connectionId} based on route '${route.name || 'unnamed'}'`, {
|
||||
connectionId,
|
||||
routeName: route.name || 'unnamed',
|
||||
component: 'route-handler'
|
||||
});
|
||||
}
|
||||
|
||||
// Simply close the connection
|
||||
socket.end();
|
||||
this.connectionManager.initiateCleanupOnce(record, 'route_blocked');
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle a static action for a route
|
||||
*/
|
||||
private async handleStaticAction(
|
||||
socket: plugins.net.Socket,
|
||||
record: IConnectionRecord,
|
||||
route: IRouteConfig,
|
||||
initialChunk?: Buffer
|
||||
): Promise<void> {
|
||||
// Delegate to HttpProxy's StaticHandler
|
||||
await StaticHandler.handleStatic(socket, route, {
|
||||
connectionId: record.id,
|
||||
connectionManager: this.connectionManager,
|
||||
settings: this.settings
|
||||
}, record, initialChunk);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle a socket-handler action for a route
|
||||
*/
|
||||
@ -807,9 +729,22 @@ export class RouteConnectionHandler {
|
||||
return;
|
||||
}
|
||||
|
||||
// Create route context for the handler
|
||||
const routeContext = this.createRouteContext({
|
||||
connectionId: record.id,
|
||||
port: record.localPort,
|
||||
domain: record.lockedDomain,
|
||||
clientIp: record.remoteIP,
|
||||
serverIp: socket.localAddress || '',
|
||||
isTls: record.isTLS || false,
|
||||
tlsVersion: record.tlsVersion,
|
||||
routeName: route.name,
|
||||
routeId: route.id,
|
||||
});
|
||||
|
||||
try {
|
||||
// Call the handler
|
||||
const result = route.action.socketHandler(socket);
|
||||
// Call the handler with socket AND context
|
||||
const result = route.action.socketHandler(socket, routeContext);
|
||||
|
||||
// Handle async handlers properly
|
||||
if (result instanceof Promise) {
|
||||
|
Reference in New Issue
Block a user