From a635c305d33c85917d02182ba5ddf524a0b3940f Mon Sep 17 00:00:00 2001 From: Daniel Laptop Date: Thu, 15 Dec 2022 11:28:55 +0100 Subject: [PATCH 1/2] angefangen message zu implementieren --- src/bin/message.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/bin/message.rs diff --git a/src/bin/message.rs b/src/bin/message.rs new file mode 100644 index 0000000..378a33d --- /dev/null +++ b/src/bin/message.rs @@ -0,0 +1,44 @@ +const KEYLENGTH: u8 = 32; + +pub enum PayloadType { + //0-31 system messages (plaintext) + Ping = 1, + Pong = 2, + Error = 3, + //32 - 63 Serverside messages (currently plaintext) + Init = 32, + Join = 33, + Exit = 34, + //64 -95 initial setup messages(plaintext) + DhSetup = 64, + DhReturn = 65, + //96 - 127 client-client setup messages(DH or old KEY encrypted) + AUTHORIZE = 96, + KeyCurrent = 97, + KeyNew = 98, + //128-159 main messages (shared KEY encrypted) + Msg = 128, + //160-255 reserved +} + +struct Message { + // Eigenschaften der Klasse + src_id: u32, + dest_id: u32, + size: u16, + payload: Vec, +} + +impl Message { + fn new(src_id: u32, dest_id: u32, size: u16, msg_type: PayloadType) -> Message { + let mut msg = Message { + src_id: src_id, + dest_id: dest_id, + size: size, + payload: Vec::with_capacity(size.into()), + }; + msg.payload[0] = msg_type as u8; + msg + } + // Methoden der Klasse +} From 2c2b55f77693450688140531c11bb0e3979b18ee Mon Sep 17 00:00:00 2001 From: Daniel Laptop Date: Thu, 15 Dec 2022 12:17:18 +0100 Subject: [PATCH 2/2] recvice implementiert. --- src/bin/message.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/bin/message.rs b/src/bin/message.rs index 378a33d..391a00d 100644 --- a/src/bin/message.rs +++ b/src/bin/message.rs @@ -40,5 +40,36 @@ impl Message { msg.payload[0] = msg_type as u8; msg } + + fn recive(input: Vec) -> Message { + let byte1 = input.get(0).expect("Fail to Read Byte 1"); + let byte2 = input.get(1).expect("Fail to Read Byte 2"); + let byte3 = input.get(2).expect("Fail to Read Byte 3"); + let byte4 = input.get(3).expect("Fail to Read Byte 4"); + + let src_id: u32 = + (byte1 << 24) as u32 | (byte2 << 16) as u32 | (byte3 << 8) as u32 | (byte4 << 0) as u32; + + let byte5 = input.get(5).expect("Fail to Read Byte 5"); + let byte6 = input.get(6).expect("Fail to Read Byte 6"); + let byte7 = input.get(7).expect("Fail to Read Byte 7"); + let byte8 = input.get(8).expect("Fail to Read Byte 8"); + + let dest_id: u32 = + (byte5 << 24) as u32 | (byte6 << 16) as u32 | (byte7 << 8) as u32 | (byte8 << 0) as u32; + + let byte9 = input.get(9).expect("Fail to Read byte 9"); + let byte10 = input.get(10).expect("Fail to Read byte 10"); + + let size = (byte9 << 8) as u16 | (byte10 << 0) as u16; + assert!(size > 0, "Ungültige size größe size = {}", size); + + Message { + src_id: src_id, + dest_id: dest_id, + size: size, + payload: (&input[11..]).to_vec(), + } + } // Methoden der Klasse }