You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

message.rs 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. const KEYLENGTH: u8 = 32;
  2. pub enum PayloadType {
  3. //0-31 system messages (plaintext)
  4. Ping = 1,
  5. Pong = 2,
  6. Error = 3,
  7. //32 - 63 Serverside messages (currently plaintext)
  8. Init = 32,
  9. Join = 33,
  10. Exit = 34,
  11. //64 -95 initial setup messages(plaintext)
  12. DhSetup = 64,
  13. DhReturn = 65,
  14. //96 - 127 client-client setup messages(DH or old KEY encrypted)
  15. AUTHORIZE = 96,
  16. KeyCurrent = 97,
  17. KeyNew = 98,
  18. //128-159 main messages (shared KEY encrypted)
  19. Msg = 128,
  20. //160-255 reserved
  21. }
  22. struct Message {
  23. // Eigenschaften der Klasse
  24. src_id: u32,
  25. dest_id: u32,
  26. size: u16,
  27. payload: Vec<u8>,
  28. }
  29. impl Message {
  30. fn new(src_id: u32, dest_id: u32, size: u16, msg_type: PayloadType) -> Message {
  31. let mut msg = Message {
  32. src_id: src_id,
  33. dest_id: dest_id,
  34. size: size,
  35. payload: Vec::with_capacity(size.into()),
  36. };
  37. msg.payload[0] = msg_type as u8;
  38. msg
  39. }
  40. fn recive(input: Vec<u8>) -> Message {
  41. let byte1 = input.get(0).expect("Fail to Read Byte 1");
  42. let byte2 = input.get(1).expect("Fail to Read Byte 2");
  43. let byte3 = input.get(2).expect("Fail to Read Byte 3");
  44. let byte4 = input.get(3).expect("Fail to Read Byte 4");
  45. let src_id: u32 =
  46. (byte1 << 24) as u32 | (byte2 << 16) as u32 | (byte3 << 8) as u32 | (byte4 << 0) as u32;
  47. let byte5 = input.get(5).expect("Fail to Read Byte 5");
  48. let byte6 = input.get(6).expect("Fail to Read Byte 6");
  49. let byte7 = input.get(7).expect("Fail to Read Byte 7");
  50. let byte8 = input.get(8).expect("Fail to Read Byte 8");
  51. let dest_id: u32 =
  52. (byte5 << 24) as u32 | (byte6 << 16) as u32 | (byte7 << 8) as u32 | (byte8 << 0) as u32;
  53. let byte9 = input.get(9).expect("Fail to Read byte 9");
  54. let byte10 = input.get(10).expect("Fail to Read byte 10");
  55. let size = (byte9 << 8) as u16 | (byte10 << 0) as u16;
  56. assert!(size > 0, "Ungültige size größe size = {}", size);
  57. Message {
  58. src_id: src_id,
  59. dest_id: dest_id,
  60. size: size,
  61. payload: (&input[11..]).to_vec(),
  62. }
  63. }
  64. // Methoden der Klasse
  65. }