dimples 1.5.2__tar.gz → 1.5.5__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.
- {dimples-1.5.2 → dimples-1.5.5}/PKG-INFO +1 -1
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/messenger.py +17 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/packer.py +4 -17
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/processor.py +8 -11
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/compat/compatible.py +2 -2
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/compat/compressor.py +2 -3
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/compat/loader.py +4 -8
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/messenger.py +24 -1
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/packer.py +0 -26
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/processer.py +1 -1
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/handshake.py +2 -2
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/login.py +2 -2
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/trace.py +1 -1
- {dimples-1.5.2 → dimples-1.5.5}/dimples.egg-info/PKG-INFO +1 -1
- {dimples-1.5.2 → dimples-1.5.5}/dimples.egg-info/requires.txt +2 -2
- {dimples-1.5.2 → dimples-1.5.5}/setup.py +6 -6
- {dimples-1.5.2 → dimples-1.5.5}/LICENSE +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/README.md +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/checker.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/checkpoint.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/commands.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/creator.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/customized.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/group.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/grp_expel.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/grp_invite.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/grp_join.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/grp_query.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/grp_quit.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/grp_reset.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/grp_resign.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/cpu/handshake.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/facebook.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/network/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/network/session.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/network/state.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/network/transition.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/client/terminal.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/anonymous.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/ans.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/archivist.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/checker.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/compat/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/compat/address.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/compat/entity.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/compat/meta.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/compat/network.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/dbi/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/dbi/account.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/dbi/message.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/dbi/session.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/facebook.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/ans.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/block.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/customized.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/mute.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/password.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/report.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/roles.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/utils.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/protocol/version.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/queue.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/register.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/common/session.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/flexible.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/gate.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/gatekeeper.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/mars.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/mtp.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/protocol/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/protocol/mars.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/protocol/ws.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/queue.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/seeker.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/session.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/conn/ws.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/account.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/base.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/document.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/group.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/group_history.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/group_keys.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/login.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/meta.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/private.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/station.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/dos/user.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/message.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/base.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/document.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/group.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/grp_history.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/grp_keys.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/login.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/message.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/meta.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/station.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/redis/user.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/session.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_base.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_cipherkey.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_document.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_group.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_group_history.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_group_keys.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_login.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_message.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_meta.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_private.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_station.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/database/t_user.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/edge/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/edge/messenger.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/edge/octopus.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/edge/shared.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/edge/start.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/emitter.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/group/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/group/admin.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/group/builder.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/group/delegate.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/group/emitter.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/group/helper.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/group/manager.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/group/packer.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/group/shared.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/register/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/register/base.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/register/ext.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/register/run.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/register/shared.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/checker.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/cpu/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/cpu/ans.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/cpu/creator.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/cpu/document.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/cpu/handshake.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/cpu/login.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/cpu/report.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/deliver.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/dis_roamer.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/dispatcher.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/facebook.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/messenger.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/packer.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/processor.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/push.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/session.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/server/session_center.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/station/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/station/handler.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/station/shared.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/station/start.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/utils/__init__.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/utils/cache.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/utils/checker.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/utils/config.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/utils/http.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/utils/log.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples/utils/thanos.py +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples.egg-info/SOURCES.txt +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples.egg-info/dependency_links.txt +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples.egg-info/entry_points.txt +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/dimples.egg-info/top_level.txt +0 -0
- {dimples-1.5.2 → dimples-1.5.5}/setup.cfg +0 -0
|
@@ -40,9 +40,11 @@ from dimsdk import ContentType, Command
|
|
|
40
40
|
from dimsdk import ReceiptCommand
|
|
41
41
|
from dimsdk import MessageUtils
|
|
42
42
|
|
|
43
|
+
from ..utils import get_msg_sig
|
|
43
44
|
from ..common import HandshakeCommand, ReportCommand, LoginCommand
|
|
44
45
|
from ..common import CommonMessenger
|
|
45
46
|
|
|
47
|
+
from .checkpoint import Checkpoint
|
|
46
48
|
from .network import ClientSession
|
|
47
49
|
|
|
48
50
|
|
|
@@ -54,6 +56,21 @@ class ClientMessenger(CommonMessenger):
|
|
|
54
56
|
assert isinstance(sess, ClientSession), 'session error: %s' % sess
|
|
55
57
|
return sess
|
|
56
58
|
|
|
59
|
+
# Override
|
|
60
|
+
async def deserialize_message(self, data: bytes) -> Optional[ReliableMessage]:
|
|
61
|
+
msg = await super().deserialize_message(data=data)
|
|
62
|
+
if msg is not None and self._check_message_duplicated(msg=msg):
|
|
63
|
+
msg = None
|
|
64
|
+
return msg
|
|
65
|
+
|
|
66
|
+
def _check_message_duplicated(self, msg: ReliableMessage) -> bool:
|
|
67
|
+
""" check duplicated """
|
|
68
|
+
cp = Checkpoint()
|
|
69
|
+
if cp.duplicated(msg=msg):
|
|
70
|
+
sig = get_msg_sig(msg=msg)
|
|
71
|
+
self.warning(msg='drop duplicated message (%s): %s -> %s' % (sig, msg.sender, msg.receiver))
|
|
72
|
+
return True
|
|
73
|
+
|
|
57
74
|
# Override
|
|
58
75
|
async def process_reliable_message(self, msg: ReliableMessage) -> List[ReliableMessage]:
|
|
59
76
|
# call super
|
|
@@ -33,12 +33,9 @@ from dimsdk import ID
|
|
|
33
33
|
from dimsdk import ContentType, TextContent, FileContent
|
|
34
34
|
from dimsdk import InstantMessage, SecureMessage, ReliableMessage
|
|
35
35
|
|
|
36
|
-
from ..utils import get_msg_sig
|
|
37
36
|
from ..common import CommonFacebook
|
|
38
37
|
from ..common import CommonMessagePacker
|
|
39
38
|
|
|
40
|
-
from .checkpoint import Checkpoint
|
|
41
|
-
|
|
42
39
|
|
|
43
40
|
class ClientMessagePacker(CommonMessagePacker):
|
|
44
41
|
|
|
@@ -141,20 +138,6 @@ class ClientMessagePacker(CommonMessagePacker):
|
|
|
141
138
|
return None
|
|
142
139
|
return await super().verify_message(msg=msg)
|
|
143
140
|
|
|
144
|
-
# Override
|
|
145
|
-
async def deserialize_message(self, data: bytes) -> Optional[ReliableMessage]:
|
|
146
|
-
msg = await super().deserialize_message(data=data)
|
|
147
|
-
if msg is not None and self._message_duplicated(msg=msg):
|
|
148
|
-
msg = None
|
|
149
|
-
return msg
|
|
150
|
-
|
|
151
|
-
def _message_duplicated(self, msg: ReliableMessage) -> bool:
|
|
152
|
-
cp = Checkpoint()
|
|
153
|
-
if cp.duplicated(msg=msg):
|
|
154
|
-
sig = get_msg_sig(msg=msg)
|
|
155
|
-
self.warning(msg='drop duplicated message (%s): %s -> %s' % (sig, msg.sender, msg.receiver))
|
|
156
|
-
return True
|
|
157
|
-
|
|
158
141
|
# Override
|
|
159
142
|
async def decrypt_message(self, msg: SecureMessage) -> Optional[InstantMessage]:
|
|
160
143
|
try:
|
|
@@ -199,7 +182,11 @@ class ClientMessagePacker(CommonMessagePacker):
|
|
|
199
182
|
checker = facebook.checker
|
|
200
183
|
# visa.key not updated?
|
|
201
184
|
user = await facebook.current_user
|
|
185
|
+
if user is None:
|
|
186
|
+
self.error(msg='current user not found')
|
|
187
|
+
return False
|
|
202
188
|
visa = await user.visa
|
|
189
|
+
assert visa is not None, 'user visa error: %s' % user
|
|
203
190
|
return await checker.send_visa(visa=visa, receiver=receiver)
|
|
204
191
|
|
|
205
192
|
# protected
|
|
@@ -39,18 +39,12 @@ from dimsdk import Facebook, Messenger
|
|
|
39
39
|
from dimsdk import ContentProcessorCreator
|
|
40
40
|
|
|
41
41
|
from ..common import HandshakeCommand
|
|
42
|
-
from ..common import
|
|
42
|
+
from ..common import CommonMessenger
|
|
43
43
|
from ..common import CommonMessageProcessor
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
class ClientMessageProcessor(CommonMessageProcessor):
|
|
47
47
|
|
|
48
|
-
@property
|
|
49
|
-
def facebook(self) -> Optional[CommonFacebook]:
|
|
50
|
-
barrack = super().facebook
|
|
51
|
-
assert isinstance(barrack, CommonFacebook), 'facebook error: %s' % barrack
|
|
52
|
-
return barrack
|
|
53
|
-
|
|
54
48
|
@property
|
|
55
49
|
def messenger(self) -> Optional[CommonMessenger]:
|
|
56
50
|
transceiver = super().messenger
|
|
@@ -74,7 +68,7 @@ class ClientMessageProcessor(CommonMessageProcessor):
|
|
|
74
68
|
doc_updated = False
|
|
75
69
|
mem_updated = False
|
|
76
70
|
# check group document time
|
|
77
|
-
last_doc_time = r_msg.get_datetime(key='GDT'
|
|
71
|
+
last_doc_time = r_msg.get_datetime(key='GDT')
|
|
78
72
|
if last_doc_time is not None:
|
|
79
73
|
if last_doc_time.after(now):
|
|
80
74
|
# calibrate the clock
|
|
@@ -85,7 +79,7 @@ class ClientMessageProcessor(CommonMessageProcessor):
|
|
|
85
79
|
self.info(msg='checking for new bulletin: %s' % group)
|
|
86
80
|
await facebook.get_documents(identifier=group)
|
|
87
81
|
# check group history time
|
|
88
|
-
last_his_time = r_msg.get_datetime(key='GHT'
|
|
82
|
+
last_his_time = r_msg.get_datetime(key='GHT')
|
|
89
83
|
if last_his_time is not None:
|
|
90
84
|
if last_his_time.after(now):
|
|
91
85
|
# calibrate the clock
|
|
@@ -112,13 +106,16 @@ class ClientMessageProcessor(CommonMessageProcessor):
|
|
|
112
106
|
elif isinstance(responses[0], HandshakeCommand):
|
|
113
107
|
# urgent command
|
|
114
108
|
return responses
|
|
109
|
+
else:
|
|
110
|
+
facebook = self.facebook
|
|
111
|
+
messenger = self.messenger
|
|
112
|
+
assert facebook is not None and messenger is not None, 'twins not ready: %s, %s' % (facebook, messenger)
|
|
115
113
|
sender = r_msg.sender
|
|
116
114
|
receiver = r_msg.receiver
|
|
117
|
-
me = await
|
|
115
|
+
me = await facebook.select_local_user(receiver=receiver)
|
|
118
116
|
if me is None:
|
|
119
117
|
# assert False, 'receiver error: %s' % receiver
|
|
120
118
|
return responses
|
|
121
|
-
messenger = self.messenger
|
|
122
119
|
# check responses
|
|
123
120
|
from_bots = sender.type == EntityType.STATION or sender.type == EntityType.BOT
|
|
124
121
|
for res in responses:
|
|
@@ -172,7 +172,7 @@ class CompatibleIncoming:
|
|
|
172
172
|
# get command name
|
|
173
173
|
#
|
|
174
174
|
cmd = content.get('command')
|
|
175
|
-
# cmd = Converter.get_str(value=cmd
|
|
175
|
+
# cmd = Converter.get_str(value=cmd)
|
|
176
176
|
if cmd is None or len(cmd) == 0:
|
|
177
177
|
return
|
|
178
178
|
|
|
@@ -270,7 +270,7 @@ class CompatibleOutgoing:
|
|
|
270
270
|
def _fix_type(cls, content: Dict[str, Any]):
|
|
271
271
|
msg_type = content.get('type')
|
|
272
272
|
if isinstance(msg_type, str):
|
|
273
|
-
num_type = Converter.get_int(value=msg_type
|
|
273
|
+
num_type = Converter.get_int(value=msg_type)
|
|
274
274
|
if num_type is not None and num_type >= 0:
|
|
275
275
|
content['type'] = num_type
|
|
276
276
|
|
|
@@ -33,9 +33,8 @@ from .compatible import CompatibleIncoming
|
|
|
33
33
|
|
|
34
34
|
class CompatibleCompressor(MessageCompressor):
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return CompatibleShortener()
|
|
36
|
+
def __init__(self):
|
|
37
|
+
super().__init__(shortener=CompatibleShortener())
|
|
39
38
|
|
|
40
39
|
# Override
|
|
41
40
|
def compress_content(self, content: Dict, key: Dict) -> bytes:
|
|
@@ -132,29 +132,25 @@ class _SafeConverter(BaseConverter):
|
|
|
132
132
|
try:
|
|
133
133
|
return super().get_bool(value=value, default=default)
|
|
134
134
|
except ValueError:
|
|
135
|
-
|
|
136
|
-
pass
|
|
135
|
+
return default
|
|
137
136
|
|
|
138
137
|
# Override
|
|
139
138
|
def get_int(self, value: Any, default: Optional[int]) -> Optional[int]:
|
|
140
139
|
try:
|
|
141
140
|
return super().get_int(value=value, default=default)
|
|
142
141
|
except ValueError:
|
|
143
|
-
|
|
144
|
-
pass
|
|
142
|
+
return default
|
|
145
143
|
|
|
146
144
|
# Override
|
|
147
145
|
def get_float(self, value: Any, default: Optional[float]) -> Optional[float]:
|
|
148
146
|
try:
|
|
149
147
|
return super().get_float(value=value, default=default)
|
|
150
148
|
except ValueError:
|
|
151
|
-
|
|
152
|
-
pass
|
|
149
|
+
return default
|
|
153
150
|
|
|
154
151
|
# Override
|
|
155
152
|
def get_datetime(self, value: Any, default: Optional[DateTime]) -> Optional[DateTime]:
|
|
156
153
|
try:
|
|
157
154
|
return super().get_datetime(value=value, default=default)
|
|
158
155
|
except ValueError:
|
|
159
|
-
|
|
160
|
-
pass
|
|
156
|
+
return default
|
|
@@ -56,6 +56,7 @@ from .session import Transmitter, Session
|
|
|
56
56
|
|
|
57
57
|
from .compat import CompatibleOutgoing
|
|
58
58
|
from .compat import CompatibleCompressor
|
|
59
|
+
from .compat import Compatible
|
|
59
60
|
|
|
60
61
|
|
|
61
62
|
class CommonMessenger(Messenger, Transmitter, Logging, ABC):
|
|
@@ -105,6 +106,28 @@ class CommonMessenger(Messenger, Transmitter, Logging, ABC):
|
|
|
105
106
|
def session(self) -> Session:
|
|
106
107
|
return self.__session
|
|
107
108
|
|
|
109
|
+
# Override
|
|
110
|
+
async def serialize_message(self, msg: ReliableMessage) -> bytes:
|
|
111
|
+
Compatible.fix_meta_attachment(msg=msg)
|
|
112
|
+
Compatible.fix_visa_attachment(msg=msg)
|
|
113
|
+
return await super().serialize_message(msg=msg)
|
|
114
|
+
|
|
115
|
+
# Override
|
|
116
|
+
async def deserialize_message(self, data: bytes) -> Optional[ReliableMessage]:
|
|
117
|
+
if data is None or len(data) <= 4:
|
|
118
|
+
# message data error
|
|
119
|
+
return None
|
|
120
|
+
# elif not (data.startswith(b'{') and data.endswith(b'}')):
|
|
121
|
+
# # only support JsON format now
|
|
122
|
+
# return None
|
|
123
|
+
msg = await super().deserialize_message(data=data)
|
|
124
|
+
if msg is not None:
|
|
125
|
+
Compatible.fix_meta_attachment(msg=msg)
|
|
126
|
+
Compatible.fix_visa_attachment(msg=msg)
|
|
127
|
+
return msg
|
|
128
|
+
|
|
129
|
+
# -------- InstantMessageDelegate
|
|
130
|
+
|
|
108
131
|
# Override
|
|
109
132
|
async def encrypt_key(self, data: bytes, receiver: ID, msg: InstantMessage) -> Optional[bytes]:
|
|
110
133
|
try:
|
|
@@ -129,7 +152,7 @@ class CommonMessenger(Messenger, Transmitter, Logging, ABC):
|
|
|
129
152
|
# 2. serialize key without flags
|
|
130
153
|
data = await super().serialize_key(key=key, msg=msg)
|
|
131
154
|
# 3. put them back after serialized
|
|
132
|
-
if Converter.get_bool(value=reused
|
|
155
|
+
if Converter.get_bool(value=reused):
|
|
133
156
|
key['reused'] = reused
|
|
134
157
|
if digest is not None:
|
|
135
158
|
key['digest'] = digest
|
|
@@ -31,13 +31,11 @@ from dimsdk import ID
|
|
|
31
31
|
from dimsdk import InstantMessage, SecureMessage, ReliableMessage
|
|
32
32
|
from dimsdk import MessagePacker
|
|
33
33
|
from dimsdk import MessageUtils
|
|
34
|
-
from dimsdk import Compressor
|
|
35
34
|
|
|
36
35
|
from ..utils import Logging
|
|
37
36
|
|
|
38
37
|
from .facebook import CommonFacebook
|
|
39
38
|
from .messenger import CommonMessenger
|
|
40
|
-
from .compat import Compatible
|
|
41
39
|
|
|
42
40
|
from .queue import SuspendedMessageQueue
|
|
43
41
|
|
|
@@ -54,10 +52,6 @@ class CommonMessagePacker(MessagePacker, Logging, ABC):
|
|
|
54
52
|
assert isinstance(transceiver, CommonMessenger), 'transceiver error: %s' % transceiver
|
|
55
53
|
return transceiver
|
|
56
54
|
|
|
57
|
-
@property # Override
|
|
58
|
-
def compressor(self) -> Compressor:
|
|
59
|
-
return self.messenger.compressor
|
|
60
|
-
|
|
61
55
|
def suspend_reliable_message(self, msg: ReliableMessage, error: Dict):
|
|
62
56
|
self.__queue.suspend_reliable_message(msg=msg, error=error)
|
|
63
57
|
|
|
@@ -163,23 +157,3 @@ class CommonMessagePacker(MessagePacker, Logging, ABC):
|
|
|
163
157
|
# already signed
|
|
164
158
|
return msg
|
|
165
159
|
return await super().sign_message(msg=msg)
|
|
166
|
-
|
|
167
|
-
# Override
|
|
168
|
-
async def deserialize_message(self, data: bytes) -> Optional[ReliableMessage]:
|
|
169
|
-
if data is None or len(data) <= 4:
|
|
170
|
-
# message data error
|
|
171
|
-
return None
|
|
172
|
-
# elif not (data.startswith(b'{') and data.endswith(b'}')):
|
|
173
|
-
# # only support JsON format now
|
|
174
|
-
# return None
|
|
175
|
-
msg = await super().deserialize_message(data=data)
|
|
176
|
-
if msg is not None:
|
|
177
|
-
Compatible.fix_meta_attachment(msg=msg)
|
|
178
|
-
Compatible.fix_visa_attachment(msg=msg)
|
|
179
|
-
return msg
|
|
180
|
-
|
|
181
|
-
# Override
|
|
182
|
-
async def serialize_message(self, msg: ReliableMessage) -> bytes:
|
|
183
|
-
Compatible.fix_meta_attachment(msg=msg)
|
|
184
|
-
Compatible.fix_visa_attachment(msg=msg)
|
|
185
|
-
return await super().serialize_message(msg=msg)
|
|
@@ -61,7 +61,7 @@ class CommonMessageProcessor(MessageProcessor, Logging, ABC):
|
|
|
61
61
|
assert False, 'entity checker lost'
|
|
62
62
|
doc_updated = False
|
|
63
63
|
# check sender document time
|
|
64
|
-
last_doc_time = r_msg.get_datetime(key='SDT'
|
|
64
|
+
last_doc_time = r_msg.get_datetime(key='SDT')
|
|
65
65
|
if last_doc_time is not None:
|
|
66
66
|
now = DateTime.now()
|
|
67
67
|
if last_doc_time.after(now):
|
|
@@ -85,7 +85,7 @@ class HandshakeCommand(BaseCommand):
|
|
|
85
85
|
@property
|
|
86
86
|
def title(self) -> str:
|
|
87
87
|
# TODO: modify after all clients upgraded
|
|
88
|
-
text = self.get_str(key='title'
|
|
88
|
+
text = self.get_str(key='title')
|
|
89
89
|
if text is None:
|
|
90
90
|
# compatible with v1.0
|
|
91
91
|
text = self.get_str(key='message', default='')
|
|
@@ -93,7 +93,7 @@ class HandshakeCommand(BaseCommand):
|
|
|
93
93
|
|
|
94
94
|
@property
|
|
95
95
|
def session(self) -> Optional[str]:
|
|
96
|
-
return self.get_str(key='session'
|
|
96
|
+
return self.get_str(key='session')
|
|
97
97
|
|
|
98
98
|
@property
|
|
99
99
|
def state(self) -> HandshakeState:
|
|
@@ -92,7 +92,7 @@ class LoginCommand(BaseCommand):
|
|
|
92
92
|
# Device ID
|
|
93
93
|
@property
|
|
94
94
|
def device(self) -> Optional[str]:
|
|
95
|
-
return self.get_str(key='device'
|
|
95
|
+
return self.get_str(key='device')
|
|
96
96
|
|
|
97
97
|
@device.setter
|
|
98
98
|
def device(self, value: str):
|
|
@@ -104,7 +104,7 @@ class LoginCommand(BaseCommand):
|
|
|
104
104
|
# User Agent
|
|
105
105
|
@property
|
|
106
106
|
def agent(self) -> Optional[str]:
|
|
107
|
-
return self.get_str(key='agent'
|
|
107
|
+
return self.get_str(key='agent')
|
|
108
108
|
|
|
109
109
|
@agent.setter
|
|
110
110
|
def agent(self, value: str):
|
|
@@ -14,7 +14,7 @@ import io
|
|
|
14
14
|
|
|
15
15
|
from setuptools import setup, find_packages
|
|
16
16
|
|
|
17
|
-
__version__ = '1.5.
|
|
17
|
+
__version__ = '1.5.5'
|
|
18
18
|
__author__ = 'Albert Moky'
|
|
19
19
|
__contact__ = 'albert.moky@gmail.com'
|
|
20
20
|
|
|
@@ -53,12 +53,12 @@ setup(
|
|
|
53
53
|
# 'pycryptodome', # 3.14.1
|
|
54
54
|
# 'base58', # 1.0.3
|
|
55
55
|
# 'ecdsa', # 0.16.1
|
|
56
|
-
'dimplugins>=2.3.
|
|
56
|
+
'dimplugins>=2.3.2',
|
|
57
57
|
|
|
58
|
-
'dimsdk>=2.3.
|
|
59
|
-
# 'dimp>=2.3.
|
|
60
|
-
# 'dkd>=2.3.
|
|
61
|
-
# 'mkm>=2.3.
|
|
58
|
+
'dimsdk>=2.3.2',
|
|
59
|
+
# 'dimp>=2.3.2',
|
|
60
|
+
# 'dkd>=2.3.2',
|
|
61
|
+
# 'mkm>=2.3.2',
|
|
62
62
|
|
|
63
63
|
'startrek>=2.2.2',
|
|
64
64
|
'tcp>=2.2.2',
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|