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