Subversion Repositories HomeAutomation

Rev

Rev 750 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 750 Rev 752
1
###########################################################
1
###########################################################
2
#
2
#
3
# The default implementation of the packet handler
3
# The default implementation of the packet handler
4
#
4
#
5
###########################################################
5
###########################################################
6
from CanPktHandlerBase import CanPktHandlerBase
6
from CanPktHandlerBase import CanPktHandlerBase
7
from CanPkt import CanPkt
7
from CanPkt import CanPkt
-
 
8
import logging as log
8
 
9
 
9
class SpacePort():
10
class SpacePort():
10
   
11
   
11
    filterSpaces = {}
12
    filterSpaces = {}
12
   
13
   
13
    def __init__ (self, filterSpaces):
14
    def __init__ (self, filterSpaces):
14
        for fs in filterSpaces:
15
        for fs in filterSpaces:
15
            sName = fs.__module__.split('.')[1] # implies module name is statespace.XXX
16
            sName = fs.__module__.split('.')[1] # implies module name is statespace.XXX
16
            self.filterSpaces[sName] = fs
17
            self.filterSpaces[sName] = fs
17
   
18
   
18
    def runAll(self, args):
19
    def runAll(self, args):
19
        for fs in self.filterSpaces.values():
20
        for fs in self.filterSpaces.values():
20
            relatedSpaces = fs.__RELATED_SPACES__
21
            relatedSpaces = fs.__RELATED_SPACES__
21
            fs.run(relatedSpaces, args)
22
            fs.run(relatedSpaces, args)
22
        return True
23
        return True
23
   
24
   
24
    def run(self, spaceName, args):
25
    def run(self, spaceName, args):
25
        if not self.filterSpaces.has_key(spaceName):
26
        if not self.filterSpaces.has_key(spaceName):
26
            return False
27
            return False
27
        else:
28
        else:
28
            relatedSpaces = self.filterSpaces[spaceName].__RELATED_SPACES__
29
            relatedSpaces = self.filterSpaces[spaceName].__RELATED_SPACES__
29
            self.filtersSpaces[spaceName].run(relatedSpaces, args)
30
            self.filtersSpaces[spaceName].run(relatedSpaces, args)
30
            return True
31
            return True
31
 
32
 
32
class CanPktHandler1(CanPktHandlerBase):
33
class CanPktHandler1(CanPktHandlerBase):
33
   
34
   
34
    daemonCfg = None
35
    daemonCfg = None
-
 
36
    serverListeners =[]
35
   
37
   
36
    def __init__ (self, daemonCfg):
38
    def __init__ (self, daemonCfg):
37
        self.daemonCfg = daemonCfg
39
        self.daemonCfg = daemonCfg
38
       
40
       
39
    def input(self, strdata):
41
    def input(self, strdata):
40
        """Make data buffer into CanPkt and do early discard check """
42
        """Make data buffer into CanPkt and do early discard check """
41
        """Call all filters in chain """
43
        """Call all filters in chain """
42
 
44
 
43
        if len(strdata) < 2:
45
        if len(strdata) < 2:
44
            return
46
            return
45
        if strdata[0:3] != 'PKT':
47
        if strdata[0:3] != 'PKT':
46
            return
48
            return
47
 
49
 
48
#        print strdata
50
#        print strdata
49
        pkt = CanPkt.stringToCanPkt(self, strdata)
51
        pkt = CanPkt.stringToCanPkt(self, strdata)
50
#        print 'incoming: ' + pkt.toString()
52
#        print 'incoming: ' + pkt.toString()
51
 
53
 
52
        for filter in self.daemonCfg.filterChain:
54
        for filter in self.daemonCfg.filterChain:
53
            fObj = self.daemonCfg.filterCfg.filterModules[filter]
55
            fObj = self.daemonCfg.filterCfg.filterModules[filter]
54
            sp = SpacePort(fObj.__ASSOCIATED_SPACES__)
56
            sp = SpacePort(fObj.__ASSOCIATED_SPACES__)
55
            fObj.filter('', pkt, sp) # FIXME: use if name
57
            fObj.filter('', pkt, sp) # FIXME: use if name
56
 
58
           
-
 
59
        for sl in self.serverListeners:
-
 
60
            if not sl.full():
-
 
61
                sl.write(pkt.toString())
-
 
62
            else:
-
 
63
                log.debug('WARNING: Overflow in server buffer: ' + sl + ', packet dropped')
57
 
64
 
58
    def output(self, data):
65
    def output(self, data):
59
        pass
66
        pass
-
 
67
   
-
 
68
    def addServerListener(self, serverListener):
-
 
69
        self.serverListeners.append(serverListener)
-
 
70
   
-
 
71
    def remServerListener(self, serverListener):
-
 
72
        self.serverListeners.remove(serverListerner)
-
 
73
   
60
 
-