From c84d8f35f6a8647a115de99c8cb922fb2c9eee95 Mon Sep 17 00:00:00 2001 From: Bottersnike Date: Fri, 4 Feb 2022 01:09:08 +0000 Subject: [PATCH] Server code --- eaapi/const.py | 7 +++++++ eaapi/crypt.py | 4 ++-- eaapi/decoder.py | 6 ++++++ eaapi/encoder.py | 6 ++++++ eaapi/node.py | 8 ++++++++ eaapi/server | 1 + setup.py | 1 + 7 files changed, 31 insertions(+), 2 deletions(-) create mode 160000 eaapi/server diff --git a/eaapi/const.py b/eaapi/const.py index 7ad2f0a..3a88af1 100644 --- a/eaapi/const.py +++ b/eaapi/const.py @@ -149,3 +149,10 @@ class Type(enum.Enum): if i.value.id == value & ARRAY_MASK: return i raise ValueError(f"Unknown node type {value}") + + +class ServicesMode(enum.Enum): + Operation = "operation" + Debug = "debug" + Test = "test" + Factory = "factory" diff --git a/eaapi/crypt.py b/eaapi/crypt.py index 92771b8..e92fac1 100644 --- a/eaapi/crypt.py +++ b/eaapi/crypt.py @@ -34,8 +34,8 @@ def validate_key(info): return seconds, rng -def get_key(): - return f"1-{int(time.time()):08x}-{(next(prng) & 0xffff):04x}" +def get_key(prng_=None): + return f"1-{int(time.time()):08x}-{(next(prng_ or prng) & 0xffff):04x}" def ea_symmetric_crypt(data, info): diff --git a/eaapi/decoder.py b/eaapi/decoder.py index 6b0a88e..6ce0a52 100644 --- a/eaapi/decoder.py +++ b/eaapi/decoder.py @@ -186,6 +186,12 @@ class Decoder: return walk(tree) def unpack(self): + try: + return self._unpack() + except struct.error as e: + raise DecodeError(e) + + def _unpack(self): if self.is_xml_string: return self._read_xml_string() diff --git a/eaapi/encoder.py b/eaapi/encoder.py index 4a930aa..6a79af6 100644 --- a/eaapi/encoder.py +++ b/eaapi/encoder.py @@ -124,6 +124,12 @@ class Encoder: self.stream.write(struct.pack(">BBBB", 0xA0, contents, self.encoding, enc_comp)) def pack(self, node): + try: + return self._pack(node) + except struct.error as e: + return EncodeError(e) + + def _pack(self, node): self._compressed = node.can_compress # Opportunically compress if we can self._write_magic() diff --git a/eaapi/node.py b/eaapi/node.py index 71b6713..7c7d9e3 100644 --- a/eaapi/node.py +++ b/eaapi/node.py @@ -68,6 +68,14 @@ class XMLNode: for i in self.children: yield i + def get(self, name, default=None): + try: + return self[name] + except IndexError: + return default + except KeyError: + return default + def __getitem__(self, name): if isinstance(name, int): return self.children[name] diff --git a/eaapi/server b/eaapi/server new file mode 160000 index 0000000..4b0e643 --- /dev/null +++ b/eaapi/server @@ -0,0 +1 @@ +Subproject commit 4b0e64341fa7c7aa2db4b57b53283308997fede7 diff --git a/setup.py b/setup.py index ee61d9b..5d65c81 100644 --- a/setup.py +++ b/setup.py @@ -3,4 +3,5 @@ from distutils.core import setup setup( name="eaapi", packages=["eaapi"], + install_requires=open("requirements.txt").read().split("\n"), )