| 
									
										
										
										
											2016-03-30 16:45:02 +00:00
										 |  |  | package file | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-05 14:39:49 +00:00
										 |  |  | import ( | 
					
						
							| 
									
										
										
										
											2017-09-14 09:36:06 +01:00
										 |  |  | 	"github.com/coredns/coredns/plugin/file/tree" | 
					
						
							| 
									
										
										
										
											2016-11-05 14:39:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/miekg/dns" | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2016-03-30 16:45:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-06 08:32:07 +00:00
										 |  |  | // ClosestEncloser returns the closest encloser for qname. | 
					
						
							| 
									
										
										
										
											2016-11-05 14:39:49 +00:00
										 |  |  | func (z *Zone) ClosestEncloser(qname string) (*tree.Elem, bool) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-02 17:49:13 +01:00
										 |  |  | 	offset, end := dns.NextLabel(qname, 0) | 
					
						
							| 
									
										
										
										
											2016-03-30 20:13:48 +01:00
										 |  |  | 	for !end { | 
					
						
							| 
									
										
										
										
											2016-11-05 14:39:49 +00:00
										 |  |  | 		elem, _ := z.Tree.Search(qname) | 
					
						
							| 
									
										
										
										
											2016-03-30 20:13:48 +01:00
										 |  |  | 		if elem != nil { | 
					
						
							| 
									
										
										
										
											2016-11-05 14:39:49 +00:00
										 |  |  | 			return elem, true | 
					
						
							| 
									
										
										
										
											2016-03-30 20:13:48 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-04-02 17:49:13 +01:00
										 |  |  | 		qname = qname[offset:] | 
					
						
							| 
									
										
										
										
											2016-03-30 20:13:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-02 17:49:13 +01:00
										 |  |  | 		offset, end = dns.NextLabel(qname, offset) | 
					
						
							| 
									
										
										
										
											2016-03-30 16:45:02 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-03-30 20:13:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-05 14:39:49 +00:00
										 |  |  | 	return z.Tree.Search(z.origin) | 
					
						
							| 
									
										
										
										
											2016-03-30 20:47:38 +01:00
										 |  |  | } |