-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
63 lines (52 loc) · 1.75 KB
/
index.js
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
const net = require("net");
const tunnelDataHandler = require("./tunnelDataHandler");
const logger = require("./logger");
const bridge = require("./bridge/connection");
//Persistance Collections
const database = require("./database/db.js");
const serverPort = process.env.GATEWAY_SERVER_PORT || 3001;
database.connectToDatabase();
function onError(clientSocket, error) {
logger.warn(`Client socket error: ${error}`);
logger.warn(`${clientSocket.remoteAddress}:${clientSocket.remotePort}`);
try {
bridge.deleteSocketConnectionBySocket(clientSocket);
} catch (error) {
logger.warn(error);
}
}
function onEnd(clientSocket) {
logger.verbose("Client socket closed.");
logger.verbose(`${clientSocket.remoteAddress}:${clientSocket.remotePort}`);
try {
bridge.deleteSocketConnectionBySocket(clientSocket);
} catch (error) {
logger.warn(error);
}
}
function onData(clientSocket, data) {
try {
tunnelDataHandler(clientSocket, data);
} catch (error) {
logger.warn(`Message process error: ${error}`);
}
}
// Create a TCP server that listens for incoming connections
const planeTcpServer = net.createServer((clientSocket) => {
logger.info(`Device connected: ${clientSocket.remoteAddress}:${clientSocket.remotePort}`);
// Handle errors, remove socket from bridge if it is exists
clientSocket.on("error", (error) => {
onError(clientSocket, error);
});
// Handle the connection end event, remove socket from bridge if it is exists
clientSocket.on("end", () => {
onEnd(clientSocket);
});
// When data is received from a client, decrypt and pass to processing
clientSocket.on("data", (data) => {
onData(clientSocket, data);
});
});
planeTcpServer.listen(serverPort, () => {
logger.info(`ELFIN IoT TCP proxy server is listening on port ${serverPort}`);
});