~vomun-developers/anonplus/vomun-trunk

« back to all changes in this revision

Viewing changes to src/libs/friends.py

  • Committer: AJ00200
  • Date: 2011-11-26 01:57:56 UTC
  • Revision ID: git-v1:9d0494d57d5f3d546fb3a6ba4607e5eb41cd9e7b
Made some changes with events. We now have a logit event.

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