diff --git a/router/crypto.go b/router/crypto.go index 0f788d76..3d7cad9e 100644 --- a/router/crypto.go +++ b/router/crypto.go @@ -11,7 +11,6 @@ import ( "encoding/gob" "fmt" "log" - "net" "sync" ) @@ -244,10 +243,10 @@ func (ne *NaClEncryptor) TotalLen() int { // Frame Decryptors -type FrameConsumer func(conn *LocalConnection, sender *net.UDPAddr, src []byte, dst []byte, frame []byte) +type FrameConsumer func(conn *LocalConnection, src []byte, dst []byte, frame []byte) type Decryptor interface { - IterateFrames(FrameConsumer, []byte, *net.UDPAddr) error + IterateFrames([]byte, FrameConsumer) error ReceiveNonce([]byte) Shutdown() } @@ -280,7 +279,7 @@ func NewNonDecryptor(conn *LocalConnection) *NonDecryptor { return &NonDecryptor{conn: conn} } -func (nd *NonDecryptor) IterateFrames(consumer FrameConsumer, packet []byte, sender *net.UDPAddr) error { +func (nd *NonDecryptor) IterateFrames(packet []byte, consumer FrameConsumer) error { for len(packet) >= (2 + NameSize + NameSize) { srcNameByte := packet[:NameSize] packet = packet[NameSize:] @@ -293,7 +292,7 @@ func (nd *NonDecryptor) IterateFrames(consumer FrameConsumer, packet []byte, sen } frame := packet[:length] packet = packet[length:] - consumer(nd.conn, sender, srcNameByte, dstNameByte, frame) + consumer(nd.conn, srcNameByte, dstNameByte, frame) } if len(packet) > 0 { return PacketDecodingError{Desc: fmt.Sprintf("%d octets of trailing garbage", len(packet))} @@ -343,12 +342,12 @@ func (nd *NaClDecryptor) ReceiveNonce(msg []byte) { } } -func (nd *NaClDecryptor) IterateFrames(consumer FrameConsumer, packet []byte, sender *net.UDPAddr) error { +func (nd *NaClDecryptor) IterateFrames(packet []byte, consumer FrameConsumer) error { buf, err := nd.decrypt(packet) if err != nil { return PacketDecodingError{Fatal: true, Desc: fmt.Sprint("decryption failed; ", err)} } - return nd.NonDecryptor.IterateFrames(consumer, buf, sender) + return nd.NonDecryptor.IterateFrames(buf, consumer) } func (nd *NaClDecryptor) decrypt(buf []byte) ([]byte, error) { diff --git a/router/router.go b/router/router.go index ad3f1899..922c1009 100644 --- a/router/router.go +++ b/router/router.go @@ -216,7 +216,6 @@ func (router *Router) listenUDP(localPort int, po PacketSink) *net.UDPConn { func (router *Router) udpReader(conn *net.UDPConn, po PacketSink) { defer conn.Close() dec := NewEthernetDecoder() - handleUDPPacket := router.handleUDPPacketFunc(dec, po) buf := make([]byte, MaxUDPPacketSize) for { n, sender, err := conn.ReadFromUDP(buf) @@ -240,7 +239,7 @@ func (router *Router) udpReader(conn *net.UDPConn, po PacketSink) { if !ok { continue } - err = relayConn.Decryptor.IterateFrames(handleUDPPacket, packet, sender) + err = relayConn.Decryptor.IterateFrames(packet, router.handleUDPPacketFunc(dec, sender, po)) if pde, ok := err.(PacketDecodingError); ok { if pde.Fatal { relayConn.Shutdown(pde) @@ -253,8 +252,8 @@ func (router *Router) udpReader(conn *net.UDPConn, po PacketSink) { } } -func (router *Router) handleUDPPacketFunc(dec *EthernetDecoder, po PacketSink) FrameConsumer { - return func(relayConn *LocalConnection, sender *net.UDPAddr, srcNameByte, dstNameByte []byte, frame []byte) { +func (router *Router) handleUDPPacketFunc(dec *EthernetDecoder, sender *net.UDPAddr, po PacketSink) FrameConsumer { + return func(relayConn *LocalConnection, srcNameByte, dstNameByte []byte, frame []byte) { srcPeer, found := router.Peers.Fetch(PeerNameFromBin(srcNameByte)) if !found { return