Browse Source

Merge branch 'master' of erinn.io:netsim

cecylia 8 years ago
parent
commit
65c78ce048
2 changed files with 45 additions and 15 deletions
  1. 19 14
      js/ui.js
  2. 26 1
      phaser.inc.php

+ 19 - 14
js/ui.js

@@ -44,15 +44,15 @@ function createPacketEditor(index, packet) {
 			str += "<option"+(packet.from == level.devices[i].id ? " selected" : "")+">"+level.devices[i].id+"</option>";
 			str += "<option"+(packet.from == level.devices[i].id ? " selected" : "")+">"+level.devices[i].id+"</option>";
 		}
 		}
 	}
 	}
-	str += "</select><br><fieldset><legend>Network Layer</legend>";
-	str += "srcip: <input type=\"text\" id=\"srcip\" value=\""+payloadStr(packet,"network","srcip")+"\"><br>";
-	str += "dstip: <input type=\"text\" id=\"dstip\" value=\""+payloadStr(packet,"network","dstip")+"\">";
-	str += `</fieldset>
-	<fieldset>
-	<legend>Transport Layer</legend>
-		payload: <input type=\"text\" id=\"payload\"></input><br>
-		proto: <input type=\"text\" id=\"other\"></input>
-	</fieldset>`;
+	str += "</select><br>";
+
+	for (var i = 0; i < packetFields.length; i++) {
+		str += "<fieldset><legend>"+packetFields[i].layer+"</legend>";
+		for (var j = 0; j < packetFields[i].fields.length; j++) {
+			str += packetFields[i].fields[j]+":<br><input type=\"text\" id=\""+packetFields[i].layer+"_"+packetFields[i].fields[j]+"\" value=\""+payloadStr(packet, packetFields[i].layer, packetFields[i].fields[j])+"\"><br>";
+		}
+		str += "</fieldset>";
+	}
 
 
 	$("#editor").html(str);
 	$("#editor").html(str);
 	$('#editor').dialog({
 	$('#editor').dialog({
@@ -67,13 +67,18 @@ function createPacketEditor(index, packet) {
 function updatePlayerPacket(index) {
 function updatePlayerPacket(index) {
 	playerPackets[index] = {
 	playerPackets[index] = {
 		from: $("#pktFrom").val(),
 		from: $("#pktFrom").val(),
-		payload:{
-			network:{
-				srcip: $("#srcip").val(),
-				dstip: $("#dstip").val()
+		payload:{}
+	};
+
+	for (var i = 0; i < packetFields.length; i++) {
+		playerPackets[index].payload[packetFields[i].layer] = {};
+		for (var j = 0; j < packetFields[i].fields.length; j++) {
+			var val = $("#"+packetFields[i].layer+"_"+packetFields[i].fields[j]).val();
+			if (val != "") {
+				playerPackets[index].payload[packetFields[i].layer][ packetFields[i].fields[j] ] = val;
 			}
 			}
 		}
 		}
-	};
+	}
 
 
 	savePlayerPackets();
 	savePlayerPackets();
 }
 }

+ 26 - 1
phaser.inc.php

@@ -5,6 +5,18 @@ var level = <?php include 'levels/'.$leveldata['filename'].'.json'; ?>;
 var devices = {};
 var devices = {};
 var playerPackets = [];
 var playerPackets = [];
 
 
+var packetFields = [
+	{layer:"network", fields:[
+		"srcip", "dstip"
+	]},
+	{layer:"transport", fields:[
+		"proto", "ttl"
+	]},
+	{layer:"application", fields:[
+		"payload"
+	]}
+];
+
 var vpWidth = window.innerWidth || document.documentElement.clientWidth || document.getElementsByTagName('body')[0].clientWidth;
 var vpWidth = window.innerWidth || document.documentElement.clientWidth || document.getElementsByTagName('body')[0].clientWidth;
 var vpHeight = window.innerHeight|| document.documentElement.clientHeight|| document.getElementsByTagName('body')[0].clientHeight;
 var vpHeight = window.innerHeight|| document.documentElement.clientHeight|| document.getElementsByTagName('body')[0].clientHeight;
 
 
@@ -144,6 +156,19 @@ function donePacket() {
 function satisfiesTrigger(pkt, t) {
 function satisfiesTrigger(pkt, t) {
 	if (pkt.dst != t.device) return false;
 	if (pkt.dst != t.device) return false;
 	if (!t.hasOwnProperty("payload")) return true;
 	if (!t.hasOwnProperty("payload")) return true;
-	return pkt.payload.network.dstip == t.payload.network.dstip && pkt.payload.network.srcip == t.payload.network.srcip;
+	if (!pkt.hasOwnProperty("payload")) return false;
+
+	var layers = Object.keys(t.payload);
+	for (var i = 0; i < layers.length; i++) {
+		if (!pkt.payload.hasOwnProperty(layers[i])) return false;
+
+		var fields = Object.keys(t.payload[ layers[i] ]);
+		for (var j = 0; j < fields.length; j++) {
+			if (!pkt.payload[ layers[i] ].hasOwnProperty(fields[j])) return false;
+			if (pkt.payload[ layers[i] ][ fields[j] ] != t.payload[ layers[i] ][ fields[j] ]) return false;
+		}
+	}
+
+	return true;
 }
 }