Esempio n. 1
0
 def get(self, connection, path, headers):
     try:
         (scheme, netloc, path, pars, query, fragment) = urlparse(path)
         if self.uq_broken == 1:
             path = path.replace('+',' ')
             query = query.replace('+',' ')
         path = unquote(path)[1:]
         params = {}
         for s in query.split('&'):
             if s != '':
                 i = s.index('=')
                 params[unquote(s[:i])] = unquote(s[i+1:])
     except ValueError, e:
         return (400, 'Bad Request', {'Content-Type': 'text/plain'}, 
                 'you sent me garbage - ' + str(e))
Esempio n. 2
0
 def get(self, connection, path, headers):
     try:
         (scheme, netloc, path, pars, query, fragment) = urlparse(path)
         if self.uq_broken == 1:
             path = path.replace('+',' ')
             query = query.replace('+',' ')
         path = unquote(path)[1:]
         params = {}
         for s in query.split('&'):
             if s != '':
                 i = s.index('=')
                 params[unquote(s[:i])] = unquote(s[i+1:])
     except ValueError, e:
         return (400, 'Bad Request', {'Content-Type': 'text/plain'}, 
                 'you sent me garbage - ' + str(e))
Esempio n. 3
0
 def __init__(self, config, rawserver):
     self.response_size = config['response_size']
     self.dfile = config['dfile']
     self.natcheck = config['nat_check']
     self.max_give = config['max_give']
     self.reannounce_interval = config['reannounce_interval']
     self.save_dfile_interval = config['save_dfile_interval']
     self.show_names = config['show_names']
     self.only_local_override_ip = config['only_local_override_ip']
     favicon = config['favicon']
     self.favicon = None
     if favicon:
         try:
             h = open(favicon, 'rb')
             self.favicon = h.read()
             h.close()
         except:
             print "**warning** specified favicon file -- %s -- does not exist." % favicon
     self.rawserver = rawserver
     self.becache1 = {}
     self.becache2 = {}
     self.cache1 = {}
     self.cache2 = {}
     self.times = {}
     if exists(self.dfile):
         h = open(self.dfile, 'rb')
         ds = h.read()
         h.close()
         tempstate = bdecode(ds)
     else:
         tempstate = {}
     if tempstate.has_key('peers'):
         self.state = tempstate
     else:
         self.state = {}
         self.state['peers'] = tempstate
     self.downloads = self.state.setdefault('peers', {})
     self.completed = self.state.setdefault('completed', {})
     statefiletemplate(self.state)
     for x, dl in self.downloads.items():
         self.times[x] = {}
         for y, dat in dl.items():
             self.times[x][y] = 0
             if not dat.get('nat',1):
                 ip = dat['ip']
                 gip = dat.get('given ip')
                 if gip and is_valid_ipv4(gip) and (not self.only_local_override_ip or is_local_ip(ip)):
                     ip = gip
                 self.becache1.setdefault(x,{})[y] = Bencached(bencode({'ip': ip, 
                     'port': dat['port'], 'peer id': y}))
                 self.becache2.setdefault(x,{})[y] = compact_peer_info(ip, dat['port'])
     rawserver.add_task(self.save_dfile, self.save_dfile_interval)
     self.prevtime = time()
     self.timeout_downloaders_interval = config['timeout_downloaders_interval']
     rawserver.add_task(self.expire_downloaders, self.timeout_downloaders_interval)
     self.logfile = None
     self.log = None
     if (config['logfile'] != '') and (config['logfile'] != '-'):
         try:
             self.logfile = config['logfile']
             self.log = open(self.logfile,'a')
             sys.stdout = self.log
             print "# Log Started: ", isotime()
         except:
             print "Error trying to redirect stdout to log file:", sys.exc_info()[0]
     self.allow_get = config['allow_get']
     if config['allowed_dir'] != '':
         self.allowed_dir = config['allowed_dir']
         self.parse_allowed_interval = config['parse_allowed_interval']
         self.parse_allowed()
     else:
         self.allowed = None
     if unquote('+') != ' ':
         self.uq_broken = 1
     else:
         self.uq_broken = 0
     self.keep_dead = config['keep_dead']
Esempio n. 4
0
 def __init__(self, config, rawserver):
     self.response_size = config['response_size']
     self.dfile = config['dfile']
     self.natcheck = config['nat_check']
     self.max_give = config['max_give']
     self.reannounce_interval = config['reannounce_interval']
     self.save_dfile_interval = config['save_dfile_interval']
     self.show_names = config['show_names']
     self.only_local_override_ip = config['only_local_override_ip']
     favicon = config['favicon']
     self.favicon = None
     if favicon:
         if isfile(favicon):
             h = open(favicon, 'rb')
             self.favicon = h.read()
             h.close()
         else:
             print "**warning** specified favicon file -- %s -- does not exist." % favicon
     self.rawserver = rawserver
     self.becache1 = {}
     self.becache2 = {}
     self.cache1 = {}
     self.cache2 = {}
     self.times = {}
     if exists(self.dfile):
         h = open(self.dfile, 'rb')
         ds = h.read()
         h.close()
         tempstate = bdecode(ds)
     else:
         tempstate = {}
     if tempstate.has_key('peers'):
         self.state = tempstate
     else:
         self.state = {}
         self.state['peers'] = tempstate
     self.downloads = self.state.setdefault('peers', {})
     self.completed = self.state.setdefault('completed', {})
     statefiletemplate(self.state)
     for x, dl in self.downloads.items():
         self.times[x] = {}
         for y, dat in dl.items():
             self.times[x][y] = 0
             if not dat.get('nat', 1):
                 ip = dat['ip']
                 gip = dat.get('given ip')
                 if gip and is_valid_ipv4(gip) and (
                         not self.only_local_override_ip
                         or is_local_ip(ip)):
                     ip = gip
                 self.becache1.setdefault(x, {})[y] = Bencached(
                     bencode({
                         'ip': ip,
                         'port': dat['port'],
                         'peer id': y
                     }))
                 self.becache2.setdefault(x, {})[y] = compact_peer_info(
                     ip, dat['port'])
     rawserver.add_task(self.save_dfile, self.save_dfile_interval)
     self.prevtime = time()
     self.timeout_downloaders_interval = config[
         'timeout_downloaders_interval']
     rawserver.add_task(self.expire_downloaders,
                        self.timeout_downloaders_interval)
     self.logfile = None
     self.log = None
     if (config['logfile'] != '') and (config['logfile'] != '-'):
         try:
             self.logfile = config['logfile']
             self.log = open(self.logfile, 'a')
             sys.stdout = self.log
             print "# Log Started: ", isotime()
         except:
             print "Error trying to redirect stdout to log file:", sys.exc_info(
             )[0]
     self.allow_get = config['allow_get']
     if config['allowed_dir'] != '':
         self.allowed_dir = config['allowed_dir']
         self.parse_allowed_interval = config['parse_allowed_interval']
         self.parse_allowed()
     else:
         self.allowed = None
     if unquote('+') != ' ':
         self.uq_broken = 1
     else:
         self.uq_broken = 0
     self.keep_dead = config['keep_dead']