def chunkVerified(self, who, chunkNumber, chunkData):
        """A chunk (#chunkNumber) containing the data C{chunkData} was verified, sent
        to us by the Q2QAddress C{who}.
        """
        if self.mask[chunkNumber]:
            # already received that chunk.
            return
        self.file.seek(chunkNumber * CHUNK_SIZE)
        self.file.write(chunkData)
        self.file.flush()
        self.sha1sums[chunkNumber] = sha.new(chunkData).digest()

        if not self.mask[chunkNumber]:
            self.nexus.increaseScore(who)
            self.mask[chunkNumber] = 1
            self.writeMaskFile()
            self.changes += 1

            if self.changes > self.maximumChangeCountBeforeMaskUpdate:
                self.call.cancel()
                self.sendMaskUpdate()
                self.call = self.nexus.callLater(
                    self.maximumChangeCountBeforeMaskUpdate,
                    self.maybeUpdateMask)

            if not self.seed and not self.mask.countbits(0):
                # we're done, let's let other people get at that file.
                self.file.close()
                os.rename(self.incompletePath.path,
                          self.fullPath.path)
                self.file = self.fullPath.open()
                self.maskfile.close()
                os.unlink(self.maskfile.name)

            self.ui.updateHostMask(self.mask)