panic when no client handler is found
This commit is contained in:
parent
a7ac103a20
commit
9b6f66c1bb
13
client.go
13
client.go
|
@ -98,11 +98,7 @@ func (mux *QueryMux) Handle(pattern string, handler QueryHandler) {
|
|||
if pattern == "" {
|
||||
panic("dns: invalid pattern " + pattern)
|
||||
}
|
||||
if pattern[len(pattern)-1] != '.' { // no ending .
|
||||
mux.m[pattern+"."] = handler
|
||||
} else {
|
||||
mux.m[pattern] = handler
|
||||
}
|
||||
mux.m[pattern] = handler
|
||||
}
|
||||
|
||||
func (mux *QueryMux) HandleQueryFunc(pattern string, handler func(RequestWriter, *Msg)) {
|
||||
|
@ -112,8 +108,7 @@ func (mux *QueryMux) HandleQueryFunc(pattern string, handler func(RequestWriter,
|
|||
func (mux *QueryMux) QueryDNS(w RequestWriter, r *Msg) {
|
||||
h := mux.match(r.Question[0].Name)
|
||||
if h == nil {
|
||||
// h = RefusedHandler()
|
||||
// something else
|
||||
panic("dns: no handler found for " + r.Question[0].Name)
|
||||
}
|
||||
h.QueryDNS(w, r)
|
||||
}
|
||||
|
@ -170,6 +165,10 @@ func (q *Query) ListenAndQuery() os.Error {
|
|||
return q.Query()
|
||||
}
|
||||
|
||||
|
||||
// Start listener for firing off the queries. If
|
||||
// c is nil DefaultQueryChan is used. If handler is nil
|
||||
// DefaultQueryMux is used.
|
||||
func ListenAndQuery(c chan *Request, handler QueryHandler) {
|
||||
q := &Query{ChannelQuery: c, Handler: handler}
|
||||
go q.ListenAndQuery()
|
||||
|
|
|
@ -17,10 +17,43 @@ func TestClientSync(t *testing.T) {
|
|||
t.Logf("%v\n", r)
|
||||
}
|
||||
}
|
||||
// TestClientAsync
|
||||
|
||||
|
||||
func helloMiek(w RequestWriter, r *Msg) {
|
||||
w.Send(r)
|
||||
reply, _ := w.Receive()
|
||||
w.Write(reply)
|
||||
}
|
||||
|
||||
func TestClientASync(t *testing.T) {
|
||||
HandleQueryFunc("miek.nl", helloMiek) // All queries for miek.nl will be handled by HelloMiek
|
||||
ListenAndQuery(nil, nil)
|
||||
|
||||
m := new(Msg)
|
||||
m.SetQuestion("miek.nl", TypeSOA)
|
||||
|
||||
println("SENDING")
|
||||
c := NewClient()
|
||||
println("SENDING II")
|
||||
c.Do(m, "85.223.71.124:53")
|
||||
|
||||
println("REPLY")
|
||||
forever:
|
||||
for {
|
||||
select {
|
||||
case n := <-DefaultReplyChan:
|
||||
println("REPLY")
|
||||
if n[1] != nil && n[1].Rcode != RcodeSuccess {
|
||||
t.Log("Failed to get an valid answer")
|
||||
t.Fail()
|
||||
t.Logf("%v\n", n[1])
|
||||
}
|
||||
break forever
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestClientEDNS
|
||||
|
||||
|
||||
/*
|
||||
func TestResolverEdns(t *testing.T) {
|
||||
|
||||
|
|
20
server.go
20
server.go
|
@ -90,6 +90,12 @@ func zoneMatch(pattern, zone string) (ok bool) {
|
|||
if len(pattern) == 0 {
|
||||
return
|
||||
}
|
||||
if pattern[len(pattern)-1] != '.' {
|
||||
pattern += "."
|
||||
}
|
||||
if zone[len(zone)-1] != '.' {
|
||||
zone += "."
|
||||
}
|
||||
i := 0
|
||||
for {
|
||||
ok = pattern[len(pattern)-1-i] == zone[len(zone)-1-i]
|
||||
|
@ -125,11 +131,11 @@ func (mux *ServeMux) Handle(pattern string, handler Handler) {
|
|||
if pattern == "" {
|
||||
panic("dns: invalid pattern " + pattern)
|
||||
}
|
||||
if pattern[len(pattern)-1] != '.' { // no ending .
|
||||
mux.m[pattern+"."] = handler
|
||||
} else {
|
||||
mux.m[pattern] = handler
|
||||
}
|
||||
// Should this go
|
||||
//if pattern[len(pattern)-1] != '.' { // no ending .
|
||||
// mux.m[pattern+"."] = handler
|
||||
//} else {
|
||||
mux.m[pattern] = handler
|
||||
}
|
||||
|
||||
func (mux *ServeMux) HandleFunc(pattern string, handler func(ResponseWriter, *Msg)) {
|
||||
|
@ -190,7 +196,7 @@ func (srv *Server) ListenAndServe() os.Error {
|
|||
}
|
||||
switch srv.Net {
|
||||
case "tcp":
|
||||
a, e := net.ResolveTCPAddr("tcp",addr)
|
||||
a, e := net.ResolveTCPAddr("tcp", addr)
|
||||
if e != nil {
|
||||
return e
|
||||
}
|
||||
|
@ -200,7 +206,7 @@ func (srv *Server) ListenAndServe() os.Error {
|
|||
}
|
||||
return srv.ServeTCP(l)
|
||||
case "udp":
|
||||
a, e := net.ResolveUDPAddr("udp",addr)
|
||||
a, e := net.ResolveUDPAddr("udp", addr)
|
||||
if e != nil {
|
||||
return e
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue