| 
									
										
										
										
											2016-11-26 17:57:22 +00:00
										 |  |  | package httpproxy
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import (
 | 
					
						
							|  |  |  | 	"crypto/tls"
 | 
					
						
							|  |  |  | 	"net/http"
 | 
					
						
							|  |  |  | 	"time"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-29 09:54:57 +00:00
										 |  |  | 	"github.com/miekg/coredns/request"
 | 
					
						
							| 
									
										
										
										
											2016-11-26 17:57:22 +00:00
										 |  |  | 	"github.com/miekg/dns"
 | 
					
						
							|  |  |  | )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Exchanger is an interface that specifies a type implementing a DNS resolver that
 | 
					
						
							|  |  |  | // uses a HTTPS server.
 | 
					
						
							|  |  |  | type Exchanger interface {
 | 
					
						
							| 
									
										
										
										
											2016-11-29 09:54:57 +00:00
										 |  |  | 	Exchange(request.Request) (*dns.Msg, error)
 | 
					
						
							| 
									
										
										
										
											2016-11-26 17:57:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	SetUpstream(*simpleUpstream) error
 | 
					
						
							|  |  |  | 	OnStartup() error
 | 
					
						
							|  |  |  | 	OnShutdown() error
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func newClient(sni string) *http.Client {
 | 
					
						
							|  |  |  | 	tls := &tls.Config{ServerName: sni}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	c := &http.Client{
 | 
					
						
							|  |  |  | 		Timeout:   time.Second * timeOut,
 | 
					
						
							|  |  |  | 		Transport: &http.Transport{TLSClientConfig: tls},
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return c
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const timeOut = 5
 |