Fix funkensturm
This commit is contained in:
parent
b43067fbcc
commit
8229af080d
|
@ -16,9 +16,6 @@ import (
|
|||
"strings"
|
||||
)
|
||||
|
||||
// Define a responder that takes care of the incoming queries.
|
||||
type server dns.Server
|
||||
|
||||
// Define a slice of channels for the resolver for sending the queries somewhere else.
|
||||
var qr []*dns.Resolver
|
||||
|
||||
|
@ -79,11 +76,7 @@ func verboseprint(i *dns.Msg, msg string) {
|
|||
fmt.Printf("<<<<<< %s\n\n", msg)
|
||||
}
|
||||
|
||||
func doFunkensturm(i []byte) ([]byte, os.Error) {
|
||||
pkt := new(dns.Msg)
|
||||
if !pkt.Unpack(i) {
|
||||
return nil, &dns.Error{Error: "Unpacking packet failed"}
|
||||
}
|
||||
func doFunkensturm(pkt *dns.Msg) ([]byte, os.Error) {
|
||||
if *verbose {
|
||||
verboseprint(pkt, "ORIGINAL INCOMING")
|
||||
}
|
||||
|
@ -149,7 +142,7 @@ func doFunkensturm(i []byte) ([]byte, os.Error) {
|
|||
return out, nil
|
||||
}
|
||||
|
||||
func (s *server) ReplyUDP(c *net.UDPConn, a net.Addr, i []byte) {
|
||||
func replyUDP(c *net.UDPConn, a net.Addr, i *dns.Msg) {
|
||||
out, err := doFunkensturm(i)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Error: %s\n", err.String())
|
||||
|
@ -162,7 +155,7 @@ func (s *server) ReplyUDP(c *net.UDPConn, a net.Addr, i []byte) {
|
|||
// nothing is send back
|
||||
}
|
||||
|
||||
func (s *server) ReplyTCP(c *net.TCPConn, a net.Addr, i []byte) {
|
||||
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())
|
||||
|
@ -184,6 +177,34 @@ func splitAddrPort(s string) (a, p string) {
|
|||
return
|
||||
}
|
||||
|
||||
func tcp(addr string, e chan os.Error) {
|
||||
a, err := net.ResolveTCPAddr(addr)
|
||||
if err != nil {
|
||||
e <- err
|
||||
}
|
||||
l, err := net.ListenTCP("tcp", a)
|
||||
if err != nil {
|
||||
e <- err
|
||||
}
|
||||
err = dns.ServeTCP(l, replyTCP)
|
||||
e <- err
|
||||
return
|
||||
}
|
||||
|
||||
func udp(addr string, e chan os.Error) {
|
||||
a, err := net.ResolveUDPAddr(addr)
|
||||
if err != nil {
|
||||
e <- err
|
||||
}
|
||||
l, err := net.ListenUDP("udp", a)
|
||||
if err != nil {
|
||||
e <- err
|
||||
}
|
||||
err = dns.ServeUDP(l, replyUDP)
|
||||
e <- err
|
||||
return
|
||||
}
|
||||
|
||||
func main() {
|
||||
var sserver *string = flag.String("sserver", "127.0.0.1:8053", "Set the listener address")
|
||||
var rserver *string = flag.String("rserver", "127.0.0.1:53", "Remote server address(es)")
|
||||
|
@ -211,23 +232,20 @@ func main() {
|
|||
return
|
||||
}
|
||||
|
||||
// The server
|
||||
var srv *server
|
||||
quit := make(chan bool)
|
||||
err := make(chan os.Error)
|
||||
go dns.ListenAndServe(*sserver, srv, quit, err)
|
||||
go udp(*sserver, err)
|
||||
go tcp(*sserver, err)
|
||||
|
||||
forever:
|
||||
for {
|
||||
// Wait for a signal to stop
|
||||
select {
|
||||
case e := <-err:
|
||||
fmt.Printf("Error received, stopping: %s\n", e.String())
|
||||
break forever
|
||||
case <-signal.Incoming:
|
||||
fmt.Printf("Signal received, stopping")
|
||||
quit <- true
|
||||
break forever
|
||||
}
|
||||
}
|
||||
close(quit)
|
||||
close(err)
|
||||
}
|
||||
|
|
|
@ -87,7 +87,7 @@ func replyTCP(c *net.TCPConn, a net.Addr, in *dns.Msg) {
|
|||
dns.SendTCP(out, c, a)
|
||||
}
|
||||
|
||||
func trackTCP(addr string, e chan os.Error) {
|
||||
func tcp(addr string, e chan os.Error) {
|
||||
a, err := net.ResolveTCPAddr(addr)
|
||||
if err != nil {
|
||||
e <- err
|
||||
|
@ -101,7 +101,7 @@ func trackTCP(addr string, e chan os.Error) {
|
|||
return
|
||||
}
|
||||
|
||||
func trackUDP(addr string, e chan os.Error) {
|
||||
func udp(addr string, e chan os.Error) {
|
||||
a, err := net.ResolveUDPAddr(addr)
|
||||
if err != nil {
|
||||
e <- err
|
||||
|
@ -117,8 +117,8 @@ func trackUDP(addr string, e chan os.Error) {
|
|||
|
||||
func main() {
|
||||
e := make(chan os.Error)
|
||||
go trackUDP("127.0.0.1:8053", e)
|
||||
go trackTCP("127.0.0.1:8053", e)
|
||||
go udp("127.0.0.1:8053", e)
|
||||
go tcp("127.0.0.1:8053", e)
|
||||
|
||||
forever:
|
||||
for {
|
||||
|
|
Loading…
Reference in New Issue