Fix the examples

This commit is contained in:
Miek Gieben 2011-03-24 09:31:50 +01:00
parent 87845a9cb1
commit ae3aedec99
3 changed files with 29 additions and 61 deletions

View File

@ -5,7 +5,7 @@ axfr \
reflect \ reflect \
funkensturm \ funkensturm \
xfrprx \ xfrprx \
ds2key \ key2ds \
all: all:
for i in $(EXAMPLES); do gomake -C $$i; done for i in $(EXAMPLES); do gomake -C $$i; done

View File

@ -9,7 +9,6 @@ package main
import ( import (
"os" "os"
"flag" "flag"
"net"
"fmt" "fmt"
"dns" "dns"
"os/signal" "os/signal"
@ -142,30 +141,15 @@ func doFunkensturm(pkt *dns.Msg) ([]byte, os.Error) {
return out, nil return out, nil
} }
func replyUDP(c *net.UDPConn, a net.Addr, i *dns.Msg) { func reply(c *dns.Conn, i *dns.Msg) {
out, err := doFunkensturm(i) out, err := doFunkensturm(i)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s\n", err.String()) fmt.Fprintf(os.Stderr, "Error: %s\n", err.String())
return return
} }
if out != nil { if out != nil {
dns.SendUDP(out, c, a) c.Write(out)
} }
// nothing is send back
}
func replyTCP(c *net.TCPConn, a net.Addr, i *dns.Msg) {
out, err := doFunkensturm(i)
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s\n", err.String())
return
}
if out != nil {
dns.SendTCP(out, c, a)
}
// nothing is send back
} }
// split 127.0.0.1:53 into components // split 127.0.0.1:53 into components
@ -180,29 +164,13 @@ func splitAddrPort(s string) (a, p string) {
} }
func tcp(addr string, e chan os.Error) { func tcp(addr string, e chan os.Error) {
a, err := net.ResolveTCPAddr(addr) err := dns.ListenAndServeTCP(addr, reply)
if err != nil {
e <- err
}
l, err := net.ListenTCP("tcp", a)
if err != nil {
e <- err
}
err = dns.ServeTCP(l, replyTCP)
e <- err e <- err
return return
} }
func udp(addr string, e chan os.Error) { func udp(addr string, e chan os.Error) {
a, err := net.ResolveUDPAddr(addr) err := dns.ListenAndServeUDP(addr, reply)
if err != nil {
e <- err
}
l, err := net.ListenUDP("udp", a)
if err != nil {
e <- err
}
err = dns.ServeUDP(l, replyUDP)
e <- err e <- err
return return
} }

View File

@ -27,35 +27,35 @@ import (
func reply(c *dns.Conn, in *dns.Msg) []byte { func reply(c *dns.Conn, in *dns.Msg) []byte {
m := new(dns.Msg) m := new(dns.Msg)
m.SetReply(in.MsgHdr.Id) m.SetReply(in)
m.Question = make([]dns.Question, 1) m.Question = make([]dns.Question, 1)
m.Answer = make([]dns.RR, 1) m.Answer = make([]dns.RR, 1)
m.Extra = make([]dns.RR, 1) m.Extra = make([]dns.RR, 1)
// Copy the question. // Copy the question.
m.Question[0] = in.Question[0] m.Question[0] = in.Question[0]
// Some foo to check if we are called through ip6 or ip4. // Some foo to check if we are called through ip6 or ip4.
// We add the correct reply RR. // We add the correct reply RR.
var ad net.IP var ad net.IP
if c.UDP != nil { if c.UDP != nil {
ad = c.Addr.(*net.UDPAddr).IP ad = c.Addr.(*net.UDPAddr).IP
} else { } else {
ad = c.Addr.(*net.TCPAddr).IP ad = c.Addr.(*net.TCPAddr).IP
} }
if ad.To4() != nil { if ad.To4() != nil {
r := new(dns.RR_A) r := new(dns.RR_A)
r.Hdr = dns.RR_Header{Name: "whoami.miek.nl.", Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: 0} r.Hdr = dns.RR_Header{Name: "whoami.miek.nl.", Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: 0}
r.A = ad r.A = ad
m.Answer[0] = r m.Answer[0] = r
} else { } else {
r := new(dns.RR_AAAA) r := new(dns.RR_AAAA)
r.Hdr = dns.RR_Header{Name: "whoami.miek.nl.", Rrtype: dns.TypeAAAA, Class: dns.ClassINET, Ttl: 0} r.Hdr = dns.RR_Header{Name: "whoami.miek.nl.", Rrtype: dns.TypeAAAA, Class: dns.ClassINET, Ttl: 0}
r.AAAA = ad r.AAAA = ad
m.Answer[0] = r m.Answer[0] = r
} }
t := new(dns.RR_TXT) t := new(dns.RR_TXT)
t.Hdr = dns.RR_Header{Name: "whoami.miek.nl.", Rrtype: dns.TypeTXT, Class: dns.ClassINET, Ttl: 0} t.Hdr = dns.RR_Header{Name: "whoami.miek.nl.", Rrtype: dns.TypeTXT, Class: dns.ClassINET, Ttl: 0}
@ -67,12 +67,12 @@ func reply(c *dns.Conn, in *dns.Msg) []byte {
m.Extra[0] = t m.Extra[0] = t
b, _ := m.Pack() b, _ := m.Pack()
return b return b
} }
func handle(c *dns.Conn, in *dns.Msg) { func handle(c *dns.Conn, in *dns.Msg) {
if in.MsgHdr.Response == true { if in.MsgHdr.Response == true {
return // We don't do responses return // We don't do responses
} }
answer := reply(c, in) answer := reply(c, in)
c.Write(answer) c.Write(answer)
@ -85,7 +85,7 @@ func tcp(addr string, e chan os.Error) {
} }
func udp(addr string, e chan os.Error) { func udp(addr string, e chan os.Error) {
err := dns.ListenAndServeUDP(addr, handle) err := dns.ListenAndServeUDP(addr, handle)
e <- err e <- err
return return
} }