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

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

?? storagewrapper.py

?? BitTorrentABC-Linux-V.2.4.3源碼
?? PY
?? 第 1 頁 / 共 2 頁
字號:
            del self.stat_active[index]
        if self.stat_new.has_key(index):
            del self.stat_new[index]
        if not self.inactive_requests[index] and not self.numactive[index]:
            del self.dirty[index]
            if sha(self.storage.read(self.piece_size * self.places[index], self._piecelen(index))).digest() == self.hashes[index]:
                self.have[index] = true
                self.inactive_requests[index] = None
                self.waschecked[index] = true
                self.amount_left -= self._piecelen(index)
                self.stat_numdownloaded += 1
                if self.amount_left == 0:
                    self.finished()
            else:
                self.data_flunked(self._piecelen(index))
                self.inactive_requests[index] = 1
                self.amount_inactive += self._piecelen(index)
                self.stat_numflunked += 1
                return false
        return true

    def request_lost(self, index, begin, length):
        self.inactive_requests[index].append((begin, length))
        self.amount_inactive += length
        self.numactive[index] -= 1
        if not self.numactive[index]:
            del self.stat_active[index]
            if self.stat_new.has_key(index):
                del self.stat_new[index]

    def get_piece(self, index, begin, length):
        try:
            return self._get_piece(index, begin, length)
        except IOError, e:
            self.failed('IO Error ' + str(e))
            return None

    def _get_piece(self, index, begin, length):
        if not self.have[index]:
            return None
        if not self.waschecked[index]:
            if sha(self.storage.read(self.piece_size * self.places[index], self._piecelen(index))).digest() != self.hashes[index]:
                self.failed('told file complete on start-up, but piece failed hash check')
                return None
            self.waschecked[index] = true
        if begin + length > self._piecelen(index):
            return None
        return self.storage.read(self.piece_size * self.places[index] + begin, length)

class DummyStorage:
    def __init__(self, total, pre = false, ranges = []):
        self.pre = pre
        self.ranges = ranges
        self.s = chr(0xFF) * total
        self.done = false

    def was_preexisting(self):
        return self.pre

    def was_preallocated(self, begin, length):
        for b, l in self.ranges:
            if begin >= b and begin + length <= b + l:
                return true
        return false

    def get_total_length(self):
        return len(self.s)

    def read(self, begin, length):
        return self.s[begin:begin + length]

    def write(self, begin, piece):
        self.s = self.s[:begin] + piece + self.s[begin + len(piece):]

    def finished(self):
        self.done = true

def test_basic():
    ds = DummyStorage(3)
    sw = StorageWrapper(ds, 2, [sha('abc').digest()], 4, ds.finished, None)
    assert sw.get_amount_left() == 3
    assert not sw.do_I_have_anything()
    assert sw.get_have_list() == [false]
    assert sw.do_I_have_requests(0)
    x = []
    x.append(sw.new_request(0))
    assert sw.do_I_have_requests(0)
    x.append(sw.new_request(0))
    assert not sw.do_I_have_requests(0)
    x.sort()
    assert x == [(0, 2), (2, 1)]
    sw.request_lost(0, 2, 1)
    del x[-1]
    assert sw.do_I_have_requests(0)
    x.append(sw.new_request(0))
    assert x == [(0, 2), (2, 1)]
    assert not sw.do_I_have_requests(0)
    sw.piece_came_in(0, 0, 'ab')
    assert not sw.do_I_have_requests(0)
    assert sw.get_amount_left() == 3
    assert not sw.do_I_have_anything()
    assert sw.get_have_list() == [false]
    assert not ds.done
    sw.piece_came_in(0, 2, 'c')
    assert not sw.do_I_have_requests(0)
    assert sw.get_amount_left() == 0
    assert sw.do_I_have_anything()
    assert sw.get_have_list() == [true]
    assert sw.get_piece(0, 0, 3) == 'abc'
    assert sw.get_piece(0, 1, 2) == 'bc'
    assert sw.get_piece(0, 0, 2) == 'ab'
    assert sw.get_piece(0, 1, 1) == 'b'
    assert ds.done

