~vomun-developers/anonplus/vomun-trunk

« back to all changes in this revision

Viewing changes to src/libs/storage/manager.py

  • Committer: AJ00200
  • Date: 2011-11-26 03:44:25 UTC
  • mfrom: (167.1.1)
  • Revision ID: git-v1:779ab6b7c81089f7135077c0452054788d3f4b43
Merge branch 'storage'

Show diffs side-by-side

added added

removed removed

Lines of Context:
10
10
import libs.events
11
11
 
12
12
class Block(object):
 
13
    '''A class which is used to store data. It is currently limited to 2048
 
14
    bits because of the current RSA crypto restrictions.
 
15
    '''
13
16
    max_size = 2048 # 2048 for now because of the RSA Crypto limit
14
17
    def __init__(self, data):
15
18
        if len(data) > self.max_size:
17
20
        self.data = data
18
21
        self.hash = hashlib.sha256(data).hexdigest()
19
22
        # TODO: Decide on using sha256 or sha1 (or even sha512)^
 
23
        # TODO: Store a last-access timestamp
20
24
 
21
25
class StorageDB(libs.events.Handler):
22
26
    '''An database type object to store and sort blocks.'''
26
30
 
27
31
    # Database methods
28
32
    def add_usk(self, block):
 
33
        '''Add a USK block to the data store.'''
29
34
        self.usks[block.hash] = block
30
35
 
31
36
    def add_uuk(self, block):
 
37
        '''Add a UUK block to the data store.'''
32
38
        self.uuks[block.hash] = block
33
39
 
34
40
    def search(self, query):
 
41
        '''Search the database for a block which matches the query.'''
35
42
        if query.type == 'UUK':
36
43
            if query.id in self.uuks:
37
44
                return self.uuks[query.id]
62
69
 
63
70
    # Event methods
64
71
    def got_message(self, packet):
 
72
        '''Got a message. For now we are assuming that the message needs to be
 
73
        stored but this is not necessarily the case. In future versions we will
 
74
        have a custom packet for messages which need to be stored by other
 
75
        nodes. By default we are using UUK and there is a 100% chance that we
 
76
        will store this packet. There is no file size limit.
 
77
        '''
65
78
        message = packet.message
66
79
        self.add_uuk(Block(message))
67
80
 
68
81
    def got_request(self, query):
 
82
        '''Got a request for a data block.'''
69
83
        self.search(query)
70
84
 
71
85
    def shutdown(self):
 
86
        '''Save the data store into a file.'''
72
87
        self.save(self.path)
73
88
 
74
89
class Query(object):