mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-01-15 09:19:49 +00:00
42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
|
|
from twisted.internet import address
|
|
from foolscap.api import Violation, RemoteException, SturdyRef
|
|
|
|
|
|
def add_version_to_remote_reference(rref, default):
|
|
"""I try to add a .version attribute to the given RemoteReference. I call
|
|
the remote get_version() method to learn its version. I'll add the
|
|
default value if the remote side doesn't appear to have a get_version()
|
|
method."""
|
|
d = rref.callRemote("get_version")
|
|
def _got_version(version):
|
|
rref.version = version
|
|
return rref
|
|
def _no_get_version(f):
|
|
f.trap(Violation, RemoteException)
|
|
rref.version = default
|
|
return rref
|
|
d.addCallbacks(_got_version, _no_get_version)
|
|
return d
|
|
|
|
|
|
def connection_hints_for_furl(furl):
|
|
hints = []
|
|
for h in SturdyRef(furl).locationHints:
|
|
# Foolscap-0.2.5 and earlier used strings in .locationHints, 0.2.6
|
|
# through 0.6.4 used tuples of ("ipv4",host,port), 0.6.5 through
|
|
# 0.8.0 used tuples of ("tcp",host,port), and >=0.9.0 uses strings
|
|
# again. Tolerate them all.
|
|
if isinstance(h, tuple):
|
|
hints.append(":".join([str(s) for s in h]))
|
|
else:
|
|
hints.append(h)
|
|
return hints
|
|
|
|
def stringify_remote_address(rref):
|
|
remote = rref.getPeer()
|
|
if isinstance(remote, address.IPv4Address):
|
|
return "%s:%d" % (remote.host, remote.port)
|
|
# loopback is a non-IPv4Address
|
|
return str(remote)
|