def test_two_pieces():
    ds = DummyStorage(4)
    sw = StorageWrapper(ds, 3, [sha('abc').digest(),
        sha('d').digest()], 3, ds.finished, None)
    assert sw.get_amount_left() == 4
    assert not sw.do_I_have_anything()
    assert sw.get_have_list() == [false, false]
    assert sw.do_I_have_requests(0)
    assert sw.do_I_have_requests(1)

    assert sw.new_request(0) == (0, 3)
    assert sw.get_amount_left() == 4
    assert not sw.do_I_have_anything()
    assert sw.get_have_list() == [false, false]
    assert not sw.do_I_have_requests(0)
    assert sw.do_I_have_requests(1)

    assert sw.new_request(1) == (0, 1)
    assert sw.get_amount_left() == 4
    assert not sw.do_I_have_anything()
    assert sw.get_have_list() == [false, false]
    assert not sw.do_I_have_requests(0)
    assert not sw.do_I_have_requests(1)

    sw.piece_came_in(0, 0, 'abc')
    assert sw.get_amount_left() == 1
    assert sw.do_I_have_anything()
    assert sw.get_have_list() == [true, false]
    assert not sw.do_I_have_requests(0)
    assert not sw.do_I_have_requests(1)
    assert sw.get_piece(0, 0, 3) == 'abc'
    assert not ds.done

    sw.piece_came_in(1, 0, 'd')
    assert ds.done
    assert sw.get_amount_left() == 0
    assert sw.do_I_have_anything()
    assert sw.get_have_list() == [true, true]
    assert not sw.do_I_have_requests(0)
    assert not sw.do_I_have_requests(1)
    assert sw.get_piece(1, 0, 1) == 'd'

def test_hash_fail():
    ds = DummyStorage(4)
    sw = StorageWrapper(ds, 4, [sha('abcd').digest()], 4, ds.finished, None)
    assert sw.get_amount_left() == 4
    assert not sw.do_I_have_anything()
    assert sw.get_have_list() == [false]
    assert sw.do_I_have_requests(0)

    assert sw.new_request(0) == (0, 4)
    sw.piece_came_in(0, 0, 'abcx')
    assert sw.get_amount_left() == 4
    assert not sw.do_I_have_anything()
    assert sw.get_have_list() == [false]
    assert sw.do_I_have_requests(0)

    assert sw.new_request(0) == (0, 4)
    assert not ds.done
    sw.piece_came_in(0, 0, 'abcd')
    assert ds.done
    assert sw.get_amount_left() == 0
    assert sw.do_I_have_anything()
    assert sw.get_have_list() == [true]
    assert not sw.do_I_have_requests(0)

def test_lazy_hashing():
    ds = DummyStorage(4, ranges = [(0, 4)])
    flag = Event()
    sw = StorageWrapper(ds, 4, [sha('abcd').digest()], 4, ds.finished, lambda x, flag = flag: flag.set(), check_hashes = false)
    assert sw.get_piece(0, 0, 2) is None
    assert flag.isSet()

def test_lazy_hashing_pass():
    ds = DummyStorage(4)
    flag = Event()
    sw = StorageWrapper(ds, 4, [sha(chr(0xFF) * 4).digest()], 4, ds.finished, lambda x, flag = flag: flag.set(), check_hashes = false)
    assert sw.get_piece(0, 0, 2) is None
    assert not flag.isSet()

def test_preexisting():
    ds = DummyStorage(4, true, [(0, 4)])
    sw = StorageWrapper(ds, 2, [sha(chr(0xFF) * 2).digest(), 
        sha('ab').digest()], 2, ds.finished, None)
    assert sw.get_amount_left() == 2
    assert sw.do_I_have_anything()
    assert sw.get_have_list() == [true, false]
    assert not sw.do_I_have_requests(0)
    assert sw.do_I_have_requests(1)
    assert sw.new_request(1) == (0, 2)
    assert not ds.done
    sw.piece_came_in(1, 0, 'ab')
    assert ds.done
    assert sw.get_amount_left() == 0
    assert sw.do_I_have_anything()
    assert sw.get_have_list() == [true, true]
    assert not sw.do_I_have_requests(0)
    assert not sw.do_I_have_requests(1)

def test_total_too_short():
    ds = DummyStorage(4)
    try:
        StorageWrapper(ds, 4, [sha(chr(0xff) * 4).digest(),
            sha(chr(0xFF) * 4).digest()], 4, ds.finished, None)
        raise 'fail'
    except ValueError:
        pass

def test_total_too_big():
    ds = DummyStorage(9)
    try:
        sw = StorageWrapper(ds, 4, [sha('qqqq').digest(),
            sha(chr(0xFF) * 4).digest()], 4, ds.finished, None)
        raise 'fail'
    except ValueError:
        pass

def test_end_above_total_length():
    ds = DummyStorage(3, true)
    sw = StorageWrapper(ds, 4, [sha('qqq').digest()], 4, ds.finished, None)
    assert sw.get_piece(0, 0, 4) == None

def test_end_past_piece_end():
    ds = DummyStorage(4, true, ranges = [(0, 4)])
    sw = StorageWrapper(ds, 4, [sha(chr(0xFF) * 2).digest(), 
        sha(chr(0xFF) * 2).digest()], 2, ds.finished, None)
    assert ds.done
    assert sw.get_piece(0, 0, 3) == None

from random import shuffle

