sandbox1
parent
430c467172
commit
a17e9da7c4
|
@ -203,7 +203,7 @@ class Engine:
|
||||||
self.logpipe = None
|
self.logpipe = None
|
||||||
# self.process = None
|
# self.process = None
|
||||||
self.started = False
|
self.started = False
|
||||||
self.pyrrent2http_loop = None
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _validate_save_path(path):
|
def _validate_save_path(path):
|
||||||
|
@ -329,7 +329,7 @@ class Engine:
|
||||||
self.pyrrent2http.startServices()
|
self.pyrrent2http.startServices()
|
||||||
self.pyrrent2http.addTorrent()
|
self.pyrrent2http.addTorrent()
|
||||||
self.pyrrent2http.startHTTP()
|
self.pyrrent2http.startHTTP()
|
||||||
self.pyrrent2http_loop = threading.Thread(target = self.pyrrent2http.loop, args = (False,))
|
self.pyrrent2http_loop = threading.Thread(target = self.pyrrent2http.loop)
|
||||||
self.pyrrent2http_loop.start()
|
self.pyrrent2http_loop.start()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,11 +16,15 @@ except Exception, e:
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
strerror = e.args
|
strerror = e.args
|
||||||
print(strerror)
|
print(strerror)
|
||||||
sys.exit(1)
|
if STANDALONE:
|
||||||
|
sys.exit(1)
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
|
||||||
|
import libtorrent as lt
|
||||||
from random import SystemRandom
|
from random import SystemRandom
|
||||||
import time
|
import time
|
||||||
import urlparse, urllib
|
import urlparse, urllib
|
||||||
import platform
|
|
||||||
import BaseHTTPServer
|
import BaseHTTPServer
|
||||||
import SocketServer
|
import SocketServer
|
||||||
import threading
|
import threading
|
||||||
|
@ -320,7 +324,7 @@ class TorrentFS(object):
|
||||||
self.openedFiles.append(file_)
|
self.openedFiles.append(file_)
|
||||||
def setPriority(self, index, priority):
|
def setPriority(self, index, priority):
|
||||||
if self.priorities[index] != priority:
|
if self.priorities[index] != priority:
|
||||||
logging.info('Setting %s priority to %d', self.info.file_at(index).path, priority)
|
logging.info('Setting %s priority to %d' % (self.info.file_at(index).path, priority))
|
||||||
self.priorities[index] = priority
|
self.priorities[index] = priority
|
||||||
self.handle.file_priority(index, priority)
|
self.handle.file_priority(index, priority)
|
||||||
def findOpenedFile(self, file):
|
def findOpenedFile(self, file):
|
||||||
|
@ -637,12 +641,18 @@ class Pyrrent2http(object):
|
||||||
self.config[k] = config_.__dict__[k]
|
self.config[k] = config_.__dict__[k]
|
||||||
if self.config.uri == '':
|
if self.config.uri == '':
|
||||||
parser.print_usage()
|
parser.print_usage()
|
||||||
sys.exit(1)
|
if STANDALONE:
|
||||||
|
sys.exit(1)
|
||||||
|
else:
|
||||||
|
raise "Invalid argument"
|
||||||
if self.config.uri.startswith('magnet:'):
|
if self.config.uri.startswith('magnet:'):
|
||||||
self.magnet = True
|
self.magnet = True
|
||||||
if self.config.resumeFile != '' and not self.config.keepFiles:
|
if self.config.resumeFile != '' and not self.config.keepFiles:
|
||||||
logging.error('Usage of option --resume-file is allowed only along with --keep-files')
|
logging.error('Usage of option --resume-file is allowed only along with --keep-files')
|
||||||
sys.exit(1)
|
if STANDALONE:
|
||||||
|
sys.exit(1)
|
||||||
|
else:
|
||||||
|
raise
|
||||||
def buildTorrentParams(self, uri):
|
def buildTorrentParams(self, uri):
|
||||||
fileUri = urlparse.urlparse(uri)
|
fileUri = urlparse.urlparse(uri)
|
||||||
torrentParams = {}
|
torrentParams = {}
|
||||||
|
@ -650,33 +660,39 @@ class Pyrrent2http(object):
|
||||||
torrentParams['url'] = uri
|
torrentParams['url'] = uri
|
||||||
elif fileUri.scheme == 'file':
|
elif fileUri.scheme == 'file':
|
||||||
uriPath = fileUri.path
|
uriPath = fileUri.path
|
||||||
if uriPath != '' and platform.system().lower() == 'windows' and (os.path.sep == uriPath[0] or uriPath[0] == '/'):
|
if uriPath != '' and sys.platform.startswith('win') and (os.path.sep == uriPath[0] or uriPath[0] == '/'):
|
||||||
uriPath = uriPath[1:]
|
uriPath = uriPath[1:]
|
||||||
try:
|
try:
|
||||||
absPath = os.path.abspath(uriPath)
|
absPath = os.path.abspath(uriPath)
|
||||||
logging.info('Opening local file: %s', absPath)
|
logging.info('Opening local file: %s' % (absPath,))
|
||||||
with open(absPath, 'rb') as f:
|
with open(absPath, 'rb') as f:
|
||||||
torrent_info = lt.torrent_info(lt.bdecode(f.read()))
|
torrent_info = lt.torrent_info(lt.bdecode(f.read()))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
strerror = e.args
|
strerror = e.args
|
||||||
logging.error(strerror)
|
logging.error(strerror)
|
||||||
sys.exit(1)
|
if STANDALONE:
|
||||||
|
sys.exit(1)
|
||||||
|
else:
|
||||||
|
raise
|
||||||
torrentParams['ti'] = torrent_info
|
torrentParams['ti'] = torrent_info
|
||||||
else:
|
else:
|
||||||
logging.info('Will fetch: %s', uri)
|
logging.info('Will fetch: %s' % (uri,))
|
||||||
try:
|
try:
|
||||||
torrent_raw = urllib.urlopen(uri).read()
|
torrent_raw = urllib.urlopen(uri).read()
|
||||||
torrent_info = lt.torrent_info(torrent_raw, len(torrent_raw))
|
torrent_info = lt.torrent_info(torrent_raw, len(torrent_raw))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
strerror = e.args
|
strerror = e.args
|
||||||
logging.error(strerror)
|
logging.error(strerror)
|
||||||
sys.exit(1)
|
if STANDALONE:
|
||||||
|
sys.exit(1)
|
||||||
|
else:
|
||||||
|
raise
|
||||||
torrentParams['ti'] = torrent_info
|
torrentParams['ti'] = torrent_info
|
||||||
logging.info('Setting save path: %s', self.config.downloadPath)
|
logging.info('Setting save path: %s' % (self.config.downloadPath,))
|
||||||
torrentParams['save_path'] = self.config.downloadPath
|
torrentParams['save_path'] = self.config.downloadPath
|
||||||
|
|
||||||
if os.path.exists(self.config.resumeFile):
|
if os.path.exists(self.config.resumeFile):
|
||||||
logging.info('Loading resume file: %s', self.config.resumeFile)
|
logging.info('Loading resume file: %s' % (self.config.resumeFile,))
|
||||||
try:
|
try:
|
||||||
with open(self.config.resumeFile, 'rb') as f:
|
with open(self.config.resumeFile, 'rb') as f:
|
||||||
torrentParams['resume_data'] = lt.bencode(f.read())
|
torrentParams['resume_data'] = lt.bencode(f.read())
|
||||||
|
@ -711,7 +727,7 @@ class Pyrrent2http(object):
|
||||||
info = self.torrentHandle.torrent_file()
|
info = self.torrentHandle.torrent_file()
|
||||||
except:
|
except:
|
||||||
info = self.torrentHandle.get_torrent_info()
|
info = self.torrentHandle.get_torrent_info()
|
||||||
logging.info('Downloading torrent: %s', info.name())
|
logging.info('Downloading torrent: %s' % (info.name(),))
|
||||||
self.TorrentFS = TorrentFS(self, self.torrentHandle, self.config.fileIndex)
|
self.TorrentFS = TorrentFS(self, self.torrentHandle, self.config.fileIndex)
|
||||||
|
|
||||||
def startHTTP(self):
|
def startHTTP(self):
|
||||||
|
@ -724,7 +740,7 @@ class Pyrrent2http(object):
|
||||||
#self.main_alive.set()
|
#self.main_alive.set()
|
||||||
logging.info('Starting HTTP Server...')
|
logging.info('Starting HTTP Server...')
|
||||||
handler = HttpHandlerFactory()
|
handler = HttpHandlerFactory()
|
||||||
logging.info('Listening HTTP on %s...\n', self.config.bindAddress)
|
logging.info('Listening HTTP on %s...\n' % (self.config.bindAddress,))
|
||||||
host, strport = self.config.bindAddress.split(':')
|
host, strport = self.config.bindAddress.split(':')
|
||||||
if len(strport) > 0:
|
if len(strport) > 0:
|
||||||
srv_port = int(strport)
|
srv_port = int(strport)
|
||||||
|
@ -776,7 +792,7 @@ class Pyrrent2http(object):
|
||||||
settings["min_announce_interval"] = 60
|
settings["min_announce_interval"] = 60
|
||||||
settings["tracker_backoff"] = 0
|
settings["tracker_backoff"] = 0
|
||||||
self.session.set_settings(settings)
|
self.session.set_settings(settings)
|
||||||
|
|
||||||
if self.config.stateFile != '':
|
if self.config.stateFile != '':
|
||||||
logging.info('Loading session state from %s', self.config.stateFile)
|
logging.info('Loading session state from %s', self.config.stateFile)
|
||||||
try:
|
try:
|
||||||
|
@ -798,7 +814,10 @@ class Pyrrent2http(object):
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
strerror = e.args
|
strerror = e.args
|
||||||
logging.error(strerror)
|
logging.error(strerror)
|
||||||
sys.exit(1)
|
if STANDALONE:
|
||||||
|
sys.exit(1)
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
|
||||||
settings = self.session.get_settings()
|
settings = self.session.get_settings()
|
||||||
if self.config.userAgent != '':
|
if self.config.userAgent != '':
|
||||||
|
@ -827,9 +846,12 @@ class Pyrrent2http(object):
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
strerror = e.args
|
strerror = e.args
|
||||||
logging.error(strerror)
|
logging.error(strerror)
|
||||||
sys.exit(1)
|
if STANDALONE:
|
||||||
|
sys.exit(1)
|
||||||
|
else:
|
||||||
|
raise
|
||||||
self.session.add_dht_router(host, port)
|
self.session.add_dht_router(host, port)
|
||||||
logging.info('Added DHT router: %s:%d', host, port)
|
logging.info('Added DHT router: %s:%d' % (host, port))
|
||||||
logging.info('Setting encryption settings')
|
logging.info('Setting encryption settings')
|
||||||
try:
|
try:
|
||||||
encryptionSettings = lt.pe_settings()
|
encryptionSettings = lt.pe_settings()
|
||||||
|
@ -943,10 +965,10 @@ class Pyrrent2http(object):
|
||||||
alert = self.session.pop_alert()
|
alert = self.session.pop_alert()
|
||||||
if isinstance(alert, alertClass):
|
if isinstance(alert, alertClass):
|
||||||
return alert
|
return alert
|
||||||
def loop(self, standalone = True):
|
def loop(self):
|
||||||
def sigterm_handler(_signo, _stack_frame):
|
def sigterm_handler(_signo, _stack_frame):
|
||||||
self.forceShutdown = True
|
self.forceShutdown = True
|
||||||
if standalone:
|
if STANDALONE:
|
||||||
import signal
|
import signal
|
||||||
signal.signal(signal.SIGTERM, sigterm_handler)
|
signal.signal(signal.SIGTERM, sigterm_handler)
|
||||||
self.statsTicker = Ticker(30)
|
self.statsTicker = Ticker(30)
|
||||||
|
@ -1056,11 +1078,15 @@ class Pyrrent2http(object):
|
||||||
logging.info('Aborting the session')
|
logging.info('Aborting the session')
|
||||||
del self.session
|
del self.session
|
||||||
logging.info('Bye bye')
|
logging.info('Bye bye')
|
||||||
sys.exit(0)
|
if STANDALONE:
|
||||||
|
sys.exit(0)
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
STANDALONE = False
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
STANDALONE = True
|
||||||
try:
|
try:
|
||||||
import logging
|
import logging
|
||||||
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)
|
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)
|
||||||
|
|
Loading…
Reference in New Issue