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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? storage.py

?? 一個多點下載且源碼公開的P2P軟件
?? PY
?? 第 1 頁 / 共 2 頁
字號:
            while pos < end:                length = min(end-pos, MAXREADSIZE)                data = h.read(length)                if len(data) != length:                    raise IOError('error reading data from '+file)                r.append(data)                pos += length            self.lock.release()        return r    def write(self, pos, s):        # might raise an IOError        total = 0        for file, begin, end in self._intervals(pos, len(s)):            if DEBUG:                print 'writing '+file+' from '+str(pos)+' to '+str(end)            self.lock.acquire()            h = self._get_file_handle(file, True)            h.seek(begin)            h.write(s[total: total + end - begin])            self.lock.release()            total += end - begin    def top_off(self):        for begin, end, offset, file in self.ranges:            l = offset + end - begin            if l > self.tops.get(file, 0):                self.lock.acquire()                h = self._get_file_handle(file, True)                h.seek(l-1)                h.write(chr(0xFF))                self.lock.release()    def flush(self):        # may raise IOError or OSError        for file in self.whandles.keys():            self.lock.acquire()            self.handles[file].flush()            self.lock.release()    def close(self):        for file, f in self.handles.items():            try:                self.unlock_file(file, f)            except:                pass            try:                f.close()            except:                pass        self.handles = {}        self.whandles = {}        self.handlebuffer = None    def _get_disabled_ranges(self, f):        if not self.file_ranges[f]:            return ((),(),())        r = self.disabled_ranges[f]        if r:            return r        start, end, offset, file = self.file_ranges[f]        if DEBUG:            print 'calculating disabled range for '+self.files[f][0]            print 'bytes: '+str(start)+'-'+str(end)            print 'file spans pieces '+str(int(start/self.piece_length))+'-'+str(int((end-1)/self.piece_length)+1)        pieces = range( int(start/self.piece_length),                        int((end-1)/self.piece_length)+1 )        offset = 0        disabled_files = []        if len(pieces) == 1:            if ( start % self.piece_length == 0                 and end % self.piece_length == 0 ):   # happens to be a single,                                                       # perfect piece                working_range = [(start, end, offset, file)]                update_pieces = []            else:                midfile = os.path.join(self.bufferdir,str(f))                working_range = [(start, end, 0, midfile)]                disabled_files.append((midfile, start, end))                length = end - start                self.sizes[midfile] = length                piece = pieces[0]                update_pieces = [(piece, start-(piece*self.piece_length), length)]        else:            update_pieces = []            if start % self.piece_length != 0:  # doesn't begin on an even piece boundary                end_b = pieces[1]*self.piece_length                startfile = os.path.join(self.bufferdir,str(f)+'b')                working_range_b = [ ( start, end_b, 0, startfile ) ]                disabled_files.append((startfile, start, end_b))                length = end_b - start                self.sizes[startfile] = length                offset = length                piece = pieces.pop(0)                update_pieces.append((piece, start-(piece*self.piece_length), length))            else:                working_range_b = []            if f  != len(self.files)-1 and end % self.piece_length != 0:                                                # doesn't end on an even piece boundary                start_e = pieces[-1] * self.piece_length                endfile = os.path.join(self.bufferdir,str(f)+'e')                working_range_e = [ ( start_e, end, 0, endfile ) ]                disabled_files.append((endfile, start_e, end))                length = end - start_e                self.sizes[endfile] = length                piece = pieces.pop(-1)                update_pieces.append((piece, 0, length))            else:                working_range_e = []            if pieces:                working_range_m = [ ( pieces[0]*self.piece_length,                                      (pieces[-1]+1)*self.piece_length,                                      offset, file ) ]            else:                working_range_m = []            working_range = working_range_b + working_range_m + working_range_e        if DEBUG:                        print str(working_range)            print str(update_pieces)        r = (tuple(working_range), tuple(update_pieces), tuple(disabled_files))        self.disabled_ranges[f] = r        return r            def set_bufferdir(self, dir):        self.bufferdir = dir    def enable_file(self, f):        if not self.disabled[f]:            return        self.disabled[f] = False        r = self.file_ranges[f]        if not r:            return        file = r[3]        if not exists(file):            h = open(file, 'wb+')            h.flush()            h.close()        if not self.tops.has_key(file):            self.tops[file] = getsize(file)        if not self.mtimes.has_key(file):            self.mtimes[file] = getmtime(file)        self.working_ranges[f] = [r]    def disable_file(self, f):        if self.disabled[f]:            return        self.disabled[f] = True        r = self._get_disabled_ranges(f)        if not r:            return        for file, begin, end in r[2]:            if not os.path.isdir(self.bufferdir):                os.makedirs(self.bufferdir)            if not exists(file):                h = open(file, 'wb+')                h.flush()                h.close()            if not self.tops.has_key(file):                self.tops[file] = getsize(file)            if not self.mtimes.has_key(file):                self.mtimes[file] = getmtime(file)        self.working_ranges[f] = r[0]    reset_file_status = _reset_ranges    def get_piece_update_list(self, f):        return self._get_disabled_ranges(f)[1]    def delete_file(self, f):        try:            os.remove(self.files[f][0])        except:            pass    '''    Pickled data format:    d['files'] = [ file #, size, mtime {, file #, size, mtime...} ]                    file # in torrent, and the size and last modification                    time for those files.  Missing files are either empty                    or disabled.    d['partial files'] = [ name, size, mtime... ]                    Names, sizes and last modification times of files containing                    partial piece data.  Filenames go by the following convention:                    {file #, 0-based}{nothing, "b" or "e"}                    eg: "0e" "3" "4b" "4e"                    Where "b" specifies the partial data for the first piece in                    the file, "e" the last piece, and no letter signifying that                    the file is disabled but is smaller than one piece, and that                    all the data is cached inside so adjacent files may be                    verified.    '''    def pickle(self):        files = []        pfiles = []        for i in xrange(len(self.files)):            if not self.files[i][1]:    # length == 0                continue            if self.disabled[i]:                for file, start, end in self._get_disabled_ranges(i)[2]:                    pfiles.extend([basename(file),getsize(file),int(getmtime(file))])                continue            file = self.files[i][0]            files.extend([i,getsize(file),int(getmtime(file))])        return {'files': files, 'partial files': pfiles}    def unpickle(self, data):        # assume all previously-disabled files have already been disabled        try:            files = {}            pfiles = {}            l = data['files']            assert len(l) % 3 == 0            l = [l[x:x+3] for x in xrange(0,len(l),3)]            for f, size, mtime in l:                files[f] = (size, mtime)            l = data.get('partial files',[])            assert len(l) % 3 == 0            l = [l[x:x+3] for x in xrange(0,len(l),3)]            for file, size, mtime in l:                pfiles[file] = (size, mtime)            valid_pieces = {}            for i in xrange(len(self.files)):                if self.disabled[i]:                    continue                r = self.file_ranges[i]                if not r:                    continue                start, end, offset, file =r                if DEBUG:                    print 'adding '+file                for p in xrange( int(start/self.piece_length),                                 int((end-1)/self.piece_length)+1 ):                    valid_pieces[p] = 1            if DEBUG:                print valid_pieces.keys()                        def test(old, size, mtime):                oldsize, oldmtime = old                if size != oldsize:                    return False                if mtime > oldmtime+1:                    return False                if mtime < oldmtime-1:                    return False                return True            for i in xrange(len(self.files)):                if self.disabled[i]:                    for file, start, end in self._get_disabled_ranges(i)[2]:                        f1 = basename(file)                        if ( not pfiles.has_key(f1)                             or not test(pfiles[f1],getsize(file),getmtime(file)) ):                            if DEBUG:                                print 'removing '+file                            for p in xrange( int(start/self.piece_length),                                             int((end-1)/self.piece_length)+1 ):                                if valid_pieces.has_key(p):                                    del valid_pieces[p]                    continue                file, size = self.files[i]                if not size:                    continue                if ( not files.has_key(i)                     or not test(files[i],getsize(file),getmtime(file)) ):                    start, end, offset, file = self.file_ranges[i]                    if DEBUG:                        print 'removing '+file                    for p in xrange( int(start/self.piece_length),                                     int((end-1)/self.piece_length)+1 ):                        if valid_pieces.has_key(p):                            del valid_pieces[p]        except:            if DEBUG:                print_exc()            return []        if DEBUG:            print valid_pieces.keys()                                return valid_pieces.keys()

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91年精品国产| 99精品国产热久久91蜜凸| 亚洲欧洲三级电影| 久久伊人蜜桃av一区二区| 日韩一级二级三级精品视频| 欧美亚洲动漫精品| 欧美日韩精品专区| 欧美日韩在线不卡| 91精品国产乱| 日韩欧美亚洲另类制服综合在线| 91精品婷婷国产综合久久| 欧美日韩成人一区二区| 欧美高清视频不卡网| 日韩一区二区在线看片| 精品欧美乱码久久久久久 | 日韩福利电影在线| 老司机精品视频线观看86| 国产一区二区主播在线| 国产成a人亚洲精| 91成人国产精品| 欧美大胆人体bbbb| 亚洲一区在线观看免费观看电影高清 | 久久久精品人体av艺术| 国产精品人成在线观看免费 | 美女脱光内衣内裤视频久久网站 | 日本一区二区久久| 亚洲欧美日韩久久| 亚洲va在线va天堂| 国产精一品亚洲二区在线视频| 国产精品一区二区三区四区| 成人97人人超碰人人99| 欧美日韩午夜在线| 国产亚洲欧美在线| 一区二区三区在线播放| 日产国产高清一区二区三区| 国产剧情av麻豆香蕉精品| 欧美综合天天夜夜久久| 337p粉嫩大胆色噜噜噜噜亚洲| 综合欧美一区二区三区| 蜜臀av国产精品久久久久| zzijzzij亚洲日本少妇熟睡| 欧美日韩成人综合天天影院| 国产精品久久久久一区二区三区共| 亚洲午夜精品网| 国产91精品精华液一区二区三区| 色婷婷av一区二区三区软件| 精品国产乱码久久久久久免费| 亚洲欧美一区二区久久| 国产精品综合一区二区三区| 欧美性感一类影片在线播放| 久久婷婷色综合| 日韩国产精品久久| 色婷婷综合久久| 国产片一区二区| 久久精品99久久久| 91麻豆精品国产91久久久使用方法 | 丁香桃色午夜亚洲一区二区三区| 欧美三级资源在线| **性色生活片久久毛片| 久色婷婷小香蕉久久| 欧美亚洲自拍偷拍| 中文字幕+乱码+中文字幕一区| 首页国产欧美久久| 在线精品视频免费播放| 亚洲欧美国产三级| 丁香桃色午夜亚洲一区二区三区| 亚洲欧美另类小说| 不卡高清视频专区| 国产日韩欧美精品一区| 国产在线国偷精品产拍免费yy| 欧美一级夜夜爽| 亚洲r级在线视频| 欧美日韩精品免费| 日韩电影免费在线看| 欧美精品第一页| 亚洲不卡av一区二区三区| 欧美日韩一区在线| 亚洲成人7777| 欧美一二三在线| 久久99国产精品久久| 亚洲精品一区二区三区影院| 国产一区久久久| 日本一区二区三区国色天香 | 国产精品自产自拍| 国产精品区一区二区三区| 国产一区二区三区蝌蚪| 国产亚洲欧美一区在线观看| 风间由美一区二区三区在线观看 | 亚洲大片免费看| 日韩限制级电影在线观看| 麻豆国产精品视频| 久久久久久久久久久黄色| 国产91精品欧美| 亚洲精品乱码久久久久久 | 337p粉嫩大胆色噜噜噜噜亚洲| 韩国精品一区二区| 国产精品久久看| 欧美日韩一区二区三区四区| 免费看欧美美女黄的网站| 久久久夜色精品亚洲| av爱爱亚洲一区| 亚洲电影视频在线| 26uuu亚洲| 日本道色综合久久| 蜜臀av一区二区三区| 国产视频一区二区三区在线观看| 91在线视频官网| 免费看精品久久片| 中文字幕亚洲在| 日韩一级视频免费观看在线| 成人app软件下载大全免费| 亚洲国产成人av网| 欧美激情在线看| 欧美日韩国产综合草草| 国产精品主播直播| 亚洲国产精品久久久久婷婷884| 欧美大片免费久久精品三p| 波多野结衣中文字幕一区二区三区| 亚洲成人在线网站| 国产精品久久久久久妇女6080| 欧美另类一区二区三区| 波多野结衣在线aⅴ中文字幕不卡| 日韩中文字幕麻豆| 中文字幕一区二区三区在线不卡| 7777精品伊人久久久大香线蕉超级流畅 | 欧美日韩国产不卡| 91在线视频18| 蜜桃免费网站一区二区三区| 亚洲天堂av老司机| 亚洲在线视频网站| 日韩一级免费一区| 欧美日韩另类一区| 91在线观看美女| 国产一区在线观看麻豆| 日本欧美一区二区三区乱码| 国产精品视频免费| 欧美电影免费观看高清完整版在线 | 成人午夜免费电影| 久久福利视频一区二区| 视频一区免费在线观看| 亚洲人成电影网站色mp4| 国产欧美一区视频| 精品国产三级a在线观看| 欧美日韩高清一区二区不卡| 色婷婷久久久久swag精品| 99免费精品视频| 成人av电影在线观看| av电影一区二区| 99视频一区二区| 99精品偷自拍| 色婷婷一区二区三区四区| 色噜噜狠狠一区二区三区果冻| 91视频xxxx| 欧美丝袜自拍制服另类| 欧美日韩一区二区在线观看视频| 色噜噜夜夜夜综合网| 欧美性大战久久| 制服丝袜亚洲色图| 精品久久久久久久久久久久包黑料 | 欧美一区二区三区思思人| 欧美人与z0zoxxxx视频| 91精品一区二区三区久久久久久 | 欧美国产精品中文字幕| 日本一区二区三区久久久久久久久不 | 99国产一区二区三精品乱码| 国产·精品毛片| 国产成人自拍网| 一级精品视频在线观看宜春院 | 在线亚洲人成电影网站色www| 日韩一区二区三区免费观看| 成人欧美一区二区三区小说| 免费观看日韩电影| 欧美亚州韩日在线看免费版国语版| 久久综合久久综合亚洲| 午夜日韩在线电影| 91猫先生在线| 中文字幕免费不卡| 韩国av一区二区三区在线观看| 精品视频在线免费| 亚洲少妇屁股交4| 成人精品国产免费网站| 精品日韩99亚洲| 麻豆精品国产传媒mv男同| 欧美亚洲综合一区| 一区二区三区四区不卡在线| 成人av综合在线| 欧美国产精品一区二区三区| 国内精品视频666| 精品免费国产二区三区| 日韩国产高清在线| 91精品国模一区二区三区| 亚洲超碰97人人做人人爱| 欧美无砖专区一中文字| 亚洲一区二区三区自拍| 色狠狠综合天天综合综合| 亚洲免费毛片网站| 色婷婷综合中文久久一本| 亚洲男同1069视频| 在线精品视频免费播放| 亚洲成人一区在线|