Added resend functionality and preparations for RSA / Encrpyption

This commit is contained in:
Pablu23
2023-11-09 17:25:02 +01:00
parent 6d9221d951
commit cbf0054394
5 changed files with 142 additions and 91 deletions

View File

@@ -21,8 +21,8 @@ type Packet struct {
}
func PacketFromBytes(bytes []byte) Packet {
sid := SessionID(bytes[0:32])
flag := HeaderFlag(bytes[32])
flag := HeaderFlag(bytes[0])
sid := SessionID(bytes[1:33])
sync := binary.LittleEndian.Uint32(bytes[33:37])
dataLength := binary.LittleEndian.Uint32(bytes[37:41])
pck := Packet{
@@ -30,7 +30,7 @@ func PacketFromBytes(bytes []byte) Packet {
flag: flag,
sync: sync,
dataLength: dataLength,
data: bytes[41 : 41+dataLength],
data: bytes[HeaderSize : HeaderSize+int(dataLength)],
}
return pck
}
@@ -64,6 +64,32 @@ func NewRequest(path string) *Packet {
}
}
func (pck *Packet) GetUint32Payload() (uint32, error) {
flag := pck.flag
if flag != PTE && flag != Ack && flag != End && flag != Resend {
return 0, errors.New(fmt.Sprintf("Can not get Sync from Packet Type with flag: %v", flag))
}
return binary.LittleEndian.Uint32(pck.data), nil
}
func (pck *Packet) GetFilePath() (string, error) {
if pck.flag != Request {
return "", errors.New("Can not get FilePath from Packet that is not Request")
}
return string(pck.data), nil
}
func NewResendFile(resendPck *Packet, data []byte) *Packet {
sync, _ := resendPck.GetUint32Payload()
return &Packet{
sid: resendPck.sid,
flag: File,
sync: sync,
dataLength: uint32(len(data)),
data: data,
}
}
func NewFile(lastPck *Packet, data []byte) *Packet {
return &Packet{
sid: lastPck.sid,
@@ -110,25 +136,10 @@ func NewPte(fileSize uint32, lastPck *Packet) *Packet {
}
}
func (pck *Packet) GetUint32Payload() (uint32, error) {
flag := pck.flag
if flag != PTE && flag != Ack && flag != End && flag != Resend {
return 0, errors.New(fmt.Sprintf("Can not get Sync from Packet Type with flag: %v", flag))
}
return binary.LittleEndian.Uint32(pck.data), nil
}
func (pck *Packet) GetFilePath() (string, error) {
if pck.flag != Request {
return "", errors.New("Can not get FilePath from Packet that is not Request")
}
return string(pck.data), nil
}
func (pck *Packet) ToBytes() []byte {
arr := make([]byte, HeaderSize+int(pck.dataLength))
copy(arr[0:32], pck.sid[:])
arr[32] = byte(pck.flag)
arr[0] = byte(pck.flag)
copy(arr[1:33], pck.sid[:])
binary.LittleEndian.PutUint32(arr[33:37], pck.sync)
binary.LittleEndian.PutUint32(arr[37:41], pck.dataLength)
copy(arr[41:], pck.data)