begin packer and test
This commit is contained in:
		
							parent
							
								
									037247c91b
								
							
						
					
					
						commit
						af89bfa000
					
				| @ -1,9 +1,36 @@ | ||||
| (function (exports) { | ||||
| 'use strict'; | ||||
| 
 | ||||
| exports.DNS_PACKER = { | ||||
|   pack: function () { | ||||
|     throw new Error("DNS Packer Not Implemented"); | ||||
| var dnspack = exports.DNS_PACKER = { | ||||
|   pack: function (packet) { | ||||
|     var total = 0; | ||||
|     var id = packet.header.id;                      // 2 bytes
 | ||||
|     total += 2; | ||||
|     var header = dnspack.packHeader(packet.header); // 2 bytes
 | ||||
|     total += 2; | ||||
| 
 | ||||
|     var ab = new ArrayBuffer(total); | ||||
|     var dv = new DataView(ab); | ||||
|     dv.setUint16(0, id, false); | ||||
|     dv.setUint16(2, header, false); | ||||
| 
 | ||||
|     return ab; | ||||
|   } | ||||
| , packHeader: function(h) { | ||||
|     var val = 0; | ||||
| 
 | ||||
|     val += (h.qr     << 15) & 0x8000; | ||||
|     val += (h.opcode << 11) & 0x7800; | ||||
|     val += (h.aa     << 10) &  0x400; | ||||
|     val += (h.tc     <<  9) &  0x200; | ||||
|     val += (h.rd     <<  8) &  0x100; | ||||
|     val += (h.ra     <<  7) &   0x80; | ||||
|     val += (h.res1   <<  6) &   0x40; | ||||
|     val += (h.res2   <<  5) &   0x20; | ||||
|     val += (h.res3   <<  4) &   0x10; | ||||
|     val += h.rcode          &    0xF; | ||||
| 
 | ||||
|     return val; | ||||
|   } | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -46,7 +46,7 @@ pdns.unpackOpt = function (ab, packet, rec) { | ||||
|   // 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); | ||||
|   dv.setUint32(0, packet.ttl, false); | ||||
|   // is xrcode this edns_options?
 | ||||
|   packet.xrcode = '0x' + dv.getUint8(0, false).toString(16); | ||||
|   if ('0x0' === packet.xrcode) { | ||||
|  | ||||
| @ -1,6 +1,48 @@ | ||||
| ;(function () { | ||||
|   'use strict'; | ||||
| 
 | ||||
|   throw new Error("packer tests not written"); | ||||
|   var fs = require('fs'); | ||||
|   var path = require('path'); | ||||
|   var dnsjs = require('../').DNSPacket; | ||||
| 
 | ||||
|   var dirname = path.join(__dirname, 'fixtures'); | ||||
|   var expected; // shim
 | ||||
|   var onefile = process.argv[2]; | ||||
| 
 | ||||
|   var json = JSON.parse(fs.readFileSync(onefile, 'utf8')); | ||||
| 
 | ||||
|   var ab = dnsjs.write(json); | ||||
|   //console.log(ab);
 | ||||
|   var ui8 = new Uint8Array(ab); | ||||
|   //console.log(ui8);
 | ||||
|   var bytecount = 0; | ||||
|   var str = [].slice.call(ui8).map(function (i) { | ||||
|     var h = i.toString(16); | ||||
|     if (h.length < 2) { | ||||
|       h = '0' + h; | ||||
|     } | ||||
|     return h; | ||||
|   }).join('').match(/.{1,2}/g).join(' ').match(/.{1,47}/g).map(function (str) { | ||||
|     var lead = bytecount.toString(16); | ||||
|     bytecount += 10; | ||||
| 
 | ||||
|     while (lead.length < 8) { | ||||
|       lead = '0' + lead; | ||||
|     } | ||||
| 
 | ||||
|     return lead + ' ' + str; | ||||
|   }).join('\n'); | ||||
|   var trail = ab.byteLength.toString(16); | ||||
|   while (trail.length < 8) { | ||||
|     trail = '0' + trail; | ||||
|   } | ||||
| 
 | ||||
|   console.log(''); | ||||
|   console.log('DEBUG with hexdump: '); | ||||
|   console.log('hexdump ' + onefile.replace(/\.[^\.]*$/, '.bin')); | ||||
|   console.log(''); | ||||
|   console.log(str + '\n' + trail); | ||||
|   console.log(''); | ||||
| 
 | ||||
| }()); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user