Skip to content

Commit

Permalink
Simplify ipv4 protocol decode logic
Browse files Browse the repository at this point in the history
  • Loading branch information
jmaxxz committed Mar 8, 2015
1 parent 31f6edf commit 8609a20
Showing 1 changed file with 14 additions and 26 deletions.
40 changes: 14 additions & 26 deletions decode/ipv4.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
var ICMP = require("./icmp");
var IGMP = require("./igmp");
var TCP = require("./tcp");
var UDP = require("./udp");
var IPv6 = require("./ipv6");
var IPv4Addr = require("./ipv4_addr");
var protocols = new Array(256);
function init(){
protocols[1] = require("./icmp");
protocols[2] = require("./igmp");
protocols[4] = IPv4;
protocols[6] = require("./tcp");
protocols[17] = require("./udp");
protocols[41] = require("./ipv6");
}
init();

function IPFlags() {
this.reserved = undefined;
Expand Down Expand Up @@ -92,28 +97,11 @@ IPv4.prototype.decode = function (raw_packet, offset) {
offset = orig_offset + this.headerLength;

//https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
switch (this.protocol) {
case 1:
this.payload = new ICMP();
this.payload.decode(raw_packet, offset);
break;
case 2:
this.payload = new IGMP().decode(raw_packet, offset);
break;
case 4:
this.payload = new IPv4().decode(raw_packet, offset);
break;
case 6:
this.payload = new TCP().decode(raw_packet, offset, this.length - this.headerLength);
break;
case 17:
this.payload = new UDP().decode(raw_packet, offset);
break;
case 41:
this.payload = new IPv6().decode(raw_packet, offset);
break;
default:
var ProtocolDecoder = protocols[this.protocol];
if(ProtocolDecoder === undefined) {
this.protocolName = "Unknown";
} else {
this.payload = new ProtocolDecoder().decode(raw_packet, offset, this.length - this.headerLength);
}

return this;
Expand Down

0 comments on commit 8609a20

Please sign in to comment.