aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/PacketManager/PacketManager.py2
-rw-r--r--lib/PacketManager/packets/FSNETCMD_ADDOBJECT.py16
-rw-r--r--lib/PacketManager/packets/FSNETCMD_JOINREQUEST.py2
-rw-r--r--lib/PacketManager/packets/FSNETCMD_LOADFIELD.py4
-rw-r--r--lib/PacketManager/packets/FSNETCMD_LOGON.py16
-rw-r--r--lib/__init__.py0
-rw-r--r--tests/__init__.py0
-rw-r--r--tests/packet01_logon_test.py46
-rw-r--r--tests/packet04_loadfield_test.py38
-rw-r--r--tests/packet05_addobject_test.py39
-rw-r--r--tests/packet08_joinrequest_test.py31
-rw-r--r--tests/packet09_joinapproval_test.py26
12 files changed, 208 insertions, 12 deletions
diff --git a/lib/PacketManager/PacketManager.py b/lib/PacketManager/PacketManager.py
index ea0d91b..847d55c 100644
--- a/lib/PacketManager/PacketManager.py
+++ b/lib/PacketManager/PacketManager.py
@@ -2,7 +2,7 @@ from struct import unpack, pack
from PacketManager.packets import MESSAGE_TYPES, FSWEAPON_DICT, GUIDEDWEAPONS
-class PackageManager:
+class PacketManager:
def __init__(self):
pass
diff --git a/lib/PacketManager/packets/FSNETCMD_ADDOBJECT.py b/lib/PacketManager/packets/FSNETCMD_ADDOBJECT.py
index f2e831e..ef7f785 100644
--- a/lib/PacketManager/packets/FSNETCMD_ADDOBJECT.py
+++ b/lib/PacketManager/packets/FSNETCMD_ADDOBJECT.py
@@ -26,15 +26,15 @@ class FSNETCMD_ADDOBJECT: #5
self.decode()
def decode(self):
- self.object_type, self.net_type = unpack("hh", self.buffer[4:8])
+ self.object_type, self.net_type = unpack("HH", self.buffer[4:8])
#If object_type = 0, then it's an aircraft, and client will send
# FSNETREADBACK_ADDAIRPLANE
#If object_types = 1, then it's a ground object, and client will send
# FSNETREADBACK_ADDGROUND
self.object_id = unpack("I", self.buffer[8:12])[0]
self.iff, _ = unpack("hh", self.buffer[12:16])
- self.pos = unpack("fff", self.buffer[16:28])
- self.atti = unpack("fff", self.buffer[28:40])
+ self.pos = list(unpack("fff", self.buffer[16:28]))
+ self.atti = list(unpack("fff", self.buffer[28:40]))
self.identifier = unpack("32s", self.buffer[40:72])[0].decode().strip('\x00')
self.substrname = unpack("32s", self.buffer[72:104])[0].decode().strip('\x00')
self.ysfid = unpack("I", self.buffer[104:108])[0]
@@ -52,10 +52,12 @@ class FSNETCMD_ADDOBJECT: #5
flags, flags0, outside_radius, aircraft_class=None, aircraft_category=None,
pilot=None, with_size:bool=False):
- buffer = pack("IHHIHHfff32s32sIIIf", 5, object_type, net_type, object_id,
- iff, 0, pos[0], pos[1], pos[2], atti[0], atti[1], atti[2],
- identifier.encode(), substrname.encode(), ysfid, flags,
- flags0, outside_radius)
+ buffer = pack('IHH', 5, object_type, net_type)
+ buffer += pack('IHHffffff', object_id, iff, 0, pos[0], pos[1], pos[2], atti[0], atti[1], atti[2])
+ buffer += pack('32s32sI', identifier.encode(), substrname.encode(), ysfid)
+ buffer += pack('II', flags, flags0)
+ buffer += pack('f', outside_radius)
+
if aircraft_class and aircraft_category:
buffer += pack("hhh", aircraft_class, aircraft_category, 0)
if pilot:
diff --git a/lib/PacketManager/packets/FSNETCMD_JOINREQUEST.py b/lib/PacketManager/packets/FSNETCMD_JOINREQUEST.py
index 0df7287..7796599 100644
--- a/lib/PacketManager/packets/FSNETCMD_JOINREQUEST.py
+++ b/lib/PacketManager/packets/FSNETCMD_JOINREQUEST.py
@@ -23,7 +23,7 @@ class FSNETCMD_JOINREQUEST: #8
@staticmethod
def encode(iff, aircraft, start_pos, fuel, smoke, with_size:bool=False):
buffer = pack("IHH32s32sHHH", 8, iff, 0, aircraft.encode(),
- start_pos.encode(), 0, fuel, smoke)
+ start_pos.encode(), 1, fuel, smoke)
if with_size:
return pack("I",len(buffer))+buffer
return buffer \ No newline at end of file
diff --git a/lib/PacketManager/packets/FSNETCMD_LOADFIELD.py b/lib/PacketManager/packets/FSNETCMD_LOADFIELD.py
index 2994591..2184f7d 100644
--- a/lib/PacketManager/packets/FSNETCMD_LOADFIELD.py
+++ b/lib/PacketManager/packets/FSNETCMD_LOADFIELD.py
@@ -21,7 +21,9 @@ class FSNETCMD_LOADFIELD: #4
@staticmethod
def encode(field, flags, pos, atti, with_size:bool=False):
- buffer = pack("I32sIffffff", 4, field.encode(), flags, pos[0], pos[1],
+ if isinstance(field, str):
+ field = field.encode()
+ buffer = pack("I32sIffffff", 4, field, flags, pos[0], pos[1],
pos[2], atti[0], atti[1], atti[2])
if with_size:
return pack("I",len(buffer))+buffer
diff --git a/lib/PacketManager/packets/FSNETCMD_LOGON.py b/lib/PacketManager/packets/FSNETCMD_LOGON.py
index 84d6c86..4787e63 100644
--- a/lib/PacketManager/packets/FSNETCMD_LOGON.py
+++ b/lib/PacketManager/packets/FSNETCMD_LOGON.py
@@ -23,6 +23,11 @@ class FSNETCMD_LOGON: #1
self.alias = self.buffer[24:].decode().strip('\x00')
else:
self.alias = self.username
+ if isinstance(self.username,bytes):
+ self.username = self.username.decode().strip('\x00')
+ if isinstance(self.alias,bytes):
+ self.alias = self.alias.decode().strip('\x00')
+
@staticmethod #Method to create a logon packet, if required.
def encode(username, version, with_size:bool=False):
@@ -32,9 +37,16 @@ class FSNETCMD_LOGON: #1
else:
shortform = username
alias = None
- buffer = pack("I16sI", 1, shortform.encode(), version)
+ if isinstance(shortform,str):
+ shortform = shortform.encode()
+ buffer = pack("I16sI", 1, shortform, version)
if alias:
- buffer += alias.encode()
+ if isinstance(alias,str):
+ alias = alias.encode()
+ if len(alias)<200:
+ alias = alias.ljust(200,b'\x00')
+ alias += b'\x00\x00\x00\x00'
+ buffer += alias
if with_size:
return pack("I",len(buffer))+buffer
diff --git a/lib/__init__.py b/lib/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lib/__init__.py
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/__init__.py
diff --git a/tests/packet01_logon_test.py b/tests/packet01_logon_test.py
new file mode 100644
index 0000000..9650585
--- /dev/null
+++ b/tests/packet01_logon_test.py
@@ -0,0 +1,46 @@
+import unittest
+import sys
+import os
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+from lib.PacketManager.packets.FSNETCMD_LOGON import FSNETCMD_LOGON
+
+class TestFSNETCMD_LOGON(unittest.TestCase):
+
+ def test_decode(self):
+ buffer = b'\x01\x00\x00\x00User1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99x3\x01'
+ packet = FSNETCMD_LOGON(buffer)
+ self.assertEqual(packet.username, 'User1')
+ self.assertEqual(packet.version, 20150425)
+ self.assertEqual(packet.alias, 'User1')
+
+ def test_decode_with_alias(self):
+ buffer = b'\x01\x00\x00\x00ExtraLongUserna\x00\x99x3\x01ExtraLongUsernameThatIsTooLongForYS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+ packet = FSNETCMD_LOGON(buffer)
+ self.assertEqual(packet.username, 'ExtraLongUserna')
+ self.assertEqual(packet.version, 20150425)
+ self.assertEqual(packet.alias, 'ExtraLongUsernameThatIsTooLongForYS')
+
+ def test_encode(self):
+ username = "User1"
+ version = 20150425
+ buffer = FSNETCMD_LOGON.encode(username, version)
+ expected_buffer = b'\x01\x00\x00\x00User1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99x3\x01'
+ self.assertEqual(buffer, expected_buffer)
+
+ def test_encode_with_alias(self):
+ username = "ExtraLongUsernameThatIsTooLongForYS"
+ version = 20150425
+ buffer = FSNETCMD_LOGON.encode(username, version)
+ expected_buffer = b'\x01\x00\x00\x00ExtraLongUserna\x00\x99x3\x01ExtraLongUsernameThatIsTooLongForYS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+ self.assertEqual(buffer, expected_buffer)
+
+ def test_encode_with_size(self):
+ username = "User1"
+ version = 20150425
+ buffer = FSNETCMD_LOGON.encode(username, version, with_size=True)
+ expected_buffer = b'\x18\x00\x00\x00\x01\x00\x00\x00User1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99x3\x01'
+ self.assertEqual(buffer, expected_buffer)
+
+if __name__ == '__main__':
+ unittest.main() \ No newline at end of file
diff --git a/tests/packet04_loadfield_test.py b/tests/packet04_loadfield_test.py
new file mode 100644
index 0000000..a9004be
--- /dev/null
+++ b/tests/packet04_loadfield_test.py
@@ -0,0 +1,38 @@
+import unittest
+import sys
+import os
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+from lib.PacketManager.packets.FSNETCMD_LOADFIELD import FSNETCMD_LOADFIELD
+from struct import pack
+
+class TestFSNETCMD_LOADFIELD(unittest.TestCase):
+
+ def test_decode(self):
+ buffer = b'\x04\x00\x00\x00ISLAND_GOURD\x00\xc39\x00\xe0\x1ff\x00\r\x00\x00\x00\r\x00\x00\x00\x10\xc49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+ packet = FSNETCMD_LOADFIELD(buffer)
+ self.assertEqual(packet.fieldShortName, 'ISLAND_GOURD')
+ self.assertEqual(packet.flags, 0)
+ self.assertEqual(packet.pos, [0, 0, 0])
+ self.assertEqual(packet.atti, [0, 0,0])
+
+ def test_encode(self):
+ field = b'ISLAND_GOURD\x00\xc39\x00\xe0\x1ff\x00\r\x00\x00\x00\r\x00\x00\x00\x10\xc49\x00'
+ flags = 0
+ pos = [0, 0, 0]
+ atti = [0, 0, 0]
+ buffer = FSNETCMD_LOADFIELD.encode(field, flags, pos, atti)
+ expected_buffer = b'\x04\x00\x00\x00ISLAND_GOURD\x00\xc39\x00\xe0\x1ff\x00\r\x00\x00\x00\r\x00\x00\x00\x10\xc49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+ self.assertEqual(buffer, expected_buffer)
+
+ def test_encode_with_size(self):
+ field = b'ISLAND_GOURD\x00\xc39\x00\xe0\x1ff\x00\r\x00\x00\x00\r\x00\x00\x00\x10\xc49\x00'
+ flags = 0
+ pos = [0, 0, 0]
+ atti = [0, 0, 0]
+ buffer = FSNETCMD_LOADFIELD.encode(field, flags, pos, atti, with_size=True)
+ expected_buffer = b'@\x00\x00\x00\x04\x00\x00\x00ISLAND_GOURD\x00\xc39\x00\xe0\x1ff\x00\r\x00\x00\x00\r\x00\x00\x00\x10\xc49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+ self.assertEqual(buffer, expected_buffer)
+
+if __name__ == '__main__':
+ unittest.main() \ No newline at end of file
diff --git a/tests/packet05_addobject_test.py b/tests/packet05_addobject_test.py
new file mode 100644
index 0000000..6378858
--- /dev/null
+++ b/tests/packet05_addobject_test.py
@@ -0,0 +1,39 @@
+import unittest
+import sys
+import os
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+from lib.PacketManager.packets.FSNETCMD_ADDOBJECT import FSNETCMD_ADDOBJECT
+
+class TestFSNETCMD_ADDOBJECT(unittest.TestCase):
+
+ def test_decode(self):
+ buffer = b'\x05\x00\x00\x00\x01\x00\x01\x00\x02\x00\x01\x00\x00\x00\x00\x00R\x0c^E\x00\x00\x00\x00H\x85%E\x1d\x96\xcb\xbf\x00\x00\x00\x00\x00\x00\x00\x80HANGER\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\xd7\xa3dB'
+
+ packet = FSNETCMD_ADDOBJECT(buffer)
+ self.assertEqual(packet.object_type, 1)
+ self.assertEqual(packet.net_type, 1)
+ self.assertEqual(packet.object_id, 65538)
+ self.assertEqual(packet.iff, 0)
+ self.assertEqual(packet.pos, [3552.77001953125, 0.0, 2648.330078125])
+ self.assertEqual(packet.atti, [-1.590518593788147, 0.0, -0.0])
+ self.assertEqual(packet.identifier, 'HANGER')
+ self.assertEqual(packet.substrname, '')
+ self.assertEqual(packet.ysfid, 0)
+ self.assertEqual(packet.flags, 0)
+ self.assertEqual(packet.flags0, 32768)
+ self.assertEqual(packet.outsideRadius, 57.15999984741211)
+
+ def test_encode(self):
+ buffer = FSNETCMD_ADDOBJECT.encode(
+ object_type=1, net_type=1, object_id=65538, iff=0, pos=[3552.77001953125, 0.0, 2648.330078125],
+ atti=[-1.590518593788147, 0.0, -0.0], identifier='HANGER', substrname='', ysfid=0,
+ flags=0, flags0=32768, outside_radius=57.15999984741211
+ )
+ expected_buffer = b'\x05\x00\x00\x00\x01\x00\x01\x00\x02\x00\x01\x00\x00\x00\x00\x00R\x0c^E\x00\x00\x00\x00H\x85%E\x1d\x96\xcb\xbf\x00\x00\x00\x00\x00\x00\x00\x80HANGER\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\xd7\xa3dB'
+ self.assertEqual(buffer, expected_buffer)
+
+
+
+if __name__ == '__main__':
+ unittest.main() \ No newline at end of file
diff --git a/tests/packet08_joinrequest_test.py b/tests/packet08_joinrequest_test.py
new file mode 100644
index 0000000..e712989
--- /dev/null
+++ b/tests/packet08_joinrequest_test.py
@@ -0,0 +1,31 @@
+import unittest
+import sys
+import os
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+from lib.PacketManager.packets.FSNETCMD_JOINREQUEST import FSNETCMD_JOINREQUEST
+
+class TestFSNETCMD_JOINREQUEST(unittest.TestCase):
+
+ def test_decode(self):
+ buffer = b'\x08\x00\x00\x00\x02\x00\x00\x00EUROFIGHTER_TYPHOON\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RW36_01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00K\x00\x00\x00'
+ packet = FSNETCMD_JOINREQUEST(buffer)
+ self.assertEqual(packet.iff,2)
+ self.assertEqual(packet.aircraft, 'EUROFIGHTER_TYPHOON')
+ self.assertEqual(packet.start_pos, 'RW36_01')
+ self.assertEqual(packet.fuel, 75)
+ self.assertEqual(packet.smoke,0)
+
+ def test_encode(self):
+ iff = 2
+ aircraft = 'EUROFIGHTER_TYPHOON'
+ start_pos = 'NORTH10000_01'
+ fuel = 75
+ smoke = 0
+ buffer = FSNETCMD_JOINREQUEST.encode(iff, aircraft, start_pos, fuel, smoke)
+ expected_buffer = b'\x08\x00\x00\x00\x02\x00\x00\x00EUROFIGHTER_TYPHOON\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00NORTH10000_01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00K\x00\x00\x00'
+ self.assertEqual(buffer, expected_buffer)
+
+
+if __name__ == '__main__':
+ unittest.main() \ No newline at end of file
diff --git a/tests/packet09_joinapproval_test.py b/tests/packet09_joinapproval_test.py
new file mode 100644
index 0000000..6334f78
--- /dev/null
+++ b/tests/packet09_joinapproval_test.py
@@ -0,0 +1,26 @@
+import unittest
+import sys
+import os
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+from lib.PacketManager.packets.FSNETCMD_JOINAPPROVAL import FSNETCMD_JOINAPPROVAL
+
+class TestFSNETCMD_JOINAPPROVAL(unittest.TestCase):
+
+ def test_decode(self):
+ buffer = b'\t\x00\x00\x00'
+ packet = FSNETCMD_JOINAPPROVAL(buffer)
+ self.assertEqual(packet.buffer, buffer)
+
+ def test_encode(self):
+ buffer = FSNETCMD_JOINAPPROVAL.encode()
+ expected_buffer = b'\t\x00\x00\x00'
+ self.assertEqual(buffer, expected_buffer)
+
+ def test_encode_with_size(self):
+ buffer = FSNETCMD_JOINAPPROVAL.encode(with_size=True)
+ expected_buffer = b'\x04\x00\x00\x00\t\x00\x00\x00'
+ self.assertEqual(buffer, expected_buffer)
+
+if __name__ == '__main__':
+ unittest.main() \ No newline at end of file