def test_alloc_random():
    ds = DummyStorage(101)
    sw = StorageWrapper(ds, 1, [sha(chr(i)).digest() for i in xrange(101)], 1, ds.finished, None)
    for i in xrange(100):
        assert sw.new_request(i) == (0, 1)
    r = range(100)
    shuffle(r)
    for i in r:
        sw.piece_came_in(i, 0, chr(i))
    for i in xrange(100):
        assert sw.get_piece(i, 0, 1) == chr(i)
    assert ds.s[:100] == ''.join([chr(i) for i in xrange(100)])

def test_alloc_resume():
    ds = DummyStorage(101)
    sw = StorageWrapper(ds, 1, [sha(chr(i)).digest() for i in xrange(101)], 1, ds.finished, None)
    for i in xrange(100):
        assert sw.new_request(i) == (0, 1)
    r = range(100)
    shuffle(r)
    for i in r[:50]:
        sw.piece_came_in(i, 0, chr(i))
    assert ds.s[50:] == chr(0xFF) * 51
    ds.ranges = [(0, 50)]
    sw = StorageWrapper(ds, 1, [sha(chr(i)).digest() for i in xrange(101)], 1, ds.finished, None)
    for i in r[50:]:
        sw.piece_came_in(i, 0, chr(i))
    assert ds.s[:100] == ''.join([chr(i) for i in xrange(100)])

def test_last_piece_pre():
    ds = DummyStorage(3, ranges = [(2, 1)])
    ds.s = chr(0xFF) + chr(0xFF) + 'c'
    sw = StorageWrapper(ds, 2, [sha('ab').digest(), sha('c').digest()], 2, ds.finished, None)
    assert not sw.do_I_have_requests(1)
    assert sw.do_I_have_requests(0)

def test_not_last_pre():
    ds = DummyStorage(3, ranges = [(1, 1)])
    ds.s = chr(0xFF) + 'a' + chr(0xFF)
    sw = StorageWrapper(ds, 1, [sha('a').digest()] * 3, 1, ds.finished, None)
    assert not sw.do_I_have_requests(1)
    assert sw.do_I_have_requests(0)
    assert sw.do_I_have_requests(2)

