| 
									
										
										
										
											2017-01-21 03:18:10 -07:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // EXAMPLE:
 | 
					
						
							| 
									
										
										
										
											2017-01-21 14:44:37 -07:00
										 |  |  | // node bin/dns-parse.js samples/a-0.mdns.bin
 | 
					
						
							| 
									
										
										
										
											2017-01-21 03:18:10 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | // pass a terminal arg
 | 
					
						
							|  |  |  | var filename = process.argv[2]; | 
					
						
							|  |  |  | if (!filename) { | 
					
						
							| 
									
										
										
										
											2017-01-21 14:44:37 -07:00
										 |  |  |   console.error("Usage: node bin/dns-parse.js <path/to/sample.bin>"); | 
					
						
							|  |  |  |   console.error("Example: node bin/dns-parse.js ./samples/services-0.mdns.bin"); | 
					
						
							| 
									
										
										
										
											2017-01-21 03:18:10 -07:00
										 |  |  |   process.exit(1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var PromiseA = require('bluebird'); | 
					
						
							|  |  |  | var fs = PromiseA.promisifyAll(require('fs')); | 
					
						
							| 
									
										
										
										
											2017-01-21 15:11:39 -07:00
										 |  |  | var pdns = require('../'); | 
					
						
							| 
									
										
										
										
											2017-01-21 03:18:10 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | fs.readFileAsync(filename, null).then(function (nb) { | 
					
						
							| 
									
										
										
										
											2017-01-21 03:32:50 -07:00
										 |  |  |   //
 | 
					
						
							|  |  |  |   // current reference impl
 | 
					
						
							|  |  |  |   //
 | 
					
						
							|  |  |  |   //console.log(require('native-dns-packet').parse(nb));
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   //
 | 
					
						
							|  |  |  |   // other reference impl
 | 
					
						
							|  |  |  |   //
 | 
					
						
							| 
									
										
										
										
											2017-01-21 14:33:51 -07:00
										 |  |  |   //console.log(require('dns-js').DNSPacket.parse(nb));
 | 
					
						
							| 
									
										
										
										
											2017-01-21 03:32:50 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-21 03:18:10 -07:00
										 |  |  |   // nb is a Uint8Array (ArrayBufferView) for nb.buffer
 | 
					
						
							|  |  |  |   // nb.buffer is the actual ArrayBuffer
 | 
					
						
							| 
									
										
										
										
											2017-01-21 10:45:45 -07:00
										 |  |  |   var packet = pdns.unpack(nb.buffer); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-21 14:33:51 -07:00
										 |  |  |   function tryParseRdata(record) { | 
					
						
							|  |  |  |     record.data = null; | 
					
						
							|  |  |  |     record.error = null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     try { | 
					
						
							|  |  |  |       record.data = pdns.unpackRdata(nb.buffer, packet, record); | 
					
						
							|  |  |  |     } catch (e) { | 
					
						
							| 
									
										
										
										
											2017-01-25 14:41:30 -07:00
										 |  |  |       console.error(e.stack); | 
					
						
							| 
									
										
										
										
											2017-01-21 14:33:51 -07:00
										 |  |  |       record.error = e; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   packet.answers.forEach(tryParseRdata); | 
					
						
							|  |  |  |   packet.authority.forEach(tryParseRdata); | 
					
						
							|  |  |  |   packet.additional.forEach(tryParseRdata); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-21 10:45:45 -07:00
										 |  |  |   console.log('[packet]', nb.byteLength, 'bytes:'); | 
					
						
							| 
									
										
										
										
											2017-01-21 15:11:39 -07:00
										 |  |  |   console.log(JSON.stringify(packet, null, 2)); | 
					
						
							| 
									
										
										
										
											2017-01-21 03:18:10 -07:00
										 |  |  | }); |