Skip to content

Commit

Permalink
work towards making the packet encoding and crypto bits initializatio…
Browse files Browse the repository at this point in the history
…n optional: split them into functions

git-svn-id: https://xpra.org/svn/Xpra/trunk@11649 3bb7dfac-3a0b-4e04-842a-767bc560f471
  • Loading branch information
totaam committed Jan 11, 2016
1 parent 74b7e20 commit 0a25500
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 56 deletions.
36 changes: 21 additions & 15 deletions src/xpra/net/crypto.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,21 +31,27 @@
if x not in PADDING_OPTIONS:
PADDING_OPTIONS.append(x)

CRYPTO_LIBRARY = os.environ.get("XPRA_CRYPTO_BACKEND", "python-cryptography") #pycrypto
try:
if CRYPTO_LIBRARY=="python-cryptography":
from xpra.net import pycryptography_backend as backend
elif CRYPTO_LIBRARY=="pycrypto":
from xpra.net import pycrypto_backend as backend
else:
raise ImportError("invalid crypto library specified: '%s'" % CRYPTO_LIBRARY)
ENCRYPTION_CIPHERS = ["AES"]
except ImportError as e:
log.error("Error: encryption library %s is not available!", CRYPTO_LIBRARY)
log.error(" %s", e)
log("no crypto backend", exc_info=True)
backend = None
ENCRYPTION_CIPHERS = []
backend = None
def init():
global backend, ENCRYPTION_CIPHERS
CRYPTO_LIBRARY = os.environ.get("XPRA_CRYPTO_BACKEND", "python-cryptography") #pycrypto
try:
if CRYPTO_LIBRARY=="python-cryptography":
from xpra.net import pycryptography_backend
backend = pycryptography_backend
elif CRYPTO_LIBRARY=="pycrypto":
from xpra.net import pycrypto_backend
backend = pycrypto_backend
else:
raise ImportError("invalid crypto library specified: '%s'" % CRYPTO_LIBRARY)
ENCRYPTION_CIPHERS = ["AES"]
except ImportError as e:
log.error("Error: encryption library %s is not available!", CRYPTO_LIBRARY)
log.error(" %s", e)
log("no crypto backend", exc_info=True)
backend = None
ENCRYPTION_CIPHERS = []
init()


def pad(padding, size):
Expand Down
100 changes: 59 additions & 41 deletions src/xpra/net/packet_encoding.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,54 +11,72 @@
log = Logger("network", "protocol")
from xpra.net.header import FLAGS_RENCODE, FLAGS_YAML, FLAGS_BENCODE

#those are also modified from the command line switch:
use_rencode = os.environ.get("XPRA_USE_RENCODER", "1")=="1"
use_bencode = os.environ.get("XPRA_USE_BENCODER", "1")=="1"
use_yaml = os.environ.get("XPRA_USE_YAML", "1")=="1"


has_rencode = None
rencode_dumps, rencode_loads, rencode_version = None, None, None
try:
def init_rencode():
global use_rencode, has_rencode, rencode_dumps, rencode_loads, rencode_version
try:
import rencode
rencode_dumps = rencode.dumps
rencode_loads = rencode.loads
try:
rencode_version = rencode.__version__
log("loaded rencode version %s from %s", rencode_version, rencode.__file__)
except:
log.warn("rencode at '%s' lacks versioning information", rencode.__file__)
rencode_version = "unknown"
except ImportError as e:
log.warn("Warning: rencode import failed: %s", e)
except Exception as e:
log.error("error loading rencode", exc_info=True)
has_rencode = rencode_dumps is not None and rencode_loads is not None and rencode_version is not None
use_rencode = has_rencode and os.environ.get("XPRA_USE_RENCODER", "1")=="1"
log("packet encoding: has_rencode=%s, use_rencode=%s, version=%s", has_rencode, use_rencode, rencode_version)


import rencode
rencode_dumps = rencode.dumps
rencode_loads = rencode.loads
try:
rencode_version = rencode.__version__
log("loaded rencode version %s from %s", rencode_version, rencode.__file__)
except:
log.warn("rencode at '%s' lacks versioning information", rencode.__file__)
rencode_version = "unknown"
except ImportError as e:
log.warn("Warning: rencode import failed: %s", e)
except Exception as e:
log.error("error loading rencode", exc_info=True)
has_rencode = rencode_dumps is not None and rencode_loads is not None and rencode_version is not None
use_rencode = has_rencode and use_rencode
log("packet_encoding.init_rencode() has_rencode=%s, use_rencode=%s, version=%s", has_rencode, use_rencode, rencode_version)


has_bencode = None
bencode, bdecode, bencode_version = None, None, None
try:
def init_bencode():
global use_bencode, has_bencode, bencode, bdecode, bencode_version
try:
from xpra.net.bencode import bencode, bdecode, __version__ as bencode_version
except ImportError as e:
log.warn("Warning: bencode import failed: %s", e)
except Exception as e:
log.error("error loading bencoder", exc_info=True)
has_bencode = bencode is not None and bdecode is not None
use_bencode = has_bencode and os.environ.get("XPRA_USE_BENCODER", "1")=="1"
log("packet encoding: has_bencode=%s, use_bencode=%s, version=%s", has_bencode, use_bencode, bencode_version)


try:
from xpra.net.bencode import bencode, bdecode, __version__ as bencode_version
except ImportError as e:
log.warn("Warning: bencode import failed: %s", e)
except Exception as e:
log.error("error loading bencoder", exc_info=True)
has_bencode = bencode is not None and bdecode is not None
use_bencode = has_bencode and use_bencode
log("packet_encoding.init_bencode() has_bencode=%s, use_bencode=%s, version=%s", has_bencode, use_bencode, bencode_version)

has_yaml = None
yaml_encode, yaml_decode, yaml_version = None, None, None
try:
#json messes with strings and unicode (makes it unusable for us)
import yaml
yaml_encode = yaml.dump
yaml_decode = yaml.load
yaml_version = yaml.__version__
except ImportError:
log("yaml not found")
has_yaml = yaml_encode is not None and yaml_decode is not None
use_yaml = has_yaml and os.environ.get("XPRA_USE_YAML", "1")=="1"
log("packet encoding: has_yaml=%s, use_yaml=%s, version=%s", has_yaml, use_yaml, yaml_version)

def init_yaml():
global use_yaml, has_yaml, yaml_encode, yaml_decode, yaml_version
try:
#json messes with strings and unicode (makes it unusable for us)
import yaml
yaml_encode = yaml.dump
yaml_decode = yaml.load
yaml_version = yaml.__version__
except ImportError:
log("yaml not found")
has_yaml = yaml_encode is not None and yaml_decode is not None
use_yaml = has_yaml and use_yaml
log("packet encoding: has_yaml=%s, use_yaml=%s, version=%s", has_yaml, use_yaml, yaml_version)

def init():
init_rencode()
init_bencode()
init_yaml()
init()

def do_bencode(data):
return bencode(data), FLAGS_BENCODE
Expand Down

0 comments on commit 0a25500

Please sign in to comment.