small refactor
This commit is contained in:
		
							parent
							
								
									6d0f9b1588
								
							
						
					
					
						commit
						083df5755b
					
				
							
								
								
									
										203
									
								
								bin/digd.js
									
									
									
									
									
								
							
							
						
						
									
										203
									
								
								bin/digd.js
									
									
									
									
									
								
							| @ -169,6 +169,106 @@ cli.main(function (args, cli) { | |||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     function recurse() { | ||||||
|  |       if (!query.header.rd) { | ||||||
|  |         console.log("[Could not answer. Sent empty response.]"); | ||||||
|  |         sendEmptyResponse(query); | ||||||
|  |         return; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       if (cli.norecurse) { | ||||||
|  |         console.log("[Could not answer. Sent empty response.]"); | ||||||
|  |         sendEmptyResponse(query); | ||||||
|  |         return; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       // ANY, A, AAAA, CNAME, MX, NAPTR, NS, PTR, SOA, SRV, TXT
 | ||||||
|  |       newQuery = { | ||||||
|  |         header: { | ||||||
|  |           id: query.header.id // require('crypto').randomBytes(2).readUInt16BE(0)
 | ||||||
|  |         , qr: 0 | ||||||
|  |         , opcode: 0 | ||||||
|  |         , aa: query.header.aa ? 1 : 0 // NA? not sure what this would do
 | ||||||
|  |         , tc: 0     // NA
 | ||||||
|  |         , rd: 1 | ||||||
|  |         , ra: 0     // NA
 | ||||||
|  |         , rcode: 0  // NA
 | ||||||
|  |         } | ||||||
|  |       , question: [] | ||||||
|  |       , answer: [] | ||||||
|  |       , authority: [] | ||||||
|  |       , additional: [] | ||||||
|  |       }; | ||||||
|  |       query.question.forEach(function (q) { | ||||||
|  |         newQuery.question.push({ | ||||||
|  |           name: q.name | ||||||
|  |         , type: q.type | ||||||
|  |         , typeName: q.typeName | ||||||
|  |         , class: q.class | ||||||
|  |         , className: q.className | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |         function updateCount() { | ||||||
|  |           count -= 1; | ||||||
|  |           if (!count) { | ||||||
|  |             server.send(dnsjs.DNSPacket.write(newQuery), rinfo.port, rinfo.address, function () { | ||||||
|  |               console.log('[DEV] response sent'); | ||||||
|  |             }); | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         var opts = { | ||||||
|  |           onError: function () { | ||||||
|  |             updateCount(); | ||||||
|  |           } | ||||||
|  |         , onMessage: function (packet) { | ||||||
|  | 
 | ||||||
|  |             (packet.answer||[]).forEach(function (a) { | ||||||
|  |               // TODO copy each relevant property
 | ||||||
|  |               console.log('ans', a); | ||||||
|  |               newQuery.answer.push(a); | ||||||
|  |             }); | ||||||
|  |             (packet.authority||[]).forEach(function (a) { | ||||||
|  |               // TODO copy each relevant property
 | ||||||
|  |               console.log('auth', a); | ||||||
|  |               newQuery.authority.push(a); | ||||||
|  |             }); | ||||||
|  |             (packet.additional||[]).forEach(function (a) { | ||||||
|  |               // TODO copy each relevant property
 | ||||||
|  |               console.log('add', a); | ||||||
|  |               newQuery.additional.push(a); | ||||||
|  |             }); | ||||||
|  | 
 | ||||||
|  |             updateCount(); | ||||||
|  | 
 | ||||||
|  |           } | ||||||
|  |         , onListening: function () {} | ||||||
|  |         , onSent: function (res) { | ||||||
|  |             if (cli.debug) { | ||||||
|  |               console.log(''); | ||||||
|  |               console.log('request sent to', res.nameserver); | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         , onTimeout: function (res) { | ||||||
|  |             console.log(";; [" + q.name + "] connection timed out; no servers could be reached"); | ||||||
|  |             console.log(";; [timed out after " + res.timeout + "ms and 1 tries]"); | ||||||
|  |           } | ||||||
|  |         , onClose: function () { | ||||||
|  |             console.log(''); | ||||||
|  |           } | ||||||
|  |         , mdns: cli.mdns | ||||||
|  |         , nameserver: cli.nameserver | ||||||
|  |         , port: cli.port | ||||||
|  |         , timeout: cli.timeout | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         //dig.resolve(queryAb, opts);
 | ||||||
|  |         dig.resolveJson(query, opts); | ||||||
|  | 
 | ||||||
|  |         console.log(';' + q.name + '.', ' ', q.className, q.typeName); | ||||||
|  |       }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     count = query.question.length; |     count = query.question.length; | ||||||
|     if (!count) { |     if (!count) { | ||||||
|       sendEmptyResponse(query); |       sendEmptyResponse(query); | ||||||
| @ -176,107 +276,8 @@ cli.main(function (args, cli) { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // TODO get local answer first, if available
 |     // TODO get local answer first, if available
 | ||||||
|  |     recurse(); | ||||||
| 
 | 
 | ||||||
|     if (query.header.rd) { |  | ||||||
|       if (cli.norecurse) { |  | ||||||
|         console.log("[Could not answer. Sent empty response.]"); |  | ||||||
|         sendEmptyResponse(query); |  | ||||||
|         return; |  | ||||||
|       } else { |  | ||||||
|         // ANY, A, AAAA, CNAME, MX, NAPTR, NS, PTR, SOA, SRV, TXT
 |  | ||||||
|         newQuery = { |  | ||||||
|           header: { |  | ||||||
|             id: query.header.id // require('crypto').randomBytes(2).readUInt16BE(0)
 |  | ||||||
|           , qr: 0 |  | ||||||
|           , opcode: 0 |  | ||||||
|           , aa: query.header.aa ? 1 : 0 // NA? not sure what this would do
 |  | ||||||
|           , tc: 0     // NA
 |  | ||||||
|           , rd: 1 |  | ||||||
|           , ra: 0     // NA
 |  | ||||||
|           , rcode: 0  // NA
 |  | ||||||
|           } |  | ||||||
|         , question: [ |  | ||||||
|           /* |  | ||||||
|             { name: cli.query |  | ||||||
|             , typeName: cli.type |  | ||||||
|             , className: cli.class |  | ||||||
|             } |  | ||||||
|           */ |  | ||||||
|           ] |  | ||||||
|         , answer: [] |  | ||||||
|         , authority: [] |  | ||||||
|         , additional: [] |  | ||||||
|         }; |  | ||||||
|         query.question.forEach(function (q) { |  | ||||||
|           newQuery.question.push({ |  | ||||||
|             name: q.name |  | ||||||
|           , type: q.type |  | ||||||
|           , typeName: q.typeName |  | ||||||
|           , class: q.class |  | ||||||
|           , className: q.className |  | ||||||
|           }); |  | ||||||
| 
 |  | ||||||
|           function updateCount() { |  | ||||||
|             count -= 1; |  | ||||||
|             if (!count) { |  | ||||||
|               server.send(dnsjs.DNSPacket.write(newQuery), rinfo.port, rinfo.address, function () { |  | ||||||
|                 console.log('[DEV] response sent'); |  | ||||||
|               }); |  | ||||||
|             } |  | ||||||
|           } |  | ||||||
| 
 |  | ||||||
|           var opts = { |  | ||||||
|             onError: function () { |  | ||||||
|               updateCount(); |  | ||||||
|             } |  | ||||||
|           , onMessage: function (packet) { |  | ||||||
| 
 |  | ||||||
|               (packet.answer||[]).forEach(function (a) { |  | ||||||
|                 // TODO copy each relevant property
 |  | ||||||
|                 console.log('ans', a); |  | ||||||
|                 newQuery.answer.push(a); |  | ||||||
|               }); |  | ||||||
|               (packet.authority||[]).forEach(function (a) { |  | ||||||
|                 // TODO copy each relevant property
 |  | ||||||
|                 console.log('auth', a); |  | ||||||
|                 newQuery.authority.push(a); |  | ||||||
|               }); |  | ||||||
|               (packet.additional||[]).forEach(function (a) { |  | ||||||
|                 // TODO copy each relevant property
 |  | ||||||
|                 console.log('add', a); |  | ||||||
|                 newQuery.additional.push(a); |  | ||||||
|               }); |  | ||||||
| 
 |  | ||||||
|               updateCount(); |  | ||||||
| 
 |  | ||||||
|             } |  | ||||||
|           , onListening: function () {} |  | ||||||
|           , onSent: function (res) { |  | ||||||
|               if (cli.debug) { |  | ||||||
|                 console.log(''); |  | ||||||
|                 console.log('request sent to', res.nameserver); |  | ||||||
|               } |  | ||||||
|             } |  | ||||||
|           , onTimeout: function (res) { |  | ||||||
|               console.log(";; [" + q.name + "] connection timed out; no servers could be reached"); |  | ||||||
|               console.log(";; [timed out after " + res.timeout + "ms and 1 tries]"); |  | ||||||
|             } |  | ||||||
|           , onClose: function () { |  | ||||||
|               console.log(''); |  | ||||||
|             } |  | ||||||
|           , mdns: cli.mdns |  | ||||||
|           , nameserver: cli.nameserver |  | ||||||
|           , port: cli.port |  | ||||||
|           , timeout: cli.timeout |  | ||||||
|           }; |  | ||||||
| 
 |  | ||||||
|           //dig.resolve(queryAb, opts);
 |  | ||||||
|           dig.resolveJson(query, opts); |  | ||||||
| 
 |  | ||||||
|           console.log(';' + q.name + '.', ' ', q.className, q.typeName); |  | ||||||
|         }); |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   handlers.onListening = function () { |   handlers.onListening = function () { | ||||||
| @ -305,7 +306,7 @@ cli.main(function (args, cli) { | |||||||
| 
 | 
 | ||||||
|   console.log(''); |   console.log(''); | ||||||
|   if (!cli.nocmd) { |   if (!cli.nocmd) { | ||||||
|     console.log('; <<>> dig.js ' + 'v0.0.0' + ' <<>> ' + process.argv.slice(2)); |     console.log('; <<>> digd.js ' + 'v0.0.0' + ' <<>> ' + process.argv.slice(2)); | ||||||
|     console.log(';; global options: +cmd'); |     console.log(';; global options: +cmd'); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user