unit test done, send/recv routing works
This commit is contained in:
parent
5a08b0c7aa
commit
6969d75024
2 changed files with 23 additions and 5 deletions
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"crypto/cipher"
|
"crypto/cipher"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"errors"
|
"errors"
|
||||||
|
"log"
|
||||||
"lux/crypto"
|
"lux/crypto"
|
||||||
"lux/proto"
|
"lux/proto"
|
||||||
"net"
|
"net"
|
||||||
|
|
@ -12,11 +13,15 @@ import (
|
||||||
|
|
||||||
const LUX_PROTO_PACKET_HDRLEN = proto.LUX_PROTO_ID_SIZE + 2
|
const LUX_PROTO_PACKET_HDRLEN = proto.LUX_PROTO_ID_SIZE + 2
|
||||||
|
|
||||||
|
// Target, Type are decoded from header
|
||||||
|
// Buffer contains LuxBuffer with stripped headers
|
||||||
|
// NOTE: Packets are always padded, so payloads may be
|
||||||
|
// bigger than expected and contain trailing bytes
|
||||||
type LuxPacket struct {
|
type LuxPacket struct {
|
||||||
ChannelType LuxChannelType
|
|
||||||
Target proto.LuxID
|
Target proto.LuxID
|
||||||
Type uint
|
Type uint
|
||||||
Buffer proto.LuxBuffer
|
Buffer proto.LuxBuffer
|
||||||
|
ChannelType LuxChannelType
|
||||||
}
|
}
|
||||||
|
|
||||||
func DecryptLuxPacket(dgram LuxDatagram, key crypto.LuxKey) (LuxPacket, error) {
|
func DecryptLuxPacket(dgram LuxDatagram, key crypto.LuxKey) (LuxPacket, error) {
|
||||||
|
|
@ -48,6 +53,13 @@ func DecryptLuxPacket(dgram LuxDatagram, key crypto.LuxKey) (LuxPacket, error) {
|
||||||
return packet, err
|
return packet, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data, err := packet.Buffer.ReadNext(packet.Buffer.Remaining())
|
||||||
|
if err != nil {
|
||||||
|
return packet, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// strip lux packet headers from payload, as well as padding
|
||||||
|
packet.Buffer = proto.FromSlice(data)
|
||||||
return packet, nil
|
return packet, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -61,9 +73,11 @@ func EncryptLuxPacket(packet LuxPacket, key crypto.LuxKey, target *net.UDPAddr)
|
||||||
encrypter := cipher.NewCBCEncrypter(cipherBlock, key.IV)
|
encrypter := cipher.NewCBCEncrypter(cipherBlock, key.IV)
|
||||||
|
|
||||||
var paddingLen int
|
var paddingLen int
|
||||||
packetLen := packet.Buffer.Length()
|
packetLen := LUX_PROTO_PACKET_HDRLEN + packet.Buffer.Length()
|
||||||
if packetLen%encrypter.BlockSize() != 0 {
|
if packetLen%encrypter.BlockSize() != 0 {
|
||||||
paddingLen = ((packetLen / encrypter.BlockSize()) + 1) * encrypter.BlockSize()
|
//paddingLen = ((packetLen / encrypter.BlockSize()) + 1) * encrypter.BlockSize()
|
||||||
|
paddingLen = encrypter.BlockSize() - (packetLen % encrypter.BlockSize())
|
||||||
|
log.Default().Print(packetLen, paddingLen)
|
||||||
} else {
|
} else {
|
||||||
paddingLen = 0
|
paddingLen = 0
|
||||||
}
|
}
|
||||||
|
|
@ -74,7 +88,7 @@ func EncryptLuxPacket(packet LuxPacket, key crypto.LuxKey, target *net.UDPAddr)
|
||||||
return dgram, err
|
return dgram, err
|
||||||
}
|
}
|
||||||
|
|
||||||
wd := proto.AllocLuxBuffer(LUX_PROTO_PACKET_HDRLEN + packetLen + paddingLen)
|
wd := proto.AllocLuxBuffer(packetLen + paddingLen)
|
||||||
key.Id.Write(&wd)
|
key.Id.Write(&wd)
|
||||||
wd.WriteUint16(uint16(packet.Type))
|
wd.WriteUint16(uint16(packet.Type))
|
||||||
wd.WriteBytes(packet.Buffer.AllBytes())
|
wd.WriteBytes(packet.Buffer.AllBytes())
|
||||||
|
|
|
||||||
|
|
@ -88,9 +88,13 @@ func TestRouterSendRecv(t *testing.T) {
|
||||||
if newPacket.Type != packet.Type {
|
if newPacket.Type != packet.Type {
|
||||||
t.Fatal("newPacket.Type != packet.Type")
|
t.Fatal("newPacket.Type != packet.Type")
|
||||||
}
|
}
|
||||||
if !bytes.Equal(newPacket.Buffer.AllBytes(), payload) {
|
if newPayload, _ := newPacket.Buffer.ReadNext(8); !bytes.Equal(newPayload, payload) {
|
||||||
t.Log(payload)
|
t.Log(payload)
|
||||||
t.Log(newPacket.Buffer.AllBytes())
|
t.Log(newPacket.Buffer.AllBytes())
|
||||||
t.Fatal("payloads aren't equal!")
|
t.Fatal("payloads aren't equal!")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(routerA.GetRoutes()) != 1 {
|
||||||
|
t.Fatal("routerA does not contain new inbound route")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue