From 98c861c625f38b1ac6a630f2becb14b25488e2ee Mon Sep 17 00:00:00 2001 From: JJTech0130 Date: Tue, 2 May 2023 17:48:47 -0400 Subject: [PATCH] compatibility with older python --- apns.py | 14 +++++++------- ids.py | 16 ++++++++-------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/apns.py b/apns.py index aaca852..53bc602 100644 --- a/apns.py +++ b/apns.py @@ -83,11 +83,11 @@ class APNSConnection: if token is None: payload = _serialize_payload( - 7, [(2, 0x01.to_bytes()), (5, flags.to_bytes(4))] + 7, [(2, 0x01.to_bytes(1, 'big')), (5, flags.to_bytes(4, 'big'))] ) else: payload = _serialize_payload( - 7, [(1, token), (2, 0x01.to_bytes()), (5, flags.to_bytes(4))] + 7, [(1, token), (2, 0x01.to_bytes(1, 'big')), (5, flags.to_bytes(4, 'big'))] ) self.sock.write(payload) @@ -97,7 +97,7 @@ class APNSConnection: if ( payload == None or payload[0] != 8 - or _get_field(payload[1], 1) != 0x00.to_bytes() + or _get_field(payload[1], 1) != 0x00.to_bytes(1, 'big') ): raise Exception("Failed to connect") @@ -139,13 +139,13 @@ class APNSConnection: payload = self.wait_for_packet(0x0B) - if payload[1][0][1] != 0x00.to_bytes(): + if payload[1][0][1] != 0x00.to_bytes(1, 'big'): raise Exception("Failed to send message") def set_state(self, state: int): self.sock.write( _serialize_payload( - 0x14, [(1, state.to_bytes(1)), (2, 0x7FFFFFFF.to_bytes(4))] + 0x14, [(1, state.to_bytes(1, 'big')), (2, 0x7FFFFFFF.to_bytes(4, 'big'))] ) ) @@ -158,7 +158,7 @@ class APNSConnection: def _serialize_field(id: int, value: bytes) -> bytes: - return id.to_bytes() + len(value).to_bytes(2, "big") + value + return id.to_bytes(1, 'big') + len(value).to_bytes(2, "big") + value def _serialize_payload(id: int, fields: list[(int, bytes)]) -> bytes: @@ -168,7 +168,7 @@ def _serialize_payload(id: int, fields: list[(int, bytes)]) -> bytes: if fid is not None: payload += _serialize_field(fid, value) - return id.to_bytes() + len(payload).to_bytes(4, "big") + payload + return id.to_bytes(1, 'big') + len(payload).to_bytes(4, "big") + payload def _deserialize_field(stream: bytes) -> tuple[int, bytes]: diff --git a/ids.py b/ids.py index d96a6ac..17610e7 100644 --- a/ids.py +++ b/ids.py @@ -1,7 +1,7 @@ import plistlib import random import uuid -import zlib +import gzip from base64 import b64decode, b64encode from datetime import datetime @@ -47,13 +47,13 @@ def _create_payload( return ( nonce - + len(bag_key).to_bytes(4) + + len(bag_key).to_bytes(4, 'big') + bag_key.encode() - + len(query_string).to_bytes(4) + + len(query_string).to_bytes(4, 'big') + query_string.encode() - + len(payload).to_bytes(4) + + len(payload).to_bytes(4, 'big') + payload - + len(push_token).to_bytes(4) + + len(push_token).to_bytes(4, 'big') + push_token, nonce, ) @@ -79,7 +79,7 @@ def sign_payload( # global_key, global_cert = load_keys() def _send_request(conn: apns.APNSConnection, bag_key: str, topic: str, body: bytes, keypair: KeyPair, username: str) -> bytes: - body = zlib.compress(body, wbits=16 + zlib.MAX_WBITS) + body = gzip.compress(body, mtime=0) push_token = b64encode(conn.token).decode() @@ -133,7 +133,7 @@ def lookup(conn: apns.APNSConnection, self: str, keypair: KeyPair, topic: str, q query = {"uris": query} resp = _send_request(conn, "id-query", topic, plistlib.dumps(query), keypair, self) resp = plistlib.loads(resp) - resp = zlib.decompress(resp["b"], 16 + zlib.MAX_WBITS) + resp = gzip.decompress(resp["b"]) resp = plistlib.loads(resp) return resp @@ -269,7 +269,7 @@ def _register_request( } body = plistlib.dumps(body) - body = zlib.compress(body, wbits=16 + zlib.MAX_WBITS) + body = gzip.compress(body, mtime=0) push_sig, push_nonce = sign_payload(push_key, "id-register", "", push_token, body) auth_sig, auth_nonce = sign_payload(auth_key, "id-register", "", push_token, body)