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 | - | ||