Eliminate UDPPacket

The Name field is not used anywhere, and once that's gone the remaining
pairing of the packet bytes and sender is not worth it.
This commit is contained in:
David Wragg committed 2015-03-27 18:05:00 +00:00
1 parent 4a1d3aeb96
commit 0d30df165f
2 files changed
+20 -36

No files matched your search

+19 -21
View File
@@ -247,7 +247,7 @@ func (ne *NaClEncryptor) TotalLen() int {
type FrameConsumer func(conn *LocalConnection, sender *net.UDPAddr, src []byte, dst []byte, frame []byte)
type Decryptor interface {
IterateFrames(FrameConsumer, *UDPPacket) error
IterateFrames(FrameConsumer, []byte, *net.UDPAddr) error
ReceiveNonce([]byte)
Shutdown()
}
@@ -280,24 +280,23 @@ func NewNonDecryptor(conn *LocalConnection) *NonDecryptor {
return &NonDecryptor{conn: conn}
}
func (nd *NonDecryptor) IterateFrames(consumer FrameConsumer, packet *UDPPacket) error {
buf := packet.Packet
for len(buf) >= (2 + NameSize + NameSize) {
srcNameByte := buf[:NameSize]
buf = buf[NameSize:]
dstNameByte := buf[:NameSize]
buf = buf[NameSize:]
length := binary.BigEndian.Uint16(buf[:2])
buf = buf[2:]
if len(buf) < int(length) {
return PacketDecodingError{Desc: fmt.Sprintf("too short; expected frame of length %d, got %d", length, len(buf))}
func (nd *NonDecryptor) IterateFrames(consumer FrameConsumer, packet []byte, sender *net.UDPAddr) error {
for len(packet) >= (2 + NameSize + NameSize) {
srcNameByte := packet[:NameSize]
packet = packet[NameSize:]
dstNameByte := packet[:NameSize]
packet = packet[NameSize:]
length := binary.BigEndian.Uint16(packet[:2])
packet = packet[2:]
if len(packet) < int(length) {
return PacketDecodingError{Desc: fmt.Sprintf("too short; expected frame of length %d, got %d", length, len(packet))}
}
frame := buf[:length]
buf = buf[length:]
consumer(nd.conn, packet.Sender, srcNameByte, dstNameByte, frame)
frame := packet[:length]
packet = packet[length:]
consumer(nd.conn, sender, srcNameByte, dstNameByte, frame)
}
if len(buf) > 0 {
return PacketDecodingError{Desc: fmt.Sprintf("%d octets of trailing garbage", len(buf))}
if len(packet) > 0 {
return PacketDecodingError{Desc: fmt.Sprintf("%d octets of trailing garbage", len(packet))}
}
return nil
}
@@ -344,13 +343,12 @@ func (nd *NaClDecryptor) ReceiveNonce(msg []byte) {
}
}
func (nd *NaClDecryptor) IterateFrames(consumer FrameConsumer, packet *UDPPacket) error {
buf, err := nd.decrypt(packet.Packet)
func (nd *NaClDecryptor) IterateFrames(consumer FrameConsumer, packet []byte, sender *net.UDPAddr) error {
buf, err := nd.decrypt(packet)
if err != nil {
return PacketDecodingError{Fatal: true, Desc: fmt.Sprint("decryption failed; ", err)}
}
packet.Packet = buf
return nd.NonDecryptor.IterateFrames(consumer, packet)
return nd.NonDecryptor.IterateFrames(consumer, buf, sender)
}
func (nd *NaClDecryptor) decrypt(buf []byte) ([]byte, error) {
+1 -15
View File
@@ -213,16 +213,6 @@ func (router *Router) listenUDP(localPort int, po PacketSink) *net.UDPConn {
return conn
}
type UDPPacket struct {
Name PeerName
Packet []byte
Sender *net.UDPAddr
}
func (packet UDPPacket) String() string {
return fmt.Sprintf("UDP Packet\n name: %s\n sender: %v\n payload: % X", packet.Name, packet.Sender, packet.Packet)
}
func (router *Router) udpReader(conn *net.UDPConn, po PacketSink) {
defer conn.Close()
dec := NewEthernetDecoder()
@@ -242,10 +232,6 @@ func (router *Router) udpReader(conn *net.UDPConn, po PacketSink) {
name := PeerNameFromBin(buf[:NameSize])
packet := make([]byte, n-NameSize)
copy(packet, buf[NameSize:n])
udpPacket := &UDPPacket{
Name: name,
Packet: packet,
Sender: sender}
peerConn, found := router.Ourself.ConnectionTo(name)
if !found {
continue
@@ -254,7 +240,7 @@ func (router *Router) udpReader(conn *net.UDPConn, po PacketSink) {
if !ok {
continue
}
err = relayConn.Decryptor.IterateFrames(handleUDPPacket, udpPacket)
err = relayConn.Decryptor.IterateFrames(handleUDPPacket, packet, sender)
if pde, ok := err.(PacketDecodingError); ok {
if pde.Fatal {
relayConn.Shutdown(pde)