Subversion Repositories HomeAutomation

Rev

Rev 750 | Rev 752 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 750 Rev 751
Line 18... Line 18...
18
from NodeIfSerial import NodeIfSerial
18
from NodeIfSerial import NodeIfSerial
19
from NodeIfTCP import NodeIfTCP
19
from NodeIfTCP import NodeIfTCP
20
from NodeIfUDP import NodeIfUDP
20
from NodeIfUDP import NodeIfUDP
21
from NodeIfTCPTLS import NodeIfTCPTLS
21
from NodeIfTCPTLS import NodeIfTCPTLS
22
from NodeIfCanStim import NodeIfCanStim
22
from NodeIfCanStim import NodeIfCanStim
-
 
23
 
-
 
24
from TCPServer1 import TCPServer1
-
 
25
from TCPTLSServer import TCPTLSServer
-
 
26
from CanCtldServer import CanCtldServer
23
 
27
 
24
class DynamicModuleCfg:
28
class DynamicModuleCfg:
25
    """Dynamic module manager"""
29
    """Dynamic module manager"""
26
 
30
 
27
    modSubDir = None
31
    modSubDir = None
Line 106... Line 110...
106
        csumcfg.readfp(csumsfile)
110
        csumcfg.readfp(csumsfile)
107
        digest = csumcfg.get(self.CHECKSUM_SECTION, entryname)
111
        digest = csumcfg.get(self.CHECKSUM_SECTION, entryname)
108
        cur_digest = self.__doCheckSum(filename)
112
        cur_digest = self.__doCheckSum(filename)
109
        log.debug('Old checksum ' + digest + '\nNew checksum: ' + cur_digest)
113
        log.debug('Old checksum ' + digest + '\nNew checksum: ' + cur_digest)
110
        if cur_digest == digest:
114
        if cur_digest == digest:
111
            return True
115
            return True
112
        return False
116
        return False
113
   
117
   
114
   
118
   
115
    def importModule(self, className, requiredAttributes):
119
    def importModule(self, className, requiredAttributes):
116
        """Imports a given class from the module with the same name """
120
        """Imports a given class from the module with the same name """
117
 
121
 
118
        codeFile = os.getcwd() + '/' + self.modSubDir + '/' + className + '.py'
122
        codeFile = os.getcwd() + '/' + self.modSubDir + '/' + className + '.py'
119
        mod = imp.load_source(self.modSubDir + '.' + className, codeFile)
123
        mod = imp.load_source(self.modSubDir + '.' + className, codeFile)
120
        newClass = eval('mod.' + className)()
124
        newClass = eval('mod.' + className)()
121
       
125
       
122
        for ra in requiredAttributes:
126
        for ra in requiredAttributes:
123
            if not hasattr(newClass, ra):
127
            if not hasattr(newClass, ra):
124
                print className, ': missing required symbol \"' + ra + '\"'
128
                print className, ': missing required symbol \"' + ra + '\"'
125
                return None
129
                return None
126
       
130
       
127
        self.saveModule(className, newClass)
131
        self.saveModule(className, newClass)
128
        return newClass
132
        return newClass
129
 
133
 
130
 
134
 
131
class FilterCfg:
135
class FilterCfg:
132
    """Filter resource manager"""
136
    """Filter resource manager"""
133
   
137
   
134
    REQUIRED_ATTRIBUTES = ['ASSOCIATED_SPACES', 'DESCRIPTIVE_NAME',
138
    REQUIRED_ATTRIBUTES = ['ASSOCIATED_SPACES', 'DESCRIPTIVE_NAME',
135
                           'attach', 'detach', 'filter']
139
                           'attach', 'detach', 'filter']
136
   
140
   
137
    dynamicModuleCfg = None
141
    dynamicModuleCfg = None
138
    FILTER_SUBDIR = 'filters'
142
    FILTER_SUBDIR = 'filters'
139
    filterModules = {}
143
    filterModules = {}
140
   
144
   
141
    def __init__(self):
145
    def __init__(self):
142
        self.dynamicModuleCfg = DynamicModuleCfg(self.FILTER_SUBDIR)
146
        self.dynamicModuleCfg = DynamicModuleCfg(self.FILTER_SUBDIR)
143
   
147
   
144
    def loadFilter(self, name):
148
    def loadFilter(self, name):
145
        newFilt = self.dynamicModuleCfg.loadModule(name)
149
        newFilt = self.dynamicModuleCfg.loadModule(name)
146
        if newFilt is not None:
150
        if newFilt is not None:
147
            self.filterModules[name] = newFilt
151
            self.filterModules[name] = newFilt
148
            return True
152
            return True
149
        else:
153
        else:
150
            return False
154
            return False
151
 
155
 
152
    def loadFilters(self, config = None):
156
    def loadFilters(self, config = None):
153
        self.filterModules = self.dynamicModuleCfg.loadModules()
157
        self.filterModules = self.dynamicModuleCfg.loadModules()
154
        for fM in self.filterModules:
