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 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. use std::{
  2. io::{BufReader, Read},
  3. net::TcpStream,
  4. };
  5. const KEYLENGTH: u8 = 32;
  6. pub enum PayloadType {
  7. //0-31 system messages (plaintext)
  8. Ping = 1,
  9. Pong = 2,
  10. Error = 3,
  11. //32 - 63 Serverside messages (currently plaintext)
  12. Init = 32,
  13. Join = 33,
  14. Exit = 34,
  15. //64 -95 initial setup messages(plaintext)
  16. DhSetup = 64,
  17. DhReturn = 65,
  18. //96 - 127 client-client setup messages(DH or old KEY encrypted)
  19. AUTHORIZE = 96,
  20. KeyCurrent = 97,
  21. KeyNew = 98,
  22. //128-159 main messages (shared KEY encrypted)
  23. Msg = 128,
  24. //160-255 reserved
  25. }
  26. pub struct Message {
  27. // Eigenschaften der Klasse
  28. src_id: u32,
  29. dest_id: u32,
  30. size: u16,
  31. payload: Vec<u8>,
  32. }
  33. impl Message {
  34. pub fn new(src_id: u32, dest_id: u32, size: u16, msg_type: PayloadType) -> Message {
  35. let mut msg = Message {
  36. src_id: src_id,
  37. dest_id: dest_id,
  38. size: size,
  39. payload: Vec::with_capacity(size.into()),
  40. };
  41. msg.payload[0] = msg_type as u8;
  42. msg
  43. }
  44. fn creat_vec(&mut self) -> Vec<u8> {
  45. let mut vec: Vec<u8> = vec![0; (10 + self.size).into()];
  46. vec[0] = ((self.src_id >> 24) & 0xff) as u8;
  47. vec[1] = ((self.src_id >> 16) & 0xff) as u8;
  48. vec[2] = ((self.src_id >> 8) & 0xff) as u8;
  49. vec[3] = (self.src_id & 0xff) as u8;
  50. vec[4] = ((self.dest_id >> 24) & 0xff) as u8;
  51. vec[5] = ((self.dest_id >> 16) & 0xff) as u8;
  52. vec[6] = ((self.dest_id >> 8) & 0xff) as u8;
  53. vec[7] = (self.dest_id & 0xff) as u8;
  54. vec[8] = ((self.size >> 8) & 0xff) as u8;
  55. vec[9] = (self.size & 0xff) as u8;
  56. for i in 10..(10 + self.size).into(){
  57. vec[i] = self.payload[i - 10];
  58. }
  59. vec
  60. }
  61. fn receive(stream: TcpStream) -> Message {
  62. let buffreader = BufReader::new(stream);
  63. let mut byte_iterator = buffreader.bytes();
  64. let byte1 = byte_iterator.next().unwrap().unwrap();
  65. let byte2 = byte_iterator.next().unwrap().unwrap();
  66. let byte3 = byte_iterator.next().unwrap().unwrap();
  67. let byte4 = byte_iterator.next().unwrap().unwrap();
  68. let src_id: u32 =
  69. (byte1 << 24) as u32 | (byte2 << 16) as u32 | (byte3 << 8) as u32 | (byte4 << 0) as u32;
  70. let byte5 = byte_iterator.next().unwrap().unwrap();
  71. let byte6 = byte_iterator.next().unwrap().unwrap();
  72. let byte7 = byte_iterator.next().unwrap().unwrap();
  73. let byte8 = byte_iterator.next().unwrap().unwrap();
  74. let dest_id: u32 =
  75. (byte5 << 24) as u32 | (byte6 << 16) as u32 | (byte7 << 8) as u32 | (byte8 << 0) as u32;
  76. let byte9 = byte_iterator.next().unwrap().unwrap();
  77. let byte10 = byte_iterator.next().unwrap().unwrap();
  78. let size = (byte9 << 8) as u16 | (byte10 << 0) as u16;
  79. assert!(size > 0, "Ungültige size größe size = {}", size);
  80. let mut payload = Vec::<u8>::new();
  81. for i in 0..size {
  82. payload.push(byte_iterator.next().unwrap().unwrap());
  83. }
  84. Message {
  85. src_id: src_id,
  86. dest_id: dest_id,
  87. size: size,
  88. payload: payload,
  89. }
  90. }
  91. // Methoden der Klasse
  92. }