1 from twisted.internet import defer
3 from allmydata.util import idlib
6 return "%d:%s," % (len(s), s)
9 def __init__(self, infile, m):
14 def do_upload(self, landlords):
16 data = self.infile.read()
17 for (peerid, bucket_num, remotebucket) in landlords:
18 dl.append(remotebucket.callRemote('write', data))
19 dl.append(remotebucket.callRemote('close'))
21 return defer.DeferredList(dl)
23 class Decoder(object):
24 def __init__(self, outfile, k, m, verifierid):
25 self.outfile = outfile
28 self._verifierid = verifierid
30 def start(self, buckets):
31 assert len(buckets) >= self.k
33 for bucketnum, bucket in buckets[:self.k]:
34 d = bucket.callRemote("read")
36 d2 = defer.DeferredList(dl)
37 d2.addCallback(self._got_all_data)
40 def _got_all_data(self, resultslist):
41 shares = [results for success,results in resultslist if success]
42 assert len(shares) >= self.k
43 # here's where the Reed-Solomon magic takes place
44 self.outfile.write(shares[0])
45 hasher = sha.new(netstring("allmydata_v1_verifierid"))
46 hasher.update(shares[0])
49 assert self._verifierid == vid, "%s != %s" % (idlib.b2a(self._verifierid), idlib.b2a(vid))