123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- 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<u8>,
- }
-
- 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
- }
-
- fn recive(input: Vec<u8>) -> 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
- }
|