chimney, cleanup, OPT parsing
This commit is contained in:
		
							parent
							
								
									8643e6e3c7
								
							
						
					
					
						commit
						bd433a8ddf
					
				| @ -32,6 +32,42 @@ pdns.unpackHeader = function (i) { | ||||
| 
 | ||||
| pdns._unpackLabels = exports.DNS_UNPACK_LABELS || require('./dns.unpack-labels.js').DNS_UNPACK_LABELS; | ||||
| 
 | ||||
| pdns.unpackOpt = function (ab, rec) { | ||||
|   var dv; | ||||
| 
 | ||||
|   // https://tools.ietf.org/html/rfc6891#section-6
 | ||||
|   console.log('OPT is not yet supported'); | ||||
|   if ('undefined' !== typeof packet.edns_version) { | ||||
|     console.warn("More that one OPT, should respond with FORMERR, but not implmentede"); | ||||
|   } | ||||
|   if (packet.name) { | ||||
|     console.warn("name '" + packet.name + "' should not exist for type OPT 0x29 41"); | ||||
|   } | ||||
|   packet.payload = rec.class; | ||||
|   // TODO index into the correct place in the ArrayBuffer
 | ||||
|   dv = new DataView(new ArrayBuffer(4)); | ||||
|   // rec.ttl is actually 1 (extended_rcode), 1 (edns_version), 2:1 (DO), 2:7 (Z)
 | ||||
|   dv.setUint32(0, packet.ttl); | ||||
|   // is xrcode this edns_options?
 | ||||
|   packet.xrcode = '0x' + dv.getUint8(0, false).toString(16); | ||||
|   if ('0x0' === packet.xrcode) { | ||||
|     // use 4-bit rcode instead of 12-bit rcode
 | ||||
|   } | ||||
|   else { | ||||
|     // shift xrcode up by 4 bits (8 bits + 4 trailing 0s)
 | ||||
|     // OR with existing rcode (now 12-bits total)
 | ||||
|     console.warn('extended_rcode not supported yet'); | ||||
|   } | ||||
|   packet.edns_version = dv.getUint8(1, false); | ||||
|   packet.do = dv.getUint8(2, false) & 0x8000; // 1000 0000
 | ||||
|   packet.z = dv.getUint16(2, false) & 0x7FFF; // 0111 1111
 | ||||
|     /* | ||||
| "edns_options": [], | ||||
| "payload": 4096, | ||||
| "edns_version": 0, | ||||
| "do": 0 | ||||
|   */ | ||||
| }; | ||||
| pdns.unpack = function (ab) { | ||||
|   if (ab.buffer) { | ||||
|     ab = ab.buffer; | ||||
| @ -175,7 +211,6 @@ pdns.unpack = function (ab) { | ||||
|   packet.header.id = id; | ||||
| 
 | ||||
| 
 | ||||
|   console.log('qdcount', packet.qdcount); | ||||
|   packet.question = []; | ||||
|   for (i = 0; i < packet.qdcount; i += 1) { | ||||
|     rec = unpackQuestion(ab, dv, ui8, total); | ||||
| @ -183,7 +218,6 @@ pdns.unpack = function (ab) { | ||||
|     packet.question.push(rec); | ||||
|   } | ||||
| 
 | ||||
|   console.log('ancount', packet.ancount); | ||||
|   packet.answer = []; | ||||
|   for (i = 0; i < packet.ancount; i += 1) { | ||||
|     rec = unpackAnswer(ab, dv, ui8, total); | ||||
| @ -191,7 +225,6 @@ pdns.unpack = function (ab) { | ||||
|     packet.answer.push(rec); | ||||
|   } | ||||
| 
 | ||||
|   console.log('nscount', packet.nscount); | ||||
|   packet.authority = []; | ||||
|   for (i = 0; i < packet.nscount; i += 1) { | ||||
|     rec = unpackAnswer(ab, dv, ui8, total); | ||||
| @ -199,11 +232,15 @@ pdns.unpack = function (ab) { | ||||
|     packet.authority.push(rec); | ||||
|   } | ||||
| 
 | ||||
|   console.log('arcount', packet.arcount); | ||||
|   packet.additional = []; | ||||
|   for (i = 0; i < packet.arcount; i += 1) { | ||||
|     rec = unpackAnswer(ab, dv, ui8, total); | ||||
|     total += rec.byteLength; | ||||
|     if (0x29 === rec.type) { | ||||
|       // OPT 41 (0x29)
 | ||||
|       pdns.unpackOpt(ab, rec); | ||||
|       continue; | ||||
|     } | ||||
|     packet.additional.push(rec); | ||||
|   } | ||||
| 
 | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| (function (exports) { | ||||
| 'use strict'; | ||||
| 
 | ||||
| //  Used to provide the ability to associate some arbitrary and unformatted text
 | ||||
| // Used to provide the ability to associate some arbitrary and unformatted text
 | ||||
| // with a host or other name, such as a human readable information about a server
 | ||||
| // network, data center, and other accounting information.
 | ||||
| 
 | ||||
| @ -9,26 +9,10 @@ var unpackLabels = exports.DNS_UNPACK_LABELS || require('./dns.unpack-labels.js' | ||||
| 
 | ||||
| exports.DNS_TYPE_TXT = function (ab, packet, record) { | ||||
| 
 | ||||
|   var labels = unpackLabels(new Uint8Array(ab), record.rdstart, { byteLength: 0, cpcount: 0, labels: [], name: '' }); | ||||
|   record.data = [ labels.name ]; | ||||
| 
 | ||||
|   var rdataAb = ab.slice(record.rdstart, record.rdstart + record.rdlength); | ||||
|   console.log(rdataAb); | ||||
|   var dv = new DataView(rdataAb); | ||||
|   // var d = '';
 | ||||
|   // var string = '';
 | ||||
|   // for (var i = 0; i < dv.byteLength; i+= 1){
 | ||||
| 
 | ||||
|   //   d = dv.getUint8(i, false);
 | ||||
|   //   string = String.fromCharCode(d);
 | ||||
|   //   console.log("data at: " + i + " is: " + string);
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   //
 | ||||
|   record.data = [ unpackLabels(new Uint8Array(ab), record.rdstart, { byteLength: 0, cpcount: 0, labels: [], name: '' }).name ]; | ||||
| 
 | ||||
|   var l = unpackLabels(new Uint8Array(ab), record.rdstart, { byteLength: 0, cpcount: 0, labels: [], name: '' }); | ||||
| 
 | ||||
|   console.log("labels: " + JSON.stringify(l)); | ||||
|   return record; | ||||
| }; | ||||
| 
 | ||||
| }('undefined' !== typeof window ? window : exports)); | ||||
|  | ||||
| @ -11,6 +11,7 @@ var types = exports.DNS_TYPES = { | ||||
| , TXT: 		0x10  //  16
 | ||||
| , AAAA: 	0x1c  //  28
 | ||||
| , SRV: 		0x21  //  33
 | ||||
| , OPT: 		0x29  //  41
 | ||||
| , ANY: 		0xff  // 255
 | ||||
| }; | ||||
| // and in reverse
 | ||||
| @ -18,4 +19,4 @@ Object.keys(types).forEach(function (key) { | ||||
|   types[types[key]] = key; | ||||
| }); | ||||
| 
 | ||||
| }('undefined' !== typeof window ? window : exports)); | ||||
| }('undefined' !== typeof window ? window : exports)); | ||||
|  | ||||
| @ -78,12 +78,12 @@ | ||||
|     try { | ||||
|       deepLike(expected, result); | ||||
|     } catch(e) { | ||||
|       console.log(''); | ||||
|       console.log('[RESULT]'); | ||||
|       console.log(JSON.stringify(result, null, 2)); | ||||
|       console.error('[FAIL]', name); | ||||
|       console.error(e.stack); | ||||
|       console.log(''); | ||||
|     } | ||||
|     console.log(''); | ||||
|   }); | ||||
| }()); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user