diff --git a/lbrynet/core/Session.py b/lbrynet/core/Session.py index ff5cf80d7..5b33bfd6d 100644 --- a/lbrynet/core/Session.py +++ b/lbrynet/core/Session.py @@ -18,60 +18,87 @@ log = logging.getLogger(__name__) class Session(object): - """This class manages all important services common to any application that uses the network: - the hash announcer, which informs other peers that this peer is associated with some hash. Usually, - this means this peer has a blob identified by the hash in question, but it can be used for other - purposes. - the peer finder, which finds peers that are associated with some hash. - the blob manager, which keeps track of which blobs have been downloaded and provides access to them, - the rate limiter, which attempts to ensure download and upload rates stay below a set maximum, - and upnp, which opens holes in compatible firewalls so that remote peers can connect to this peer.""" - def __init__(self, blob_data_payment_rate, db_dir=None, lbryid=None, peer_manager=None, dht_node_port=None, - known_dht_nodes=None, peer_finder=None, hash_announcer=None, blob_dir=None, blob_manager=None, - peer_port=None, use_upnp=True, rate_limiter=None, wallet=None, dht_node_class=node.Node, - blob_tracker_class=None, payment_rate_manager_class=None, is_generous=True): - """ - @param blob_data_payment_rate: The default payment rate for blob data + """This class manages all important services common to any application that uses the network. + + the hash announcer, which informs other peers that this peer is + associated with some hash. Usually, this means this peer has a + blob identified by the hash in question, but it can be used for + other purposes. + + the peer finder, which finds peers that are associated with some + hash. + + the blob manager, which keeps track of which blobs have been + downloaded and provides access to them, + + the rate limiter, which attempts to ensure download and upload + rates stay below a set maximum + + upnp, which opens holes in compatible firewalls so that remote + peers can connect to this peer. + """ + def __init__(self, blob_data_payment_rate, db_dir=None, + lbryid=None, peer_manager=None, dht_node_port=None, + known_dht_nodes=None, peer_finder=None, + hash_announcer=None, blob_dir=None, + blob_manager=None, peer_port=None, use_upnp=True, + rate_limiter=None, wallet=None, + dht_node_class=node.Node, blob_tracker_class=None, + payment_rate_manager_class=None, is_generous=True): + """@param blob_data_payment_rate: The default payment rate for blob data @param db_dir: The directory in which levelDB files should be stored @param lbryid: The unique ID of this node - @param peer_manager: An object which keeps track of all known peers. If None, a PeerManager will be created + @param peer_manager: An object which keeps track of all known + peers. If None, a PeerManager will be created - @param dht_node_port: The port on which the dht node should listen for incoming connections + @param dht_node_port: The port on which the dht node should + listen for incoming connections - @param known_dht_nodes: A list of nodes which the dht node should use to bootstrap into the dht + @param known_dht_nodes: A list of nodes which the dht node + should use to bootstrap into the dht - @param peer_finder: An object which is used to look up peers that are associated with some hash. If None, - a DHTPeerFinder will be used, which looks for peers in the distributed hash table. + @param peer_finder: An object which is used to look up peers + that are associated with some hash. If None, a + DHTPeerFinder will be used, which looks for peers in the + distributed hash table. - @param hash_announcer: An object which announces to other peers that this peer is associated with some hash. - If None, and peer_port is not None, a DHTHashAnnouncer will be used. If None and - peer_port is None, a DummyHashAnnouncer will be used, which will not actually announce - anything. + @param hash_announcer: An object which announces to other + peers that this peer is associated with some hash. If + None, and peer_port is not None, a DHTHashAnnouncer will + be used. If None and peer_port is None, a + DummyHashAnnouncer will be used, which will not actually + announce anything. - @param blob_dir: The directory in which blobs will be stored. If None and blob_manager is None, blobs will - be stored in memory only. + @param blob_dir: The directory in which blobs will be + stored. If None and blob_manager is None, blobs will be + stored in memory only. - @param blob_manager: An object which keeps track of downloaded blobs and provides access to them. If None, - and blob_dir is not None, a DiskBlobManager will be used, with the given blob_dir. - If None and blob_dir is None, a TempBlobManager will be used, which stores blobs in - memory only. + @param blob_manager: An object which keeps track of downloaded + blobs and provides access to them. If None, and blob_dir + is not None, a DiskBlobManager will be used, with the + given blob_dir. If None and blob_dir is None, a + TempBlobManager will be used, which stores blobs in memory + only. - @param peer_port: The port on which other peers should connect to this peer + @param peer_port: The port on which other peers should connect + to this peer - @param use_upnp: Whether or not to try to open a hole in the firewall so that outside peers can connect to - this peer's peer_port and dht_node_port + @param use_upnp: Whether or not to try to open a hole in the + firewall so that outside peers can connect to this peer's + peer_port and dht_node_port - @param rate_limiter: An object which keeps track of the amount of data transferred to and from this peer, - and can limit that rate if desired + @param rate_limiter: An object which keeps track of the amount + of data transferred to and from this peer, and can limit + that rate if desired - @param wallet: An object which will be used to keep track of expected payments and which will pay peers. - If None, a wallet which uses the Point Trader system will be used, which is meant for testing - only + @param wallet: An object which will be used to keep track of + expected payments and which will pay peers. If None, a + wallet which uses the Point Trader system will be used, + which is meant for testing only - @return: """ self.db_dir = db_dir @@ -178,7 +205,9 @@ class Session(object): self.external_ip = external_ip if self.peer_port is not None: if u.getspecificportmapping(self.peer_port, 'TCP') is None: - u.addportmapping(self.peer_port, 'TCP', u.lanaddr, self.peer_port, 'LBRY peer port', '') + u.addportmapping( + self.peer_port, 'TCP', u.lanaddr, self.peer_port, + 'LBRY peer port', '') self.upnp_redirects.append((self.peer_port, 'TCP')) log.info("Set UPnP redirect for TCP port %d", self.peer_port) else: @@ -187,16 +216,23 @@ class Session(object): self.upnp_redirects.append((self.peer_port, 'TCP')) if self.dht_node_port is not None: if u.getspecificportmapping(self.dht_node_port, 'UDP') is None: - u.addportmapping(self.dht_node_port, 'UDP', u.lanaddr, self.dht_node_port, 'LBRY DHT port', '') + u.addportmapping( + self.dht_node_port, 'UDP', u.lanaddr, self.dht_node_port, + 'LBRY DHT port', '') self.upnp_redirects.append((self.dht_node_port, 'UDP')) log.info("Set UPnP redirect for UPD port %d", self.dht_node_port) else: - # TODO: check that the existing redirect was put up by an old lbrynet session before grabbing it - # if such a disconnected redirect exists, then upnp won't work unless the redirect is appended - # or is torn down and set back up. a bad shutdown of lbrynet could leave such a redirect up - # and cause problems on the next start. - # this could be problematic if a previous lbrynet session didn't make the redirect, and it was - # made by another application + # TODO: check that the existing redirect was + # put up by an old lbrynet session before + # grabbing it if such a disconnected redirect + # exists, then upnp won't work unless the + # redirect is appended or is torn down and set + # back up. a bad shutdown of lbrynet could + # leave such a redirect up and cause problems + # on the next start. this could be + # problematic if a previous lbrynet session + # didn't make the redirect, and it was made by + # another application log.warning("UPnP redirect already set for UDP port %d", self.dht_node_port) self.upnp_redirects.append((self.dht_node_port, 'UDP')) return True @@ -271,9 +307,10 @@ class Session(object): self.peer_finder, self.dht_node) if self.payment_rate_manager is None: - self.payment_rate_manager = self.payment_rate_manager_class(self.base_payment_rate_manager, - self.blob_tracker, - self.is_generous) + self.payment_rate_manager = self.payment_rate_manager_class( + self.base_payment_rate_manager, + self.blob_tracker, + self.is_generous) self.rate_limiter.start() d1 = self.blob_manager.setup() @@ -294,7 +331,9 @@ class Session(object): u.selectigd() for port, protocol in self.upnp_redirects: if u.getspecificportmapping(port, protocol) is None: - log.warning("UPnP redirect for %s %d was removed by something else.", protocol, port) + log.warning( + "UPnP redirect for %s %d was removed by something else.", + protocol, port) else: u.deleteportmapping(port, protocol) log.info("Removed UPnP redirect for %s %d.", protocol, port) @@ -307,5 +346,3 @@ class Session(object): def _subfailure(self, err): log.error(err.getTraceback()) return err.value - - diff --git a/lbrynet/lbrynet_daemon/Daemon.py b/lbrynet/lbrynet_daemon/Daemon.py index 845ac3e92..6e9692ece 100644 --- a/lbrynet/lbrynet_daemon/Daemon.py +++ b/lbrynet/lbrynet_daemon/Daemon.py @@ -769,14 +769,11 @@ class Daemon(AuthJSONRPCServer): d = self.lbry_file_metadata_manager.setup() def set_lbry_file_manager(): - self.lbry_file_manager = EncryptedFileManager(self.session, - self.lbry_file_metadata_manager, - self.sd_identifier, - download_directory=self.download_directory) + self.lbry_file_manager = EncryptedFileManager( + self.session, self.lbry_file_metadata_manager, + self.sd_identifier, download_directory=self.download_directory) return self.lbry_file_manager.setup() - d.addCallback(lambda _: set_lbry_file_manager()) - return d def _get_analytics(self): diff --git a/packaging/osx/lbry-osx-app/lbrygui/LBRYApp.py b/packaging/osx/lbry-osx-app/lbrygui/LBRYApp.py index 72f27755e..3fd149fa1 100644 --- a/packaging/osx/lbry-osx-app/lbrygui/LBRYApp.py +++ b/packaging/osx/lbry-osx-app/lbrygui/LBRYApp.py @@ -29,6 +29,7 @@ from lbrynet.core import utils if platform.mac_ver()[0] >= "10.10": from LBRYNotify import LBRYNotify + log = logging.getLogger(__name__)