def __init__(self, main_url, download_url, dlhash, config, multihandler,
              fileinfo, resumedata, vodeventcallback, set_error_func,
              finished_func, failed_func):
     self.main_url = main_url
     self.download_url = download_url
     self.dlhash = dlhash
     self.config = config
     self.dlmode = config['mode']
     self.fileinfo = fileinfo
     self.vodeventcallback = vodeventcallback
     self.set_error_func = set_error_func
     self.finished_func = finished_func
     self.failed_func = failed_func
     self.download_id = binascii.hexlify(self.dlhash) + '-' + str(
         long(time.time())) + '-' + str(random.randint(0, 100000))
     self.dldoneflag = Event()
     self.rawserver = multihandler.newRawServer(dlhash, self.dldoneflag)
     if download_url is not None:
         url = download_url
     else:
         url = main_url
     self.downloader = Downloader(url, dlhash, self.rawserver, self.failed)
     self.voddownload = None
     self.storage = None
     self.log_prefix = 'dd::' + binascii.hexlify(self.dlhash) + ':'
     predownload = self.config.get('predownload', False)
     if DEBUG:
         log(self.log_prefix + '__init__: predownload', predownload)
     if resumedata is None and predownload:
         self.downloader.predownload(self.init_predownloaded)
     else:
         callback = lambda content_length, mimetype: self.init(
             resumedata, content_length, mimetype)
         self.downloader.init(callback)