def test_last_piece_not_pre():
    ds = DummyStorage(51, ranges = [(50, 1)])
    sw = StorageWrapper(ds, 2, [sha('aa').digest()] * 25 + [sha('b').digest()], 2, ds.finished, None)
    for i in xrange(25):
        assert sw.new_request(i) == (0, 2)
    assert sw.new_request(25) == (0, 1)
    sw.piece_came_in(25, 0, 'b')
    r = range(25)
    shuffle(r)
    for i in r:
        sw.piece_came_in(i, 0, 'aa')
    assert ds.done
    assert ds.s == 'a' * 50 + 'b'

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图欧美激情| www国产精品av| fc2成人免费人成在线观看播放| 亚洲国产毛片aaaaa无费看| 国产精品电影一区二区三区| 久久久久国产精品免费免费搜索| 精品精品国产高清一毛片一天堂| 精品视频1区2区3区| 91黄色免费版| 在线观看一区二区视频| 91免费视频观看| 一本大道av一区二区在线播放 | 国产传媒日韩欧美成人| 极品少妇xxxx精品少妇| 老司机午夜精品99久久| 九九九精品视频| 久久成人免费网站| 国产一区二区调教| 粉嫩av一区二区三区在线播放| 国产美女视频一区| 成人av资源在线观看| 成人h动漫精品| 91久久精品网| 日韩三级视频中文字幕| 精品国产一区二区三区久久久蜜月 | 天天色天天操综合| 日韩高清一区在线| 国产一区二区三区免费在线观看| 国产suv精品一区二区883| 成人免费看黄yyy456| 91丨九色丨尤物| 欧美日韩精品欧美日韩精品| 日韩午夜精品视频| 国产精品入口麻豆原神| 亚洲成av人影院| 国产呦萝稀缺另类资源| 不卡的av在线播放| 日韩一区二区精品在线观看| 欧美国产综合一区二区| 一区二区三区久久久| 精品综合久久久久久8888| av中文一区二区三区| 7777精品伊人久久久大香线蕉| 欧美不卡在线视频| 有码一区二区三区| 国产成人av一区二区三区在线 | av毛片久久久久**hd| 欧美日韩国产综合视频在线观看| 精品成人免费观看| 亚洲午夜精品网| 成人毛片视频在线观看| 欧美日本韩国一区二区三区视频| 国产天堂亚洲国产碰碰| 亚洲国产成人porn| 成人一区二区三区在线观看| 91精品在线免费| 一区二区三区日韩精品视频| 国产麻豆日韩欧美久久| 欧美日韩一区二区在线观看| 国产精品成人免费| 国产在线精品免费| 欧美一区二区三区成人| 有码一区二区三区| 99久久免费精品高清特色大片| 欧美成人综合网站| 免费在线一区观看| 在线成人午夜影院| 亚洲狠狠丁香婷婷综合久久久| 国产iv一区二区三区| 欧美成人激情免费网| 免费成人小视频| 717成人午夜免费福利电影| 亚洲一区二区三区四区中文字幕| av色综合久久天堂av综合| 大美女一区二区三区| ●精品国产综合乱码久久久久| 久久午夜国产精品| 欧美一区二区视频观看视频 | 国产清纯美女被跳蛋高潮一区二区久久w| 色94色欧美sute亚洲线路一久| 另类人妖一区二区av| 国产精品国产精品国产专区不片| 日韩黄色一级片| 精品视频全国免费看| 性做久久久久久| 欧美视频一区二区三区四区 | 日韩经典一区二区| 欧美日韩国产高清一区二区| 午夜免费欧美电影| 欧美一区二区三区爱爱| 视频一区免费在线观看| 5月丁香婷婷综合| 精品一区二区三区免费毛片爱| 91精品国产福利| 久国产精品韩国三级视频| 精品粉嫩aⅴ一区二区三区四区| 国产在线乱码一区二区三区| 国产日韩精品一区二区浪潮av| 国产精品1区2区| 亚洲人成在线观看一区二区| 在线观看av一区二区| 偷拍日韩校园综合在线| 久久综合色婷婷| 99视频精品全部免费在线| 亚洲自拍偷拍网站| 欧美一区二区视频免费观看| 国产精品亚洲综合一区在线观看| 国产精品入口麻豆九色| 欧美精品色综合| 欧亚一区二区三区| 美女脱光内衣内裤视频久久影院| 精品粉嫩aⅴ一区二区三区四区| 丁香激情综合五月| 亚洲gay无套男同| 久久精品夜色噜噜亚洲aⅴ| 色婷婷av一区二区三区大白胸 | 4hu四虎永久在线影院成人| 国产资源在线一区| 亚洲综合在线观看视频| 精品国产一区二区在线观看| 91丨porny丨中文| 麻豆freexxxx性91精品| 综合自拍亚洲综合图不卡区| 日韩女优av电影在线观看| 99久久777色| 精品一区二区三区不卡| 亚洲国产日韩综合久久精品| 国产日产欧美一区| 欧美狂野另类xxxxoooo| 99精品视频在线免费观看| 久久精品久久99精品久久| 亚洲人成精品久久久久久| 日韩精品一区二区在线观看| 色天使色偷偷av一区二区| 国产九九视频一区二区三区| 午夜不卡在线视频| 中文字幕一区二区三区不卡在线 | 国产麻豆日韩欧美久久| 亚洲第一搞黄网站| 亚洲色欲色欲www| 国产色91在线| 国产亚洲综合色| 日韩欧美色电影| 欧美日韩精品欧美日韩精品| 91麻豆精品秘密| 99免费精品在线观看| 国产乱理伦片在线观看夜一区| 日韩不卡一区二区| 天堂成人国产精品一区| 亚洲影视资源网| 亚洲精品日产精品乱码不卡| 国产精品丝袜黑色高跟| 亚洲精品一区二区三区蜜桃下载| 欧美精品一卡两卡| 在线综合亚洲欧美在线视频| 欧美唯美清纯偷拍| 欧美日韩免费观看一区三区| 色av成人天堂桃色av| 91麻豆蜜桃一区二区三区| 99精品桃花视频在线观看| 99久久99久久免费精品蜜臀| 成人少妇影院yyyy| 99久久免费视频.com| 91热门视频在线观看| 91捆绑美女网站| 91麻豆国产自产在线观看| 亚洲福利视频一区| 99久精品国产| 成人一级黄色片| 成人av资源站| 在线看日韩精品电影| 欧美性受xxxx黑人xyx性爽| 欧美在线视频全部完| 欧美日韩国产一级| 欧美xxxx老人做受| 国产精品另类一区| 亚洲最大色网站| 免费人成在线不卡| 风间由美一区二区三区在线观看| av网站一区二区三区| 欧美丝袜丝交足nylons| 日韩小视频在线观看专区| 欧美国产综合色视频| 久久se这里有精品| 本田岬高潮一区二区三区| 欧美亚州韩日在线看免费版国语版| 91精品国产入口| 国产视频一区二区在线观看| 亚洲男人的天堂在线观看| 美女爽到高潮91| 色综合久久中文字幕综合网| 欧美日韩国产精品自在自线| 精品成人在线观看| 一区二区三区自拍| 韩国理伦片一区二区三区在线播放 | 欧美一区二区三区啪啪| 欧美经典一区二区三区| 亚洲国产一区二区三区| 国内精品免费在线观看| 欧美视频一区二区三区在线观看|