2016-04-26 01:16:08 +00:00
|
|
|
import functools, textwrap
|
2015-04-09 19:29:26 +00:00
|
|
|
|
|
|
|
class ServerError(Exception):
|
|
|
|
def __init__(self, message, relay):
|
|
|
|
self.message = message
|
|
|
|
self.relay = relay
|
|
|
|
def __str__(self):
|
|
|
|
return self.message
|
|
|
|
|
|
|
|
def handle_server_error(func):
|
|
|
|
@functools.wraps(func)
|
|
|
|
def _wrap(*args, **kwargs):
|
|
|
|
try:
|
|
|
|
return func(*args, **kwargs)
|
|
|
|
except ServerError as e:
|
|
|
|
print("Server error (from %s):\n%s" % (e.relay, e.message))
|
|
|
|
return 1
|
|
|
|
return _wrap
|
2015-09-22 06:21:26 +00:00
|
|
|
|
|
|
|
class Timeout(Exception):
|
|
|
|
pass
|
|
|
|
|
2016-05-23 07:14:39 +00:00
|
|
|
class WelcomeError(Exception):
|
|
|
|
"""The server told us to signal an error, probably because our version is
|
|
|
|
too old to possibly work."""
|
|
|
|
|
2015-09-22 06:21:26 +00:00
|
|
|
class WrongPasswordError(Exception):
|
|
|
|
"""
|
|
|
|
Key confirmation failed. Either you or your correspondent typed the code
|
|
|
|
wrong, or a would-be man-in-the-middle attacker guessed incorrectly. You
|
|
|
|
could try again, giving both your correspondent and the attacker another
|
|
|
|
chance.
|
|
|
|
"""
|
|
|
|
# or the data blob was corrupted, and that's why decrypt failed
|
2016-04-26 01:16:08 +00:00
|
|
|
def __init__(self):
|
|
|
|
Exception.__init__(self, textwrap.dedent(self.__doc__.strip()))
|
2015-09-22 06:21:26 +00:00
|
|
|
|
|
|
|
class ReflectionAttack(Exception):
|
|
|
|
"""An attacker (or bug) reflected our outgoing message back to us."""
|
|
|
|
|
|
|
|
class UsageError(Exception):
|
|
|
|
"""The programmer did something wrong."""
|
2016-02-16 05:40:57 +00:00
|
|
|
|
|
|
|
class TransferError(Exception):
|
|
|
|
"""Something bad happened and the transfer failed."""
|