|
|
@@ -0,0 +1,39 @@
|
|
|
+import math
|
|
|
+import hashlib
|
|
|
+
|
|
|
+from package import package
|
|
|
+
|
|
|
+class package_spliter:
|
|
|
+ def __init__(self, target: package, mtu: int = 256) -> None:
|
|
|
+ self.__target = target
|
|
|
+ self.__mtu = mtu
|
|
|
+
|
|
|
+ @property
|
|
|
+ def mtu(self) -> int:
|
|
|
+ return self.__mtu
|
|
|
+
|
|
|
+ def __get_number_size(self) -> int:
|
|
|
+ return 4
|
|
|
+
|
|
|
+ def __get_header_size(self) -> int:
|
|
|
+ return self.__get_number_size() * 3 + self.__get_crc_size()
|
|
|
+
|
|
|
+ def __get_crc_size(self) -> int:
|
|
|
+ return 20
|
|
|
+
|
|
|
+ def __convert_number(self, number: int) -> bytes:
|
|
|
+ return number.to_bytes(self.__get_number_size(), "big")
|
|
|
+
|
|
|
+ def __calc_crc(self, part: bytes) -> bytes:
|
|
|
+ return hashlib.sha1(part, usedforsecurity = False).digest()
|
|
|
+
|
|
|
+ def __count_parts(self) -> int:
|
|
|
+ single_package = self.mtu - self.__count_header_size()
|
|
|
+
|
|
|
+ if single_package <= 0:
|
|
|
+ raise RuntimeError("Package size is lower than zero.")
|
|
|
+
|
|
|
+ return math.ceil(len(self.__content) / single_package)
|
|
|
+
|
|
|
+
|
|
|
+
|