File size: 1,358 Bytes
d32a453
 
 
5cdcb1c
 
 
 
 
 
 
 
d572193
 
5cdcb1c
 
 
 
d572193
 
 
5cdcb1c
 
 
 
 
 
d572193
5cdcb1c
d572193
5cdcb1c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d572193
 
d32a453
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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;

// Handle the HTTP CONNECT method (for HTTPS tunneling)
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, () => {
    // Send 200 Connection Established to the client
    clientSocket.write('HTTP/1.1 200 Connection Established\r\n' +
                       'Proxy-agent: Node.js-Proxy\r\n' +
                       '\r\n');

    serverSocket.write(head);

    // Pipe data between client and server
    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}`);
});