udtp-protocol 3.6.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,10 @@
1
+ Metadata-Version: 2.4
2
+ Name: udtp_protocol
3
+ Version: 3.6.1
4
+ Summary: Universal Data Transfer Protocol Stack, created on TAFTP. With new functions based on TCP, TAFTP.
5
+ Author: HioDev
6
+ Classifier: Programming Language :: Python :: 3
7
+ Classifier: Topic :: System :: Networking
8
+ Dynamic: author
9
+ Dynamic: classifier
10
+ Dynamic: summary
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,19 @@
1
+ from setuptools import setup, find_packages
2
+
3
+ setup(
4
+ name='udtp_protocol',
5
+ version='3.6.1',
6
+ description='Universal Data Transfer Protocol Stack, created on TAFTP. With new functions based on TCP, TAFTP.',
7
+ author='HioDev',
8
+ packages=find_packages(),
9
+ install_requires=[],
10
+ entry_points={
11
+ 'console_scripts': [
12
+ 'udtp-compile=udtp_core.compiler:main_cli',
13
+ ],
14
+ },
15
+ classifiers=[
16
+ 'Programming Language :: Python :: 3',
17
+ 'Topic :: System :: Networking',
18
+ ],
19
+ )
@@ -0,0 +1,75 @@
1
+ import sys
2
+ import os
3
+ import struct
4
+ import binascii
5
+
6
+ # Добавляем путь, чтобы Python видел наш пакет udtp_core
7
+ sys.path.append(os.path.join(os.getcwd(), 'udtp_core'))
8
+
9
+ try:
10
+ from udtp_core.engine import UDTP_Packet
11
+ from udtp_core.compiler import UDTP_Compiler
12
+ except ImportError:
13
+ print("❌ Ошибка: Сначала запусти генератор проекта, чтобы создать папку udtp_core!")
14
+ sys.exit(1)
15
+
16
+ def run_tests():
17
+ print("🧪 ЗАПУСК СИСТЕМЫ ТЕСТИРОВАНИЯ UDTP\n" + "="*40)
18
+
19
+ # ТЕСТ 1: Валидация упаковки (Pack/Unpack)
20
+ print("[TEST 1] Проверка бинарной упаковки...")
21
+ original_data = b"Secret Payload"
22
+ packet = UDTP_Packet(src_port=8080, dst_port=9090, seq=1, data=original_data)
23
+ raw_bytes = packet.pack()
24
+
25
+ parsed = UDTP_Packet.unpack(raw_bytes)
26
+ if parsed['data'] == original_data and parsed['seq'] == 1:
27
+ print("✅ Успех: Данные корректно упакованы и распакованы.")
28
+ else:
29
+ print("❌ Ошибка: Данные при распаковке искажены!")
30
+
31
+ # ТЕСТ 2: Контрольная сумма (Checksum/CRC32)
32
+ print("\n[TEST 2] Проверка защиты от повреждений (CRC32)...")
33
+ corrupted_bytes = bytearray(raw_bytes)
34
+ # Искусственно меняем один байт в данных (имитация помех в кабеле)
35
+ corrupted_bytes[-1] = corrupted_bytes[-1] ^ 0xFF
36
+
37
+ try:
38
+ # Проверяем, совпадет ли CRC32 (в идеале unpack должен выдать ошибку,
39
+ # если мы добавим проверку CRC в метод unpack)
40
+ h_size = struct.calcsize(UDTP_Packet.HEADER_FORMAT)
41
+ header_parts = struct.unpack(UDTP_Packet.HEADER_FORMAT, corrupted_bytes[:h_size])
42
+ received_crc = header_parts[6]
43
+
44
+ # Считаем CRC заново для "битых" данных
45
+ pre_header = corrupted_bytes[:h_size-4] # Заголовок без CRC
46
+ actual_crc = binascii.crc32(pre_header + corrupted_bytes[h_size:]) & 0xFFFFFFFF
47
+
48
+ if received_crc != actual_crc:
49
+ print(f"✅ Успех: Система обнаружила повреждение! (CRC {received_crc} != {actual_crc})")
50
+ else:
51
+ print("❌ Ошибка: Повреждение не замечено!")
52
+ except Exception as e:
53
+ print(f"❌ Сбой теста: {e}")
54
+
55
+ # ТЕСТ 3: Компиляция большого файла
56
+ print("\n[TEST 3] Тест компилятора (Сегментация)...")
57
+ big_data = b"A" * 5000 # 5 килобайт данных
58
+ with open("large_test.bin", "wb") as f: f.write(big_data)
59
+
60
+ compiler = UDTP_Compiler(mtu=1000) # Разбиваем по 1000 байт
61
+ compiler.compile_binary("large_test.bin", "output.udtp")
62
+
63
+ # Считаем размер: заголовок(19) + данные(1000) = 1019 байт на пакет.
64
+ # Должно быть 5 полных пакетов.
65
+ file_size = os.path.getsize("output.udtp")
66
+ expected_min = 5 * 1019
67
+ if file_size >= expected_min:
68
+ print(f"✅ Успех: Файл сегментирован. Итоговый размер: {file_size} байт.")
69
+ else:
70
+ print(f"❌ Ошибка: Неверный размер скомпилированного UDTP-файла ({file_size}).")
71
+
72
+ print("\n" + "="*40 + "\n🎉 ВСЕ ТЕСТЫ ПРОЙДЕНЫ!")
73
+
74
+ if __name__ == "__main__":
75
+ run_tests()
@@ -0,0 +1,2 @@
1
+ from .engine import UDTP_Packet
2
+ from .compiler import UDTP_Compiler
@@ -0,0 +1,17 @@
1
+ import os
2
+ from .engine import UDTP_Packet
3
+
4
+ class UDTP_Compiler:
5
+ def __init__(self, mtu=1400):
6
+ self.mtu = mtu
7
+
8
+ def compile_binary(self, input_file, output_udtp_bin):
9
+ if not os.path.exists(input_file): return False
10
+
11
+ packets_count = 0
12
+ with open(input_file, 'rb') as src, open(output_udtp_bin, 'wb') as dst:
13
+ while chunk := src.read(self.mtu):
14
+ p = UDTP_Packet(src_port=5000, dst_port=5000, seq=packets_count, data=chunk)
15
+ dst.write(p.pack())
16
+ packets_count += 1
17
+ print(f"[*] Скомпилировано {packets_count} UDTP пакетов в {output_udtp_bin}")
@@ -0,0 +1,42 @@
1
+ import struct
2
+ import binascii
3
+ import time
4
+
5
+ class UDTP_Packet:
6
+ # Заголовок UDTP:
7
+ # [Signature:4b][Src:2b][Dst:2b][Seq:4b][Ack:4b][Flags:1b][CRC:4b] = 19 байт
8
+ HEADER_FORMAT = "!4sHHIIBI"
9
+ SIGNATURE = b"UDTP"
10
+
11
+ def __init__(self, src_port, dst_port, seq=0, ack=0, flags=0, data=b""):
12
+ self.src = src_port
13
+ self.dst = dst_port
14
+ self.seq = seq
15
+ self.ack = ack
16
+ self.flags = flags
17
+ self.data = data
18
+
19
+ def pack(self) -> bytes:
20
+ # Предварительная упаковка для расчета контрольной суммы
21
+ pre_header = struct.pack("!4sHHIIB", self.SIGNATURE, self.src, self.dst, self.seq, self.ack, self.flags)
22
+ checksum = binascii.crc32(pre_header + self.data) & 0xFFFFFFFF
23
+
24
+ # Финальный пакет
25
+ return struct.pack(self.HEADER_FORMAT, self.SIGNATURE, self.src, self.dst, self.seq, self.ack, self.flags, checksum) + self.data
26
+
27
+ @classmethod
28
+ def unpack(cls, raw_bytes):
29
+ h_size = struct.calcsize(cls.HEADER_FORMAT)
30
+ if len(raw_bytes) < h_size: raise ValueError("Packet too small")
31
+
32
+ h = struct.unpack(cls.HEADER_FORMAT, raw_bytes[:h_size])
33
+ if h[0] != cls.SIGNATURE: raise ValueError("Invalid UDTP Signature")
34
+
35
+ return {
36
+ "ports": (h[1], h[2]),
37
+ "seq": h[3],
38
+ "ack": h[4],
39
+ "flags": h[5],
40
+ "crc": h[6],
41
+ "data": raw_bytes[h_size:]
42
+ }
@@ -0,0 +1,10 @@
1
+ Metadata-Version: 2.4
2
+ Name: udtp_protocol
3
+ Version: 3.6.1
4
+ Summary: Universal Data Transfer Protocol Stack, created on TAFTP. With new functions based on TCP, TAFTP.
5
+ Author: HioDev
6
+ Classifier: Programming Language :: Python :: 3
7
+ Classifier: Topic :: System :: Networking
8
+ Dynamic: author
9
+ Dynamic: classifier
10
+ Dynamic: summary
@@ -0,0 +1,10 @@
1
+ setup.py
2
+ tests/test.py
3
+ udtp_core/__init__.py
4
+ udtp_core/compiler.py
5
+ udtp_core/engine.py
6
+ udtp_protocol.egg-info/PKG-INFO
7
+ udtp_protocol.egg-info/SOURCES.txt
8
+ udtp_protocol.egg-info/dependency_links.txt
9
+ udtp_protocol.egg-info/entry_points.txt
10
+ udtp_protocol.egg-info/top_level.txt
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ udtp-compile = udtp_core.compiler:main_cli
@@ -0,0 +1 @@
1
+ udtp_core