This commit is contained in:
Miek Gieben 2011-04-12 22:21:09 +02:00
parent afab5b1c10
commit 7385261dc5
1 changed files with 63 additions and 48 deletions

View File

@ -10,6 +10,7 @@ package dns
// This completely mirrors server.go impl. // This completely mirrors server.go impl.
import ( import (
"os" "os"
// "net"
) )
type QueryHandler interface { type QueryHandler interface {
@ -25,6 +26,21 @@ type RequestWriter interface {
Write([]byte) (int, os.Error) Write([]byte) (int, os.Error)
} }
/*
type conn struct {
remoteAddr net.Addr // address of remote side (sans port)
port int // port of the remote side, needed TODO(mg)
handler Handler // request handler
request []byte // the request
w chan *Msg //
hijacked bool // connection has been hijacked by hander TODO(mg)
}
type response struct {
conn *conn
req *Msg
}
*/
// QueryMux is an DNS request multiplexer. It matches the // QueryMux is an DNS request multiplexer. It matches the
// zone name of each incoming request against a list of // zone name of each incoming request against a list of
@ -75,9 +91,9 @@ func (mux *QueryMux) Handle(pattern string, handler QueryHandler) {
panic("dns: invalid pattern " + pattern) panic("dns: invalid pattern " + pattern)
} }
if pattern[len(pattern)-1] != '.' { // no ending . if pattern[len(pattern)-1] != '.' { // no ending .
mux.m[pattern + "."] = handler mux.m[pattern+"."] = handler
} else { } else {
mux.m[pattern]= handler mux.m[pattern] = handler
} }
} }
@ -88,8 +104,8 @@ func (mux *QueryMux) HandleQueryFunc(pattern string, handler func(RequestWriter,
func (mux *QueryMux) QueryDNS(w RequestWriter, request *Msg) { func (mux *QueryMux) QueryDNS(w RequestWriter, request *Msg) {
h := mux.match(request.Question[0].Name) h := mux.match(request.Question[0].Name)
if h == nil { if h == nil {
// h = RefusedHandler() // h = RefusedHandler()
// something else // something else
} }
h.QueryDNS(w, request) h.QueryDNS(w, request)
} }
@ -122,7 +138,6 @@ func (clnt *Client) Query(w chan *Msg) os.Error {
} }
func (clnt *Client) ListenAndQuery(w chan *Msg) os.Error { func (clnt *Client) ListenAndQuery(w chan *Msg) os.Error {
/* ... */
return nil return nil
} }