亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? storagewrapper.py

?? 一個(gè)多點(diǎn)下載且源碼公開(kāi)的P2P軟件
?? PY
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
# Written by Bram Cohen# see LICENSE.txt for license informationfrom BitTornado.bitfield import Bitfieldfrom sha import shafrom BitTornado.clock import clockfrom traceback import print_excfrom random import randrangetry:    Trueexcept:    True = 1    False = 0try:    from bisect import insortexcept:    def insort(l, item):        l.append(item)        l.sort()DEBUG = FalseSTATS_INTERVAL = 0.2def dummy_status(fractionDone = None, activity = None):    passclass Olist:    def __init__(self, l = []):        self.d = {}        for i in l:            self.d[i] = 1    def __len__(self):        return len(self.d)    def includes(self, i):        return self.d.has_key(i)    def add(self, i):        self.d[i] = 1    def extend(self, l):        for i in l:            self.d[i] = 1    def pop(self, n=0):        # assert self.d        k = self.d.keys()        if n == 0:            i = min(k)        elif n == -1:            i = max(k)        else:            k.sort()            i = k[n]        del self.d[i]        return i    def remove(self, i):        if self.d.has_key(i):            del self.d[i]class fakeflag:    def __init__(self, state=False):        self.state = state    def wait(self):        pass    def isSet(self):        return self.stateclass StorageWrapper:    def __init__(self, storage, request_size, hashes,             piece_size, finished, failed,             statusfunc = dummy_status, flag = fakeflag(), check_hashes = True,            data_flunked = lambda x: None, backfunc = None,            config = {}, unpauseflag = fakeflag(True) ):        self.storage = storage        self.request_size = long(request_size)        self.hashes = hashes        self.piece_size = long(piece_size)        self.piece_length = long(piece_size)        self.finished = finished        self.failed = failed        self.statusfunc = statusfunc        self.flag = flag        self.check_hashes = check_hashes        self.data_flunked = data_flunked        self.backfunc = backfunc        self.config = config        self.unpauseflag = unpauseflag                self.alloc_type = config.get('alloc_type','normal')        self.double_check = config.get('double_check', 0)        self.triple_check = config.get('triple_check', 0)        if self.triple_check:            self.double_check = True        self.bgalloc_enabled = False        self.bgalloc_active = False        self.total_length = storage.get_total_length()        self.amount_left = self.total_length        if self.total_length <= self.piece_size * (len(hashes) - 1):            raise ValueError, 'bad data in responsefile - total too small'        if self.total_length > self.piece_size * len(hashes):            raise ValueError, 'bad data in responsefile - total too big'        self.numactive = [0] * len(hashes)        self.inactive_requests = [1] * len(hashes)        self.amount_inactive = self.total_length        self.amount_obtained = 0        self.amount_desired = self.total_length        self.have = Bitfield(len(hashes))        self.have_cloaked_data = None        self.blocked = [False] * len(hashes)        self.blocked_holes = []        self.blocked_movein = Olist()        self.blocked_moveout = Olist()        self.waschecked = [False] * len(hashes)        self.places = {}        self.holes = []        self.stat_active = {}        self.stat_new = {}        self.dirty = {}        self.stat_numflunked = 0        self.stat_numdownloaded = 0        self.stat_numfound = 0        self.download_history = {}        self.failed_pieces = {}        self.out_of_place = 0        self.write_buf_max = config['write_buffer_size']*1048576L        self.write_buf_size = 0L        self.write_buf = {}   # structure:  piece: [(start, data), ...]        self.write_buf_list = []        self.initialize_tasks = [            ['checking existing data', 0, self.init_hashcheck, self.hashcheckfunc],            ['moving data', 1, self.init_movedata, self.movedatafunc],            ['allocating disk space', 1, self.init_alloc, self.allocfunc] ]        self.backfunc(self._bgalloc,0.1)        self.backfunc(self._bgsync,max(self.config['auto_flush']*60,60))    def _bgsync(self):        if self.config['auto_flush']:            self.sync()        self.backfunc(self._bgsync,max(self.config['auto_flush']*60,60))    def old_style_init(self):        while self.initialize_tasks:            msg, done, init, next = self.initialize_tasks.pop(0)            if init():                self.statusfunc(activity = msg, fractionDone = done)                t = clock() + STATS_INTERVAL                x = 0                while x is not None:                    if t < clock():                        t = clock() + STATS_INTERVAL                        self.statusfunc(fractionDone = x)                    self.unpauseflag.wait()                    if self.flag.isSet():                        return False                    x = next()        self.statusfunc(fractionDone = 0)        return True    def initialize(self, donefunc, statusfunc = None):        self.initialize_done = donefunc        if statusfunc is None:            statusfunc = self.statusfunc        self.initialize_status = statusfunc        self.initialize_next = None                    self.backfunc(self._initialize)    def _initialize(self):        if not self.unpauseflag.isSet():            self.backfunc(self._initialize, 1)            return                if self.initialize_next:            x = self.initialize_next()            if x is None:                self.initialize_next = None            else:                self.initialize_status(fractionDone = x)        else:            if not self.initialize_tasks:                self.initialize_done()                return            msg, done, init, next = self.initialize_tasks.pop(0)            if init():                self.initialize_status(activity = msg, fractionDone = done)                self.initialize_next = next        self.backfunc(self._initialize)    def init_hashcheck(self):        if self.flag.isSet():            return False        self.check_list = []        if len(self.hashes) == 0 or self.amount_left == 0:            self.check_total = 0            self.finished()            return False        self.check_targets = {}        got = {}        for p,v in self.places.items():            assert not got.has_key(v)            got[v] = 1        for i in xrange(len(self.hashes)):            if self.places.has_key(i):  # restored from pickled                self.check_targets[self.hashes[i]] = []                if self.places[i] == i:                    continue                else:                    assert not got.has_key(i)                    self.out_of_place += 1            if got.has_key(i):                continue            if self._waspre(i):                if self.blocked[i]:                    self.places[i] = i                else:                    self.check_list.append(i)                continue            if not self.check_hashes:                self.failed('told file complete on start-up, but data is missing')                return False            self.holes.append(i)            if self.blocked[i] or self.check_targets.has_key(self.hashes[i]):                self.check_targets[self.hashes[i]] = [] # in case of a hash collision, discard            else:                self.check_targets[self.hashes[i]] = [i]        self.check_total = len(self.check_list)        self.check_numchecked = 0.0        self.lastlen = self._piecelen(len(self.hashes) - 1)        self.numchecked = 0.0        return self.check_total > 0    def _markgot(self, piece, pos):        if DEBUG:            print str(piece)+' at '+str(pos)        self.places[piece] = pos        self.have[piece] = True        len = self._piecelen(piece)        self.amount_obtained += len        self.amount_left -= len        self.amount_inactive -= len        self.inactive_requests[piece] = None        self.waschecked[piece] = self.check_hashes        self.stat_numfound += 1    def hashcheckfunc(self):        if self.flag.isSet():            return None        if not self.check_list:            return None                i = self.check_list.pop(0)        if not self.check_hashes:            self._markgot(i, i)        else:            d1 = self.read_raw(i,0,self.lastlen)            if d1 is None:                return None            sh = sha(d1[:])            d1.release()            sp = sh.digest()            d2 = self.read_raw(i,self.lastlen,self._piecelen(i)-self.lastlen)            if d2 is None:                return None            sh.update(d2[:])            d2.release()            s = sh.digest()            if s == self.hashes[i]:                self._markgot(i, i)            elif ( self.check_targets.get(s)                   and self._piecelen(i) == self._piecelen(self.check_targets[s][-1]) ):                self._markgot(self.check_targets[s].pop(), i)                self.out_of_place += 1            elif ( not self.have[-1] and sp == self.hashes[-1]                   and (i == len(self.hashes) - 1                        or not self._waspre(len(self.hashes) - 1)) ):                self._markgot(len(self.hashes) - 1, i)                self.out_of_place += 1            else:                self.places[i] = i        self.numchecked += 1        if self.amount_left == 0:            self.finished()        return (self.numchecked / self.check_total)    def init_movedata(self):        if self.flag.isSet():            return False        if self.alloc_type != 'sparse':            return False        self.storage.top_off()  # sets file lengths to their final size        self.movelist = []        if self.out_of_place == 0:            for i in self.holes:                self.places[i] = i            self.holes = []            return False        self.tomove = float(self.out_of_place)        for i in xrange(len(self.hashes)):            if not self.places.has_key(i):                self.places[i] = i            elif self.places[i] != i:                self.movelist.append(i)        self.holes = []        return True    def movedatafunc(self):        if self.flag.isSet():            return None        if not self.movelist:            return None        i = self.movelist.pop(0)        old = self.read_raw(self.places[i], 0, self._piecelen(i))        if old is None:            return None        if not self.write_raw(i, 0, old):            return None        if self.double_check and self.have[i]:            if self.triple_check:                old.release()                old = self.read_raw( i, 0, self._piecelen(i),                                            flush_first = True )                if old is None:                    return None            if sha(old[:]).digest() != self.hashes[i]:                self.failed('download corrupted; please restart and resume')                return None        old.release()        self.places[i] = i        self.tomove -= 1        return (self.tomove / self.out_of_place)            def init_alloc(self):        if self.flag.isSet():            return False        if not self.holes:            return False        self.numholes = float(len(self.holes))        self.alloc_buf = chr(0xFF) * self.piece_size        if self.alloc_type == 'pre-allocate':

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区av在线播放| 亚洲精品videosex极品| 欧美午夜片在线看| 色婷婷久久久亚洲一区二区三区 | 国产精品一区二区久激情瑜伽 | 亚洲欧美偷拍另类a∨色屁股| 国产精品久久久久久久久免费樱桃| 亚洲精品一区二区三区在线观看| 日韩视频在线一区二区| 精品国产精品一区二区夜夜嗨| 欧美一级午夜免费电影| 欧美大尺度电影在线| 精品久久人人做人人爽| 欧美精品一区二区三区久久久| 久久一二三国产| 国产精品色在线| 亚洲精品国产无天堂网2021| 亚洲成人免费影院| 日韩高清一区二区| 国产麻豆精品一区二区| www.日本不卡| 欧美日韩不卡一区| 亚洲精品一区二区三区精华液| 国产亚洲精品精华液| 亚洲精品你懂的| 玖玖九九国产精品| 99视频热这里只有精品免费| 欧美日韩一区二区欧美激情| 国产欧美一区二区精品性色超碰 | 国产日韩欧美不卡在线| 亚洲精品日韩一| 久久精品久久综合| 一本到高清视频免费精品| 91精品婷婷国产综合久久性色| 久久先锋影音av| 亚洲乱码日产精品bd| 美女视频网站久久| 日本高清不卡在线观看| 精品国产凹凸成av人导航| 亚洲手机成人高清视频| 久久爱www久久做| 在线亚洲高清视频| 日本一区二区三级电影在线观看| 亚洲国产一区二区a毛片| 国产一区 二区| 欧美精品日韩精品| 国产精品第一页第二页第三页| 欧美aaaaa成人免费观看视频| 91片黄在线观看| 久久青草国产手机看片福利盒子| 怡红院av一区二区三区| 国产成人av电影| 亚洲色图在线播放| 国产乱一区二区| 日韩欧美专区在线| 亚洲成va人在线观看| 色综合久久综合网97色综合 | 91精品国产麻豆国产自产在线| 自拍偷拍亚洲综合| 国产乱码精品一区二区三| 91精品欧美久久久久久动漫| 有坂深雪av一区二区精品| 成人黄色国产精品网站大全在线免费观看 | 日韩三级在线观看| 午夜久久久影院| 欧美色男人天堂| 亚洲国产综合人成综合网站| 91视频91自| 亚洲三级在线看| 成人av网站在线观看| 国产欧美一区二区三区在线看蜜臀| 久久99精品一区二区三区三区| 欧美久久婷婷综合色| 五月天亚洲精品| 欧美一区二区三区在线电影 | 国产亚洲一区字幕| 久久激情五月婷婷| 欧美成人艳星乳罩| 精品影院一区二区久久久| 亚洲精品一区在线观看| 国产河南妇女毛片精品久久久| 久久久激情视频| 高清成人在线观看| 亚洲欧洲成人av每日更新| 在线免费观看成人短视频| 亚洲尤物视频在线| 777色狠狠一区二区三区| 久草精品在线观看| 中文字幕欧美激情一区| 色美美综合视频| 日韩精品欧美精品| 久久久亚洲精品石原莉奈| av中文字幕亚洲| 亚洲成a人片综合在线| 精品国产91洋老外米糕| 成人av在线电影| 亚洲大型综合色站| 26uuu亚洲| 97aⅴ精品视频一二三区| 午夜欧美大尺度福利影院在线看| 日韩欧美激情在线| 波波电影院一区二区三区| 亚洲一二三四久久| 久久综合色之久久综合| 色婷婷国产精品久久包臀| 视频在线观看一区| 国产精品系列在线| 精品婷婷伊人一区三区三| 国产精品一区二区三区四区| 自拍偷拍国产亚洲| 精品福利一二区| 在线观看日韩毛片| 欧美日韩精品高清| 国产91丝袜在线播放0| 亚洲福利一区二区三区| 国产日韩欧美a| 精品视频资源站| av电影在线不卡| 久久99九九99精品| 亚洲成人动漫精品| 中文字幕不卡三区| 日韩免费观看高清完整版 | 国产精品久久久久久久午夜片| 欧美日韩成人一区二区| 成人国产一区二区三区精品| 男女男精品视频网| 一区2区3区在线看| 中文字幕中文字幕中文字幕亚洲无线| 在线播放欧美女士性生活| 91偷拍与自偷拍精品| 国产一区二区三区观看| 麻豆专区一区二区三区四区五区| 伊人色综合久久天天人手人婷| 久久精品视频一区二区三区| 337p亚洲精品色噜噜噜| 欧美在线影院一区二区| 99久久伊人久久99| 成人精品视频.| 国产麻豆精品视频| 国产精品伊人色| 国产精品自拍三区| 国模套图日韩精品一区二区| 日本成人在线不卡视频| 亚洲高清免费在线| 亚洲第一主播视频| 亚洲午夜在线视频| 亚洲图片欧美视频| 亚洲成人先锋电影| 午夜精品久久久久久| 亚洲风情在线资源站| 亚洲国产成人精品视频| 亚洲成人三级小说| 日韩激情中文字幕| 老色鬼精品视频在线观看播放| 裸体一区二区三区| 激情六月婷婷综合| 国产一区二区成人久久免费影院| 国精品**一区二区三区在线蜜桃| 久久国产精品区| 国产成人精品午夜视频免费| 国产精品综合二区| k8久久久一区二区三区| 91麻豆免费看| 欧美日韩高清在线| 欧美成va人片在线观看| 久久久久久久久久久99999| 久久久久久久综合色一本| 久久精品欧美日韩| 亚洲欧洲日产国码二区| 亚洲精品国产精品乱码不99| 亚洲国产美女搞黄色| 免费看日韩a级影片| 国产成人精品综合在线观看| 成人黄页毛片网站| 欧美顶级少妇做爰| 久久久99久久精品欧美| 亚洲免费在线播放| 美腿丝袜亚洲综合| 成人av在线一区二区三区| 欧美精品三级在线观看| 久久伊人蜜桃av一区二区| 亚洲免费观看高清在线观看| 日本不卡不码高清免费观看| 成人蜜臀av电影| 欧美日韩成人一区| 亚洲国产高清在线| 麻豆精品一二三| bt欧美亚洲午夜电影天堂| 日韩午夜在线播放| 亚洲天堂网中文字| 精品制服美女丁香| 日本精品一区二区三区高清 | 成人av免费在线播放| 欧美亚洲日本国产| 国产亚洲欧美一区在线观看| 亚洲老司机在线| 国产馆精品极品| 精品美女一区二区三区| 一区二区在线电影| 高清成人在线观看|