158
        for fM in self.filterModules:
155
            log.debug(fM)
159
            log.debug(fM)
Line 158... Line 162...
158
        self.dynamicModuleCfg.saveModule(className, classObj)
162
        self.dynamicModuleCfg.saveModule(className, classObj)
159
 
163
 
160
    def saveFilters(self):
164
    def saveFilters(self):
161
        for className in self.filterModules:
165
        for className in self.filterModules:
162
            self.__saveFilter(className, self.filterModules[className])
166
            self.__saveFilter(className, self.filterModules[className])
163
       
167
       
164
    def importFilter(self, className):
168
    def importFilter(self, className):
165
        """Imports a given filter definition """
169
        """Imports a given filter definition """
166
        classObj = self.dynamicModuleCfg.importModule(className, self.REQUIRED_ATTRIBUTES)
170
        classObj = self.dynamicModuleCfg.importModule(className, self.REQUIRED_ATTRIBUTES)
167
        if classObj is not None:
171
        if classObj is not None:
168
            print 'Imported: ' + classObj.DESCRIPTIVE_NAME
172
            print 'Imported: ' + classObj.DESCRIPTIVE_NAME
169
            return True
173
            return True
170
        else:
174
        else:
171
            return False
175
            return False
172
       
176
       
173
 
177
 
174
class StateSpaceCfg:
178
class StateSpaceCfg:
175
    """State space resource manager"""
179
    """State space resource manager"""
176
   
180
   
177
    REQUIRED_ATTRIBUTES = ['DESCRIPTIVE_NAME', 'RELATED_SPACES'
181
    REQUIRED_ATTRIBUTES = ['DESCRIPTIVE_NAME', 'RELATED_SPACES'
Line 220... Line 224...
220
    pktHandler = None
224
    pktHandler = None
221
   
225
   
222
    filterChain = []
226
    filterChain = []
223
    nodeInterfaces = []
227
    nodeInterfaces = []
224
    nodeInterfaceMap = {}
228
    nodeInterfaceMap = {}
-
 
229
   
-
 
230
    serverDaemons = []
225
   
231
   
226
    INTERFACE_TYPES = {'serial' : NodeIfSerial, 'tcp' : NodeIfTCP,
232
    INTERFACE_TYPES = {'serial' : NodeIfSerial, 'tcp' : NodeIfTCP,
227
                       'udp' : NodeIfUDP, 'sim' : NodeIfCanStim,
233
                       'udp' : NodeIfUDP, 'sim' : NodeIfCanStim,
228
                       'tcptls' : NodeIfTCPTLS}
234
                       'tcptls' : NodeIfTCPTLS}
-
 
235
   
-
 
236
    SERVER_TYPES = {'tcpd' : TCPServer1, 'tcptlsd' : TCPTLSServer,
-
 
237
                    'canctld' : CanCtldServer}
229
 
238
 
230
    def __init__ (self):
239
    def __init__ (self):
231
        self.filterCfg = FilterCfg()
240
        self.filterCfg = FilterCfg()
232
        self.stateSpaceCfg = StateSpaceCfg()
241
        self.stateSpaceCfg = StateSpaceCfg()
233
        self.pktHandler = CanPktHandler1(self)
242
        self.pktHandler = CanPktHandler1(self)
Line 252... Line 261...
252
        if not self.INTERFACE_TYPES.has_key(type):
261
        if not self.INTERFACE_TYPES.has_key(type):
253
            log.debug('addInterface called with invalid interface type')
262
            log.debug('addInterface called with invalid interface type')
254
            return False
263
            return False
255
       
264
       
256
        cfg = self.INTERFACE_TYPES[type].DEFAULT_CONFIG
265
        cfg = self.INTERFACE_TYPES[type].DEFAULT_CONFIG
257
        print cfg
-
 
258
        nodeIf = self.INTERFACE_TYPES[type](self.pktHandler, cfg)
266
        nodeIf = self.INTERFACE_TYPES[type](self.pktHandler, cfg)
259
        print nodeIf
-
 
260
        self.nodeInterfaces.append(nodeIf)
267
        self.nodeInterfaces.append(nodeIf)
-
 
268
        return True
261
   
269
   
262
    def remInterface(self, name):
270
    def remInterface(self, name):
-
 
271
        pass
-
 
272
   
-
 
273
    def addServerDaemon(self, type, cfg = None):
-
 
274
       
-
 
275
        if not self.SERVER_TYPES.has_key(type):
-
 
276
            log.debug('addServerDaemon called with invalid daemon type')
-
 
277
            return False
-
 
278
       
-
 
279
        serverd = self.SERVER_TYPES[type]() # actung!
-
 
280
        return True    
-
 
281
   
-
 
282
    def remServerDaemon(self, name):
263
        pass
283
        pass
264
       
284
       
265
    def __setupFilterChain(self):
285
    def __setupFilterChain(self):
266
        self.filterChain = ['DefaultFilter']
286
        self.filterChain = ['DefaultFilter']
267
   
287