panic when no client handler is found

This commit is contained in:
Miek Gieben 2011-07-04 22:27:23 +02:00
parent a7ac103a20
commit 9b6f66c1bb
3 changed files with 55 additions and 17 deletions

View File

@ -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()

View File

@ -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) {

View File

@ -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
}