mirror of
https://github.com/wisplite/BLE-mesh-sim.git
synced 2026-10-30 13:32:21 -05:00
fixed the routing system so it can't just cheat and send data over the incoming connection
This commit is contained in:
@@ -101,10 +101,10 @@ var forwardTable = {};
|
|||||||
var onEdgeEngine = new CompleteNodeOnEdgeEngine(network, nodes, dotNodes, edges, forwardTable);
|
var onEdgeEngine = new CompleteNodeOnEdgeEngine(network, nodes, dotNodes, edges, forwardTable);
|
||||||
onEdgeEngine.createEdgesTable();
|
onEdgeEngine.createEdgesTable();
|
||||||
onEdgeEngine.initMovement();
|
onEdgeEngine.initMovement();
|
||||||
onEdgeEngine.setArrivalCallback(({ from, to, dot }) => {
|
onEdgeEngine.setArrivalCallback(async ({ from, to, dot }) => {
|
||||||
var ttl = parseInt(dot.id.split('-')[2]);
|
var ttl = parseInt(dot.id.split('-')[2]);
|
||||||
if (stillRouting) {
|
if (stillRouting) {
|
||||||
routePacket(to, dot.id.split('-')[3], dot.id);
|
await routePacket(to, dot.id.split('-')[4], dot.id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (document.getElementById('showTTL').checked) {
|
if (document.getElementById('showTTL').checked) {
|
||||||
@@ -233,7 +233,24 @@ function quickRoute(startNode, packetInfo, fromNode) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function routePacket(currentNode, goalNode, packetInfo, first=false) {
|
async function sleep(ms) {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, ms));
|
||||||
|
}
|
||||||
|
|
||||||
|
async function routePacket(currentNode, goalNode, packetInfo, first=false) {
|
||||||
|
if (!nodeTable[currentNode]) {
|
||||||
|
consoleLog(`Node ${currentNode} not found. Dropping packet.`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!nodeTable[goalNode]) {
|
||||||
|
consoleLog(`Node ${goalNode} not found. Dropping packet.`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (nodeTable[currentNode].emergencyIncoming.length > 0) {
|
||||||
|
nodeTable[currentNode].emergencyIncoming = []
|
||||||
|
nodeTable[packetInfo.split('-')[3]].emergencyOutgoing = []
|
||||||
|
edges.remove({'id': `${packetInfo.split('-')[3]}->${currentNode}`})
|
||||||
|
}
|
||||||
stillRouting = true;
|
stillRouting = true;
|
||||||
const packetId = packetInfo.split('-')[0];
|
const packetId = packetInfo.split('-')[0];
|
||||||
var packetShift = generateRealisticLabel();
|
var packetShift = generateRealisticLabel();
|
||||||
@@ -260,10 +277,22 @@ function routePacket(currentNode, goalNode, packetInfo, first=false) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ttl--;
|
ttl--;
|
||||||
const nextNode = nodeTable[currentNode].routingTable[goalNode];
|
let nextNode = nodeTable[currentNode].routingTable[goalNode];
|
||||||
|
if (!nodeTable[currentNode].outgoing.includes(nextNode) && nodeTable[currentNode].emergencyOutgoing.length == 0 && nodeTable[nextNode].emergencyIncoming.length == 0) {
|
||||||
|
// use emergency connection slot
|
||||||
|
nodeTable[currentNode].emergencyOutgoing.push(nextNode);
|
||||||
|
nodeTable[nextNode].emergencyIncoming.push(currentNode);
|
||||||
|
await sleep(1000);
|
||||||
|
connectNodes(currentNode, nextNode);
|
||||||
|
} else if (nodeTable[currentNode].emergencyOutgoing.length != 0 || nodeTable[nextNode].emergencyIncoming.length != 0) {
|
||||||
|
consoleLog(`Couldn't connect to ${nextNode}. Dropping packet.`);
|
||||||
|
console.log(nodeTable[currentNode])
|
||||||
|
stillRouting = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (nextNode) {
|
if (nextNode) {
|
||||||
var movingNode = {
|
var movingNode = {
|
||||||
id: `${packetId}-${packetShift}-${ttl}-${goalNode}`,
|
id: `${packetId}-${packetShift}-${ttl}-${currentNode}-${goalNode}`,
|
||||||
label: packetId + `-${ttl}`,
|
label: packetId + `-${ttl}`,
|
||||||
shape: 'dot',
|
shape: 'dot',
|
||||||
size: 10,
|
size: 10,
|
||||||
@@ -274,9 +303,14 @@ function routePacket(currentNode, goalNode, packetInfo, first=false) {
|
|||||||
font: {color: document.getElementById('darkMode').checked ? '#e0e0e0' : '#000'}
|
font: {color: document.getElementById('darkMode').checked ? '#e0e0e0' : '#000'}
|
||||||
};
|
};
|
||||||
onEdgeEngine.createDotNode(movingNode, currentNode, nextNode);
|
onEdgeEngine.createDotNode(movingNode, currentNode, nextNode);
|
||||||
|
if (document.getElementById('showTTL').checked) {
|
||||||
|
edges.update({id: `${currentNode}->${nextNode}`, color: {color: smoothColorTransition('#eb4034', '#40eb34', 0, TTL, ttl+1), highlight: smoothColorTransition('#eb4034', '#40eb34', 0, TTL, ttl)}});
|
||||||
} else {
|
} else {
|
||||||
consoleLog(`No route found from ${currentNode} to ${goalNode}. Dropping packet.`);
|
edges.update({id: `${currentNode}->${nextNode}`, color: {color: 'yellow', highlight: 'yellow'}});
|
||||||
console.log(nodeTable[currentNode].routingTable);
|
}
|
||||||
|
} else {
|
||||||
|
consoleLog(`No route found from ${currentNode} to ${goalNode} via ${nextNode}. Dropping packet.`);
|
||||||
|
console.log(nodeTable[currentNode].routingTable)
|
||||||
stillRouting = false;
|
stillRouting = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -589,7 +623,7 @@ function onNodeAdd() {
|
|||||||
document.getElementById('addNode').addEventListener('click', function() {
|
document.getElementById('addNode').addEventListener('click', function() {
|
||||||
const nodeId = generateRealisticLabel();
|
const nodeId = generateRealisticLabel();
|
||||||
nodes.add({id: nodeId, label: nodeId});
|
nodes.add({id: nodeId, label: nodeId});
|
||||||
nodeTable[nodeId] = {'incoming': [], 'outgoing': [], 'packetCache': [], 'routingTable': {}};
|
nodeTable[nodeId] = {'incoming': [], 'outgoing': [], 'emergencyIncoming': [], 'emergencyOutgoing': [], 'packetCache': [], 'routingTable': {}};
|
||||||
onNodeAdd();
|
onNodeAdd();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -600,7 +634,7 @@ network.on('click', function(properties) {
|
|||||||
if (document.getElementById('quickPlace').checked) {
|
if (document.getElementById('quickPlace').checked) {
|
||||||
const nodeId = generateRealisticLabel();
|
const nodeId = generateRealisticLabel();
|
||||||
nodes.add({id: nodeId, label: nodeId, x: properties.pointer.canvas.x, y: properties.pointer.canvas.y});
|
nodes.add({id: nodeId, label: nodeId, x: properties.pointer.canvas.x, y: properties.pointer.canvas.y});
|
||||||
nodeTable[nodeId] = {'incoming': [], 'outgoing': [], 'packetCache': [], 'routingTable': {}};
|
nodeTable[nodeId] = {'incoming': [], 'outgoing': [], 'emergencyIncoming': [], 'emergencyOutgoing': [], 'packetCache': [], 'routingTable': {}};
|
||||||
onNodeAdd();
|
onNodeAdd();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -615,7 +649,7 @@ network.on('doubleClick', function(properties) {
|
|||||||
}
|
}
|
||||||
const nodeId = generateRealisticLabel();
|
const nodeId = generateRealisticLabel();
|
||||||
nodes.add({id: nodeId, label: nodeId, x: properties.pointer.canvas.x, y: properties.pointer.canvas.y});
|
nodes.add({id: nodeId, label: nodeId, x: properties.pointer.canvas.x, y: properties.pointer.canvas.y});
|
||||||
nodeTable[nodeId] = {'incoming': [], 'outgoing': [], 'packetCache': [], 'routingTable': {}};
|
nodeTable[nodeId] = {'incoming': [], 'outgoing': [], 'emergencyIncoming': [], 'emergencyOutgoing': [], 'packetCache': [], 'routingTable': {}};
|
||||||
onNodeAdd();
|
onNodeAdd();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -706,7 +740,7 @@ document.getElementById('createRandomGraphConfirm').addEventListener('click', fu
|
|||||||
const interval = setInterval(() => {
|
const interval = setInterval(() => {
|
||||||
const nodeId = generateRealisticLabel();
|
const nodeId = generateRealisticLabel();
|
||||||
nodes.add({id: nodeId, label: nodeId, x: Math.random() * 1000, y: Math.random() * 1000});
|
nodes.add({id: nodeId, label: nodeId, x: Math.random() * 1000, y: Math.random() * 1000});
|
||||||
nodeTable[nodeId] = {'incoming': [], 'outgoing': [], 'packetCache': [], 'routingTable': {}};
|
nodeTable[nodeId] = {'incoming': [], 'outgoing': [], 'emergencyIncoming': [], 'emergencyOutgoing': [], 'packetCache': [], 'routingTable': {}};
|
||||||
onNodeAdd();
|
onNodeAdd();
|
||||||
nodeCounter++;
|
nodeCounter++;
|
||||||
if (nodeCounter >= nodeCount) {
|
if (nodeCounter >= nodeCount) {
|
||||||
@@ -811,7 +845,7 @@ window.onload = function() {
|
|||||||
let consoleInputHistory = [];
|
let consoleInputHistory = [];
|
||||||
let consoleInputHistoryIndex = 0;
|
let consoleInputHistoryIndex = 0;
|
||||||
// Handle Enter key for command execution
|
// Handle Enter key for command execution
|
||||||
consoleInput.addEventListener('keypress', function(event) {
|
consoleInput.addEventListener('keypress', async function(event) {
|
||||||
if (event.key === 'Enter') {
|
if (event.key === 'Enter') {
|
||||||
const command = consoleInput.value.trim();
|
const command = consoleInput.value.trim();
|
||||||
if (command) { // Only add non-empty commands to history
|
if (command) { // Only add non-empty commands to history
|
||||||
@@ -842,10 +876,10 @@ window.onload = function() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
document.getElementById('resetTTLColors').click();
|
document.getElementById('resetTTLColors').click();
|
||||||
const packetInfo = `${generateRealisticLabel()}-${generateRealisticLabel()}-${TTL}-${args.split('->')[1]}`;
|
const packetInfo = `${generateRealisticLabel()}-${generateRealisticLabel()}-${TTL}-${args.split('->')[0]}-${args.split('->')[1]}`;
|
||||||
nodes.update({id: args.split('->')[0], color: {background: '#ff00d9'}});
|
nodes.update({id: args.split('->')[0], color: {background: '#ff00d9'}});
|
||||||
nodes.update({id: args.split('->')[1], color: {background: '#ff00d9'}});
|
nodes.update({id: args.split('->')[1], color: {background: '#ff00d9'}});
|
||||||
routePacket(args.split('->')[0], args.split('->')[1], packetInfo, true);
|
await routePacket(args.split('->')[0], args.split('->')[1], packetInfo, true);
|
||||||
break;
|
break;
|
||||||
case 'exit':
|
case 'exit':
|
||||||
document.getElementById('consoleContainer').style.display = 'none';
|
document.getElementById('consoleContainer').style.display = 'none';
|
||||||
|
|||||||
Reference in New Issue
Block a user