| const http = require('http'); |
| const net = require('net'); |
| const url = require('url'); |
|
|
| const PORT = 7860; |
|
|
| const server = http.createServer((req, res) => { |
| res.writeHead(200, { 'Content-Type': 'text/plain' }); |
| res.end('Gemini Proxy is running. Use HTTPS_PROXY environment variable.'); |
| }); |
|
|
| var counter=0; |
|
|
| |
| server.on('connect', (req, clientSocket, head) => { |
| const { port, hostname } = url.parse(`//${req.url}`, false, true); |
|
|
| console.log(`${counter}: Tunneling to: ${hostname}:${port}`); |
|
|
| counter++; |
|
|
| const serverSocket = net.connect(port || 443, hostname, () => { |
| |
| clientSocket.write('HTTP/1.1 200 Connection Established\r\n' + |
| 'Proxy-agent: Node.js-Proxy\r\n' + |
| '\r\n'); |
|
|
| serverSocket.write(head); |
|
|
| |
| serverSocket.pipe(clientSocket); |
| clientSocket.pipe(serverSocket); |
| }); |
|
|
| serverSocket.on('error', (err) => { |
| console.error(`Error connecting to ${hostname}:`, err.message); |
| clientSocket.end(); |
| }); |
|
|
| clientSocket.on('error', (err) => { |
| console.error('Client socket error:', err.message); |
| serverSocket.end(); |
| }); |
| }); |
|
|
| server.listen(PORT, () => { |
| console.log(`Gemini Proxy server running on port ${PORT}`); |
| }); |