~vomun-developers/anonplus/vomun-trunk

« back to all changes in this revision

Viewing changes to src/libs/friends.py

  • Committer: AJ00200
  • Date: 2011-11-25 21:51:13 UTC
  • mfrom: (161.1.1)
  • Revision ID: git-v1:073014d0b3140afbc0bb2f05ef5efd2d655bbd00
Merge branch 'master' into storage

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
import json
5
5
import os.path
6
6
import time
7
 
 
8
 
import libs
9
 
import libs.events
10
7
from tunnels import directudp
 
8
from libs.globals import global_vars
11
9
import libs.encryption.rsa
12
10
from libs.packets import parse_packets, packets_by_id, make_packet
13
11
from libs.morado.functions import register_with_api
14
12
 
15
13
 
16
 
libs.globals['friends'] = {}
 
14
 
 
15
global_vars['friends'] = {}
17
16
friendlistpath = os.path.expanduser('~/.vomun/friends.json')
18
17
friendlistr = open(friendlistpath, "r")
19
18
 
30
29
            friendo = Friend(keyid, ip, port, name)
31
30
 
32
31
            print friendo
33
 
            libs.globals['friends'][keyid] = friendo
 
32
            global_vars['friends'][keyid] = friendo
34
33
 
35
 
        except Exception as error:
 
34
        except Exception as ex: 
36
35
            print(ex, friend)
37
36
 
38
37
@register_with_api
42
41
    json_template = '''[
43
42
%s
44
43
]'''
45
 
    friendsjson = ','.join([friend._json() for friend in libs.globals['friends'].values()])
 
44
    friendsjson = ','.join([friend._json() for friend in global_vars['friends'].values()])
46
45
    friendlistw.write(json_template % friendsjson)
47
46
    friendlistw.flush()
48
47
 
50
49
def add_friend(keyid, ip, port = 1337, name = 'unknown'):
51
50
    '''Add a friend to our friends list'''
52
51
    friend_obj = Friend(keyid, ip, port, name)
53
 
    libs.globals['friends'][keyid] = friend_obj
 
52
    global_vars['friends'][keyid] = friend_obj
54
53
    save_friends()
55
54
 
56
55
@register_with_api
57
56
def del_friend(keyid):
58
57
    '''Delete a friend'''
59
58
    try:
60
 
        del libs.globals['friends'][keyid]
 
59
        del global_vars['friends'][keyid]
61
60
    except:
62
 
        libs.globals['logger'].info('Friend %s does not exist.' % keyid)
 
61
        global_vars['logger'].info('Friend %s does not exist.' % keyid)
63
62
 
64
63
 
65
64
class Friend:
76
75
        self.rconnection = None
77
76
        self.wconnection = None
78
77
        self.data = ''
79
 
 
80
 
        libs.events.broadcast('logthis', 'Setting up encryption. %s:%s' % (
81
 
                libs.config['nodekey'], self.keyid))
 
78
        
 
79
        print('Setting up encryption. %s:%s' % (
 
80
                libs.globals.global_vars['config']['nodekey'], self.keyid))
82
81
        self.encryption = libs.encryption.rsa.Encryption(
83
 
                libs.config['nodekey'], self.keyid)
 
82
                libs.globals.global_vars['config']['nodekey'], self.keyid)
84
83
 
85
84
    def parse_packets(self):
86
85
        print('parsing packets of %s' % self.name)
87
86
        self.__decrypt()
88
87
        packets, leftovers =  parse_packets(self.data)
89
88
        self.data = leftovers
90
 
        libs.events.broadcast('logthis', 'leftovers: %s' % leftovers)
 
89
        print('leftovers:', leftovers)
91
90
        for packet in packets:
92
91
            self.handle_packets(packet[0],packet[1])
93
92
 
97
96
            packet_id = packets_by_id[packet_id]
98
97
        else: # The packet has an unknown ID
99
98
            reason = 'Invalid packetId: %i' % packet_id
100
 
            libs.events.broadcast('logthis', 'Invalid packet: %s' %packet_id)
101
99
            disc = make_packet('Disconnect',reasonType='Custom',
102
100
                               reason=reason,reasonlength=len(reason))
103
101
            self.send(disc)
104
102
            return
105
 
 
 
103
        
106
104
        # Take acctions depending on the type of packet
107
105
        if packet_id == 'ConnectionRequest':
108
106
            print('sending acceptConnection')
114
112
        elif packet_id == 'AcceptConnection':
115
113
            print('got acceptConnection')
116
114
            self.connected = True
117
 
 
 
115
            
118
116
        elif packet_id == 'Message':
119
117
            libs.events.broadcast('got_message', packet)
120
 
 
 
118
            
121
119
        else:
122
120
            print packet_id, packet
123
121
 
171
169
        "name": "%s",
172
170
        "keyid": "%s",
173
171
        "lastip": "%s",
174
 
        "port": %i
 
172
        "port": %i    
175
173
    }''' % (self.name, self.keyid, self.ip, self.port)
176
174
 
177
175
    def _rpc(self):
182
180
            'lastip' : self.ip,
183
181
            'port' : self.port
184
182
        }
185
 
 
 
183
        
186
184
    def __decrypt(self):
187
185
        self.data = self.encryption.decrypt(self.data)
188
186
        print('Decrypted data: %s' % self.data)
189
 
 
 
187
        
190
188
    def __str__(self):
191
189
        return '<friend %s on %s:%i with id %s>' % (
192
190
                self.name, self.ip, self.port, self.keyid)
193
191
 
194
192
 
195
193
## API section
 
194
 
 
195
 
 
196
 
 
197
 
196
198
@register_with_api
197
199
def get_friend_by_ip(ip):
198
200
    '''Search for a Friend object with the given ip and return it.'''
199
 
    for friend in libs.globals['friends'].values():
 
201
    for friend in global_vars['friends'].values():
200
202
        if friend.ip == ip:
201
203
            return friend
202
204
 
203
205
@register_with_api
204
206
def get_friend_by_name(name):
205
207
    '''Search for a Friend object with the given name and return it.'''
206
 
    for friend in libs.globals['friends'].values():
 
208
    for friend in global_vars['friends'].values():
207
209
        if friend.name == name:
208
210
            return friend
209
211
 
210
212
@register_with_api
211
213
def get_friend_by_key(keyid):
212
214
    '''Search for a Friend with the given key ID and return it.'''
213
 
    for friend in libs.globals['friends'].values():
 
215
    for friend in global_vars['friends'].values():
214
216
        if friend.keyid == keyid:
215
217
            return friend
216
218
 
234
236
@register_with_api
235
237
def friend_list():
236
238
    '''Return a list of friends.'''
237
 
    friendslist = [friend._rpc() for friend in libs.globals['friends'].values()]
 
239
    friendslist = [friend._rpc() for friend in global_vars['friends'].values()]
238
240
    return friendslist
239
241
 
240
242
@register_with_api